Skip to content

Commit 6dd69df

Browse files
authored
feat(mongodb): implement roles permissions api (scaleway#2438)
1 parent 0ca695b commit 6dd69df

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

api/mongodb/v1alpha1/mongodb_sdk.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,47 @@ func (enum *SnapshotStatus) UnmarshalJSON(data []byte) error {
346346
return nil
347347
}
348348

349+
type UserRoleRole string
350+
351+
const (
352+
UserRoleRoleUnknownRole = UserRoleRole("unknown_role")
353+
UserRoleRoleRead = UserRoleRole("read")
354+
UserRoleRoleReadWrite = UserRoleRole("read_write")
355+
UserRoleRoleDbAdmin = UserRoleRole("db_admin")
356+
)
357+
358+
func (enum UserRoleRole) String() string {
359+
if enum == "" {
360+
// return default value if empty
361+
return "unknown_role"
362+
}
363+
return string(enum)
364+
}
365+
366+
func (enum UserRoleRole) Values() []UserRoleRole {
367+
return []UserRoleRole{
368+
"unknown_role",
369+
"read",
370+
"read_write",
371+
"db_admin",
372+
}
373+
}
374+
375+
func (enum UserRoleRole) MarshalJSON() ([]byte, error) {
376+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
377+
}
378+
379+
func (enum *UserRoleRole) UnmarshalJSON(data []byte) error {
380+
tmp := ""
381+
382+
if err := json.Unmarshal(data, &tmp); err != nil {
383+
return err
384+
}
385+
386+
*enum = UserRoleRole(UserRoleRole(tmp).String())
387+
return nil
388+
}
389+
349390
type VolumeType string
350391

351392
const (
@@ -472,6 +513,18 @@ type SnapshotVolumeType struct {
472513
Type VolumeType `json:"type"`
473514
}
474515

516+
// UserRole: user role.
517+
type UserRole struct {
518+
// Role: default value: unknown_role
519+
Role UserRoleRole `json:"role"`
520+
521+
// Precisely one of Database, AnyDatabase must be set.
522+
Database *string `json:"database,omitempty"`
523+
524+
// Precisely one of Database, AnyDatabase must be set.
525+
AnyDatabase *bool `json:"any_database,omitempty"`
526+
}
527+
475528
// Setting: setting.
476529
type Setting struct {
477530
// Name: setting name from the database engine.
@@ -646,6 +699,9 @@ type Snapshot struct {
646699
type User struct {
647700
// Name: name of the user (Length must be between 1 and 63 characters. First character must be an alphabet character (a-zA-Z). Only a-zA-Z0-9_$- characters are accepted).
648701
Name string `json:"name"`
702+
703+
// Roles: list of roles assigned to the user, along with the corresponding database where each role is granted.
704+
Roles []*UserRole `json:"roles"`
649705
}
650706

651707
// Version: version.
@@ -1069,6 +1125,21 @@ type RestoreSnapshotRequest struct {
10691125
Volume *RestoreSnapshotRequestVolumeDetails `json:"volume"`
10701126
}
10711127

1128+
// SetUserRoleRequest: set user role request.
1129+
type SetUserRoleRequest struct {
1130+
// Region: region to target. If none is passed will use default region from the config.
1131+
Region scw.Region `json:"-"`
1132+
1133+
// InstanceID: UUID of the Database Instance the user belongs to.
1134+
InstanceID string `json:"-"`
1135+
1136+
// UserName: name of the database user.
1137+
UserName string `json:"user_name"`
1138+
1139+
// Roles: list of roles assigned to the user, along with the corresponding database where each role is granted.
1140+
Roles []*UserRole `json:"roles"`
1141+
}
1142+
10721143
// UpdateInstanceRequest: update instance request.
10731144
type UpdateInstanceRequest struct {
10741145
// Region: region to target. If none is passed will use default region from the config.
@@ -1835,6 +1906,42 @@ func (s *API) DeleteUser(req *DeleteUserRequest, opts ...scw.RequestOption) erro
18351906
return nil
18361907
}
18371908

1909+
// SetUserRole:
1910+
func (s *API) SetUserRole(req *SetUserRoleRequest, opts ...scw.RequestOption) (*User, error) {
1911+
var err error
1912+
1913+
if req.Region == "" {
1914+
defaultRegion, _ := s.client.GetDefaultRegion()
1915+
req.Region = defaultRegion
1916+
}
1917+
1918+
if fmt.Sprint(req.Region) == "" {
1919+
return nil, errors.New("field Region cannot be empty in request")
1920+
}
1921+
1922+
if fmt.Sprint(req.InstanceID) == "" {
1923+
return nil, errors.New("field InstanceID cannot be empty in request")
1924+
}
1925+
1926+
scwReq := &scw.ScalewayRequest{
1927+
Method: "PUT",
1928+
Path: "/mongodb/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/instances/" + fmt.Sprint(req.InstanceID) + "/roles",
1929+
}
1930+
1931+
err = scwReq.SetBody(req)
1932+
if err != nil {
1933+
return nil, err
1934+
}
1935+
1936+
var resp User
1937+
1938+
err = s.client.Do(scwReq, &resp, opts...)
1939+
if err != nil {
1940+
return nil, err
1941+
}
1942+
return &resp, nil
1943+
}
1944+
18381945
// DeleteEndpoint: Delete the endpoint of a Database Instance. You must specify the `endpoint_id` parameter of the endpoint you want to delete. Note that you might need to update any environment configurations that point to the deleted endpoint.
18391946
func (s *API) DeleteEndpoint(req *DeleteEndpointRequest, opts ...scw.RequestOption) error {
18401947
var err error

0 commit comments

Comments
 (0)