github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/users.go (about)

     1  package oneandone
     2  
     3  import "net/http"
     4  
     5  type User struct {
     6  	Identity
     7  	descField
     8  	CreationDate string    `json:"creation_date,omitempty"`
     9  	Email        string    `json:"email,omitempty"`
    10  	State        string    `json:"state,omitempty"`
    11  	Role         *Identity `json:"role,omitempty"`
    12  	Api          *UserApi  `json:"api,omitempty"`
    13  	ApiPtr
    14  }
    15  
    16  type UserApi struct {
    17  	Active     bool     `json:"active"`
    18  	AllowedIps []string `json:"allowed_ips,omitempty"`
    19  	UserApiKey
    20  	ApiPtr
    21  }
    22  
    23  type UserApiKey struct {
    24  	Key string `json:"key,omitempty"`
    25  }
    26  
    27  type UserRequest struct {
    28  	Name        string `json:"name,omitempty"`
    29  	Description string `json:"description,omitempty"`
    30  	Password    string `json:"password,omitempty"`
    31  	Email       string `json:"email,omitempty"`
    32  	State       string `json:"state,omitempty"`
    33  }
    34  
    35  // GET /users
    36  func (api *API) ListUsers(args ...interface{}) ([]User, error) {
    37  	url, err := processQueryParams(createUrl(api, userPathSegment), args...)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  	result := []User{}
    42  	err = api.Client.Get(url, &result, http.StatusOK)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  	for index, _ := range result {
    47  		result[index].api = api
    48  	}
    49  	return result, nil
    50  }
    51  
    52  // POST /users
    53  func (api *API) CreateUser(user *UserRequest) (string, *User, error) {
    54  	result := new(User)
    55  	url := createUrl(api, userPathSegment)
    56  	err := api.Client.Post(url, &user, &result, http.StatusCreated)
    57  	if err != nil {
    58  		return "", nil, err
    59  	}
    60  	result.api = api
    61  	return result.Id, result, nil
    62  }
    63  
    64  // GET /users/{id}
    65  func (api *API) GetUser(user_id string) (*User, error) {
    66  	result := new(User)
    67  	url := createUrl(api, userPathSegment, user_id)
    68  	err := api.Client.Get(url, &result, http.StatusOK)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  	result.api = api
    73  	return result, nil
    74  }
    75  
    76  // DELETE /users/{id}
    77  func (api *API) DeleteUser(user_id string) (*User, error) {
    78  	result := new(User)
    79  	url := createUrl(api, userPathSegment, user_id)
    80  	err := api.Client.Delete(url, nil, &result, http.StatusOK)
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  	result.api = api
    85  	return result, nil
    86  }
    87  
    88  // PUT /users/{id}
    89  func (api *API) ModifyUser(user_id string, user *UserRequest) (*User, error) {
    90  	result := new(User)
    91  	url := createUrl(api, userPathSegment, user_id)
    92  	err := api.Client.Put(url, &user, &result, http.StatusOK)
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  	result.api = api
    97  	return result, nil
    98  }
    99  
   100  // GET /users/{id}/api
   101  func (api *API) GetUserApi(user_id string) (*UserApi, error) {
   102  	result := new(UserApi)
   103  	url := createUrl(api, userPathSegment, user_id, "api")
   104  	err := api.Client.Get(url, &result, http.StatusOK)
   105  	if err != nil {
   106  		return nil, err
   107  	}
   108  	result.api = api
   109  	return result, nil
   110  }
   111  
   112  // PUT /users/{id}/api
   113  func (api *API) ModifyUserApi(user_id string, active bool) (*User, error) {
   114  	result := new(User)
   115  	req := struct {
   116  		Active bool `json:"active"`
   117  	}{active}
   118  	url := createUrl(api, userPathSegment, user_id, "api")
   119  	err := api.Client.Put(url, &req, &result, http.StatusOK)
   120  	if err != nil {
   121  		return nil, err
   122  	}
   123  	result.api = api
   124  	return result, nil
   125  }
   126  
   127  // GET /users/{id}/api/key
   128  func (api *API) GetUserApiKey(user_id string) (*UserApiKey, error) {
   129  	result := new(UserApiKey)
   130  	url := createUrl(api, userPathSegment, user_id, "api/key")
   131  	err := api.Client.Get(url, &result, http.StatusOK)
   132  	if err != nil {
   133  		return nil, err
   134  	}
   135  	return result, nil
   136  }
   137  
   138  // PUT /users/{id}/api/key
   139  func (api *API) RenewUserApiKey(user_id string) (*User, error) {
   140  	result := new(User)
   141  	url := createUrl(api, userPathSegment, user_id, "api/key")
   142  	err := api.Client.Put(url, nil, &result, http.StatusOK)
   143  	if err != nil {
   144  		return nil, err
   145  	}
   146  	result.api = api
   147  	return result, nil
   148  }
   149  
   150  // GET /users/{id}/api/ips
   151  func (api *API) ListUserApiAllowedIps(user_id string) ([]string, error) {
   152  	result := []string{}
   153  	url := createUrl(api, userPathSegment, user_id, "api/ips")
   154  	err := api.Client.Get(url, &result, http.StatusOK)
   155  	if err != nil {
   156  		return nil, err
   157  	}
   158  	return result, nil
   159  }
   160  
   161  // POST /users/{id}/api/ips
   162  func (api *API) AddUserApiAlowedIps(user_id string, ips []string) (*User, error) {
   163  	result := new(User)
   164  	req := struct {
   165  		Ips []string `json:"ips"`
   166  	}{ips}
   167  	url := createUrl(api, userPathSegment, user_id, "api/ips")
   168  	err := api.Client.Post(url, &req, &result, http.StatusCreated)
   169  	if err != nil {
   170  		return nil, err
   171  	}
   172  	result.api = api
   173  	return result, nil
   174  }
   175  
   176  // DELETE /users/{id}/api/ips/{ip}
   177  func (api *API) RemoveUserApiAllowedIp(user_id string, ip string) (*User, error) {
   178  	result := new(User)
   179  	url := createUrl(api, userPathSegment, user_id, "api/ips", ip)
   180  	err := api.Client.Delete(url, nil, &result, http.StatusOK)
   181  	if err != nil {
   182  		return nil, err
   183  	}
   184  	result.api = api
   185  	return result, nil
   186  }
   187  
   188  // GET /users/{id}/api/ips
   189  func (api *API) GetCurrentUserPermissions() (*Permissions, error) {
   190  	result := new(Permissions)
   191  	url := createUrl(api, userPathSegment, "current_user_permissions")
   192  	err := api.Client.Get(url, &result, http.StatusOK)
   193  	if err != nil {
   194  		return nil, err
   195  	}
   196  	return result, nil
   197  }
   198  
   199  func (u *User) GetState() (string, error) {
   200  	in, err := u.api.GetUser(u.Id)
   201  	if in == nil {
   202  		return "", err
   203  	}
   204  	return in.State, err
   205  }