github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/plugin/oauth2/in_memory_repository.go (about)

     1  package oauth2
     2  
     3  import (
     4  	"sync"
     5  )
     6  
     7  // InMemoryRepository represents a in memory repository
     8  type InMemoryRepository struct {
     9  	sync.RWMutex
    10  	servers map[string]*OAuth
    11  }
    12  
    13  // NewInMemoryRepository creates a in memory repository
    14  func NewInMemoryRepository() *InMemoryRepository {
    15  	return &InMemoryRepository{servers: make(map[string]*OAuth)}
    16  }
    17  
    18  // FindAll fetches all the OAuth Servers available
    19  func (r *InMemoryRepository) FindAll() ([]*OAuth, error) {
    20  	r.RLock()
    21  	defer r.RUnlock()
    22  
    23  	var servers []*OAuth
    24  	for _, server := range r.servers {
    25  		servers = append(servers, server)
    26  	}
    27  
    28  	return servers, nil
    29  }
    30  
    31  // FindByName find an OAuth Server by name
    32  func (r *InMemoryRepository) FindByName(name string) (*OAuth, error) {
    33  	r.RLock()
    34  	defer r.RUnlock()
    35  
    36  	return r.findByName(name)
    37  }
    38  
    39  // Add add a new OAuth Server to the repository
    40  func (r *InMemoryRepository) Add(server *OAuth) error {
    41  	r.Lock()
    42  	defer r.Unlock()
    43  
    44  	if _, ok := r.servers[server.Name]; ok {
    45  		return ErrOauthServerNameExists
    46  	}
    47  
    48  	r.servers[server.Name] = server
    49  
    50  	return nil
    51  }
    52  
    53  // Save saves a OAuth Server to the repository
    54  func (r *InMemoryRepository) Save(server *OAuth) error {
    55  	r.Lock()
    56  	defer r.Unlock()
    57  
    58  	r.servers[server.Name] = server
    59  
    60  	return nil
    61  }
    62  
    63  // Remove removes an OAuth Server from the repository
    64  func (r *InMemoryRepository) Remove(name string) error {
    65  	r.Lock()
    66  	defer r.Unlock()
    67  
    68  	if _, err := r.findByName(name); err != nil {
    69  		return err
    70  	}
    71  
    72  	delete(r.servers, name)
    73  
    74  	return nil
    75  }
    76  
    77  func (r *InMemoryRepository) findByName(name string) (*OAuth, error) {
    78  	server, ok := r.servers[name]
    79  	if false == ok {
    80  		return nil, ErrOauthServerNotFound
    81  	}
    82  
    83  	return server, nil
    84  }