Fix various small errors regarding database change

- Fix media sidebar
- Fix Albums page
- Fix media and album shares
This commit is contained in:
viktorstrate
2021-01-02 23:07:44 +01:00
parent d78cef300a
commit 59048c8416
6 changed files with 25 additions and 23 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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
} }
} }

View File

@@ -61,6 +61,8 @@ export const SHARE_TOKEN_QUERY = gql`
} }
highRes { highRes {
url url
width
height
} }
videoWeb { videoWeb {
url url

View File

@@ -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