agi.go 3.8 KB

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