mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.1 KiB
102 lines
2.1 KiB
package files
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"godo/libs"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// 带加密读
|
|
func HandleReadFile(w http.ResponseWriter, r *http.Request) {
|
|
|
|
path := r.URL.Query().Get("path")
|
|
fpwd := r.Header.Get("fpwd")
|
|
haspwd := IsHavePwd(fpwd)
|
|
|
|
// 获取salt值
|
|
salt := GetSalt(r)
|
|
|
|
// 校验文件路径
|
|
if err := validateFilePath(path); err != nil {
|
|
libs.HTTPError(w, http.StatusBadRequest, err.Error())
|
|
return
|
|
}
|
|
|
|
// 有密码校验密码
|
|
if haspwd {
|
|
if !CheckFilePwd(fpwd, salt) {
|
|
libs.HTTPError(w, http.StatusBadRequest, "密码错误")
|
|
return
|
|
}
|
|
}
|
|
|
|
// 获取文件路径
|
|
basePath, err := libs.GetOsDir()
|
|
if err != nil {
|
|
libs.HTTPError(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
// 读取内容
|
|
fileContent, err := ReadFile(basePath, path)
|
|
if err != nil {
|
|
libs.HTTPError(w, http.StatusNotFound, err.Error())
|
|
return
|
|
}
|
|
|
|
// 解密
|
|
data, err := libs.DecryptData(fileContent, libs.EncryptionKey)
|
|
if err != nil {
|
|
libs.HTTPError(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
|
|
content := string(data)
|
|
// 检查文件内容是否以"link::"开头
|
|
if !strings.HasPrefix(content, "link::") {
|
|
content = base64.StdEncoding.EncodeToString(data)
|
|
}
|
|
|
|
// 初始响应
|
|
res := libs.APIResponse{Code: 0, Message: "success", Data: content}
|
|
|
|
json.NewEncoder(w).Encode(res)
|
|
}
|
|
|
|
// 设置文件密码
|
|
func HandleSetFilePwd(w http.ResponseWriter, r *http.Request) {
|
|
fpwd := r.Header.Get("filepwd")
|
|
salt := r.Header.Get("salt")
|
|
// 密码最长16位
|
|
if fpwd == "" || len(fpwd) > 16 {
|
|
libs.ErrorMsg(w, "密码长度为空或者过长,最长为16位")
|
|
return
|
|
}
|
|
// md5加密
|
|
mhash := md5.New()
|
|
mhash.Write([]byte(fpwd))
|
|
v := mhash.Sum(nil)
|
|
pwdstr := hex.EncodeToString(v)
|
|
|
|
// 服务端再hash加密
|
|
hashpwd := libs.HashPassword(pwdstr, salt)
|
|
|
|
// 服务端存储
|
|
req := libs.ReqBody{
|
|
Name: "filepwd",
|
|
Value: hashpwd,
|
|
}
|
|
libs.SetConfig(req)
|
|
|
|
// salt值存储
|
|
reqSalt := libs.ReqBody{
|
|
Name: "salt",
|
|
Value: salt,
|
|
}
|
|
libs.SetConfig(reqSalt)
|
|
res := libs.APIResponse{Message: "success", Data: pwdstr}
|
|
json.NewEncoder(w).Encode(res)
|
|
}
|
|
|