mirror of
https://github.com/fumiama/paper-manager.git
synced 2026-06-09 18:30:23 +08:00
finish 试卷查重
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user