Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

154 lines
3.2KB

  1. package main
  2. import (
  3. "biukop.com/sfm/loan"
  4. "encoding/json"
  5. "github.com/brianvoe/gofakeit/v6"
  6. log "github.com/sirupsen/logrus"
  7. "io/ioutil"
  8. "net/http"
  9. )
  10. type UserExtra struct {
  11. Login string
  12. BSB string
  13. ACC string
  14. License string
  15. Organization string
  16. Role string
  17. }
  18. func decodeJsonUserExtra(r *http.Request) (ret UserExtra, e error) {
  19. decoder := json.NewDecoder(r.Body)
  20. //decoder.DisallowUnknownFields()
  21. e = decoder.Decode(&ret)
  22. if e != nil {
  23. log.Error("failed decoding PayIn for updating", e.Error())
  24. return
  25. }
  26. return
  27. }
  28. // create a new user from people
  29. func apiV1UserPut(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  30. id := r.URL.Path[len(apiV1Prefix+"user/"):] //remove prefix
  31. p := loan.People{}
  32. e := p.Read(id)
  33. if e != nil { // no such people
  34. log.Error("cannot create User without people, id=", id, e.Error())
  35. apiV1Client403Error(w, r, ss)
  36. return
  37. }
  38. u := loan.User{}
  39. u.Id = id
  40. u.Login = id + "@local"
  41. u.Enabled = false
  42. u.Token = gofakeit.LetterN(45)
  43. u.SetPass("")
  44. e = u.Write()
  45. if e != nil {
  46. log.Error("Failed to upgrade user ", id)
  47. apiV1Server500Error(w, r)
  48. return
  49. }
  50. ue := UserExtra{}
  51. ue.Login = u.Login
  52. ue.Role = "user"
  53. ue.License = ""
  54. ue.Organization = ""
  55. ue.BSB = ""
  56. ue.ACC = ""
  57. apiV1SendJson(ue, w, r, ss)
  58. }
  59. func apiV1UserDelete(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  60. id := r.URL.Path[len(apiV1Prefix+"user/"):] //remove prefix
  61. if id == "" {
  62. apiV1Client403Error(w, r, ss)
  63. return
  64. }
  65. e := loan.DeleteUser(id)
  66. if e != nil {
  67. log.Error("Failed to delete user ", id)
  68. apiV1Server500Error(w, r)
  69. return
  70. }
  71. ue := UserExtra{}
  72. ue.Login = ""
  73. ue.Role = "people"
  74. ue.License = ""
  75. ue.Organization = ""
  76. ue.BSB = ""
  77. ue.ACC = ""
  78. apiV1SendJson(ue, w, r, ss)
  79. }
  80. func apiV1UserPost(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  81. id := r.URL.Path[len(apiV1Prefix+"user/"):] //remove prefix
  82. input, e := decodeJsonUserExtra(r)
  83. log.Println(input)
  84. if e != nil {
  85. apiV1Client404Error(w, r, ss)
  86. return
  87. } else {
  88. u := loan.User{}
  89. e = u.Read(id)
  90. if e != nil {
  91. log.Error("cannot save basic user", e.Error())
  92. apiV1SendJson(" [ Error Occurred ] : "+e.Error(), w, r, ss)
  93. return
  94. }
  95. u.Login = input.Login
  96. e = u.Write()
  97. if e != nil {
  98. log.Error("cannot save basic loan", e.Error())
  99. apiV1SendJson(" [ Error Occurred ] : "+e.Error(), w, r, ss)
  100. } else {
  101. apiV1SendJson(input, w, r, ss)
  102. }
  103. }
  104. }
  105. func apiV1UserEnable(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  106. id := r.URL.Path[len(apiV1Prefix+"user-enable/"):] //remove prefix
  107. p := loan.People{}
  108. body, e := ioutil.ReadAll(r.Body)
  109. if e != nil {
  110. log.Error("invalid request body for enable/disable people ", id, " err= ", e.Error())
  111. apiV1Client403Error(w, r, ss)
  112. return
  113. }
  114. e = p.Read(id)
  115. if e != nil {
  116. log.Error("failed to read user by id ", id, e.Error())
  117. apiV1Client403Error(w, r, ss)
  118. return
  119. }
  120. p.Enabled = string(body) == "true"
  121. if id == "0" {
  122. p.Enabled = true
  123. } // can not disable default admin
  124. e = p.Write()
  125. if e != nil {
  126. log.Error("failed to enable user ", id, e.Error())
  127. apiV1Client403Error(w, r, ss)
  128. return
  129. }
  130. apiV1SendJson(p.Enabled, w, r, ss)
  131. }