Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace map with struct #34

Merged
merged 3 commits into from
Mar 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ type UsageCache interface {
}

type PermissionCache interface {
GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, map[string]interface{}, error)
SetUserPermission(ctx context.Context, projectID uint64, userID string, userPerm *proto.UserPermission, resourceAccess map[string]interface{}) error
GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, *proto.ResourceAccess, error)
SetUserPermission(ctx context.Context, projectID uint64, userID string, userPerm *proto.UserPermission, resourceAccess *proto.ResourceAccess) error
DeleteUserPermission(ctx context.Context, projectID uint64, userID string) error
}

Expand Down Expand Up @@ -171,11 +171,11 @@ func (s *RedisCache) SpendComputeUnits(ctx context.Context, redisKey string, amo
}

type cacheUserPermission struct {
UserPermission *proto.UserPermission `json:"userPerm"`
ResourceAccess map[string]interface{} `json:"resourceAccess"`
UserPermission *proto.UserPermission `json:"userPerm"`
ResourceAccess *proto.ResourceAccess `json:"resourceAccess"`
}

func (s *RedisCache) GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, map[string]interface{}, error) {
func (s *RedisCache) GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, *proto.ResourceAccess, error) {
cacheKey := fmt.Sprintf("%s%s", redisKeyPrefix, getUserPermKey(projectID, userID))
raw, err := s.client.Get(ctx, cacheKey).Bytes()
if err != nil {
Expand All @@ -191,7 +191,7 @@ func (s *RedisCache) GetUserPermission(ctx context.Context, projectID uint64, us
return v.UserPermission, v.ResourceAccess, nil
}

func (s *RedisCache) SetUserPermission(ctx context.Context, projectID uint64, userID string, userPerm *proto.UserPermission, resourceAccess map[string]interface{}) error {
func (s *RedisCache) SetUserPermission(ctx context.Context, projectID uint64, userID string, userPerm *proto.UserPermission, resourceAccess *proto.ResourceAccess) error {
v := cacheUserPermission{
UserPermission: userPerm,
ResourceAccess: resourceAccess,
Expand Down
4 changes: 2 additions & 2 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ func (c *Client) FetchUsage(ctx context.Context, quota *proto.AccessQuota, now t
return 0, proto.ErrTimeout
}

func (c *Client) FetchUserPermission(ctx context.Context, projectID uint64, userID string, useCache bool) (*proto.UserPermission, map[string]any, error) {
func (c *Client) FetchUserPermission(ctx context.Context, projectID uint64, userID string, useCache bool) (*proto.UserPermission, *proto.ResourceAccess, error) {
var userPerm *proto.UserPermission
var resourceAccess map[string]interface{}
var resourceAccess *proto.ResourceAccess
var err error

// Check short-lived cache if requested. Note, the cache ttl is 10 seconds.
Expand Down
2 changes: 1 addition & 1 deletion middleware/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type Client interface {
IsEnabled() bool
FetchKeyQuota(ctx context.Context, accessKey, origin string, now time.Time) (*proto.AccessQuota, error)
FetchUsage(ctx context.Context, quota *proto.AccessQuota, now time.Time) (int64, error)
FetchUserPermission(ctx context.Context, projectID uint64, userID string, useCache bool) (*proto.UserPermission, map[string]any, error)
FetchUserPermission(ctx context.Context, projectID uint64, userID string, useCache bool) (*proto.UserPermission, *proto.ResourceAccess, error)
SpendQuota(ctx context.Context, quota *proto.AccessQuota, computeUnits int64, now time.Time) (bool, error)
}

Expand Down
22 changes: 18 additions & 4 deletions proto/clients/quotacontrol.gen.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable */
// quota-control v0.1.0 a6f31d32edbb0b3c3050fa4881591aa56fa39f9a
// quota-control v0.1.0 2a3106e864c588edf77ad9ac94cb91dad9fd127d
// --
// Code generated by [email protected] with [email protected] generator. DO NOT EDIT.
//
Expand All @@ -12,7 +12,7 @@ export const WebRPCVersion = "v1"
export const WebRPCSchemaVersion = "v0.1.0"

// Schema hash generated from your RIDL schema
export const WebRPCSchemaHash = "a6f31d32edbb0b3c3050fa4881591aa56fa39f9a"
export const WebRPCSchemaHash = "2a3106e864c588edf77ad9ac94cb91dad9fd127d"

//
// Types
Expand Down Expand Up @@ -85,6 +85,20 @@ export interface ProjectStatus {
ratelimitCounter: number
}

export interface Subscription {
Tier: string
}

export interface Minter {
Contracts: Array<string>
}

export interface ResourceAccess {
projectId: number
subscription: Subscription
minter: Minter
}

export interface QuotaControl {
getProjectStatus(args: GetProjectStatusArgs, headers?: object, signal?: AbortSignal): Promise<GetProjectStatusReturn>
getAccessKey(args: GetAccessKeyArgs, headers?: object, signal?: AbortSignal): Promise<GetAccessKeyReturn>
Expand Down Expand Up @@ -283,7 +297,7 @@ export interface GetUserPermissionArgs {

export interface GetUserPermissionReturn {
permission: UserPermission
resourceAccess: {[key: string]: any}
resourceAccess: ResourceAccess
}


Expand Down Expand Up @@ -592,7 +606,7 @@ export class QuotaControl implements QuotaControl {
return buildResponse(res).then(_data => {
return {
permission: <UserPermission>(_data.permission),
resourceAccess: <{[key: string]: any}>(_data.resourceAccess),
resourceAccess: <ResourceAccess>(_data.resourceAccess),
}
})
}, (error) => {
Expand Down
30 changes: 22 additions & 8 deletions proto/proto.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 15 additions & 1 deletion proto/proto.ridl
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,20 @@ struct ProjectStatus
- usageCounter: int64
- ratelimitCounter: int64

struct Subscription
- Tier: string
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets downcase "Tier"

+ go.tag.json = tier

struct Minter
- Contracts: []string
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets downcase "Contracts"

+ go.tag.json = contracts

struct ResourceAccess
- projectId: uint64
+ go.field.name = ProjectID
- subscription: Subscription
- minter: Minter

error 1001 Timeout "Request timed out" HTTP 408
error 1002 LimitExceeded "Request limit exceeded" HTTP 429
error 1003 InvalidOrigin "Invalid origin" HTTP 403
Expand Down Expand Up @@ -116,4 +130,4 @@ service QuotaControl
- UpdateUsage(service: Service, now: timestamp, usage: map<string,AccessUsage>) => (ok: map<string,bool>)

# User permissions for a projectId
- GetUserPermission(projectId: uint64, userId: string) => (permission: UserPermission, resourceAccess: map<string,any>)
- GetUserPermission(projectId: uint64, userId: string) => (permission: UserPermission, resourceAccess: ResourceAccess)
4 changes: 2 additions & 2 deletions quotacontrol.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type CycleStore interface {
}

type PermissionStore interface {
GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, map[string]interface{}, error)
GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, *proto.ResourceAccess, error)
}

type Cache struct {
Expand Down Expand Up @@ -445,7 +445,7 @@ func (q qcHandler) DisableAccessKey(ctx context.Context, accessKey string) (bool
return true, nil
}

func (q qcHandler) GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, map[string]interface{}, error) {
func (q qcHandler) GetUserPermission(ctx context.Context, projectID uint64, userID string) (*proto.UserPermission, *proto.ResourceAccess, error) {
perm, access, err := q.store.PermissionStore.GetUserPermission(ctx, projectID, userID)
if err != nil {
return perm, access, proto.ErrUnauthorizedUser
Expand Down
2 changes: 2 additions & 0 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const (
UserPermission_ADMIN = proto.UserPermission_ADMIN
)

type ResourceAccess = proto.ResourceAccess

type DefaultCycleStore struct{}

func (s DefaultCycleStore) GetAccessCycle(ctx context.Context, projectID uint64, now time.Time) (*proto.Cycle, error) {
Expand Down
Loading