file_manager.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package tool
  2. import (
  3. "crypto/sha256"
  4. "database/sql"
  5. "encoding/hex"
  6. "io"
  7. "path/filepath"
  8. "strings"
  9. "github.com/dlclark/regexp2"
  10. )
  11. func Get_file_max_size(db *sql.DB) int {
  12. data := "0"
  13. QueryRow_DB(
  14. db,
  15. "select data from other where name = 'upload'",
  16. []any{ &data },
  17. )
  18. file_max_size := Str_to_int(data)
  19. return file_max_size
  20. }
  21. func Get_file_main_dir(db *sql.DB) string {
  22. data := ""
  23. QueryRow_DB(
  24. db,
  25. "select data from other where name = 'image_where'",
  26. []any{ &data },
  27. )
  28. if data == "" {
  29. data = filepath.Join("..", "data", "images")
  30. } else {
  31. data = filepath.Clean(data)
  32. }
  33. return data
  34. }
  35. func Get_ext_allow_list(db *sql.DB) map[string]bool {
  36. rows := Query_DB(db, "select html from html_filter where kind = 'extension'")
  37. defer rows.Close()
  38. data_list := map[string]bool{}
  39. for rows.Next() {
  40. data := ""
  41. err := rows.Scan(&data)
  42. if err != nil {
  43. panic(err)
  44. }
  45. data = strings.ToLower(data)
  46. data = strings.TrimPrefix(data, ".")
  47. data_list[data] = true
  48. }
  49. return data_list
  50. }
  51. func Get_file_name_unallow_check(db *sql.DB, file_name string) bool {
  52. rows := Query_DB(db, "select html from html_filter where kind = 'file_name'")
  53. defer rows.Close()
  54. for rows.Next() {
  55. data := ""
  56. err := rows.Scan(&data)
  57. if err != nil {
  58. panic(err)
  59. }
  60. r, err := regexp2.Compile(data, 0)
  61. if err != nil {
  62. continue
  63. }
  64. m, err := r.MatchString(file_name)
  65. if err == nil && m {
  66. return true
  67. }
  68. }
  69. return false
  70. }
  71. func File_name_to_dir(file_name string, file_ext string) string {
  72. h := sha256.New224()
  73. io.WriteString(h, file_name)
  74. hash_hex := hex.EncodeToString(h.Sum(nil))
  75. return hash_hex + "." + file_ext
  76. }