agi.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. MeetRoomManager: meetRoomManager,
  30. SharedSpaceManager: sharedSpaceManager,
  31. TempFolderPath: *tmp_directory,
  32. })
  33. if err != nil {
  34. systemWideLogger.PrintAndLog("AGI", "AGI Gateway Initialization Failed", err)
  35. }
  36. //Register user request handler endpoint
  37. http.HandleFunc("/system/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  38. //Require login check
  39. authAgent.HandleCheckAuth(w, r, func(w http.ResponseWriter, r *http.Request) {
  40. //API Call from actual human users
  41. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromRequest(w, r)
  42. gw.InterfaceHandler(w, r, thisuser)
  43. })
  44. })
  45. //Register external API request handler endpoint
  46. http.HandleFunc("/api/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  47. //Check if token exists
  48. token, err := utils.PostPara(r, "token")
  49. if err != nil {
  50. w.WriteHeader(http.StatusUnauthorized)
  51. w.Write([]byte("401 - Unauthorized (token is empty)"))
  52. return
  53. }
  54. //Validate Token
  55. if authAgent.TokenValid(token) {
  56. //Valid
  57. thisUsername, err := gw.Option.UserHandler.GetAuthAgent().GetTokenOwner(token)
  58. if err != nil {
  59. systemWideLogger.PrintAndLog("AGI", "Unable to validate token owner", err)
  60. w.WriteHeader(http.StatusInternalServerError)
  61. w.Write([]byte("500 - Internal Server Error"))
  62. return
  63. }
  64. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromUsername(thisUsername)
  65. gw.APIHandler(w, r, thisuser)
  66. } else {
  67. w.WriteHeader(http.StatusUnauthorized)
  68. w.Write([]byte("401 - Unauthorized (Invalid / expired token)"))
  69. return
  70. }
  71. })
  72. http.HandleFunc("/api/ajgi/exec", gw.HandleAgiExecutionRequestWithToken)
  73. // external AGI related function
  74. externalAGIRouter := prout.NewModuleRouter(prout.RouterOption{
  75. ModuleName: "ARZ Serverless",
  76. AdminOnly: false,
  77. UserHandler: userHandler,
  78. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  79. errorHandlePermissionDenied(w, r)
  80. },
  81. })
  82. externalAGIRouter.HandleFunc("/api/ajgi/listExt", gw.ListExternalEndpoint)
  83. externalAGIRouter.HandleFunc("/api/ajgi/addExt", gw.AddExternalEndPoint)
  84. externalAGIRouter.HandleFunc("/api/ajgi/rmExt", gw.RemoveExternalEndPoint)
  85. externalAGIRouter.HandleFunc("/api/ajgi/stats", gw.GetEndpointStats)
  86. AGIGateway = gw
  87. }