1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-05-02 22:17:10 +08:00
Manuel Imperiale 6ad654d7cb
MF-1263 - Move repeating errors to the separate package (#1540)
* MF-1263 - Mv duplicated errors to pkg/errors

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>

* Revert test build flags

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>

* Fix merge

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>

* Fix comment

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>

Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>
2022-01-27 17:03:57 +01:00

79 lines
1.9 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package mocks
import (
"context"
"sync"
"github.com/mainflux/mainflux/auth"
"github.com/mainflux/mainflux/pkg/errors"
acl "github.com/ory/keto/proto/ory/keto/acl/v1alpha1"
)
type MockSubjectSet struct {
Object string
Relation string
}
type policyAgentMock struct {
mu sync.Mutex
// authzDb stores 'subject' as a key, and subject policies as a value.
authzDB map[string][]MockSubjectSet
}
// NewKetoMock returns a mock service for Keto.
// This mock is not implemented yet.
func NewKetoMock(db map[string][]MockSubjectSet) auth.PolicyAgent {
return &policyAgentMock{authzDB: db}
}
func (pa *policyAgentMock) CheckPolicy(ctx context.Context, pr auth.PolicyReq) error {
pa.mu.Lock()
defer pa.mu.Unlock()
ssList := pa.authzDB[pr.Subject]
for _, ss := range ssList {
if ss.Object == pr.Object && ss.Relation == pr.Relation {
return nil
}
}
return errors.ErrAuthorization
}
func (pa *policyAgentMock) AddPolicy(ctx context.Context, pr auth.PolicyReq) error {
pa.mu.Lock()
defer pa.mu.Unlock()
pa.authzDB[pr.Subject] = append(pa.authzDB[pr.Subject], MockSubjectSet{Object: pr.Object, Relation: pr.Relation})
return nil
}
func (pa *policyAgentMock) DeletePolicy(ctx context.Context, pr auth.PolicyReq) error {
pa.mu.Lock()
defer pa.mu.Unlock()
ssList := pa.authzDB[pr.Subject]
for k, ss := range ssList {
if ss.Object == pr.Object && ss.Relation == pr.Relation {
ssList[k] = MockSubjectSet{}
}
}
return nil
}
func (pa *policyAgentMock) RetrievePolicies(ctx context.Context, pr auth.PolicyReq) ([]*acl.RelationTuple, error) {
pa.mu.Lock()
defer pa.mu.Unlock()
ssList := pa.authzDB[pr.Subject]
tuple := []*acl.RelationTuple{}
for _, ss := range ssList {
if ss.Relation == pr.Relation {
tuple = append(tuple, &acl.RelationTuple{Object: ss.Object, Relation: ss.Relation})
}
}
return tuple, nil
}