From d16bb8ad02296a9221293d5865d5f5a2ce9ffe1a Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Tue, 25 Mar 2025 18:07:37 -0700
Subject: [PATCH] submissions: refactor roles again

---
 pkg/service/security.go    | 36 ++++++++++++++++--------------------
 pkg/service/submissions.go |  6 +++---
 2 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/pkg/service/security.go b/pkg/service/security.go
index 3706da9..87a83fb 100644
--- a/pkg/service/security.go
+++ b/pkg/service/security.go
@@ -25,19 +25,19 @@ var (
 )
 
 // StrafesNET group roles
-type Role int32
+type GroupRole int32
 var (
 	// has ScriptWrite
-	RoleQuat Role = 240
+	RoleQuat GroupRole = 240
 	RolesQuat Roles = RolesScriptWrite|RolesSubmissionPublish|RolesSubmissionReview|RolesMapDownload
 	// has SubmissionPublish
-	RoleMapAdmin Role = 128
+	RoleMapAdmin GroupRole = 128
 	RolesMapAdmin Roles = RolesSubmissionPublish|RolesSubmissionReview|RolesMapDownload
 	// has SubmissionReview
-	RoleMapCouncil Role = 64
+	RoleMapCouncil GroupRole = 64
 	RolesMapCouncil Roles = RolesSubmissionReview|RolesMapDownload
 	// access to downloading maps
-	RoleMapAccess Role = 32
+	RoleMapAccess GroupRole = 32
 	RolesMapAccess Roles = RolesMapDownload
 )
 
@@ -90,20 +90,13 @@ func (usr UserInfoHandle) IsSubmitter(submitter uint64) (bool, error) {
 	}
 	return userId == submitter, nil
 }
-func (usr UserInfoHandle) hasRole(role Role) (bool, error) {
-	roles, err := usr.svc.Client.GetGroupRole(*usr.ctx, &auth.IdMessage{
-		SessionID: usr.sessionId,
-	})
+func (usr UserInfoHandle) hasRoles(wantRoles Roles) (bool, error) {
+	haveroles, err := usr.GetRoles()
 	if err != nil {
 		return false, err
 	}
 
-	for _, r := range roles.Roles {
-		if int32(role) <= r.Rank {
-			return true, nil
-		}
-	}
-	return false, nil
+	return haveroles & wantRoles == wantRoles, nil
 }
 func (usr UserInfoHandle) GetRoles() (Roles, error) {
 	roles, err := usr.svc.Client.GetGroupRole(*usr.ctx, &auth.IdMessage{
@@ -117,7 +110,7 @@ func (usr UserInfoHandle) GetRoles() (Roles, error) {
 
 	// map roles into bitflag
 	for _, r := range roles.Roles {
-		switch Role(r.Rank){
+		switch GroupRole(r.Rank){
 			case RoleQuat:
 				rolesBitflag|=RolesQuat;
 			case RoleMapAdmin:
@@ -133,14 +126,17 @@ func (usr UserInfoHandle) GetRoles() (Roles, error) {
 
 // RoleThumbnail
 // RoleMapDownload
-func (usr UserInfoHandle) HasRoleSubmissionRelease() (bool, error) {
-	return usr.hasRole(RoleMapAdmin)
+func (usr UserInfoHandle) HasRoleSubmissionPublish() (bool, error) {
+	return usr.hasRoles(RolesSubmissionPublish)
 }
 func (usr UserInfoHandle) HasRoleSubmissionReview() (bool, error) {
-	return usr.hasRole(RoleMapCouncil)
+	return usr.hasRoles(RolesSubmissionReview)
+}
+func (usr UserInfoHandle) HasRoleMapDownload() (bool, error) {
+	return usr.hasRoles(RolesMapDownload)
 }
 func (usr UserInfoHandle) HasRoleScriptWrite() (bool, error) {
-	return usr.hasRole(RoleQuat)
+	return usr.hasRoles(RolesScriptWrite)
 }
 /// Not implemented
 func (usr UserInfoHandle) HasRoleMaptest() (bool, error) {
diff --git a/pkg/service/submissions.go b/pkg/service/submissions.go
index 97eaeb6..2280acf 100644
--- a/pkg/service/submissions.go
+++ b/pkg/service/submissions.go
@@ -386,7 +386,7 @@ func (svc *Service) ActionSubmissionTriggerUpload(ctx context.Context, params ap
 		return ErrUserInfo
 	}
 
-	has_role, err := userInfo.HasRoleSubmissionRelease()
+	has_role, err := userInfo.HasRoleSubmissionPublish()
 	if err != nil {
 		return err
 	}
@@ -451,7 +451,7 @@ func (svc *Service) ActionSubmissionValidated(ctx context.Context, params api.Ac
 		return ErrUserInfo
 	}
 
-	has_role, err := userInfo.HasRoleSubmissionRelease()
+	has_role, err := userInfo.HasRoleSubmissionPublish()
 	if err != nil {
 		return err
 	}
@@ -584,7 +584,7 @@ func (svc *Service) ReleaseSubmissions(ctx context.Context, request []api.Releas
 		return ErrUserInfo
 	}
 
-	has_role, err := userInfo.HasRoleSubmissionRelease()
+	has_role, err := userInfo.HasRoleSubmissionPublish()
 	if err != nil {
 		return err
 	}
-- 
2.47.1