diff --git a/controller/controller.go b/controller/controller.go index eebc8ae8c87515631c1aea22cafc4fd095bb7a26..931c38756707459c3d402250b8f41c991cb328b8 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -108,9 +108,7 @@ func startGrpc() error { jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration) setupGRPCServerWithCorrectSecurityLevel(jwtManager) - c.nbi = nbi.NewNBI(c.pndStore, c.userService, c.roleService) - c.nbi.Auth = nbi.NewAuthServer(jwtManager) - c.nbi.User = nbi.NewUserServer(jwtManager) + c.nbi = nbi.NewNBI(c.pndStore, c.userService, c.roleService, *jwtManager) pb.RegisterCoreServiceServer(c.grpcServer, c.nbi.Core) ppb.RegisterPndServiceServer(c.grpcServer, c.nbi.Pnd) diff --git a/controller/northbound/server/auth.go b/controller/northbound/server/auth.go index bf00968736113bf76cacb96fcf958454379a0c40..7eec9d316d0c850e3e6a2b7502b8670dcc48a0a0 100644 --- a/controller/northbound/server/auth.go +++ b/controller/northbound/server/auth.go @@ -6,6 +6,7 @@ import ( "time" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/store" @@ -19,7 +20,8 @@ import ( // Auth holds a JWTManager and represents a AuthServiceServer. type Auth struct { apb.UnimplementedAuthServiceServer - jwtManager *rbac.JWTManager + jwtManager *rbac.JWTManager + userService rbacInterfaces.UserService } // NewAuthServer receives a JWTManager and returns a new Auth interface. @@ -52,14 +54,14 @@ func (s Auth) Login(ctx context.Context, request *apb.LoginRequest) (*apb.LoginR return nil, err } - userToUpdate, err := userService.Get(store.Query{Name: user.UserName}) + userToUpdate, err := s.userService.Get(store.Query{Name: user.UserName}) if err != nil { return nil, err } userToUpdate.SetToken(token) - err = userService.Update(userToUpdate) + err = s.userService.Update(userToUpdate) if err != nil { return nil, err } @@ -90,7 +92,7 @@ func (s Auth) Logout(ctx context.Context, request *apb.LogoutRequest) (*apb.Logo // isValidUser checks if the provided user name fits to a stored one and then checks if the provided password is correct. func (s Auth) isValidUser(user rbac.User) error { - storedUser, err := userService.Get(store.Query{Name: user.Name()}) + storedUser, err := s.userService.Get(store.Query{Name: user.Name()}) if err != nil { return err } @@ -136,7 +138,7 @@ func (s Auth) handleLogout(ctx context.Context, userName string) error { return status.Errorf(codes.Aborted, "missing match of user associated to token and provided user name") } - storedUser, err := userService.Get(store.Query{Name: userName}) + storedUser, err := s.userService.Get(store.Query{Name: userName}) if err != nil { return err } @@ -145,7 +147,7 @@ func (s Auth) handleLogout(ctx context.Context, userName string) error { return status.Errorf(codes.Aborted, "missing match of token provied for user") } - err = userService.Update(&rbac.User{UserID: storedUser.ID(), + err = s.userService.Update(&rbac.User{UserID: storedUser.ID(), UserName: storedUser.Name(), Roles: storedUser.GetRoles(), Password: storedUser.GetPassword(), diff --git a/controller/northbound/server/auth_interceptor.go b/controller/northbound/server/auth_interceptor.go index 9c5f7a746cfd0d0627a75188ed04eec409885947..d4f73ec7ef7e0c5cbe9cf1ba3073d3c1aa7f647f 100644 --- a/controller/northbound/server/auth_interceptor.go +++ b/controller/northbound/server/auth_interceptor.go @@ -1,6 +1,7 @@ package server import ( + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "context" "time" @@ -16,7 +17,9 @@ import ( // AuthInterceptor provides an AuthInterceptor type AuthInterceptor struct { - jwtManager *rbac.JWTManager + jwtManager *rbac.JWTManager + userService rbacInterfaces.UserService + roleService rbacInterfaces.RoleService } // NewAuthInterceptor receives a JWTManager and a rbacMand returns a new AuthInterceptor provding gRPC Interceptor functionality. @@ -82,7 +85,7 @@ func (auth *AuthInterceptor) authorize(ctx context.Context, method string) error return status.Errorf(codes.PermissionDenied, "token expired at %v, please login", time.Unix(claims.ExpiresAt, 0)) } - user, err := userService.Get(store.Query{Name: claims.Username}) + user, err := auth.userService.Get(store.Query{Name: claims.Username}) if err != nil { return err } @@ -114,7 +117,7 @@ func (auth *AuthInterceptor) verifyPermisisonForRequestedCall(userRoles map[stri } func (auth *AuthInterceptor) verifyUserRoleAndRequestedCall(userRole, requestedMethod string) error { - storedRoles, err := roleService.GetAll() + storedRoles, err := auth.roleService.GetAll() if err != nil { return err } diff --git a/controller/northbound/server/core.go b/controller/northbound/server/core.go index 13a7304c5975738d97f543a7f02f6452c25da171..4ef33b9b1f7dde90158981335857b89366798016 100644 --- a/controller/northbound/server/core.go +++ b/controller/northbound/server/core.go @@ -6,6 +6,7 @@ import ( pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/nucleus" "code.fbi.h-da.de/danet/gosdn/controller/store" @@ -15,6 +16,7 @@ import ( type core struct { pb.UnimplementedCoreServiceServer + pndStore networkdomain.PndStore } func (s core) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb.GetPndResponse, error) { @@ -27,7 +29,7 @@ func (s core) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb.GetPnd return nil, handleRPCError(labels, err) } - storedPnd, err := pndc.Get(store.Query{ID: pndID}) + storedPnd, err := s.pndStore.Get(store.Query{ID: pndID}) if err != nil { return nil, err } @@ -49,7 +51,7 @@ func (s core) GetPndList(ctx context.Context, request *pb.GetPndListRequest) (*p start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pndList, err := pndc.GetAll() + pndList, err := s.pndStore.GetAll() if err != nil { return nil, err } @@ -77,7 +79,7 @@ func (s core) CreatePndList(ctx context.Context, request *pb.CreatePndListReques if err != nil { return nil, handleRPCError(labels, err) } - if err := pndc.Add(pnd); err != nil { + if err := s.pndStore.Add(pnd); err != nil { return nil, handleRPCError(labels, err) } } @@ -97,11 +99,11 @@ func (s core) DeletePnd(ctx context.Context, request *pb.DeletePndRequest) (*pb. return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pndID}) + pnd, err := s.pndStore.Get(store.Query{ID: pndID}) if err != nil { return nil, handleRPCError(labels, err) } - err = pndc.Delete(pnd) + err = s.pndStore.Delete(pnd) if err != nil { return &pb.DeletePndResponse{ Timestamp: time.Now().UnixNano(), diff --git a/controller/northbound/server/csbi.go b/controller/northbound/server/csbi.go index acfb4d67078ef410c7b6267ec2add229dcc16ee1..07811a87520cfefb320bd3f0074b672c460a10fe 100644 --- a/controller/northbound/server/csbi.go +++ b/controller/northbound/server/csbi.go @@ -11,6 +11,7 @@ import ( cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/device" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/store" "google.golang.org/grpc/codes" @@ -20,13 +21,14 @@ import ( type csbi struct { cpb.UnimplementedCsbiServiceServer + pndStore networkdomain.PndStore } func (s csbi) Hello(ctx context.Context, syn *cpb.Syn) (*cpb.Ack, error) { labels := prometheus.Labels{"service": "csbi", "rpc": "hello"} start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - ch, err := pndc.PendingChannels(store.FromString(syn.Id)) + ch, err := s.pndStore.PendingChannels(store.FromString(syn.Id)) if err != nil { return nil, handleRPCError(labels, err) } diff --git a/controller/northbound/server/nbi.go b/controller/northbound/server/nbi.go index 040407e326693301a4e8050cf004185f70b60748..5e4321d98e568f573d23f77712ae770beb1eeca5 100644 --- a/controller/northbound/server/nbi.go +++ b/controller/northbound/server/nbi.go @@ -2,7 +2,9 @@ package server import ( "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" + "code.fbi.h-da.de/danet/gosdn/controller/rbac" + "code.fbi.h-da.de/danet/gosdn/controller/metrics" "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" @@ -10,10 +12,6 @@ import ( "google.golang.org/grpc/status" ) -var pndc networkdomain.PndStore -var userService rbac.UserService -var roleService rbac.RoleService - // NorthboundInterface is the representation of the // gRPC services used provided. type NorthboundInterface struct { @@ -27,18 +25,30 @@ type NorthboundInterface struct { } // NewNBI receives a PndStore and returns a new gRPC *NorthboundInterface -func NewNBI(pnds networkdomain.PndStore, users rbac.UserService, roles rbac.RoleService) *NorthboundInterface { - pndc = pnds - userService = users - roleService = roles +func NewNBI(pnds networkdomain.PndStore, users rbacInterfaces.UserService, roles rbacInterfaces.RoleService, jwt rbac.JWTManager) *NorthboundInterface { return &NorthboundInterface{ - Pnd: &pndServer{}, - Core: &core{}, - Csbi: &csbi{}, - Sbi: &sbiServer{}, - Auth: &Auth{}, - User: &User{}, - Role: &Role{}, + Pnd: &pndServer{ + pndStore: pnds, + }, + Core: &core{ + pndStore: pnds, + }, + Csbi: &csbi{ + pndStore: pnds, + }, + Sbi: &sbiServer{ + pndStore: pnds, + }, + Auth: &Auth{ + jwtManager: &jwt, + userService: users, + }, + User: &User{ + jwtManager: &jwt, + }, + Role: &Role{ + jwtManager: &jwt, + }, } } diff --git a/controller/northbound/server/pnd.go b/controller/northbound/server/pnd.go index 9f3f40636c89316bf2f67b5e0543cb4f413cb130..35364eb5d8e996d2be4bc9b03eb7f2850af2cdc7 100644 --- a/controller/northbound/server/pnd.go +++ b/controller/northbound/server/pnd.go @@ -25,6 +25,7 @@ import ( type pndServer struct { ppb.UnimplementedPndServiceServer + pndStore networkdomain.PndStore } func (p pndServer) GetOnd(ctx context.Context, request *ppb.GetOndRequest) (*ppb.GetOndResponse, error) { @@ -36,7 +37,7 @@ func (p pndServer) GetOnd(ctx context.Context, request *ppb.GetOndRequest) (*ppb return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -68,7 +69,7 @@ func (p pndServer) GetOndList(ctx context.Context, request *ppb.GetOndListReques return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -172,7 +173,7 @@ func (p pndServer) GetSbi(ctx context.Context, request *ppb.GetSbiRequest) (*ppb return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -211,7 +212,7 @@ func (p pndServer) GetSbiList(ctx context.Context, request *ppb.GetSbiListReques return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -275,7 +276,7 @@ func (p pndServer) GetPath(ctx context.Context, request *ppb.GetPathRequest) (*p return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -321,7 +322,7 @@ func (p pndServer) GetChange(ctx context.Context, request *ppb.GetChangeRequest) return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -351,7 +352,7 @@ func (p pndServer) GetChangeList(ctx context.Context, request *ppb.GetChangeList return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -427,7 +428,7 @@ func (p pndServer) SetOndList(ctx context.Context, request *ppb.SetOndListReques return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { return nil, handleRPCError(labels, err) } @@ -468,7 +469,7 @@ func (p pndServer) SetChangeList(ctx context.Context, request *ppb.SetChangeList return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { return nil, handleRPCError(labels, err) } @@ -519,7 +520,7 @@ func (p pndServer) SetPathList(ctx context.Context, request *ppb.SetPathListRequ return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { return nil, handleRPCError(labels, err) } @@ -559,7 +560,7 @@ func (p pndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListReques return nil, handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { return nil, handleRPCError(labels, err) } @@ -611,7 +612,7 @@ func (p pndServer) DeleteOnd(ctx context.Context, request *ppb.DeleteOndRequest) log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := p.pndStore.Get(store.Query{ID: pid}) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) diff --git a/controller/northbound/server/role.go b/controller/northbound/server/role.go index 4f4990d0fc47425d02da1a8257243cff49ce3b8d..bc2059d2f187bd9a306c60ba214ba3e952e378bd 100644 --- a/controller/northbound/server/role.go +++ b/controller/northbound/server/role.go @@ -5,6 +5,7 @@ import ( "time" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/store" @@ -18,7 +19,8 @@ import ( // Role holds a JWTManager and represents a RoleServiceServer. type Role struct { apb.UnimplementedRoleServiceServer - jwtManager *rbac.JWTManager + jwtManager *rbac.JWTManager + roleService rbacInterfaces.RoleService } // NewRoleServer receives a JWTManager and returns a new Role. @@ -34,10 +36,10 @@ func (r Role) CreateRoles(ctx context.Context, request *apb.CreateRolesRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, r := range request.Roles { - role := rbac.NewRole(uuid.New(), r.Name, r.Description, r.Permissions) + for _, rrole := range request.Roles { + role := rbac.NewRole(uuid.New(), rrole.Name, rrole.Description, rrole.Permissions) - err := roleService.Add(role) + err := r.roleService.Add(role) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -56,7 +58,7 @@ func (r Role) GetRole(ctx context.Context, request *apb.GetRoleRequest) (*apb.Ge start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - roleData, err := roleService.Get(store.Query{Name: request.RoleName}) + roleData, err := r.roleService.Get(store.Query{Name: request.RoleName}) if err != nil { return nil, err } @@ -81,7 +83,7 @@ func (r Role) GetRoles(ctx context.Context, request *apb.GetRolesRequest) (*apb. start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - roleList, err := roleService.GetAll() + roleList, err := r.roleService.GetAll() if err != nil { return nil, err } @@ -109,19 +111,19 @@ func (r Role) UpdateRoles(ctx context.Context, request *apb.UpdateRolesRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, r := range request.Roles { - rid, err := uuid.Parse(r.Id) + for _, role := range request.Roles { + rid, err := uuid.Parse(role.Id) if err != nil { return nil, handleRPCError(labels, err) } - _, err = roleService.Get(store.Query{ID: rid}) + _, err = r.roleService.Get(store.Query{ID: rid}) if err != nil { return nil, status.Errorf(codes.Canceled, "role not found %v", err) } - roleToUpdate := rbac.NewRole(rid, r.Name, r.Description, r.Permissions) - err = roleService.Update(roleToUpdate) + roleToUpdate := rbac.NewRole(rid, role.Name, role.Description, role.Permissions) + err = r.roleService.Update(roleToUpdate) if err != nil { return nil, status.Errorf(codes.Aborted, "could not update role %v", err) } @@ -139,7 +141,7 @@ func (r Role) DeletePermissionsForRole(ctx context.Context, request *apb.DeleteP start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - roleToUpdate, err := roleService.Get(store.Query{Name: request.RoleName}) + roleToUpdate, err := r.roleService.Get(store.Query{Name: request.RoleName}) if err != nil { return nil, status.Errorf(codes.Canceled, "role not found %v", err) } @@ -164,7 +166,7 @@ func (r Role) DeletePermissionsForRole(ctx context.Context, request *apb.DeleteP // updates the existing role with the trimmed set of permissions roleToUpdate.RemovePermissionsFromRole(request.PermissionsToDelete) - err = roleService.Update(roleToUpdate) + err = r.roleService.Update(roleToUpdate) if err != nil { return nil, status.Errorf(codes.Aborted, "could not update role %v", err) } @@ -181,13 +183,13 @@ func (r Role) DeleteRoles(ctx context.Context, request *apb.DeleteRolesRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, r := range request.RoleName { - roleToDelete, err := roleService.Get(store.Query{Name: r}) + for _, role := range request.RoleName { + roleToDelete, err := r.roleService.Get(store.Query{Name: role}) if err != nil { return nil, status.Errorf(codes.Canceled, "role not found") } - err = roleService.Delete(roleToDelete) + err = r.roleService.Delete(roleToDelete) if err != nil { return nil, status.Errorf(codes.Aborted, "error deleting role %v", err) } diff --git a/controller/northbound/server/sbi.go b/controller/northbound/server/sbi.go index 6c6102806bc9c7e644fe3cd59c88fe6c156ce31b..d948cb30f7b9502cbf090dfbb5dc9302e578e876 100644 --- a/controller/northbound/server/sbi.go +++ b/controller/northbound/server/sbi.go @@ -5,6 +5,7 @@ import ( "io" spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" @@ -24,6 +25,7 @@ const ( type sbiServer struct { spb.UnimplementedSbiServiceServer + pndStore networkdomain.PndStore } func (s sbiServer) GetSchema(request *spb.GetSchemaRequest, stream spb.SbiService_GetSchemaServer) error { @@ -41,7 +43,7 @@ func (s sbiServer) GetSchema(request *spb.GetSchemaRequest, stream spb.SbiServic return handleRPCError(labels, err) } - pnd, err := pndc.Get(store.Query{ID: pid}) + pnd, err := s.pndStore.Get(store.Query{ID: pid}) if err != nil { return handleRPCError(labels, err) } diff --git a/controller/northbound/server/user.go b/controller/northbound/server/user.go index f15f3412450d3762306fef57122a92cfc63547e2..56524cd7ec4822d4feb1d9efed19b63cccc345ce 100644 --- a/controller/northbound/server/user.go +++ b/controller/northbound/server/user.go @@ -17,12 +17,15 @@ import ( "google.golang.org/grpc/status" "golang.org/x/crypto/argon2" + + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" ) // User holds a JWTManager and represents a UserServiceServer. type User struct { apb.UnimplementedUserServiceServer - jwtManager *rbac.JWTManager + jwtManager *rbac.JWTManager + userService rbacInterfaces.UserService } // NewUserServer receives a JWTManager and returns a new UserServer. @@ -38,9 +41,9 @@ func (u User) CreateUsers(ctx context.Context, request *apb.CreateUsersRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, u := range request.User { + for _, user := range request.User { roles := map[string]string{} - for key, elem := range u.Roles { + for key, elem := range user.Roles { _, err := uuid.Parse(key) if err != nil { return nil, handleRPCError(labels, err) @@ -56,10 +59,10 @@ func (u User) CreateUsers(ctx context.Context, request *apb.CreateUsersRequest) return nil, status.Errorf(codes.Aborted, "%v", err) } - hashedPassword := base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(u.Password), []byte(salt), 1, 64*1024, 4, 32)) + hashedPassword := base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(user.Password), []byte(salt), 1, 64*1024, 4, 32)) - user := rbac.NewUser(uuid.New(), u.Name, roles, string(hashedPassword), u.Token, salt) - err = userService.Add(user) + user := rbac.NewUser(uuid.New(), user.Name, roles, string(hashedPassword), user.Token, salt) + err = u.userService.Add(user) if err != nil { log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) @@ -78,7 +81,7 @@ func (u User) GetUser(ctx context.Context, request *apb.GetUserRequest) (*apb.Ge start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - userData, err := userService.Get(store.Query{Name: request.Name}) + userData, err := u.userService.Get(store.Query{Name: request.Name}) if err != nil { return nil, err } @@ -102,7 +105,7 @@ func (u User) GetUsers(ctx context.Context, request *apb.GetUsersRequest) (*apb. start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - userList, err := userService.GetAll() + userList, err := u.userService.GetAll() if err != nil { return nil, err } @@ -129,22 +132,22 @@ func (u User) UpdateUsers(ctx context.Context, request *apb.UpdateUsersRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, u := range request.User { - uid, err := uuid.Parse(u.Id) + for _, user := range request.User { + uid, err := uuid.Parse(user.Id) if err != nil { return nil, handleRPCError(labels, err) } - storedUser, err := userService.Get(store.Query{ID: uid}) + storedUser, err := u.userService.Get(store.Query{ID: uid}) if err != nil { return nil, status.Errorf(codes.Canceled, "user not found %v", err) } - hashedPassword := base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(u.Password), []byte(storedUser.GetSalt()), 1, 64*1024, 4, 32)) + hashedPassword := base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(user.Password), []byte(storedUser.GetSalt()), 1, 64*1024, 4, 32)) - userToUpdate := rbac.NewUser(uid, u.Name, u.Roles, string(hashedPassword), u.Token, storedUser.GetSalt()) + userToUpdate := rbac.NewUser(uid, user.Name, user.Roles, string(hashedPassword), user.Token, storedUser.GetSalt()) - err = userService.Update(userToUpdate) + err = u.userService.Update(userToUpdate) if err != nil { return nil, status.Errorf(codes.Aborted, "could not update user %v", err) } @@ -162,13 +165,13 @@ func (u User) DeleteUsers(ctx context.Context, request *apb.DeleteUsersRequest) start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - for _, u := range request.Username { - userToDelete, err := userService.Get(store.Query{Name: u}) + for _, user := range request.Username { + userToDelete, err := u.userService.Get(store.Query{Name: user}) if err != nil { return nil, status.Errorf(codes.Canceled, "user not found %v", err) } - err = userService.Delete(userToDelete) + err = u.userService.Delete(userToDelete) if err != nil { return nil, status.Errorf(codes.Aborted, "error deleting user %v", err) } @@ -180,7 +183,7 @@ func (u User) DeleteUsers(ctx context.Context, request *apb.DeleteUsersRequest) } func (u User) isValidUser(user rbac.User) (bool, error) { - storedUser, err := userService.Get(store.Query{Name: user.Name()}) + storedUser, err := u.userService.Get(store.Query{Name: user.Name()}) if err != nil { return false, err } else if storedUser == nil {