1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package sdApi12
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "net/http"
- "strconv"
- models "devel.mephi.ru/dyokunev/go-sd-models/api12"
- )
- var (
- apiKey string
- )
- func SetApiKey(newApiKey string) {
- apiKey = newApiKey
- }
- // GetRoles return filtered list of roles
- // Arguments for filtering can be set in filterRole
- // You can use these fields: PersonId, ServiceName and RoleName
- // You have to set at least one these ones: ServiceName or RoleName
- func GetRoles(filterRole models.Role) (models.Roles, error) {
- client := &http.Client{}
- req, _ := http.NewRequest("GET", "https://sd.mephi.ru/api/12/get_permissions.json", nil)
- q := req.URL.Query()
- q.Add("api_key", apiKey)
- if filterRole.PersonId != 0 {
- q.Add("subject_person_id", strconv.Itoa(filterRole.PersonId))
- }
- if filterRole.ServiceName != "" {
- q.Add("service_name", filterRole.ServiceName)
- }
- if filterRole.RoleName != "" {
- q.Add("permission_name", filterRole.RoleName)
- }
- req.URL.RawQuery = q.Encode()
- response, err := client.Do(req)
- if err != nil {
- return nil, err
- }
- defer response.Body.Close()
- var bytesArray []byte
- buf := bytes.NewBuffer(bytesArray)
- _, err = buf.ReadFrom(response.Body)
- if err != nil {
- return nil, err
- }
- var roles models.Roles
- if err := json.Unmarshal(buf.Bytes(), &roles); err != nil {
- return nil, fmt.Errorf("Cannot parse: %v: \"%v\"", string(buf.Bytes()), err.Error())
- }
- return roles, nil
- }
|