1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-09 18:30:23 +08:00

finish 试卷查重

This commit is contained in:
源文雨
2023-04-17 22:35:54 +08:00
parent 67b6abf001
commit e2a8cdf5b3
13 changed files with 475 additions and 34 deletions

View File

@@ -497,7 +497,7 @@ func (f *FileDatabase) DelFile(lstid, uid int, istemp bool) error {
if err != nil {
return err
}
if !user.IsSuper() {
if !user.IsSuper() && !istemp {
return ErrInvalidRole
}
ftable := ""
@@ -512,6 +512,9 @@ func (f *FileDatabase) DelFile(lstid, uid int, istemp bool) error {
if err != nil {
return err
}
if istemp && lst.Uploader != uid {
return ErrInvalidRole
}
if lst.Path == "" || strings.Contains(lst.Path, "..") {
return os.ErrNotExist
}

View File

@@ -83,14 +83,20 @@ func (f *FileDatabase) SaveFileToTemp(uploader int, file io.Reader, name string)
}
// ListUploadedFile will select all file that HasntAnalyzed && IsTemp or !HasntAnalyzed && !IsTemp
func (f *FileDatabase) ListUploadedFile() (lst []*List, err error) {
func (f *FileDatabase) ListUploadedFile(istemp bool) (lst []*List, err error) {
q := ""
if istemp {
q = "WHERE IsTemp ORDER BY UpTime DESC"
} else {
q = "WHERE (HasntAnalyzed AND IsTemp) OR (NOT HasntAnalyzed AND NOT IsTemp) ORDER BY UpTime DESC"
}
f.mu.RLock()
lst, err = sql.FindAll[List](&f.db, FileTableList, "WHERE (HasntAnalyzed AND IsTemp) OR (NOT HasntAnalyzed AND NOT IsTemp) ORDER BY UpTime DESC")
lst, err = sql.FindAll[List](&f.db, FileTableList, q)
f.mu.RUnlock()
return
}
func (f *FileDatabase) GetFileInfo(id int) (lst List, err error) {
func (f *FileDatabase) ListFileByID(id int) (lst List, err error) {
f.mu.RLock()
lst, err = sql.Find[List](&f.db, FileTableList, "WHERE ID="+strconv.Itoa(id))
f.mu.RUnlock()

View File

@@ -97,7 +97,9 @@ type loginResult struct {
}
var (
usertokens = ttl.NewCache[string, *global.User](time.Hour)
usertokens = ttl.NewCacheOn(time.Hour, [4]func(string, *global.User){
nil, nil, func(t string, _ *global.User) { loginstatus.Delete(t) }, nil,
})
)
func login(username, challenge string) (*loginResult, error) {

View File

@@ -54,6 +54,7 @@ func init() {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
istemp := r.URL.Query().Get("permanent") != "true"
count := -1
var err error
countstr := r.URL.Query().Get("count")
@@ -64,7 +65,7 @@ func init() {
return
}
}
lst, err := global.FileDB.ListUploadedFile()
lst, err := global.FileDB.ListUploadedFile(istemp)
if err != nil && err != sql.ErrNullResult {
writeresult(w, codeError, nil, err.Error(), typeError)
return
@@ -112,7 +113,7 @@ func init() {
writeresult(w, codeError, nil, err.Error(), typeError)
return
}
lst, err := global.FileDB.GetFileInfo(id)
lst, err := global.FileDB.ListFileByID(id)
if err != nil && err != sql.ErrNullResult {
writeresult(w, codeError, nil, err.Error(), typeError)
return
@@ -217,7 +218,8 @@ func init() {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
if !user.IsSuper() {
istemp := r.URL.Query().Get("permanent") != "true"
if !user.IsSuper() && !istemp {
writeresult(w, codeError, nil, errNoDeletePermission.Error(), typeError)
return
}
@@ -231,7 +233,7 @@ func init() {
writeresult(w, codeError, nil, err.Error(), typeError)
return
}
err = global.FileDB.DelFile(id, *user.ID, false)
err = global.FileDB.DelFile(id, *user.ID, istemp)
if err != nil {
writeresult(w, codeError, nil, err.Error(), typeError)
return
@@ -245,10 +247,6 @@ func init() {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
if !user.IsSuper() {
writeresult(w, codeError, nil, errNoDeletePermission.Error(), typeError)
return
}
idstr := r.URL.Query().Get("id")
if idstr == "" {
writeresult(w, codeError, nil, "empty id", typeError)
@@ -259,7 +257,7 @@ func init() {
writeresult(w, codeError, nil, err.Error(), typeError)
return
}
lst, err := global.FileDB.GetFileInfo(id)
lst, err := global.FileDB.ListFileByID(id)
if err != nil {
writeresult(w, codeError, nil, err.Error(), typeError)
return