authorization.go 1.4 KB

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