mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 19:49:16 +00:00
Fix various small errors regarding database change
- Fix media sidebar - Fix Albums page - Fix media and album shares
This commit is contained in:
@@ -28,7 +28,7 @@ func (r *queryResolver) MyAlbums(ctx context.Context, filter *models.Filter, onl
|
|||||||
query := r.Database.Model(models.Album{}).Where("id IN (?)", userAlbumIDs)
|
query := r.Database.Model(models.Album{}).Where("id IN (?)", userAlbumIDs)
|
||||||
|
|
||||||
if onlyRoot != nil && *onlyRoot == true {
|
if onlyRoot != nil && *onlyRoot == true {
|
||||||
query = query.Where("parent_album_id = (?)", r.Database.Model(&models.Album{}).Select("id").Where("parent_album_id IS NULL"))
|
query = query.Where("parent_album_id IS NULL")
|
||||||
}
|
}
|
||||||
|
|
||||||
if showEmpty == nil || *showEmpty == false {
|
if showEmpty == nil || *showEmpty == false {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func (r *queryResolver) Media(ctx context.Context, id int) (*models.Media, error
|
|||||||
err := r.Database.
|
err := r.Database.
|
||||||
Joins("Album").
|
Joins("Album").
|
||||||
Where("media.id = ?", id).
|
Where("media.id = ?", id).
|
||||||
Where("Album.owner_id = ?", user.ID).
|
Where("EXISTS (SELECT * FROM user_albums WHERE user_albums.album_id = Album.id AND user_albums.user_id = ?)", user.ID).
|
||||||
Where("media.id IN (?)", r.Database.Model(&models.MediaURL{}).Select("media_id").Where("media_urls.media_id = media.id")).
|
Where("media.id IN (?)", r.Database.Model(&models.MediaURL{}).Select("media_id").Where("media_urls.media_id = media.id")).
|
||||||
First(&media).Error
|
First(&media).Error
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,12 @@ func (r *mutationResolver) ShareAlbum(ctx context.Context, albumID int, expire *
|
|||||||
}
|
}
|
||||||
|
|
||||||
var count int64
|
var count int64
|
||||||
if err := r.Database.Model(&models.Album{}).Where("owner_id = ?", user.ID).Count(&count).Error; err != nil {
|
err := r.Database.
|
||||||
|
Model(&models.Album{}).
|
||||||
|
Where("EXISTS (SELECT * FROM user_albums WHERE user_albums.album_id = albums.id AND user_albums.user_id = ?)", user.ID).
|
||||||
|
Count(&count).Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to validate album owner with database")
|
return nil, errors.Wrap(err, "failed to validate album owner with database")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +147,12 @@ func (r *mutationResolver) ShareMedia(ctx context.Context, mediaID int, expire *
|
|||||||
|
|
||||||
var media models.Media
|
var media models.Media
|
||||||
|
|
||||||
if err := r.Database.Joins("Album").Where("Album.owner_id = ?", user.ID).First(&media, mediaID).Error; err != nil {
|
err := r.Database.Joins("Album").
|
||||||
|
Where("EXISTS (SELECT * FROM user_albums WHERE user_albums.album_id = Album.id AND user_albums.user_id = ?)", user.ID).
|
||||||
|
First(&media, mediaID).
|
||||||
|
Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, auth.ErrUnauthorized
|
return nil, auth.ErrUnauthorized
|
||||||
} else {
|
} else {
|
||||||
@@ -150,17 +160,6 @@ func (r *mutationResolver) ShareMedia(ctx context.Context, mediaID int, expire *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var count int64
|
|
||||||
|
|
||||||
err := r.Database.Raw("SELECT owner_id FROM albums, media WHERE media.id = ? AND media.album_id = albums.id AND albums.owner_id = ?", mediaID, user.ID).Count(&count).Error
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrap(err, "error validating owner of media with database")
|
|
||||||
}
|
|
||||||
|
|
||||||
if count == 0 {
|
|
||||||
return nil, auth.ErrUnauthorized
|
|
||||||
}
|
|
||||||
|
|
||||||
hashedPassword, err := hashSharePassword(password)
|
hashedPassword, err := hashSharePassword(password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -60,20 +60,21 @@ func authenticateMedia(media *models.Media, db *gorm.DB, r *http.Request) (succe
|
|||||||
if shareToken.AlbumID != nil && media.AlbumID != *shareToken.AlbumID {
|
if shareToken.AlbumID != nil && media.AlbumID != *shareToken.AlbumID {
|
||||||
// Check child albums
|
// Check child albums
|
||||||
|
|
||||||
result := db.Raw(`
|
var count int
|
||||||
|
err := db.Raw(`
|
||||||
WITH recursive child_albums AS (
|
WITH recursive child_albums AS (
|
||||||
SELECT * FROM album WHERE parent_album = ?
|
SELECT * FROM albums WHERE parent_album_id = ?
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT child.* FROM album child JOIN child_albums parent ON parent.album_id = child.parent_album
|
SELECT child.* FROM albums child JOIN child_albums parent ON parent.id = child.parent_album_id
|
||||||
)
|
)
|
||||||
SELECT * FROM child_albums WHERE album_id = ?
|
SELECT COUNT(id) FROM child_albums WHERE id = ?
|
||||||
`, *shareToken.AlbumID, media.AlbumID)
|
`, *shareToken.AlbumID, media.AlbumID).Find(&count).Error
|
||||||
|
|
||||||
if err := result.Error; err != nil {
|
if err != nil {
|
||||||
return false, "internal server error", http.StatusInternalServerError, err
|
return false, "internal server error", http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if result.RowsAffected == 0 {
|
if count == 0 {
|
||||||
return false, "unauthorized", http.StatusForbidden, nil
|
return false, "unauthorized", http.StatusForbidden, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ export const SHARE_TOKEN_QUERY = gql`
|
|||||||
}
|
}
|
||||||
highRes {
|
highRes {
|
||||||
url
|
url
|
||||||
|
width
|
||||||
|
height
|
||||||
}
|
}
|
||||||
videoWeb {
|
videoWeb {
|
||||||
url
|
url
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const AlbumSidebar = ({ albumId }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AlbumSidebar.propTypes = {
|
AlbumSidebar.propTypes = {
|
||||||
albumId: PropTypes.number.isRequired,
|
albumId: PropTypes.string.isRequired,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default AlbumSidebar
|
export default AlbumSidebar
|
||||||
|
|||||||
Reference in New Issue
Block a user