Skip to content

Commit 8e770d0

Browse files
moved bucket funcs to storage.go
1 parent ef4b47a commit 8e770d0

File tree

5 files changed

+130
-150
lines changed

5 files changed

+130
-150
lines changed

models/org.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
"os"
1212
"strings"
1313

14+
"code.gitea.io/gitea/modules/setting"
15+
1416
"code.gitea.io/gitea/modules/log"
1517
"code.gitea.io/gitea/modules/structs"
1618

@@ -274,7 +276,7 @@ func deleteOrg(e *xorm.Session, u *User) error {
274276

275277
if len(u.Avatar) > 0 {
276278
avatarPath := u.CustomAvatarPath()
277-
if err := u.deleteAvatarFromBucket(); err != nil {
279+
if err := deleteAvatarFromBucket(setting.AvatarUploadPath, u.Avatar); err != nil {
278280
return fmt.Errorf("Failed to remove %s: %v", avatarPath, err)
279281
}
280282
}

models/repo.go

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package models
77

88
import (
99
"bytes"
10-
"context"
1110
"crypto/md5"
1211
"errors"
1312
"fmt"
@@ -38,7 +37,6 @@ import (
3837

3938
"github.com/Unknwon/com"
4039
"github.com/go-xorm/xorm"
41-
"gocloud.dev/blob"
4240
ini "gopkg.in/ini.v1"
4341
"xorm.io/builder"
4442
)
@@ -1950,7 +1948,7 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
19501948
}
19511949

19521950
if len(repo.Avatar) > 0 {
1953-
if err := repo.deleteAvatarFromBucket(); err != nil {
1951+
if err := deleteAvatarFromBucket(setting.RepositoryAvatarUploadPath, repo.Avatar); err != nil {
19541952
return err
19551953
}
19561954
}
@@ -2652,7 +2650,7 @@ func (repo *Repository) UploadAvatar(data []byte) error {
26522650

26532651
if len(oldAvatarPath) > 0 && oldAvatarPath != repo.CustomAvatarPath() {
26542652
repo.Avatar = oldAvatar
2655-
if err := repo.deleteAvatarFromBucket(); err != nil {
2653+
if err := deleteAvatarFromBucket(setting.RepositoryAvatarUploadPath, repo.Avatar); err != nil {
26562654
log.Trace("DeleteOldAvatar: ", err)
26572655
}
26582656
repo.Avatar = newAvatar
@@ -2661,37 +2659,6 @@ func (repo *Repository) UploadAvatar(data []byte) error {
26612659
return sess.Commit()
26622660
}
26632661

2664-
// deleteAvatarFromBucket deletes repo avatar from bucket
2665-
func (repo *Repository) deleteAvatarFromBucket() error {
2666-
var bucket *blob.Bucket
2667-
var err error
2668-
ctx := context.Background()
2669-
if filepath.IsAbs(setting.RepositoryAvatarUploadPath) {
2670-
if err := os.MkdirAll(setting.RepositoryAvatarUploadPath, 0700); err != nil {
2671-
log.Fatal("Failed to create '%s': %v", setting.RepositoryAvatarUploadPath, err)
2672-
}
2673-
bucket, err = blob.OpenBucket(ctx, "file://"+setting.RepositoryAvatarUploadPath)
2674-
if err != nil {
2675-
return fmt.Errorf("could not open bucket: %v", err)
2676-
}
2677-
} else {
2678-
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
2679-
if err != nil {
2680-
return fmt.Errorf("could not open bucket: %v", err)
2681-
}
2682-
bucket = blob.PrefixedBucket(bucket, setting.RepositoryAvatarUploadPath)
2683-
}
2684-
defer bucket.Close()
2685-
2686-
exist, err := bucket.Exists(ctx, repo.Avatar)
2687-
if err != nil {
2688-
return err
2689-
} else if exist {
2690-
return bucket.Delete(ctx, repo.Avatar)
2691-
}
2692-
return nil
2693-
}
2694-
26952662
// DeleteAvatar deletes the repos's custom avatar.
26962663
func (repo *Repository) DeleteAvatar() error {
26972664

@@ -2709,7 +2676,7 @@ func (repo *Repository) DeleteAvatar() error {
27092676
return err
27102677
}
27112678

2712-
if err := repo.deleteAvatarFromBucket(); err != nil {
2679+
if err := deleteAvatarFromBucket(setting.RepositoryAvatarUploadPath, repo.Avatar); err != nil {
27132680
return err
27142681
}
27152682

models/storage.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package models
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"fmt"
7+
"image"
8+
"image/png"
9+
"os"
10+
"path/filepath"
11+
12+
"code.gitea.io/gitea/modules/log"
13+
"code.gitea.io/gitea/modules/setting"
14+
15+
"gocloud.dev/blob"
16+
)
17+
18+
// IsAvatarValid checks if the avatarLink is valid
19+
func IsAvatarValid(avatarUploadPath, objKey string) bool {
20+
var bucket *blob.Bucket
21+
var err error
22+
ctx := context.Background()
23+
if filepath.IsAbs(avatarUploadPath) {
24+
if err := os.MkdirAll(setting.AvatarUploadPath, 0700); err != nil {
25+
log.Fatal("Failed to create '%s': %v", setting.AvatarUploadPath, err)
26+
}
27+
bucket, err = blob.OpenBucket(ctx, "file://"+avatarUploadPath)
28+
if err != nil {
29+
log.Error("could not open bucket: %v", err)
30+
return false
31+
}
32+
} else {
33+
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
34+
if err != nil {
35+
log.Error("could not open bucket: %v", err)
36+
return false
37+
}
38+
bucket = blob.PrefixedBucket(bucket, avatarUploadPath)
39+
}
40+
defer bucket.Close()
41+
42+
exist, err := bucket.Exists(ctx, objKey)
43+
if err != nil {
44+
log.Error(err.Error())
45+
return false
46+
}
47+
return exist
48+
}
49+
50+
// uploadImage uploads avatar to bucket
51+
func uploadImage(avatarUploadPath, objKey string, img image.Image) error {
52+
var bucket *blob.Bucket
53+
var err error
54+
ctx := context.Background()
55+
if filepath.IsAbs(avatarUploadPath) {
56+
if err := os.MkdirAll(avatarUploadPath, 0700); err != nil {
57+
log.Fatal("Failed to create '%s': %v", avatarUploadPath, err)
58+
}
59+
bucket, err = blob.OpenBucket(ctx, "file://"+avatarUploadPath)
60+
if err != nil {
61+
return fmt.Errorf("could not open bucket: %v", err)
62+
}
63+
} else {
64+
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
65+
if err != nil {
66+
return fmt.Errorf("could not open bucket: %v", err)
67+
}
68+
bucket = blob.PrefixedBucket(bucket, avatarUploadPath)
69+
}
70+
defer bucket.Close()
71+
72+
buf := new(bytes.Buffer)
73+
if err = png.Encode(buf, img); err != nil {
74+
return fmt.Errorf("failed to encode: %v", err)
75+
}
76+
imgData := buf.Bytes()
77+
78+
bw, err := bucket.NewWriter(ctx, objKey, nil)
79+
if err != nil {
80+
return fmt.Errorf("failed to obtain writer: %v", err)
81+
}
82+
83+
if _, err = bw.Write(imgData); err != nil {
84+
return fmt.Errorf("error occurred: %v", err)
85+
}
86+
if err = bw.Close(); err != nil {
87+
return fmt.Errorf("failed to close: %v", err)
88+
}
89+
return nil
90+
}
91+
92+
// deleteAvatarFromBucket deletes user or repo avatar from bucket
93+
func deleteAvatarFromBucket(avatarUploadPath, objKey string) error {
94+
var bucket *blob.Bucket
95+
var err error
96+
ctx := context.Background()
97+
if filepath.IsAbs(avatarUploadPath) {
98+
if err := os.MkdirAll(avatarUploadPath, 0700); err != nil {
99+
log.Fatal("Failed to create '%s': %v", avatarUploadPath, err)
100+
}
101+
bucket, err = blob.OpenBucket(ctx, "file://"+avatarUploadPath)
102+
if err != nil {
103+
return fmt.Errorf("could not open bucket: %v", err)
104+
}
105+
} else {
106+
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
107+
if err != nil {
108+
return fmt.Errorf("could not open bucket: %v", err)
109+
}
110+
bucket = blob.PrefixedBucket(bucket, avatarUploadPath)
111+
}
112+
defer bucket.Close()
113+
114+
exist, err := bucket.Exists(ctx, objKey)
115+
if err != nil {
116+
return err
117+
} else if exist {
118+
return bucket.Delete(ctx, objKey)
119+
}
120+
return nil
121+
}

models/user.go

Lines changed: 2 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66
package models
77

88
import (
9-
"bytes"
109
"container/list"
11-
"context"
1210
"crypto/md5"
1311
"crypto/sha256"
1412
"crypto/subtle"
1513
"encoding/hex"
1614
"errors"
1715
"fmt"
18-
"image"
1916
_ "image/jpeg" // Needed for jpeg support
20-
"image/png"
2117
"os"
2218
"path/filepath"
2319
"strings"
@@ -37,7 +33,6 @@ import (
3733

3834
"github.com/Unknwon/com"
3935
"github.com/go-xorm/xorm"
40-
"gocloud.dev/blob"
4136
"golang.org/x/crypto/argon2"
4237
"golang.org/x/crypto/bcrypt"
4338
"golang.org/x/crypto/pbkdf2"
@@ -362,38 +357,6 @@ func (u *User) generateRandomAvatar(e Engine) error {
362357
return nil
363358
}
364359

365-
// IsAvatarValid checks if the avatarLink is valid
366-
func IsAvatarValid(avatarUploadPath, objKey string) bool {
367-
var bucket *blob.Bucket
368-
var err error
369-
ctx := context.Background()
370-
if filepath.IsAbs(avatarUploadPath) {
371-
if err := os.MkdirAll(setting.AvatarUploadPath, 0700); err != nil {
372-
log.Fatal("Failed to create '%s': %v", setting.AvatarUploadPath, err)
373-
}
374-
bucket, err = blob.OpenBucket(ctx, "file://"+avatarUploadPath)
375-
if err != nil {
376-
log.Error("could not open bucket: %v", err)
377-
return false
378-
}
379-
} else {
380-
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
381-
if err != nil {
382-
log.Error("could not open bucket: %v", err)
383-
return false
384-
}
385-
bucket = blob.PrefixedBucket(bucket, avatarUploadPath)
386-
}
387-
defer bucket.Close()
388-
389-
exist, err := bucket.Exists(ctx, objKey)
390-
if err != nil {
391-
log.Error(err.Error())
392-
return false
393-
}
394-
return exist
395-
}
396-
397360
// SizedRelAvatarLink returns a relative link to the user's avatar. When
398361
// applicable, the link is for an avatar of the indicated size (in pixels).
399362
func (u *User) SizedRelAvatarLink(size int) string {
@@ -513,48 +476,6 @@ func (u *User) IsPasswordSet() bool {
513476
return len(u.Passwd) > 0
514477
}
515478

516-
// uploadImage uploads avatar to bucket
517-
func uploadImage(avatarUploadPath, objKey string, img image.Image) error {
518-
var bucket *blob.Bucket
519-
var err error
520-
ctx := context.Background()
521-
if filepath.IsAbs(avatarUploadPath) {
522-
if err := os.MkdirAll(avatarUploadPath, 0700); err != nil {
523-
log.Fatal("Failed to create '%s': %v", avatarUploadPath, err)
524-
}
525-
bucket, err = blob.OpenBucket(ctx, "file://"+avatarUploadPath)
526-
if err != nil {
527-
return fmt.Errorf("could not open bucket: %v", err)
528-
}
529-
} else {
530-
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
531-
if err != nil {
532-
return fmt.Errorf("could not open bucket: %v", err)
533-
}
534-
bucket = blob.PrefixedBucket(bucket, avatarUploadPath)
535-
}
536-
defer bucket.Close()
537-
538-
buf := new(bytes.Buffer)
539-
if err = png.Encode(buf, img); err != nil {
540-
return fmt.Errorf("failed to encode: %v", err)
541-
}
542-
imgData := buf.Bytes()
543-
544-
bw, err := bucket.NewWriter(ctx, objKey, nil)
545-
if err != nil {
546-
return fmt.Errorf("failed to obtain writer: %v", err)
547-
}
548-
549-
if _, err = bw.Write(imgData); err != nil {
550-
return fmt.Errorf("error occurred: %v", err)
551-
}
552-
if err = bw.Close(); err != nil {
553-
return fmt.Errorf("failed to close: %v", err)
554-
}
555-
return nil
556-
}
557-
558479
// UploadAvatar saves custom avatar for user.
559480
// FIXME: split uploads to different subdirs in case we have massive users.
560481
func (u *User) UploadAvatar(data []byte) error {
@@ -581,42 +502,11 @@ func (u *User) UploadAvatar(data []byte) error {
581502
return sess.Commit()
582503
}
583504

584-
// deleteAvatarFromBucket deletes user avatar from bucket
585-
func (u *User) deleteAvatarFromBucket() error {
586-
var bucket *blob.Bucket
587-
var err error
588-
ctx := context.Background()
589-
if filepath.IsAbs(setting.AvatarUploadPath) {
590-
if err := os.MkdirAll(setting.AvatarUploadPath, 0700); err != nil {
591-
log.Fatal("Failed to create '%s': %v", setting.AvatarUploadPath, err)
592-
}
593-
bucket, err = blob.OpenBucket(ctx, "file://"+setting.AvatarUploadPath)
594-
if err != nil {
595-
return fmt.Errorf("could not open bucket: %v", err)
596-
}
597-
} else {
598-
bucket, err = blob.OpenBucket(ctx, setting.FileStorage.BucketURL)
599-
if err != nil {
600-
return fmt.Errorf("could not open bucket: %v", err)
601-
}
602-
bucket = blob.PrefixedBucket(bucket, setting.AvatarUploadPath)
603-
}
604-
defer bucket.Close()
605-
606-
exist, err := bucket.Exists(ctx, u.Avatar)
607-
if err != nil {
608-
return err
609-
} else if exist {
610-
return bucket.Delete(ctx, u.Avatar)
611-
}
612-
return nil
613-
}
614-
615505
// DeleteAvatar deletes the user's custom avatar.
616506
func (u *User) DeleteAvatar() error {
617507
log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath())
618508
if len(u.Avatar) > 0 {
619-
if err := u.deleteAvatarFromBucket(); err != nil {
509+
if err := deleteAvatarFromBucket(setting.AvatarUploadPath, u.Avatar); err != nil {
620510
return err
621511
}
622512
}
@@ -1236,7 +1126,7 @@ func deleteUser(e *xorm.Session, u *User) error {
12361126
}
12371127

12381128
if len(u.Avatar) > 0 {
1239-
if err := u.deleteAvatarFromBucket(); err != nil {
1129+
if err := deleteAvatarFromBucket(setting.AvatarUploadPath, u.Avatar); err != nil {
12401130
return err
12411131
}
12421132
}

0 commit comments

Comments
 (0)