@ -261,6 +261,20 @@ func (db *mySQLdb) GetFiles(ownerID string) ([]*models.File, error) {
|
|||||||
return files, err
|
return files, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *mySQLdb) IncrementDownloadCount(fileID string) error {
|
||||||
|
var file models.File
|
||||||
|
err := db.DB.Table("files").Where("id = ?", fileID).First(&file).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
file.Downloaded = file.Downloaded + 1
|
||||||
|
err = db.DB.Updates(file).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (db *mySQLdb) InitializeTotp(email string, secret string) error {
|
func (db *mySQLdb) InitializeTotp(email string, secret string) error {
|
||||||
var user models.User
|
var user models.User
|
||||||
err := db.DB.Table("users").Where("email = ?", email).First(&user).Error
|
err := db.DB.Table("users").Where("email = ?", email).First(&user).Error
|
||||||
@ -398,6 +412,20 @@ func (db *postgresDB) GetFiles(ownerID string) ([]*models.File, error) {
|
|||||||
return files, err
|
return files, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *postgresDB) IncrementDownloadCount(fileID string) error {
|
||||||
|
var file models.File
|
||||||
|
err := db.DB.Table("files").Where("id = $1", fileID).First(&file).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
file.Downloaded = file.Downloaded + 1
|
||||||
|
err = db.DB.Updates(file).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (db *postgresDB) InitializeTotp(email string, secret string) error {
|
func (db *postgresDB) InitializeTotp(email string, secret string) error {
|
||||||
var user models.User
|
var user models.User
|
||||||
err := db.DB.Table("users").Where("email = $1", email).First(&user).Error
|
err := db.DB.Table("users").Where("email = $1", email).First(&user).Error
|
||||||
|
@ -68,6 +68,7 @@ func GET(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Content-Length", fmt.Sprintf("%d", file.Size))
|
w.Header().Set("Content-Length", fmt.Sprintf("%d", file.Size))
|
||||||
|
|
||||||
sendFileChunk(w, saveFolder, file, 0, int64(file.Size-1))
|
sendFileChunk(w, saveFolder, file, 0, int64(file.Size-1))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendFileChunk(w http.ResponseWriter, saveFolder string, file *models.File, start, end int64) {
|
func sendFileChunk(w http.ResponseWriter, saveFolder string, file *models.File, start, end int64) {
|
||||||
@ -130,6 +131,14 @@ func sendFileChunk(w http.ResponseWriter, saveFolder string, file *models.File,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
toSend -= int64(n)
|
toSend -= int64(n)
|
||||||
|
if i == int64(file.TotalChunk)-1 && toSend == 0 {
|
||||||
|
err := app.Server.Database.IncrementDownloadCount(file.ID.String())
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, fmt.Sprintf("Error writing chunk: %v", err), http.StatusInternalServerError)
|
||||||
|
app.Server.Logger.Error(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,5 +93,6 @@ func POST(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w.WriteHeader(http.StatusAccepted)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -163,10 +163,17 @@ async function uploadChunks(name, size, chunks, chunkArray, FileID) {
|
|||||||
|
|
||||||
const startTime = performance.now();
|
const startTime = performance.now();
|
||||||
try {
|
try {
|
||||||
await fetch(`/file/${FileID}`, {
|
const request = await fetch(`/file/${FileID}`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
console.log(request.status)
|
||||||
|
if (request.status !== 202) {
|
||||||
|
ChangeModal("Error", "There was an issue with your upload. Please try again later or contact support if the problem persists.")
|
||||||
|
toggleModal();
|
||||||
|
isFailed = true
|
||||||
|
break
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
ChangeModal("Error", "There was an issue with your upload. Please try again later or contact support if the problem persists.")
|
ChangeModal("Error", "There was an issue with your upload. Please try again later or contact support if the problem persists.")
|
||||||
toggleModal();
|
toggleModal();
|
||||||
|
@ -59,6 +59,7 @@ type Database interface {
|
|||||||
GetFile(fileID string) (*models.File, error)
|
GetFile(fileID string) (*models.File, error)
|
||||||
GetUserFile(name string, ownerID string) (*models.File, error)
|
GetUserFile(name string, ownerID string) (*models.File, error)
|
||||||
GetFiles(ownerID string) ([]*models.File, error)
|
GetFiles(ownerID string) ([]*models.File, error)
|
||||||
|
IncrementDownloadCount(fileID string) error
|
||||||
|
|
||||||
InitializeTotp(email string, secret string) error
|
InitializeTotp(email string, secret string) error
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user