handler.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package agi
  2. import (
  3. "io/ioutil"
  4. "net/http"
  5. "path/filepath"
  6. )
  7. //Handle AGI Exectuion Request with token, design for letting other web scripting language like php to interface with AGI
  8. func (g *Gateway) HandleAgiExecutionRequestWithToken(w http.ResponseWriter, r *http.Request) {
  9. token, err := mv(r, "token", false)
  10. if err != nil {
  11. //Username not defined
  12. sendErrorResponse(w, "Token not defined or empty.")
  13. return
  14. }
  15. script, err := mv(r, "script", false)
  16. if err != nil {
  17. //Username not defined
  18. sendErrorResponse(w, "Script path not defined or empty.")
  19. return
  20. }
  21. //Try to get the username from token
  22. username, err := g.Option.UserHandler.GetAuthAgent().GetUsernameFromToken(token)
  23. if err != nil {
  24. //This token is not valid
  25. w.WriteHeader(http.StatusUnauthorized)
  26. w.Write([]byte("401 - Unauthorized (Token not valid)"))
  27. return
  28. }
  29. //Check if user exists and have access to the script
  30. targetUser, err := g.Option.UserHandler.GetUserInfoFromUsername(username)
  31. if err != nil {
  32. //This user not exists
  33. w.WriteHeader(http.StatusUnauthorized)
  34. w.Write([]byte("401 - Unauthorized (User not exists)"))
  35. return
  36. }
  37. scriptScope := ""
  38. allowAccess := checkUserAccessToScript(targetUser, script, scriptScope)
  39. if !allowAccess {
  40. w.WriteHeader(http.StatusUnauthorized)
  41. w.Write([]byte("401 - Unauthorized (Permission Denied)"))
  42. return
  43. }
  44. //Get the content of the script
  45. scriptContentByte, err := ioutil.ReadFile(filepath.Join("./web/", script))
  46. if err != nil {
  47. w.WriteHeader(http.StatusNotFound)
  48. w.Write([]byte("404 - Script Not Found"))
  49. return
  50. }
  51. scriptContent := string(scriptContentByte)
  52. g.ExecuteAGIScript(scriptContent, script, scriptScope, w, r, targetUser)
  53. }