mirror of
https://github.com/aykhans/slash-e.git
synced 2025-04-15 03:43:13 +00:00
fix: golangci linter
This commit is contained in:
parent
efb631e906
commit
8fb0fe7fb5
2
.github/workflows/backend-tests.yml
vendored
2
.github/workflows/backend-tests.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
|||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
uses: golangci/golangci-lint-action@v6
|
uses: golangci/golangci-lint-action@v6
|
||||||
with:
|
with:
|
||||||
version: v1.56.1
|
version: v1.61.0
|
||||||
args: --verbose --timeout=3m
|
args: --verbose --timeout=3m
|
||||||
skip-cache: true
|
skip-cache: true
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ func (s *APIV1Service) SignIn(ctx context.Context, request *v1pb.SignInRequest)
|
|||||||
Email: &request.Email,
|
Email: &request.Email,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to find user by email %s", request.Email))
|
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
|
||||||
}
|
}
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, unmatchedEmailAndPasswordError)
|
return nil, status.Errorf(codes.InvalidArgument, unmatchedEmailAndPasswordError)
|
||||||
@ -53,17 +53,17 @@ func (s *APIV1Service) SignIn(ctx context.Context, request *v1pb.SignInRequest)
|
|||||||
|
|
||||||
workspaceSecuritySetting, err := s.Store.GetWorkspaceSecuritySetting(ctx)
|
workspaceSecuritySetting, err := s.Store.GetWorkspaceSecuritySetting(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to get workspace security setting, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to get workspace security setting: %v", err)
|
||||||
}
|
}
|
||||||
if workspaceSecuritySetting.DisallowPasswordAuth && user.Role == store.RoleUser {
|
if workspaceSecuritySetting.DisallowPasswordAuth && user.Role == store.RoleUser {
|
||||||
return nil, status.Errorf(codes.PermissionDenied, "password authentication is not allowed")
|
return nil, status.Errorf(codes.PermissionDenied, "password authentication is not allowed")
|
||||||
}
|
}
|
||||||
if user.RowStatus == storepb.RowStatus_ARCHIVED {
|
if user.RowStatus == storepb.RowStatus_ARCHIVED {
|
||||||
return nil, status.Errorf(codes.PermissionDenied, fmt.Sprintf("user has been archived with email %s", request.Email))
|
return nil, status.Errorf(codes.PermissionDenied, "user has been archived")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to sign in, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to sign in: %v", err)
|
||||||
}
|
}
|
||||||
return convertUserFromStore(user), nil
|
return convertUserFromStore(user), nil
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ func (s *APIV1Service) SignInWithSSO(ctx context.Context, request *v1pb.SignInWi
|
|||||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER,
|
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to get workspace setting, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to get workspace setting, err: %s", err)
|
||||||
}
|
}
|
||||||
if identityProviderSetting == nil || identityProviderSetting.GetIdentityProvider() == nil {
|
if identityProviderSetting == nil || identityProviderSetting.GetIdentityProvider() == nil {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, "identity provider not found")
|
return nil, status.Errorf(codes.InvalidArgument, "identity provider not found")
|
||||||
@ -90,34 +90,34 @@ func (s *APIV1Service) SignInWithSSO(ctx context.Context, request *v1pb.SignInWi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if identityProvider == nil {
|
if identityProvider == nil {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, fmt.Sprintf("identity provider not found with name %s", request.IdpId))
|
return nil, status.Errorf(codes.InvalidArgument, "identity provider not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
var userInfo *idp.IdentityProviderUserInfo
|
var userInfo *idp.IdentityProviderUserInfo
|
||||||
if identityProvider.Type == storepb.IdentityProvider_OAUTH2 {
|
if identityProvider.Type == storepb.IdentityProvider_OAUTH2 {
|
||||||
oauth2IdentityProvider, err := oauth2.NewIdentityProvider(identityProvider.Config.GetOauth2())
|
oauth2IdentityProvider, err := oauth2.NewIdentityProvider(identityProvider.Config.GetOauth2())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to create oauth2 identity provider, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to create oauth2 identity provider, err: %s", err)
|
||||||
}
|
}
|
||||||
token, err := oauth2IdentityProvider.ExchangeToken(ctx, request.RedirectUri, request.Code)
|
token, err := oauth2IdentityProvider.ExchangeToken(ctx, request.RedirectUri, request.Code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to exchange token, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to exchange token, err: %s", err)
|
||||||
}
|
}
|
||||||
userInfo, err = oauth2IdentityProvider.UserInfo(token)
|
userInfo, err = oauth2IdentityProvider.UserInfo(token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to get user info, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to get user info, err: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
email := userInfo.Identifier
|
email := userInfo.Identifier
|
||||||
if !util.ValidateEmail(email) {
|
if !util.ValidateEmail(email) {
|
||||||
return nil, status.Errorf(codes.InvalidArgument, fmt.Sprintf("invalid email %s", email))
|
return nil, status.Errorf(codes.InvalidArgument, "invalid email address")
|
||||||
}
|
}
|
||||||
user, err := s.Store.GetUser(ctx, &store.FindUser{
|
user, err := s.Store.GetUser(ctx, &store.FindUser{
|
||||||
Email: &email,
|
Email: &email,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to find user by email %s", email))
|
return nil, status.Errorf(codes.Internal, "failed to get user, err: %s", err)
|
||||||
}
|
}
|
||||||
if user == nil {
|
if user == nil {
|
||||||
if err := s.checkSeatAvailability(ctx); err != nil {
|
if err := s.checkSeatAvailability(ctx); err != nil {
|
||||||
@ -131,24 +131,24 @@ func (s *APIV1Service) SignInWithSSO(ctx context.Context, request *v1pb.SignInWi
|
|||||||
}
|
}
|
||||||
password, err := util.RandomString(20)
|
password, err := util.RandomString(20)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to generate random password, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to generate random password, err: %s", err)
|
||||||
}
|
}
|
||||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
passwordHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to generate password hash, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to generate password hash, err: %s", err)
|
||||||
}
|
}
|
||||||
userCreate.PasswordHash = string(passwordHash)
|
userCreate.PasswordHash = string(passwordHash)
|
||||||
user, err = s.Store.CreateUser(ctx, userCreate)
|
user, err = s.Store.CreateUser(ctx, userCreate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to create user, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to create user, err: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if user.RowStatus == storepb.RowStatus_ARCHIVED {
|
if user.RowStatus == storepb.RowStatus_ARCHIVED {
|
||||||
return nil, status.Errorf(codes.PermissionDenied, fmt.Sprintf("user has been archived with email %s", email))
|
return nil, status.Errorf(codes.PermissionDenied, "user has been archived")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to sign in, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to sign in, err: %s", err)
|
||||||
}
|
}
|
||||||
return convertUserFromStore(user), nil
|
return convertUserFromStore(user), nil
|
||||||
}
|
}
|
||||||
@ -156,7 +156,7 @@ func (s *APIV1Service) SignInWithSSO(ctx context.Context, request *v1pb.SignInWi
|
|||||||
func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest) (*v1pb.User, error) {
|
func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest) (*v1pb.User, error) {
|
||||||
workspaceSecuritySetting, err := s.Store.GetWorkspaceSecuritySetting(ctx)
|
workspaceSecuritySetting, err := s.Store.GetWorkspaceSecuritySetting(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to get workspace security setting, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to get workspace security setting: %v", err)
|
||||||
}
|
}
|
||||||
if workspaceSecuritySetting.DisallowUserRegistration {
|
if workspaceSecuritySetting.DisallowUserRegistration {
|
||||||
return nil, status.Errorf(codes.PermissionDenied, "sign up is not allowed")
|
return nil, status.Errorf(codes.PermissionDenied, "sign up is not allowed")
|
||||||
@ -169,7 +169,7 @@ func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest)
|
|||||||
|
|
||||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(request.Password), bcrypt.DefaultCost)
|
passwordHash, err := bcrypt.GenerateFromPassword([]byte(request.Password), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to generate password hash, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to generate password hash: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
create := &store.User{
|
create := &store.User{
|
||||||
@ -179,7 +179,7 @@ func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest)
|
|||||||
}
|
}
|
||||||
existingUsers, err := s.Store.ListUsers(ctx, &store.FindUser{})
|
existingUsers, err := s.Store.ListUsers(ctx, &store.FindUser{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to list users, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to list users: %v", err)
|
||||||
}
|
}
|
||||||
// The first user to sign up is an admin by default.
|
// The first user to sign up is an admin by default.
|
||||||
if len(existingUsers) == 0 {
|
if len(existingUsers) == 0 {
|
||||||
@ -190,10 +190,10 @@ func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest)
|
|||||||
|
|
||||||
user, err := s.Store.CreateUser(ctx, create)
|
user, err := s.Store.CreateUser(ctx, create)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to create user, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to create user: %v", err)
|
||||||
}
|
}
|
||||||
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
if err := s.doSignIn(ctx, user, time.Now().Add(AccessTokenDuration)); err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to sign in, err: %s", err))
|
return nil, status.Errorf(codes.Internal, "failed to sign in: %v", err)
|
||||||
}
|
}
|
||||||
return convertUserFromStore(user), nil
|
return convertUserFromStore(user), nil
|
||||||
}
|
}
|
||||||
@ -201,10 +201,10 @@ func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest)
|
|||||||
func (s *APIV1Service) doSignIn(ctx context.Context, user *store.User, expireTime time.Time) error {
|
func (s *APIV1Service) doSignIn(ctx context.Context, user *store.User, expireTime time.Time) error {
|
||||||
accessToken, err := GenerateAccessToken(user.Email, user.ID, expireTime, []byte(s.Secret))
|
accessToken, err := GenerateAccessToken(user.Email, user.ID, expireTime, []byte(s.Secret))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return status.Errorf(codes.Internal, fmt.Sprintf("failed to generate tokens, err: %s", err))
|
return status.Errorf(codes.Internal, "failed to generate access token: %v", err)
|
||||||
}
|
}
|
||||||
if err := s.UpsertAccessTokenToStore(ctx, user, accessToken, "user login"); err != nil {
|
if err := s.UpsertAccessTokenToStore(ctx, user, accessToken, "user login"); err != nil {
|
||||||
return status.Errorf(codes.Internal, fmt.Sprintf("failed to upsert access token to store, err: %s", err))
|
return status.Errorf(codes.Internal, "failed to upsert access token to store: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cookie := fmt.Sprintf("%s=%s; Path=/; Expires=%s; HttpOnly; SameSite=Strict", AccessTokenCookieName, accessToken, time.Now().Add(AccessTokenDuration).Format(time.RFC1123))
|
cookie := fmt.Sprintf("%s=%s; Path=/; Expires=%s; HttpOnly; SameSite=Strict", AccessTokenCookieName, accessToken, time.Now().Add(AccessTokenDuration).Format(time.RFC1123))
|
||||||
@ -231,7 +231,7 @@ func (s *APIV1Service) checkSeatAvailability(ctx context.Context) error {
|
|||||||
if !s.LicenseService.IsFeatureEnabled(license.FeatureTypeUnlimitedAccounts) {
|
if !s.LicenseService.IsFeatureEnabled(license.FeatureTypeUnlimitedAccounts) {
|
||||||
userList, err := s.Store.ListUsers(ctx, &store.FindUser{})
|
userList, err := s.Store.ListUsers(ctx, &store.FindUser{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return status.Errorf(codes.Internal, fmt.Sprintf("failed to list users, err: %s", err))
|
return status.Errorf(codes.Internal, "failed to list users: %v", err)
|
||||||
}
|
}
|
||||||
seats := s.LicenseService.GetSubscription().Seats
|
seats := s.LicenseService.GetSubscription().Seats
|
||||||
if len(userList) >= int(seats) {
|
if len(userList) >= int(seats) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user