mirror of
https://github.com/netbirdio/netbird.git
synced 2026-03-31 14:44:34 -04:00
Compare commits
4 Commits
prototype/
...
fix-peer-r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6022686c37 | ||
|
|
d23e942493 | ||
|
|
8fdd4ae3a2 | ||
|
|
ad3d7888cf |
@@ -29,42 +29,42 @@ const (
|
||||
)
|
||||
|
||||
type AccountManager interface {
|
||||
GetOrCreateAccountByUser(userId, domain string) (*Account, error)
|
||||
GetAccountByUser(userId string) (*Account, error)
|
||||
GetOrCreateAccountByUser(userID, domain string) (*Account, error)
|
||||
GetAccountByUser(userID string) (*Account, error)
|
||||
AddSetupKey(
|
||||
accountId string,
|
||||
accountID string,
|
||||
keyName string,
|
||||
keyType SetupKeyType,
|
||||
expiresIn *util.Duration,
|
||||
) (*SetupKey, error)
|
||||
RevokeSetupKey(accountId string, keyId string) (*SetupKey, error)
|
||||
RenameSetupKey(accountId string, keyId string, newName string) (*SetupKey, error)
|
||||
GetAccountById(accountId string) (*Account, error)
|
||||
GetAccountByUserOrAccountId(userId, accountId, domain string) (*Account, error)
|
||||
RevokeSetupKey(accountID string, keyID string) (*SetupKey, error)
|
||||
RenameSetupKey(accountID string, keyID string, newName string) (*SetupKey, error)
|
||||
GetAccountById(accountID string) (*Account, error)
|
||||
GetAccountByUserOrAccountId(userID, accountID, domain string) (*Account, error)
|
||||
GetAccountWithAuthorizationClaims(claims jwtclaims.AuthorizationClaims) (*Account, error)
|
||||
IsUserAdmin(claims jwtclaims.AuthorizationClaims) (bool, error)
|
||||
AccountExists(accountId string) (*bool, error)
|
||||
AddAccount(accountId, userId, domain string) (*Account, error)
|
||||
AccountExists(accountID string) (*bool, error)
|
||||
AddAccount(accountID, userID, domain string) (*Account, error)
|
||||
GetPeer(peerKey string) (*Peer, error)
|
||||
MarkPeerConnected(peerKey string, connected bool) error
|
||||
RenamePeer(accountId string, peerKey string, newName string) (*Peer, error)
|
||||
DeletePeer(accountId string, peerKey string) (*Peer, error)
|
||||
GetPeerByIP(accountId string, peerIP string) (*Peer, error)
|
||||
RenamePeer(accountID string, peerKey string, newName string) (*Peer, error)
|
||||
DeletePeer(accountID string, peerKey string) (*Peer, error)
|
||||
GetPeerByIP(accountID string, peerIP string) (*Peer, error)
|
||||
GetNetworkMap(peerKey string) (*NetworkMap, error)
|
||||
AddPeer(setupKey string, userId string, peer *Peer) (*Peer, error)
|
||||
AddPeer(setupKey string, userID string, peer *Peer) (*Peer, error)
|
||||
UpdatePeerMeta(peerKey string, meta PeerSystemMeta) error
|
||||
GetUsersFromAccount(accountId string) ([]*UserInfo, error)
|
||||
GetGroup(accountId, groupID string) (*Group, error)
|
||||
SaveGroup(accountId string, group *Group) error
|
||||
DeleteGroup(accountId, groupID string) error
|
||||
ListGroups(accountId string) ([]*Group, error)
|
||||
GroupAddPeer(accountId, groupID, peerKey string) error
|
||||
GroupDeletePeer(accountId, groupID, peerKey string) error
|
||||
GroupListPeers(accountId, groupID string) ([]*Peer, error)
|
||||
GetRule(accountId, ruleID string) (*Rule, error)
|
||||
GetUsersFromAccount(accountID string) ([]*UserInfo, error)
|
||||
GetGroup(accountID, groupID string) (*Group, error)
|
||||
SaveGroup(accountID string, group *Group) error
|
||||
DeleteGroup(accountID, groupID string) error
|
||||
ListGroups(accountID string) ([]*Group, error)
|
||||
GroupAddPeer(accountID, groupID, peerKey string) error
|
||||
GroupDeletePeer(accountID, groupID, peerKey string) error
|
||||
GroupListPeers(accountID, groupID string) ([]*Peer, error)
|
||||
GetRule(accountID, ruleID string) (*Rule, error)
|
||||
SaveRule(accountID string, rule *Rule) error
|
||||
DeleteRule(accountId, ruleID string) error
|
||||
ListRules(accountId string) ([]*Rule, error)
|
||||
DeleteRule(accountID, ruleID string) error
|
||||
ListRules(accountID string) ([]*Rule, error)
|
||||
}
|
||||
|
||||
type DefaultAccountManager struct {
|
||||
@@ -101,9 +101,9 @@ type UserInfo struct {
|
||||
}
|
||||
|
||||
// NewAccount creates a new Account with a generated ID and generated default setup keys
|
||||
func NewAccount(userId, domain string) *Account {
|
||||
accountId := xid.New().String()
|
||||
return newAccountWithId(accountId, userId, domain)
|
||||
func NewAccount(userID, domain string) *Account {
|
||||
accountID := xid.New().String()
|
||||
return newAccountWithId(accountID, userID, domain)
|
||||
}
|
||||
|
||||
func (a *Account) Copy() *Account {
|
||||
@@ -220,7 +220,7 @@ func (am *DefaultAccountManager) warmupIDPCache() error {
|
||||
|
||||
// AddSetupKey generates a new setup key with a given name and type, and adds it to the specified account
|
||||
func (am *DefaultAccountManager) AddSetupKey(
|
||||
accountId string,
|
||||
accountID string,
|
||||
keyName string,
|
||||
keyType SetupKeyType,
|
||||
expiresIn *util.Duration,
|
||||
@@ -233,7 +233,7 @@ func (am *DefaultAccountManager) AddSetupKey(
|
||||
keyDuration = expiresIn.Duration
|
||||
}
|
||||
|
||||
account, err := am.Store.GetAccount(accountId)
|
||||
account, err := am.Store.GetAccount(accountID)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.NotFound, "account not found")
|
||||
}
|
||||
@@ -250,18 +250,18 @@ func (am *DefaultAccountManager) AddSetupKey(
|
||||
}
|
||||
|
||||
// RevokeSetupKey marks SetupKey as revoked - becomes not valid anymore
|
||||
func (am *DefaultAccountManager) RevokeSetupKey(accountId string, keyId string) (*SetupKey, error) {
|
||||
func (am *DefaultAccountManager) RevokeSetupKey(accountID string, keyID string) (*SetupKey, error) {
|
||||
am.mux.Lock()
|
||||
defer am.mux.Unlock()
|
||||
|
||||
account, err := am.Store.GetAccount(accountId)
|
||||
account, err := am.Store.GetAccount(accountID)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.NotFound, "account not found")
|
||||
}
|
||||
|
||||
setupKey := getAccountSetupKeyById(account, keyId)
|
||||
setupKey := getAccountSetupKeyById(account, keyID)
|
||||
if setupKey == nil {
|
||||
return nil, status.Errorf(codes.NotFound, "unknown setupKey %s", keyId)
|
||||
return nil, status.Errorf(codes.NotFound, "unknown setupKey %s", keyID)
|
||||
}
|
||||
|
||||
keyCopy := setupKey.Copy()
|
||||
@@ -277,21 +277,21 @@ func (am *DefaultAccountManager) RevokeSetupKey(accountId string, keyId string)
|
||||
|
||||
// RenameSetupKey renames existing setup key of the specified account.
|
||||
func (am *DefaultAccountManager) RenameSetupKey(
|
||||
accountId string,
|
||||
keyId string,
|
||||
accountID string,
|
||||
keyID string,
|
||||
newName string,
|
||||
) (*SetupKey, error) {
|
||||
am.mux.Lock()
|
||||
defer am.mux.Unlock()
|
||||
|
||||
account, err := am.Store.GetAccount(accountId)
|
||||
account, err := am.Store.GetAccount(accountID)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.NotFound, "account not found")
|
||||
}
|
||||
|
||||
setupKey := getAccountSetupKeyById(account, keyId)
|
||||
setupKey := getAccountSetupKeyById(account, keyID)
|
||||
if setupKey == nil {
|
||||
return nil, status.Errorf(codes.NotFound, "unknown setupKey %s", keyId)
|
||||
return nil, status.Errorf(codes.NotFound, "unknown setupKey %s", keyID)
|
||||
}
|
||||
|
||||
keyCopy := setupKey.Copy()
|
||||
@@ -306,11 +306,11 @@ func (am *DefaultAccountManager) RenameSetupKey(
|
||||
}
|
||||
|
||||
// GetAccountById returns an existing account using its ID or error (NotFound) if doesn't exist
|
||||
func (am *DefaultAccountManager) GetAccountById(accountId string) (*Account, error) {
|
||||
func (am *DefaultAccountManager) GetAccountById(accountID string) (*Account, error) {
|
||||
am.mux.Lock()
|
||||
defer am.mux.Unlock()
|
||||
|
||||
account, err := am.Store.GetAccount(accountId)
|
||||
account, err := am.Store.GetAccount(accountID)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.NotFound, "account not found")
|
||||
}
|
||||
@@ -321,16 +321,16 @@ func (am *DefaultAccountManager) GetAccountById(accountId string) (*Account, err
|
||||
// GetAccountByUserOrAccountId look for an account by user or account Id, if no account is provided and
|
||||
// user id doesn't have an account associated with it, one account is created
|
||||
func (am *DefaultAccountManager) GetAccountByUserOrAccountId(
|
||||
userId, accountId, domain string,
|
||||
userID, accountID, domain string,
|
||||
) (*Account, error) {
|
||||
if accountId != "" {
|
||||
return am.GetAccountById(accountId)
|
||||
} else if userId != "" {
|
||||
account, err := am.GetOrCreateAccountByUser(userId, domain)
|
||||
if accountID != "" {
|
||||
return am.GetAccountById(accountID)
|
||||
} else if userID != "" {
|
||||
account, err := am.GetOrCreateAccountByUser(userID, domain)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.NotFound, "account not found using user id: %s", userId)
|
||||
return nil, status.Errorf(codes.NotFound, "account not found using user id: %s", userID)
|
||||
}
|
||||
err = am.updateIDPMetadata(userId, account.Id)
|
||||
err = am.updateIDPMetadata(userID, account.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -345,9 +345,9 @@ func isNil(i idp.Manager) bool {
|
||||
}
|
||||
|
||||
// updateIDPMetadata update user's app metadata in idp manager
|
||||
func (am *DefaultAccountManager) updateIDPMetadata(userId, accountID string) error {
|
||||
func (am *DefaultAccountManager) updateIDPMetadata(userID, accountID string) error {
|
||||
if !isNil(am.idpManager) {
|
||||
err := am.idpManager.UpdateUserAppMetadata(userId, idp.AppMetadata{WTAccountId: accountID})
|
||||
err := am.idpManager.UpdateUserAppMetadata(userID, idp.AppMetadata{WTAccountId: accountID})
|
||||
if err != nil {
|
||||
return status.Errorf(
|
||||
codes.Internal,
|
||||
@@ -524,6 +524,7 @@ func (am *DefaultAccountManager) handleNewUserAccount(
|
||||
}
|
||||
} else {
|
||||
account = NewAccount(claims.UserId, lowerDomain)
|
||||
am.addAllGroup(account)
|
||||
account.Users[claims.UserId] = NewAdminUser(claims.UserId)
|
||||
err = am.updateAccountDomainAttributes(account, claims, true)
|
||||
if err != nil {
|
||||
@@ -602,12 +603,12 @@ func (am *DefaultAccountManager) GetAccountWithAuthorizationClaims(
|
||||
}
|
||||
|
||||
// AccountExists checks whether account exists (returns true) or not (returns false)
|
||||
func (am *DefaultAccountManager) AccountExists(accountId string) (*bool, error) {
|
||||
func (am *DefaultAccountManager) AccountExists(accountID string) (*bool, error) {
|
||||
am.mux.Lock()
|
||||
defer am.mux.Unlock()
|
||||
|
||||
var res bool
|
||||
_, err := am.Store.GetAccount(accountId)
|
||||
_, err := am.Store.GetAccount(accountID)
|
||||
if err != nil {
|
||||
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
||||
res = false
|
||||
@@ -621,16 +622,16 @@ func (am *DefaultAccountManager) AccountExists(accountId string) (*bool, error)
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
// AddAccount generates a new Account with a provided accountId and userId, saves to the Store
|
||||
func (am *DefaultAccountManager) AddAccount(accountId, userId, domain string) (*Account, error) {
|
||||
// AddAccount generates a new Account with a provided accountID and userID, saves to the Store
|
||||
func (am *DefaultAccountManager) AddAccount(accountID, userID, domain string) (*Account, error) {
|
||||
am.mux.Lock()
|
||||
defer am.mux.Unlock()
|
||||
|
||||
return am.createAccount(accountId, userId, domain)
|
||||
return am.createAccountWithID(accountID, userID, domain)
|
||||
}
|
||||
|
||||
func (am *DefaultAccountManager) createAccount(accountId, userId, domain string) (*Account, error) {
|
||||
account := newAccountWithId(accountId, userId, domain)
|
||||
func (am *DefaultAccountManager) createAccountWithID(accountID, userID, domain string) (*Account, error) {
|
||||
account := newAccountWithId(accountID, userID, domain)
|
||||
|
||||
am.addAllGroup(account)
|
||||
|
||||
@@ -665,7 +666,7 @@ func (am *DefaultAccountManager) addAllGroup(account *Account) {
|
||||
}
|
||||
|
||||
// newAccountWithId creates a new Account with a default SetupKey (doesn't store in a Store) and provided id
|
||||
func newAccountWithId(accountId, userId, domain string) *Account {
|
||||
func newAccountWithId(accountID, userID, domain string) *Account {
|
||||
log.Debugf("creating new account")
|
||||
|
||||
setupKeys := make(map[string]*SetupKey)
|
||||
@@ -677,22 +678,22 @@ func newAccountWithId(accountId, userId, domain string) *Account {
|
||||
peers := make(map[string]*Peer)
|
||||
users := make(map[string]*User)
|
||||
|
||||
log.Debugf("created new account %s with setup key %s", accountId, defaultKey.Key)
|
||||
log.Debugf("created new account %s with setup key %s", accountID, defaultKey.Key)
|
||||
|
||||
return &Account{
|
||||
Id: accountId,
|
||||
Id: accountID,
|
||||
SetupKeys: setupKeys,
|
||||
Network: network,
|
||||
Peers: peers,
|
||||
Users: users,
|
||||
CreatedBy: userId,
|
||||
CreatedBy: userID,
|
||||
Domain: domain,
|
||||
}
|
||||
}
|
||||
|
||||
func getAccountSetupKeyById(acc *Account, keyId string) *SetupKey {
|
||||
func getAccountSetupKeyById(acc *Account, keyID string) *SetupKey {
|
||||
for _, k := range acc.SetupKeys {
|
||||
if keyId == k.Id {
|
||||
if keyID == k.Id {
|
||||
return k
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user