agi.go 2.5 KB

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