agi.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. agi "imuslab.com/arozos/mod/agi"
  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. })
  26. if err != nil {
  27. log.Println("AGI Gateway Initialization Failed")
  28. }
  29. //Register user request handler endpoint
  30. http.HandleFunc("/system/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  31. //Require login check
  32. authAgent.HandleCheckAuth(w, r, func(w http.ResponseWriter, r *http.Request) {
  33. //API Call from actual human users
  34. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromRequest(w, r)
  35. gw.InterfaceHandler(w, r, thisuser)
  36. })
  37. })
  38. //Register external API request handler endpoint
  39. http.HandleFunc("/api/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
  40. //Check if token exists
  41. token, err := mv(r, "token", true)
  42. if err != nil {
  43. w.WriteHeader(http.StatusUnauthorized)
  44. w.Write([]byte("401 - Unauthorized (token is empty)"))
  45. return
  46. }
  47. //Validate Token
  48. if authAgent.TokenValid(token) == true {
  49. //Valid
  50. thisUsername, err := gw.Option.UserHandler.GetAuthAgent().GetTokenOwner(token)
  51. if err != nil {
  52. log.Println(err)
  53. w.WriteHeader(http.StatusInternalServerError)
  54. w.Write([]byte("500 - Internal Server Error"))
  55. return
  56. }
  57. thisuser, _ := gw.Option.UserHandler.GetUserInfoFromUsername(thisUsername)
  58. gw.APIHandler(w, r, thisuser)
  59. } else {
  60. w.WriteHeader(http.StatusUnauthorized)
  61. w.Write([]byte("401 - Unauthorized (Invalid / expired token)"))
  62. return
  63. }
  64. })
  65. http.HandleFunc("/api/ajgi/exec", gw.HandleAgiExecutionRequestWithToken)
  66. AGIGateway = gw
  67. }