agi.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package main
  2. import (
  3. "net/http"
  4. agi "imuslab.com/arozos/mod/agi"
  5. prout "imuslab.com/arozos/mod/prouter"
  6. "imuslab.com/arozos/mod/utils"
  7. )
  8. var (
  9. AGIGateway *agi.Gateway
  10. )
  11. func AGIInit() {
  12. //Create new AGI Gateway object
  13. gw, err := agi.NewGateway(agi.AgiSysInfo{
  14. BuildVersion: build_version,
  15. InternalVersion: internal_version,
  16. LoadedModule: moduleHandler.GetModuleNameList(),
  17. ReservedTables: []string{"auth", "permisson", "register", "desktop"},
  18. ModuleRegisterParser: moduleHandler.RegisterModuleFromAGI,
  19. ExtIconRegisterParser: moduleHandler.RegisterExtIcon,
  20. ModuleListProvider: moduleHandler.GetModuleListJSONForUser,
  21. PackageManager: packageManager,
  22. Logger: systemWideLogger,
  23. UserHandler: userHandler,
  24. StartupRoot: "./web",
  25. ActivateScope: []string{"./web", "./subservice"},
  26. FileSystemRender: thumbRenderHandler,
  27. ShareManager: shareManager,
  28. NightlyManager: nightlyManager,
  29. TempFolderPath: *tmp_directory,
  30. })
  31. if err != nil {
  32. systemWideLogger.PrintAndLog("AGI", "AGI Gateway Initialization Failed", err)
  33. }
  34. //Register user request handler endpoint
  35. http.HandleFunc("/system/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  36. //Require login check
  37. authAgent.HandleCheckAuth(w, r, func(w http.ResponseWriter, r *http.Request) {
  38. //API Call from actual human users
  39. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromRequest(w, r)
  40. gw.InterfaceHandler(w, r, thisuser)
  41. })
  42. })
  43. //Register external API request handler endpoint
  44. http.HandleFunc("/api/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  45. //Check if token exists
  46. token, err := utils.PostPara(r, "token")
  47. if err != nil {
  48. w.WriteHeader(http.StatusUnauthorized)
  49. w.Write([]byte("401 - Unauthorized (token is empty)"))
  50. return
  51. }
  52. //Validate Token
  53. if authAgent.TokenValid(token) {
  54. //Valid
  55. thisUsername, err := gw.Option.UserHandler.GetAuthAgent().GetTokenOwner(token)
  56. if err != nil {
  57. systemWideLogger.PrintAndLog("AGI", "Unable to validate token owner", err)
  58. w.WriteHeader(http.StatusInternalServerError)
  59. w.Write([]byte("500 - Internal Server Error"))
  60. return
  61. }
  62. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromUsername(thisUsername)
  63. gw.APIHandler(w, r, thisuser)
  64. } else {
  65. w.WriteHeader(http.StatusUnauthorized)
  66. w.Write([]byte("401 - Unauthorized (Invalid / expired token)"))
  67. return
  68. }
  69. })
  70. http.HandleFunc("/api/ajgi/exec", gw.HandleAgiExecutionRequestWithToken)
  71. // external AGI related function
  72. externalAGIRouter := prout.NewModuleRouter(prout.RouterOption{
  73. ModuleName: "ARZ Serverless",
  74. AdminOnly: false,
  75. UserHandler: userHandler,
  76. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  77. errorHandlePermissionDenied(w, r)
  78. },
  79. })
  80. externalAGIRouter.HandleFunc("/api/ajgi/listExt", gw.ListExternalEndpoint)
  81. externalAGIRouter.HandleFunc("/api/ajgi/addExt", gw.AddExternalEndPoint)
  82. externalAGIRouter.HandleFunc("/api/ajgi/rmExt", gw.RemoveExternalEndPoint)
  83. externalAGIRouter.HandleFunc("/api/ajgi/stats", gw.GetEndpointStats)
  84. AGIGateway = gw
  85. }