upd(rbac): more tests, go fmt
This commit is contained in:
+6
-3
@@ -148,11 +148,14 @@ func (c *Client) Request(method string, url string, body interface{}) (*http.Res
|
||||
}
|
||||
fmt.Println("-----------------")
|
||||
}
|
||||
if c.debugLevel == "info" {
|
||||
fmt.Println("RBAC <<< Response with", resp.StatusCode)
|
||||
}
|
||||
if err != nil {
|
||||
if c.debugLevel == "info" {
|
||||
fmt.Println("RBAC <<< Response error", err)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if c.debugLevel == "info" {
|
||||
fmt.Println("RBAC <<< Response", resp.StatusCode)
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
+20
-1
@@ -1,7 +1,9 @@
|
||||
package rbac
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/crusttech/crust/rbac/types"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@@ -12,12 +14,14 @@ type (
|
||||
|
||||
ResourcesInterface interface {
|
||||
Create(resourceID string, operations []string) error
|
||||
Get(resourceID string) (*types.Resource, error)
|
||||
Delete(resourceID string) error
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
resourcesCreate = "/resources/%s"
|
||||
resourcesGet = "/resources/%s"
|
||||
resourcesDelete = "/resources/%s"
|
||||
)
|
||||
|
||||
@@ -39,8 +43,23 @@ func (u *Resources) Create(resourceID string, operations []string) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Resources) Get(resourceID string) (*types.Resource, error) {
|
||||
resp, err := u.Client.Get(fmt.Sprintf(resourcesGet, resourceID))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "request failed")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
switch resp.StatusCode {
|
||||
case 200:
|
||||
resource := &types.Resource{}
|
||||
return resource, errors.Wrap(json.NewDecoder(resp.Body).Decode(resource), "decoding json failed")
|
||||
default:
|
||||
return nil, toError(resp)
|
||||
}
|
||||
}
|
||||
|
||||
func (u *Resources) Delete(resourceID string) error {
|
||||
resp, err := u.Client.Delete(fmt.Sprintf(resourcesCreate, resourceID))
|
||||
resp, err := u.Client.Delete(fmt.Sprintf(resourcesDelete, resourceID))
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "request failed")
|
||||
}
|
||||
|
||||
+12
-1
@@ -9,17 +9,28 @@ func TestResources(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error when creating RBAC instance: %+v", err)
|
||||
}
|
||||
rbac.Debug("info")
|
||||
rbac.Debug("debug")
|
||||
|
||||
resources := rbac.Resources()
|
||||
resources.Delete("test-resource")
|
||||
|
||||
if err := resources.Create("test-resource", []string{"view", "edit", "delete"}); err != nil {
|
||||
t.Errorf("Error when creating test-resource, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// test get resources
|
||||
if false {
|
||||
_, err := resources.Get("test-resource")
|
||||
if err != nil {
|
||||
t.Errorf("Error when retrieving test-resource, %+v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := resources.Delete("test-resource"); err != nil {
|
||||
t.Errorf("Unexpected error deleting a resource, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := resources.Delete("test-resource"); err == nil {
|
||||
|
||||
+3
-4
@@ -1,10 +1,10 @@
|
||||
package rbac
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"github.com/pkg/errors"
|
||||
"fmt"
|
||||
"github.com/crusttech/crust/rbac/types"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -21,7 +21,7 @@ type (
|
||||
|
||||
const (
|
||||
rolesCreate = "/roles/%s"
|
||||
rolesGet = "/roles/%s"
|
||||
rolesGet = "/roles/%s"
|
||||
rolesDelete = "/roles/%s"
|
||||
)
|
||||
|
||||
@@ -68,5 +68,4 @@ func (u *Roles) Delete(rolepath string) error {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var _ RolesInterface = &Roles{}
|
||||
|
||||
+5
-1
@@ -16,6 +16,7 @@ func TestRoles(t *testing.T) {
|
||||
|
||||
if err := roles.Create("test-role"); err != nil {
|
||||
t.Errorf("Error when creating test-role: %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := roles.Create("test-role/nested/role"); err == nil {
|
||||
@@ -30,12 +31,15 @@ func TestRoles(t *testing.T) {
|
||||
|
||||
{
|
||||
role, err := roles.Get("test-role")
|
||||
assert(t, err == nil, "Unexpected error when getting role, %+v", err)
|
||||
if !assert(t, err == nil, "Unexpected error when getting role, %+v", err) {
|
||||
return
|
||||
}
|
||||
assert(t, role.Name == "test-role", "Unexpected role name, test-role != '%s'", role.Name)
|
||||
}
|
||||
|
||||
if err := roles.Delete("test-role"); err != nil {
|
||||
t.Errorf("Error when deleting test-role: %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := roles.Delete("non-existant"); err == nil {
|
||||
|
||||
+4
-5
@@ -23,10 +23,10 @@ type (
|
||||
)
|
||||
|
||||
const (
|
||||
sessionsCreate = "/sessions/%s"
|
||||
sessionsGet = "/sessions/%s"
|
||||
sessionsDelete = "/sessions/%s"
|
||||
sessionsActivateRole = "/sessions/%s/activateRole"
|
||||
sessionsCreate = "/sessions/%s"
|
||||
sessionsGet = "/sessions/%s"
|
||||
sessionsDelete = "/sessions/%s"
|
||||
sessionsActivateRole = "/sessions/%s/activateRole"
|
||||
sessionsDeactivateRole = "/sessions/%s/deactivateRole"
|
||||
)
|
||||
|
||||
@@ -114,5 +114,4 @@ func (u *Sessions) DeactivateRole(sessionID string, roles ...string) error {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var _ SessionsInterface = &Sessions{}
|
||||
|
||||
+11
-3
@@ -43,7 +43,9 @@ func TestSessions(t *testing.T) {
|
||||
// check role is created
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
|
||||
return
|
||||
}
|
||||
// @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)
|
||||
@@ -55,12 +57,15 @@ func TestSessions(t *testing.T) {
|
||||
|
||||
if err := sessions.DeactivateRole("test-session", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when deactivating session role, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// check role is deactivated
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
|
||||
return
|
||||
}
|
||||
// @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)
|
||||
@@ -71,12 +76,15 @@ func TestSessions(t *testing.T) {
|
||||
|
||||
if err := sessions.ActivateRole("test-session", "test-role"); err != nil {
|
||||
t.Errorf("Unexpected error when deactivating session role, %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// check role is activated
|
||||
{
|
||||
session, err := sessions.Get("test-session")
|
||||
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
|
||||
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
|
||||
return
|
||||
}
|
||||
// @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)
|
||||
|
||||
+11
-7
@@ -2,22 +2,26 @@ package types
|
||||
|
||||
type (
|
||||
User struct {
|
||||
Username string `json:"username"`
|
||||
AssignedRoles []string `json:"assignedRoles"`
|
||||
Username string `json:"username"`
|
||||
AssignedRoles []string `json:"assignedRoles"`
|
||||
AuthorizedRoles []string `json:"authorizedRoles"`
|
||||
}
|
||||
|
||||
Session struct {
|
||||
ID string `json:"session"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
ID string `json:"session"`
|
||||
Username string `json:"username"`
|
||||
Roles []string `json:"roles"`
|
||||
}
|
||||
|
||||
// @todo: need to list nested roles,
|
||||
// @todo: don't return users=null - return users: []?
|
||||
Role struct {
|
||||
Name string `json:"rolename"`
|
||||
Users []string `json:"users"`
|
||||
Name string `json:"rolename"`
|
||||
Users []string `json:"users"`
|
||||
Permissions []string `json:"users"`
|
||||
}
|
||||
|
||||
// @todo: read resource information
|
||||
Resource struct {
|
||||
}
|
||||
)
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
package rbac
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/crusttech/crust/rbac/types"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@@ -24,10 +24,10 @@ type (
|
||||
|
||||
const (
|
||||
usersCreate = "/users/%s"
|
||||
usersGet = "/users/%s"
|
||||
usersGet = "/users/%s"
|
||||
usersDelete = "/users/%s"
|
||||
// @todo: plural for users, but singular for sessions
|
||||
usersAddRole = "/users/%s/assignRoles"
|
||||
usersAddRole = "/users/%s/assignRoles"
|
||||
usersRemoveRole = "/users/%s/deassignRoles"
|
||||
)
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ func TestUsers(t *testing.T) {
|
||||
|
||||
if err := users.Create("test-user", "test-password"); err != nil {
|
||||
t.Errorf("Error when creating test-user: %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// check if we inherited some roles (should be empty)
|
||||
@@ -71,10 +72,12 @@ func TestUsers(t *testing.T) {
|
||||
|
||||
if err := users.Delete("test-user"); err != nil {
|
||||
t.Errorf("Error when deleting test-user: %+v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := users.Get("test-user"); err == nil {
|
||||
t.Errorf("Expected error on retrieving a non-existant user")
|
||||
return
|
||||
}
|
||||
|
||||
if err := users.Delete("test-user"); err == nil {
|
||||
|
||||
Reference in New Issue
Block a user