Browse Source

添加加密判断

master
刘子旺 7 months ago
parent
commit
f6a05b599a
  1. 17
      godo/files/fs.go
  2. 8
      godo/files/os.go
  3. 7
      godo/files/pwdfile.go

17
godo/files/fs.go

@ -88,7 +88,7 @@ func HandleReadDir(w http.ResponseWriter, r *http.Request) {
return
}
osFileInfo.Content = string(content)
osFileInfo.IsPwd = IsHaveHiddenFile(basePath, osFileInfo.Path)
// 检查文件内容是否以"link::"开头
if strings.HasPrefix(osFileInfo.Content, "link::") {
osFileInfo.IsSymlink = true
@ -129,7 +129,7 @@ func HandleStat(w http.ResponseWriter, r *http.Request) {
libs.HTTPError(w, http.StatusNotFound, err.Error())
return
}
osFileInfo.IsPwd = IsHaveHiddenFile(basePath, osFileInfo.Path)
res := libs.APIResponse{
Message: "File information retrieved successfully.",
Data: osFileInfo,
@ -318,6 +318,7 @@ func HandleCopyFile(w http.ResponseWriter, r *http.Request) {
// 带加密写
func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
filePath := r.URL.Query().Get("filePath")
pwd := r.Header.Get("filePwd")
basePath, err := libs.GetOsDir()
if err != nil {
libs.HTTPError(w, http.StatusInternalServerError, err.Error())
@ -366,6 +367,12 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
libs.SuccessMsg(w, "", "success")
return
}
// 校验密码
salt := GetSalt(r)
if !CheckFilePwd(pwd, salt) {
libs.HTTPError(w, http.StatusBadRequest, "密码错误")
return
}
// 加密
data, err := libs.EncryptData(filedata, libs.EncryptionKey)
if err != nil {
@ -377,6 +384,12 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 加密文件在同级目录下创建一个同名隐藏文件
hiddenFilePath := filepath.Join(basePath, "."+filePath)
_, err = os.Create(hiddenFilePath)
if err != nil {
libs.ErrorMsg(w, "创建隐藏文件失败")
}
// 判断下是否添加到桌面上
CheckAddDesktop(filePath)
libs.SuccessMsg(w, "", "success")

8
godo/files/os.go

@ -54,6 +54,7 @@ type OsFileInfo struct {
Ext string `json:"ext"` // 文件扩展名
Title string `json:"title"` // 文件名(不包含扩展名)
ID int `json:"id,omitempty"` // 文件ID(可选)
IsPwd bool `json:"isPwd"` // 是否加密
}
// validateFilePath 验证路径不为空
@ -379,3 +380,10 @@ func GetPwdFlag() int {
}
return isPwd.(int)
}
// 判读一个目录下有没有同名隐藏文件
func IsHaveHiddenFile(basePath, filePath string) bool {
hiddenFilePath := filepath.Join(basePath, "."+filePath)
_, err := os.Stat(hiddenFilePath)
return err == nil
}

7
godo/files/pwdfile.go

@ -53,7 +53,6 @@ func HandleReadFile(w http.ResponseWriter, r *http.Request) {
return
}
var data []byte
fileContent, err = libs.DecryptData(fileContent, libs.EncryptionKey)
if err != nil {
libs.HTTPError(w, http.StatusInternalServerError, err.Error())
@ -63,7 +62,7 @@ func HandleReadFile(w http.ResponseWriter, r *http.Request) {
content := string(fileContent)
// 检查文件内容是否以"link::"开头
if !strings.HasPrefix(content, "link::") {
content = base64.StdEncoding.EncodeToString(data)
content = base64.StdEncoding.EncodeToString(fileContent)
}
// 初始响应
@ -74,7 +73,7 @@ func HandleReadFile(w http.ResponseWriter, r *http.Request) {
// 设置文件密码
func HandleSetFilePwd(w http.ResponseWriter, r *http.Request) {
fPwd := r.Header.Get("filepPwd")
salt := r.Header.Get("salt")
salt := GetSalt(r)
// 服务端再hash加密
hashPwd := libs.HashPassword(fPwd, salt)
@ -99,7 +98,7 @@ func HandleSetFilePwd(w http.ResponseWriter, r *http.Request) {
// 更改文件密码
func HandleChangeFilePwd(w http.ResponseWriter, r *http.Request) {
filePwd := r.Header.Get("filePwd")
salt := r.Header.Get("salt")
salt := GetSalt(r)
if filePwd == "" || salt == "" {
libs.ErrorMsg(w, "密码为空")
return

Loading…
Cancel
Save