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

78 lines
1.7KB

  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. trial := loan.Session{}
  29. u, e := trial.Login(l.user, l.pass)
  30. if e == sql.ErrNoRows { //not found
  31. log.Warnf("Failed login - user not found %+v, error=%s", l, e.Error())
  32. res.add("login", false)
  33. res.add("reason", "User not found")
  34. res.sendJson(w)
  35. return
  36. } else if e != nil {
  37. log.Warn("Failed login - cannot init session " + e.Error())
  38. res.add("login", false)
  39. res.add("reason", "either user name or password is not right")
  40. res.sendJson(w)
  41. return
  42. }
  43. //log in user
  44. if u.Id == ss.User {
  45. ss.RenewIfExpireSoon()
  46. } else {
  47. ss.InitForUser(ss.User, time.Now().Add(loan.DefaultSessionDuration))
  48. }
  49. res.add("auth", ss.Token)
  50. res.add("session_id", ss.Id)
  51. res.add("session_expire", ss.ExpireStr())
  52. res.add("session_expire_human", ss.Expire.Format(time.RFC1123Z))
  53. res.add("session_user", ss.User)
  54. res.add("buser", ss.User)
  55. res.add("bpass", ss.CheckSum())
  56. //send out
  57. res.sendJson(w)
  58. }
  59. func (m *login) initRequest(r *http.Request) (e error) {
  60. e = r.ParseForm()
  61. if e != nil {
  62. log.Error(e)
  63. return
  64. }
  65. m.user = r.PostForm.Get("u")
  66. m.pass = r.PostForm.Get("p")
  67. m.buser, m.bpass, _ = r.BasicAuth()
  68. return
  69. }