authorization.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 LoginRoute(w http.ResponseWriter, r *http.Request){
  16. showAPIRequest(r)
  17. var userGroups []string
  18. Groups := []string{"Студенты", "Персонал", "Бухгалтерия", "Преподаватели", "Админы"}
  19. if r.Method == "POST" || r.Method == "GET"{
  20. config := &auth.Config{
  21. Server: "192.168.10.121",
  22. Port: 389,
  23. BaseDN: "DC=ttit,DC=local",
  24. Security: auth.SecurityNone,
  25. }
  26. var user User
  27. var result Result
  28. error := json.NewDecoder(r.Body).Decode(&user)
  29. if error != nil{
  30. json.NewEncoder(w).Encode(struct{ Error string }{Error: "an error has occured during decoding"})
  31. showError(r, error)
  32. return
  33. }
  34. status, entry, groups, err := auth.AuthenticateExtended(config, user.Login, user.Password, []string{"cn"}, Groups)
  35. if err != nil {
  36. json.NewEncoder(w).Encode(struct{ Error string }{Error: "an error has occured"})
  37. showError(r, err)
  38. return
  39. } else if !status {
  40. json.NewEncoder(w).Encode(struct{ Error string }{Error: "no user found"})
  41. return
  42. }
  43. for _, group := range groups{
  44. for _, constGroup := range Groups{
  45. if group == constGroup{
  46. userGroups = append(userGroups, group)
  47. }
  48. }
  49. }
  50. username := entry.GetAttributeValues("cn")
  51. result.Displayname = username
  52. result.Groups = userGroups
  53. json.NewEncoder(w).Encode(result)
  54. }
  55. }