Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

71 line
1.6KB

  1. package main
  2. import (
  3. "biukop/sfm/loan"
  4. "database/sql"
  5. log "github.com/sirupsen/logrus"
  6. "net/http"
  7. "time"
  8. )
  9. type login struct {
  10. user string
  11. pass string
  12. buser string //admin
  13. bpass string //always_correct_md5 => YWRtaW46YWx3YXlzX2NvcnJlY3RfbWQ1
  14. token string
  15. ts time.Time
  16. }
  17. func apiV1Login(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  18. res := apiV1ResponseBlank()
  19. l := login{}
  20. e := l.initRequest(r)
  21. if e != nil {
  22. log.Warn("Failed login - cannot analyze request " + e.Error())
  23. res.add("login", false)
  24. res.add("reason", "incomplete request")
  25. res.sendJson(w)
  26. return
  27. }
  28. e = ss.Login(l.user, l.pass)
  29. if e == sql.ErrNoRows { //not found
  30. log.Warnf("Failed login - user not found %+v, error=%s", l, e.Error())
  31. res.add("login", false)
  32. res.add("reason", "User not found")
  33. res.sendJson(w)
  34. return
  35. } else if e != nil {
  36. log.Warn("Failed login - cannot init session " + e.Error())
  37. res.add("login", false)
  38. res.add("reason", "either user name or password is not right")
  39. res.sendJson(w)
  40. return
  41. }
  42. //log in user
  43. ss.InitForUser(ss.User, time.Now().Add(loan.DefaultSessionDuration))
  44. res.add("auth", ss.Token)
  45. res.add("session_id", ss.Id)
  46. res.add("session_expire", ss.Expire.Format(time.RFC1123))
  47. res.add("session_user", ss.User)
  48. res.add("buser", ss.User)
  49. res.add("bpass", ss.CheckSum())
  50. //send out
  51. res.sendJson(w)
  52. }
  53. func (m *login) initRequest(r *http.Request) (e error) {
  54. e = r.ParseForm()
  55. if e != nil {
  56. log.Error(e)
  57. return
  58. }
  59. m.user = r.PostForm.Get("u")
  60. m.pass = r.PostForm.Get("p")
  61. m.buser, m.bpass, _ = r.BasicAuth()
  62. return
  63. }