upd(rbac): full sessions impl and tests

This commit is contained in:
Tit Petric
2018-07-23 14:00:35 +02:00
parent 4d018e16cd
commit f77fb432a6
2 changed files with 105 additions and 7 deletions
+44 -2
View File
@@ -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
View File
@@ -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 {