Skip to content

Commit 502bf34

Browse files
committed
Include files/text from YF Send in admin console, fix email config
1 parent 9126219 commit 502bf34

File tree

9 files changed

+181
-44
lines changed

9 files changed

+181
-44
lines changed

backend/db/expiry.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ type FileExpiry struct {
1111
Date time.Time
1212
}
1313

14-
func SetFileExpiry(id string, downloads int, date time.Time) {
14+
func SetFileExpiry(id string, downloads int, date time.Time) error {
1515
s := `INSERT INTO expiry
1616
(id, downloads, date)
1717
VALUES ($1, $2, $3)`
1818
_, err := db.Exec(s, id, downloads, date)
19-
if err != nil {
20-
panic(err)
21-
}
19+
return err
2220
}
2321

2422
func DecrementDownloads(id string) int {

backend/db/metadata.go

+68-6
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ type FileMetadata struct {
2929

3030
// InsertMetadata creates a new metadata entry in the db and returns a unique ID for
3131
// that entry.
32-
func InsertMetadata(chunks int, name string, plaintext bool) (string, error) {
32+
func InsertMetadata(chunks int, ownerID, name string, textOnly bool) (string, error) {
3333
prefix := constants.FileIDPrefix
34-
if plaintext {
34+
if textOnly {
3535
prefix = constants.PlaintextIDPrefix
3636
}
3737

@@ -43,9 +43,9 @@ func InsertMetadata(chunks int, name string, plaintext bool) (string, error) {
4343
}
4444

4545
s := `INSERT INTO metadata
46-
(id, chunks, filename, b2_id, length)
47-
VALUES ($1, $2, $3, $4, $5)`
48-
_, err := db.Exec(s, id, chunks, name, "", -1)
46+
(id, chunks, filename, b2_id, length, owner_id, modified)
47+
VALUES ($1, $2, $3, $4, $5, $6, $7)`
48+
_, err := db.Exec(s, id, chunks, name, "", -1, ownerID, time.Now().UTC())
4949
if err != nil {
5050
panic(err)
5151
}
@@ -70,7 +70,7 @@ func MetadataIDExists(id string) bool {
7070
}
7171

7272
func RetrieveMetadata(id string) (FileMetadata, error) {
73-
s := `SELECT m.*, e.downloads, e.date
73+
s := `SELECT m.id, m.chunks, m.filename, m.b2_id, m.length, e.downloads, e.date
7474
FROM metadata m
7575
JOIN expiry e on m.id = e.id
7676
WHERE m.id = $1`
@@ -146,3 +146,65 @@ func DeleteMetadata(id string) bool {
146146

147147
return true
148148
}
149+
150+
func AdminRetrieveSendMetadata(fileID string) (shared.AdminFileInfoResponse, error) {
151+
var (
152+
id string
153+
name string
154+
length int64
155+
ownerID string
156+
modified time.Time
157+
)
158+
159+
s := `SELECT id, filename, length, owner_id, modified FROM metadata WHERE id=$1`
160+
err := db.QueryRow(s, fileID).Scan(&id, &name, &length, &ownerID, &modified)
161+
return shared.AdminFileInfoResponse{
162+
ID: id,
163+
BucketName: name,
164+
Size: shared.ReadableFileSize(length),
165+
OwnerID: ownerID,
166+
Modified: modified,
167+
168+
RawSize: length,
169+
}, err
170+
}
171+
172+
func AdminFetchSentFiles(userID string) ([]shared.AdminFileInfoResponse, error) {
173+
result := []shared.AdminFileInfoResponse{}
174+
175+
s := `SELECT id, filename, length, owner_id, modified
176+
FROM metadata
177+
WHERE owner_id=$1`
178+
179+
rows, err := db.Query(s, userID)
180+
if err != nil {
181+
return result, err
182+
}
183+
184+
defer rows.Close()
185+
for rows.Next() {
186+
var (
187+
id string
188+
filename string
189+
length int64
190+
ownerID string
191+
modified time.Time
192+
)
193+
194+
err = rows.Scan(&id, &filename, &length, &ownerID, &modified)
195+
if err != nil {
196+
return result, err
197+
}
198+
199+
result = append(result, shared.AdminFileInfoResponse{
200+
ID: id,
201+
BucketName: filename,
202+
Size: shared.ReadableFileSize(length),
203+
OwnerID: ownerID,
204+
Modified: modified,
205+
RawSize: length,
206+
})
207+
}
208+
209+
return result, nil
210+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
ALTER TABLE metadata ADD COLUMN owner_id text DEFAULT '';
2+
UPDATE metadata SET owner_id = '';
3+
4+
ALTER TABLE metadata ADD COLUMN modified TIMESTAMP DEFAULT now();
5+
UPDATE metadata SET modified = now();

backend/db/vault.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ func AdminDeleteFile(id string) error {
357357
return err
358358
}
359359

360-
func AdminFetchFiles(userID string) ([]shared.AdminFileInfoResponse, error) {
360+
// AdminFetchVaultFiles fetches all files for a specific user
361+
func AdminFetchVaultFiles(userID string) ([]shared.AdminFileInfoResponse, error) {
361362
response := []shared.AdminFileInfoResponse{}
362363

363364
s := `SELECT id, name, length, owner_id, modified FROM vault WHERE owner_id=$1`

backend/server/admin/file_actions.go

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package admin
2+
3+
import (
4+
"database/sql"
5+
"log"
6+
"yeetfile/backend/db"
7+
"yeetfile/shared"
8+
)
9+
10+
func deleteFile(fileID string) error {
11+
metadata, err := db.AdminRetrieveMetadata(fileID)
12+
if err == nil {
13+
// Delete vault file
14+
err = db.AdminDeleteFile(fileID)
15+
if err != nil {
16+
log.Printf("Error deleting file: %v\n", err)
17+
return err
18+
}
19+
20+
_ = db.UpdateStorageUsed(metadata.OwnerID, -metadata.RawSize)
21+
} else {
22+
// Attempt to delete Send file instead
23+
metadata, err := db.RetrieveMetadata(fileID)
24+
if err != nil {
25+
return err
26+
}
27+
28+
db.DeleteFileByMetadata(metadata)
29+
}
30+
31+
return nil
32+
}
33+
34+
func fetchFileMetadata(fileID string) (shared.AdminFileInfoResponse, error) {
35+
fileInfo, err := db.AdminRetrieveMetadata(fileID)
36+
if err != nil && err != sql.ErrNoRows {
37+
return shared.AdminFileInfoResponse{}, err
38+
} else if err == nil {
39+
return fileInfo, nil
40+
}
41+
42+
sendFileInfo, err := db.AdminRetrieveSendMetadata(fileID)
43+
if err != nil && err != sql.ErrNoRows {
44+
return shared.AdminFileInfoResponse{}, err
45+
} else if err == nil {
46+
return sendFileInfo, nil
47+
}
48+
49+
return shared.AdminFileInfoResponse{}, err
50+
}

backend/server/admin/handlers.go

+10-27
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"log"
77
"net/http"
88
"strings"
9-
"yeetfile/backend/db"
109
"yeetfile/shared"
1110
)
1211

@@ -40,11 +39,7 @@ func UserActionHandler(w http.ResponseWriter, req *http.Request, id string) {
4039
return
4140
}
4241

43-
files, err := db.AdminFetchFiles(userID)
44-
if err != nil {
45-
log.Printf("Error fetching user files: %v\n", err)
46-
}
47-
42+
files := fetchAllFiles(userID)
4843
userResponse := shared.AdminUserInfoResponse{
4944
ID: user.ID,
5045
Email: user.Email,
@@ -64,31 +59,19 @@ func FileActionHandler(w http.ResponseWriter, req *http.Request, _ string) {
6459

6560
switch req.Method {
6661
case http.MethodDelete:
67-
metadata, err := db.AdminRetrieveMetadata(fileID)
68-
if err != nil {
69-
log.Printf("Error fetching file: %v\n", err)
70-
http.Error(w, "Failed to fetch file", http.StatusInternalServerError)
71-
return
72-
}
73-
74-
err = db.AdminDeleteFile(fileID)
62+
err := deleteFile(fileID)
7563
if err != nil {
76-
log.Printf("Error deleting file: %v\n", err)
77-
http.Error(w, "Failed to delete file", http.StatusInternalServerError)
64+
http.Error(w, "Error deleting file", http.StatusInternalServerError)
7865
return
7966
}
80-
81-
_ = db.UpdateStorageUsed(metadata.OwnerID, -metadata.RawSize)
8267
case http.MethodGet:
83-
fileInfo, err := db.AdminRetrieveMetadata(fileID)
84-
if err != nil {
85-
log.Printf("Error fetching file: %v\n", err)
86-
if err == sql.ErrNoRows {
87-
http.Error(w, "No match found", http.StatusNotFound)
88-
return
89-
}
90-
91-
http.Error(w, "Failed to fetch file info", http.StatusInternalServerError)
68+
fileInfo, err := fetchFileMetadata(fileID)
69+
if err == sql.ErrNoRows {
70+
http.Error(w, "No match found", http.StatusNotFound)
71+
return
72+
} else if err != nil {
73+
log.Printf("Error fetching file metadata: %v\n", err)
74+
http.Error(w, "Error fetching file metadata", http.StatusInternalServerError)
9275
return
9376
}
9477

backend/server/admin/user_actions.go

+23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package admin
22

33
import (
4+
"log"
45
"strings"
56
"yeetfile/backend/db"
67
"yeetfile/backend/server/auth"
@@ -11,6 +12,28 @@ func deleteUser(userID string) error {
1112
return auth.DeleteUser(userID, shared.DeleteAccount{Identifier: userID})
1213
}
1314

15+
func fetchAllFiles(userID string) []shared.AdminFileInfoResponse {
16+
if strings.Contains(userID, "@") {
17+
userID, _ = db.GetUserIDByEmail(userID)
18+
}
19+
20+
files := []shared.AdminFileInfoResponse{}
21+
vaultFiles, err := db.AdminFetchVaultFiles(userID)
22+
if err != nil {
23+
log.Printf("Error fetching user files: %v\n", err)
24+
}
25+
26+
files = append(files, vaultFiles...)
27+
28+
sendFiles, err := db.AdminFetchSentFiles(userID)
29+
if err != nil {
30+
log.Printf("Error fetching user send files: %v\n", err)
31+
}
32+
33+
files = append(files, sendFiles...)
34+
return files
35+
}
36+
1437
func getUserInfo(userID string) (db.User, error) {
1538
var err error
1639
if strings.Contains(userID, "@") {

backend/server/auth/auth.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func IsInstanceAdmin(currentUserID string) bool {
125125
adminID := config.InstanceAdmin
126126
if len(adminID) > 0 {
127127
if strings.Contains(adminID, "@") {
128-
adminID, _ = db.GetUserIDByEmail(currentUserID)
128+
adminID, _ = db.GetUserIDByEmail(adminID)
129129
}
130130

131131
return adminID == currentUserID

backend/server/transfer/send/handlers.go

+20-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020

2121
// UploadMetadataHandler handles a POST request to /u with the metadata required to set
2222
// up a file for uploading. This is defined in the UploadMetadata struct.
23-
func UploadMetadataHandler(w http.ResponseWriter, req *http.Request, _ string) {
23+
func UploadMetadataHandler(w http.ResponseWriter, req *http.Request, userID string) {
2424
var meta shared.UploadMetadata
2525
data, _ := utils.LimitedReader(w, req.Body)
2626
err := json.Unmarshal(data, &meta)
@@ -48,11 +48,16 @@ func UploadMetadataHandler(w http.ResponseWriter, req *http.Request, _ string) {
4848
return
4949
}
5050

51-
id, _ := db.InsertMetadata(meta.Chunks, meta.Name, false)
51+
id, _ := db.InsertMetadata(meta.Chunks, userID, meta.Name, false)
5252
b2Upload := db.CreateNewUpload(id, meta.Name)
5353

5454
exp := utils.StrToDuration(meta.Expiration, config.IsDebugMode)
55-
db.SetFileExpiry(id, meta.Downloads, time.Now().Add(exp).UTC())
55+
err = db.SetFileExpiry(id, meta.Downloads, time.Now().Add(exp).UTC())
56+
if err != nil {
57+
log.Printf("Error setting file expiry: %v\n", err)
58+
http.Error(w, "Server error", http.StatusInternalServerError)
59+
return
60+
}
5661

5762
var b2Err error
5863
if meta.Chunks == 1 {
@@ -143,11 +148,21 @@ func UploadPlaintextHandler(w http.ResponseWriter, req *http.Request) {
143148
return
144149
}
145150

146-
id, _ := db.InsertMetadata(1, plaintextUpload.Name, true)
151+
id, err := db.InsertMetadata(1, "", plaintextUpload.Name, true)
152+
if err != nil {
153+
log.Printf("Error inserting new text-only upload metadata: %v\n", err)
154+
http.Error(w, "Unable to init metadata", http.StatusInternalServerError)
155+
return
156+
}
147157
b2Upload := db.CreateNewUpload(id, plaintextUpload.Name)
148158

149159
exp := utils.StrToDuration(plaintextUpload.Expiration, config.IsDebugMode)
150-
db.SetFileExpiry(id, plaintextUpload.Downloads, time.Now().Add(exp).UTC())
160+
err = db.SetFileExpiry(id, plaintextUpload.Downloads, time.Now().UTC().Add(exp))
161+
if err != nil {
162+
log.Printf("Error setting file expiry: %v\n", err)
163+
http.Error(w, "Server error", http.StatusInternalServerError)
164+
return
165+
}
151166

152167
err = transfer.InitB2Upload(b2Upload)
153168
if err != nil {

0 commit comments

Comments
 (0)