sdApi12.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package sdApi12
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "strconv"
  8. models "devel.mephi.ru/dyokunev/go-sd-models/api12"
  9. )
  10. var (
  11. apiKey string
  12. )
  13. func SetApiKey(newApiKey string) {
  14. apiKey = newApiKey
  15. }
  16. // GetRoles return filtered list of roles
  17. // Arguments for filtering can be set in filterRole
  18. // You can use these fields: PersonId, ServiceName and RoleName
  19. // You have to set at least one these ones: ServiceName or RoleName
  20. func GetRoles(filterRole models.Role) (models.Roles, error) {
  21. client := &http.Client{}
  22. req, _ := http.NewRequest("GET", "https://sd.mephi.ru/api/12/get_permissions.json", nil)
  23. q := req.URL.Query()
  24. q.Add("api_key", apiKey)
  25. if filterRole.PersonId != 0 {
  26. q.Add("subject_person_id", strconv.Itoa(filterRole.PersonId))
  27. }
  28. if filterRole.ServiceName != "" {
  29. q.Add("service_name", filterRole.ServiceName)
  30. }
  31. if filterRole.RoleName != "" {
  32. q.Add("permission_name", filterRole.RoleName)
  33. }
  34. req.URL.RawQuery = q.Encode()
  35. response, err := client.Do(req)
  36. if err != nil {
  37. return nil, err
  38. }
  39. defer response.Body.Close()
  40. var bytesArray []byte
  41. buf := bytes.NewBuffer(bytesArray)
  42. _, err = buf.ReadFrom(response.Body)
  43. if err != nil {
  44. return nil, err
  45. }
  46. var roles models.Roles
  47. if err := json.Unmarshal(buf.Bytes(), &roles); err != nil {
  48. return nil, fmt.Errorf("Cannot parse: %v: \"%v\"", string(buf.Bytes()), err.Error())
  49. }
  50. return roles, nil
  51. }