agi.go 2.1 KB

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