upd(rbac): full sessions impl and tests
This commit is contained in:
+44
-2
@@ -13,9 +13,12 @@ type (
|
||||
}
|
||||
|
||||
SessionsInterface interface {
|
||||
Create(sessionID string, username string, roles []string) error
|
||||
Create(sessionID string, username string, roles ...string) error
|
||||
Get(sessionID string) (*types.Session, error)
|
||||
Delete(sessionID string) error
|
||||
|
||||
ActivateRole(sessionID string, roles ...string) error
|
||||
DeactivateRole(sessionID string, roles ...string) error
|
||||
}
|
||||
)
|
||||
|
||||
@@ -23,9 +26,11 @@ const (
|
||||
sessionsCreate = "/sessions/%s"
|
||||
sessionsGet = "/sessions/%s"
|
||||
sessionsDelete = "/sessions/%s"
|
||||
sessionsActivateRole = "/sessions/%s/activateRole"
|
||||
sessionsDeactivateRole = "/sessions/%s/deactivateRole"
|
||||
)
|
||||
|
||||
func (u *Sessions) Create(sessionID string, username string, roles []string) error {
|
||||
func (u *Sessions) Create(sessionID string, username string, roles ...string) error {
|
||||
body := struct {
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles,omitempty"`
|
||||
@@ -73,4 +78,41 @@ func (u *Sessions) Delete(sessionID string) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Sessions) ActivateRole(sessionID string, roles ...string) error {
|
||||
body := struct {
|
||||
Roles []string `json:"roles"`
|
||||
}{roles}
|
||||
|
||||
resp, err := u.Client.Patch(fmt.Sprintf(sessionsActivateRole, sessionID), body)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "request failed")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
return nil
|
||||
default:
|
||||
return toError(resp)
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Sessions) DeactivateRole(sessionID string, roles ...string) error {
|
||||
body := struct {
|
||||
Roles []string `json:"roles"`
|
||||
}{roles}
|
||||
|
||||
resp, err := u.Client.Patch(fmt.Sprintf(sessionsDeactivateRole, sessionID), body)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "request failed")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
return nil
|
||||
default:
|
||||
return toError(resp)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var _ SessionsInterface = &Sessions{}
|
||||
|
||||
+61
-5
@@ -9,25 +9,81 @@ func TestSessions(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error when creating RBAC instance: %+v", err)
|
||||
}
|
||||
rbac.Debug(false)
|
||||
rbac.Debug("info")
|
||||
|
||||
sessions := rbac.Sessions()
|
||||
users := rbac.Users()
|
||||
roles := rbac.Roles()
|
||||
|
||||
// clean up data
|
||||
users.Delete("test-user")
|
||||
sessions.Delete("test-session")
|
||||
roles.Delete("test-role")
|
||||
|
||||
if err := roles.Create("test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when creating test-role, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := users.Create("test-user", "test-password"); err != nil {
|
||||
t.Errorf("Unexpected error when creating test-user, %+v", err)
|
||||
return
|
||||
}
|
||||
if err := sessions.Create("test-session", "test-user", []string{}); err != nil {
|
||||
t.Errorf("Unexpected error when creating test-session, %+v", err)
|
||||
|
||||
if err := users.Assign("test-user", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when assigning test-role to test-user, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := sessions.Get("test-session"); err != nil {
|
||||
t.Errorf("Unexpected error when getting test-session, %+v", err)
|
||||
if err := sessions.Create("test-session", "test-user", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when creating test-session, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// check role is created
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
// @todo: DAASI should return session ID from a get-query as well
|
||||
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
|
||||
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
|
||||
if !assert(t, len(session.Roles) == 1, "Expected one session role, got %+v", session.Roles) {
|
||||
return
|
||||
}
|
||||
assert(t, session.Roles[0] == "test-role", "Unexpected session role, test-role != '%s'", session.Roles[0])
|
||||
}
|
||||
|
||||
if err := sessions.DeactivateRole("test-session", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when deactivating session role, %+v", err)
|
||||
}
|
||||
|
||||
// check role is deactivated
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
// @todo: DAASI should return session ID from a get-query as well
|
||||
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
|
||||
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
|
||||
if !assert(t, len(session.Roles) == 0, "Expected one session role, got %+v", session.Roles) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := sessions.ActivateRole("test-session", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when deactivating session role, %+v", err)
|
||||
}
|
||||
|
||||
// check role is activated
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
// @todo: DAASI should return session ID from a get-query as well
|
||||
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
|
||||
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
|
||||
if !assert(t, len(session.Roles) == 1, "Expected one session role, got %+v", session.Roles) {
|
||||
return
|
||||
}
|
||||
assert(t, session.Roles[0] == "test-role", "Unexpected session role, test-role != '%s'", session.Roles[0])
|
||||
}
|
||||
|
||||
if err := sessions.Delete("test-session"); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user