authorization.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package api
  2. import(
  3. "gopkg.in/korylprince/go-ad-auth.v2"
  4. "net/http"
  5. "encoding/json"
  6. )
  7. type User struct{
  8. Login string `json:"login"`
  9. Password string `json:"password"`
  10. }
  11. type Result struct{
  12. Groups []string `json:"userGroups"`
  13. Displayname []string `json:"Displayname"`
  14. }
  15. /*func (u User) SetCookie(w http.ResponseWriter, r *http.Request){
  16. cookie := http.Cookie{
  17. Name: u.Login,
  18. Value: "logged in",
  19. Domain: r.Host,
  20. Path: "/",
  21. MaxAge: 60*60,
  22. HttpOnly: true,
  23. }
  24. http.SetCookie(rw, &cookie)
  25. }*/
  26. func LoginRoute(w http.ResponseWriter, r *http.Request){
  27. showAPIRequest(r)
  28. var userGroups []string
  29. Groups := []string{"Студенты", "Персонал", "Бухгалтерия", "Преподаватели", "Админы"}
  30. if r.Method == "POST" || r.Method == "GET"{
  31. config := &auth.Config{
  32. Server: "192.168.10.121",
  33. Port: 389,
  34. BaseDN: "DC=ttit,DC=local",
  35. Security: auth.SecurityNone,
  36. }
  37. var user User
  38. var result Result
  39. error := json.NewDecoder(r.Body).Decode(&user)
  40. if error != nil{
  41. json.NewEncoder(w).Encode(struct{ Error string }{Error: "an error has occured during decoding"})
  42. showError(r, error)
  43. return
  44. }
  45. status, entry, groups, err := auth.AuthenticateExtended(config, user.Login, user.Password, []string{"cn"}, Groups)
  46. if err != nil {
  47. json.NewEncoder(w).Encode(struct{ Error string }{Error: "an error has occured"})
  48. showError(r, err)
  49. return
  50. } else if !status {
  51. json.NewEncoder(w).Encode(struct{ Error string }{Error: "no user found"})
  52. return
  53. }
  54. for _, group := range groups{
  55. for _, constGroup := range Groups{
  56. if group == constGroup{
  57. userGroups = append(userGroups, group)
  58. }
  59. }
  60. }
  61. username := entry.GetAttributeValues("cn")
  62. result.Displayname = username
  63. result.Groups = userGroups
  64. json.NewEncoder(w).Encode(result)
  65. }
  66. }