agi.go 2.0 KB

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