Skip to content

Commit ce196ab

Browse files
authored
[client, management] Move client-imported GPL code to separate package (#4692)
1 parent 3779a33 commit ce196ab

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+397
-368
lines changed

.github/workflows/check-license-dependencies.yml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,28 @@ jobs:
1515
- name: Check for problematic license dependencies
1616
run: |
1717
echo "Checking for dependencies on management/, signal/, and relay/ packages..."
18+
echo ""
1819
1920
# Find all directories except the problematic ones and system dirs
2021
FOUND_ISSUES=0
21-
find . -maxdepth 1 -type d -not -name "." -not -name "management" -not -name "signal" -not -name "relay" -not -name ".git*" | sort | while read dir; do
22+
while IFS= read -r dir; do
2223
echo "=== Checking $dir ==="
2324
# Search for problematic imports, excluding test files
24-
RESULTS=$(grep -r "github.com/netbirdio/netbird/\(management\|signal\|relay\)" "$dir" --include="*.go" | grep -v "_test.go" | grep -v "test_" | grep -v "/test/" || true)
25-
if [ ! -z "$RESULTS" ]; then
25+
RESULTS=$(grep -r "github.com/netbirdio/netbird/\(management\|signal\|relay\)" "$dir" --include="*.go" 2>/dev/null | grep -v "_test.go" | grep -v "test_" | grep -v "/test/" || true)
26+
if [ -n "$RESULTS" ]; then
2627
echo "❌ Found problematic dependencies:"
2728
echo "$RESULTS"
2829
FOUND_ISSUES=1
2930
else
3031
echo "✓ No problematic dependencies found"
3132
fi
32-
done
33+
done < <(find . -maxdepth 1 -type d -not -name "." -not -name "management" -not -name "signal" -not -name "relay" -not -name ".git*" | sort)
34+
35+
echo ""
3336
if [ $FOUND_ISSUES -eq 1 ]; then
34-
echo ""
3537
echo "❌ Found dependencies on management/, signal/, or relay/ packages"
36-
echo "These packages will change license and should not be imported by client or shared code"
38+
echo "These packages are licensed under AGPLv3 and must not be imported by BSD-licensed code"
3739
exit 1
3840
else
39-
echo ""
4041
echo "✅ All license dependencies are clean"
4142
fi

client/internal/profilemanager/config_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,10 @@ func TestWireguardPortZeroExplicit(t *testing.T) {
193193

194194
func TestWireguardPortDefaultVsExplicit(t *testing.T) {
195195
tests := []struct {
196-
name string
197-
wireguardPort *int
198-
expectedPort int
199-
description string
196+
name string
197+
wireguardPort *int
198+
expectedPort int
199+
description string
200200
}{
201201
{
202202
name: "no port specified uses default",

client/ssh/proxy/proxy_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929
nbssh "github.com/netbirdio/netbird/client/ssh"
3030
"github.com/netbirdio/netbird/client/ssh/server"
3131
"github.com/netbirdio/netbird/client/ssh/testutil"
32-
nbjwt "github.com/netbirdio/netbird/management/server/auth/jwt"
32+
nbjwt "github.com/netbirdio/netbird/shared/auth/jwt"
3333
)
3434

3535
func TestMain(m *testing.M) {

client/ssh/server/jwt_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
"github.com/netbirdio/netbird/client/ssh/client"
2727
"github.com/netbirdio/netbird/client/ssh/detection"
2828
"github.com/netbirdio/netbird/client/ssh/testutil"
29-
nbjwt "github.com/netbirdio/netbird/management/server/auth/jwt"
29+
nbjwt "github.com/netbirdio/netbird/shared/auth/jwt"
3030
)
3131

3232
func TestJWTEnforcement(t *testing.T) {

client/ssh/server/server.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import (
2121

2222
"github.com/netbirdio/netbird/client/iface/wgaddr"
2323
"github.com/netbirdio/netbird/client/ssh/detection"
24-
"github.com/netbirdio/netbird/management/server/auth/jwt"
25-
nbcontext "github.com/netbirdio/netbird/management/server/context"
24+
"github.com/netbirdio/netbird/shared/auth"
25+
"github.com/netbirdio/netbird/shared/auth/jwt"
2626
"github.com/netbirdio/netbird/version"
2727
)
2828

@@ -349,7 +349,7 @@ func (s *Server) checkTokenAge(token *gojwt.Token, jwtConfig *JWTConfig) error {
349349
return nil
350350
}
351351

352-
func (s *Server) extractAndValidateUser(token *gojwt.Token) (*nbcontext.UserAuth, error) {
352+
func (s *Server) extractAndValidateUser(token *gojwt.Token) (*auth.UserAuth, error) {
353353
s.mu.RLock()
354354
jwtExtractor := s.jwtExtractor
355355
s.mu.RUnlock()
@@ -372,7 +372,7 @@ func (s *Server) extractAndValidateUser(token *gojwt.Token) (*nbcontext.UserAuth
372372
return &userAuth, nil
373373
}
374374

375-
func (s *Server) hasSSHAccess(userAuth *nbcontext.UserAuth) bool {
375+
func (s *Server) hasSSHAccess(userAuth *auth.UserAuth) bool {
376376
return userAuth.UserId != ""
377377
}
378378

management/server/account.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import (
1717
"sync/atomic"
1818
"time"
1919

20+
"github.com/netbirdio/netbird/shared/auth"
21+
2022
cacheStore "github.com/eko/gocache/lib/v4/store"
2123
"github.com/eko/gocache/store/redis/v4"
2224
"github.com/rs/xid"
@@ -1046,7 +1048,7 @@ func (am *DefaultAccountManager) removeUserFromCache(ctx context.Context, accoun
10461048
}
10471049

10481050
// updateAccountDomainAttributesIfNotUpToDate updates the account domain attributes if they are not up to date and then, saves the account changes
1049-
func (am *DefaultAccountManager) updateAccountDomainAttributesIfNotUpToDate(ctx context.Context, accountID string, userAuth nbcontext.UserAuth,
1051+
func (am *DefaultAccountManager) updateAccountDomainAttributesIfNotUpToDate(ctx context.Context, accountID string, userAuth auth.UserAuth,
10501052
primaryDomain bool,
10511053
) error {
10521054
if userAuth.Domain == "" {
@@ -1095,7 +1097,7 @@ func (am *DefaultAccountManager) handleExistingUserAccount(
10951097
ctx context.Context,
10961098
userAccountID string,
10971099
domainAccountID string,
1098-
userAuth nbcontext.UserAuth,
1100+
userAuth auth.UserAuth,
10991101
) error {
11001102
primaryDomain := domainAccountID == "" || userAccountID == domainAccountID
11011103
err := am.updateAccountDomainAttributesIfNotUpToDate(ctx, userAccountID, userAuth, primaryDomain)
@@ -1114,7 +1116,7 @@ func (am *DefaultAccountManager) handleExistingUserAccount(
11141116

11151117
// addNewPrivateAccount validates if there is an existing primary account for the domain, if so it adds the new user to that account,
11161118
// otherwise it will create a new account and make it primary account for the domain.
1117-
func (am *DefaultAccountManager) addNewPrivateAccount(ctx context.Context, domainAccountID string, userAuth nbcontext.UserAuth) (string, error) {
1119+
func (am *DefaultAccountManager) addNewPrivateAccount(ctx context.Context, domainAccountID string, userAuth auth.UserAuth) (string, error) {
11181120
if userAuth.UserId == "" {
11191121
return "", fmt.Errorf("user ID is empty")
11201122
}
@@ -1145,7 +1147,7 @@ func (am *DefaultAccountManager) addNewPrivateAccount(ctx context.Context, domai
11451147
return newAccount.Id, nil
11461148
}
11471149

1148-
func (am *DefaultAccountManager) addNewUserToDomainAccount(ctx context.Context, domainAccountID string, userAuth nbcontext.UserAuth) (string, error) {
1150+
func (am *DefaultAccountManager) addNewUserToDomainAccount(ctx context.Context, domainAccountID string, userAuth auth.UserAuth) (string, error) {
11491151
newUser := types.NewRegularUser(userAuth.UserId)
11501152
newUser.AccountID = domainAccountID
11511153

@@ -1309,7 +1311,7 @@ func (am *DefaultAccountManager) UpdateAccountOnboarding(ctx context.Context, ac
13091311
return newOnboarding, nil
13101312
}
13111313

1312-
func (am *DefaultAccountManager) GetAccountIDFromUserAuth(ctx context.Context, userAuth nbcontext.UserAuth) (string, string, error) {
1314+
func (am *DefaultAccountManager) GetAccountIDFromUserAuth(ctx context.Context, userAuth auth.UserAuth) (string, string, error) {
13131315
if userAuth.UserId == "" {
13141316
return "", "", errors.New(emptyUserID)
13151317
}
@@ -1353,7 +1355,7 @@ func (am *DefaultAccountManager) GetAccountIDFromUserAuth(ctx context.Context, u
13531355
// syncJWTGroups processes the JWT groups for a user, updates the account based on the groups,
13541356
// and propagates changes to peers if group propagation is enabled.
13551357
// requires userAuth to have been ValidateAndParseToken and EnsureUserAccessByJWTGroups by the AuthManager
1356-
func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth nbcontext.UserAuth) error {
1358+
func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth auth.UserAuth) error {
13571359
if userAuth.IsChild || userAuth.IsPAT {
13581360
return nil
13591361
}
@@ -1511,7 +1513,7 @@ func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth
15111513
// Existing user + Existing account + Existing domain reclassified Domain as private -> Nothing changes (index domain)
15121514
//
15131515
// UserAuth IsChild -> checks that account exists
1514-
func (am *DefaultAccountManager) getAccountIDWithAuthorizationClaims(ctx context.Context, userAuth nbcontext.UserAuth) (string, error) {
1516+
func (am *DefaultAccountManager) getAccountIDWithAuthorizationClaims(ctx context.Context, userAuth auth.UserAuth) (string, error) {
15151517
log.WithContext(ctx).Tracef("getting account with authorization claims. User ID: \"%s\", Account ID: \"%s\", Domain: \"%s\", Domain Category: \"%s\"",
15161518
userAuth.UserId, userAuth.AccountId, userAuth.Domain, userAuth.DomainCategory)
15171519

@@ -1590,7 +1592,7 @@ func (am *DefaultAccountManager) getPrivateDomainWithGlobalLock(ctx context.Cont
15901592
return domainAccountID, cancel, nil
15911593
}
15921594

1593-
func (am *DefaultAccountManager) handlePrivateAccountWithIDFromClaim(ctx context.Context, userAuth nbcontext.UserAuth) (string, error) {
1595+
func (am *DefaultAccountManager) handlePrivateAccountWithIDFromClaim(ctx context.Context, userAuth auth.UserAuth) (string, error) {
15941596
userAccountID, err := am.Store.GetAccountIDByUserID(ctx, store.LockingStrengthNone, userAuth.UserId)
15951597
if err != nil {
15961598
log.WithContext(ctx).Errorf("error getting account ID by user ID: %v", err)
@@ -1638,7 +1640,7 @@ func handleNotFound(err error) error {
16381640
return nil
16391641
}
16401642

1641-
func domainIsUpToDate(domain string, domainCategory string, userAuth nbcontext.UserAuth) bool {
1643+
func domainIsUpToDate(domain string, domainCategory string, userAuth auth.UserAuth) bool {
16421644
return domainCategory == types.PrivateCategory || userAuth.DomainCategory != types.PrivateCategory || domain != userAuth.Domain
16431645
}
16441646

management/server/account/manager.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import (
66
"net/netip"
77
"time"
88

9+
"github.com/netbirdio/netbird/shared/auth"
10+
911
nbdns "github.com/netbirdio/netbird/dns"
1012
"github.com/netbirdio/netbird/management/server/activity"
1113
nbcache "github.com/netbirdio/netbird/management/server/cache"
12-
nbcontext "github.com/netbirdio/netbird/management/server/context"
1314
"github.com/netbirdio/netbird/management/server/idp"
1415
nbpeer "github.com/netbirdio/netbird/management/server/peer"
1516
"github.com/netbirdio/netbird/management/server/peers/ephemeral"
@@ -45,10 +46,10 @@ type Manager interface {
4546
GetAccountOnboarding(ctx context.Context, accountID string, userID string) (*types.AccountOnboarding, error)
4647
AccountExists(ctx context.Context, accountID string) (bool, error)
4748
GetAccountIDByUserID(ctx context.Context, userID, domain string) (string, error)
48-
GetAccountIDFromUserAuth(ctx context.Context, userAuth nbcontext.UserAuth) (string, string, error)
49+
GetAccountIDFromUserAuth(ctx context.Context, userAuth auth.UserAuth) (string, string, error)
4950
DeleteAccount(ctx context.Context, accountID, userID string) error
5051
GetUserByID(ctx context.Context, id string) (*types.User, error)
51-
GetUserFromUserAuth(ctx context.Context, userAuth nbcontext.UserAuth) (*types.User, error)
52+
GetUserFromUserAuth(ctx context.Context, userAuth auth.UserAuth) (*types.User, error)
5253
ListUsers(ctx context.Context, accountID string) ([]*types.User, error)
5354
GetPeers(ctx context.Context, accountID, userID, nameFilter, ipFilter string) ([]*nbpeer.Peer, error)
5455
MarkPeerConnected(ctx context.Context, peerKey string, connected bool, realIP net.IP, accountID string) error
@@ -120,12 +121,12 @@ type Manager interface {
120121
UpdateAccountPeers(ctx context.Context, accountID string)
121122
BufferUpdateAccountPeers(ctx context.Context, accountID string)
122123
BuildUserInfosForAccount(ctx context.Context, accountID, initiatorUserID string, accountUsers []*types.User) (map[string]*types.UserInfo, error)
123-
SyncUserJWTGroups(ctx context.Context, userAuth nbcontext.UserAuth) error
124+
SyncUserJWTGroups(ctx context.Context, userAuth auth.UserAuth) error
124125
GetStore() store.Store
125126
GetOrCreateAccountByPrivateDomain(ctx context.Context, initiatorId, domain string) (*types.Account, bool, error)
126127
UpdateToPrimaryAccount(ctx context.Context, accountId string) error
127128
GetOwnerInfo(ctx context.Context, accountId string) (*types.UserInfo, error)
128-
GetCurrentUserInfo(ctx context.Context, userAuth nbcontext.UserAuth) (*users.UserInfoWithPermissions, error)
129+
GetCurrentUserInfo(ctx context.Context, userAuth auth.UserAuth) (*users.UserInfoWithPermissions, error)
129130
SetEphemeralManager(em ephemeral.Manager)
130131
AllowSync(string, uint64) bool
131132
}

0 commit comments

Comments
 (0)