Changes
1 changed files (+71/-9)
-
-
@@ -27,6 +27,11 @@ func (s *Service) CreateInitialAdmin(ctx context.Context, req *connect.Request[workspaceV2.CreateInitialAdminRequest], ) (*connect.Response[workspaceV2.CreateInitialAdminResponse], error) { logger := s.core.Logger.With( "service", "yamori.workspace.v2.WorkspaceService", "method", "CreateInitialAdmin", ) initialAdminPassword := req.Msg.GetInitialAdminPassword() if initialAdminPassword == "" { return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{
-
@@ -89,31 +94,65 @@ }tx, err := s.core.DB.Begin() if err != nil { return nil, err logger.Error("Failed to begin transaction", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } defer tx.Rollback() ws, err := projection.GetWorkspace(tx) if err != nil { return nil, err logger.Error("Failed to read workspace projection", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } pw, err := projection.GetAdminCreationPassword(tx) if err != nil { return nil, err logger.Error("Failed to read admin_creation_password projection", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } users, err := projection.GetUsers(tx) if err != nil { return nil, err logger.Error("Failed to read users projection", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } if err := event.UpdateProjections(tx, ws, pw, users); err != nil { return nil, err logger.Error("Failed to update projections", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } if pw.Projection.Password == nil { tx.Commit() return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_PasswordExpired{ PasswordExpired: &errorV1.AuthenticationError{},
-
@@ -145,7 +184,14 @@ }id, err := uuid.NewRandom() if err != nil { return nil, err logger.Error("Failed to generate UUID", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Unable to create new ID"), }, }, }), nil } keyID := make([]byte, 32)
-
@@ -158,12 +204,28 @@ workspaceEvent.GrantAdminAccess(id.String()),workspaceEvent.ConfigurePasswordLogin(id.String(), password), }) if err != nil { return nil, err logger.Error("Failed to append events", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } if err := tx.Commit(); err != nil { return nil, err logger.Error("Failed to commit transaction", "error", err) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_SystemError{ SystemError: &errorV1.SystemError{ Message: proto.String("Database error"), }, }, }), nil } logger.Debug("Created an initial admin user", "id", id.String()) return connect.NewResponse(&workspaceV2.CreateInitialAdminResponse{ Result: &workspaceV2.CreateInitialAdminResponse_Ok{
-