plugin_module.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package core
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/beego/beego/v2/adapter/httplib"
  6. "github.com/dop251/goja_nodejs/require"
  7. )
  8. func mapFileSystemSourceLoader(uuid string) require.SourceLoader {
  9. return func(path string) ([]byte, error) {
  10. path = strings.ReplaceAll(path, `node_modules/`, "")
  11. var data []byte
  12. var address = ""
  13. ls := plugin_list
  14. for _, f := range ls {
  15. if f.UUID == uuid {
  16. address = f.Address
  17. break
  18. }
  19. }
  20. if address != "" {
  21. for _, f := range ls {
  22. if f.Address == address && f.Title == path {
  23. data = plugins.GetBytes(f.UUID)
  24. }
  25. }
  26. if data == nil {
  27. for _, l := range ls {
  28. if l.Address == address && l.Title == path {
  29. data = fetchScript(l.Address, l.UUID)
  30. if data == nil {
  31. return nil, fmt.Errorf("无法从订阅源获取%s模块", path)
  32. } else {
  33. console.Log("已从订阅源获取%s模块", path)
  34. plugins.Set(l.UUID, string(data))
  35. }
  36. break
  37. }
  38. }
  39. }
  40. }
  41. if len(data) == 0 {
  42. fs := Functions
  43. for _, f := range fs {
  44. if f.Title == path {
  45. data = plugins.GetBytes(f.UUID)
  46. }
  47. }
  48. }
  49. if data == nil {
  50. return nil, fmt.Errorf("缺少%s模块", path) //require.ModuleFileDoesNotExistError
  51. }
  52. su := &ScriptUtils{
  53. script: string(data),
  54. }
  55. if su.GetValue("encrypt") == "true" {
  56. data = []byte(DecryptPlugin(su.script))
  57. }
  58. data = []byte(halfDeEct(string(data)))
  59. return data, nil
  60. }
  61. }
  62. func fetchScript(address, uuid string) (data []byte) {
  63. var prefix = "?uuid=" + uuid
  64. if !strings.HasSuffix(address, "list.json") {
  65. address = address + "/api/plugins/download" + prefix
  66. } else {
  67. address = strings.ReplaceAll(address, "list.json", "download"+prefix)
  68. }
  69. data, _ = httplib.Get(address).Bytes()
  70. return
  71. }