* WIP can create project
* WIP can create project more work
* complete body, stencil tests
* feat(shared): move workspace plan types into shared
* test progress wip
* feat(shared): add more logic to canCreateWorkspaceProject
* a few more tests, as a treat
* chore(authz): round out tests
* fixed loaders, new GQL checks, dataLoaders in auth loaders
* fix(authz): get workspace limits loader
* chore(authz): update loaders
* frontend fixed up to snuff
* fix(authz): fix workspace plans for tests
* fix(authz): classic
* fix(authz): 0 counts
---------
Co-authored-by: Chuck Driesler <chuck@speckle.systems>
Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
* feat(regions): repo functions for copying project branches and commits
* chore(regions): wire up move to resolver
* chore(regions): successful basic test of project region change
* fix(regions): sabrina carpenter please please please
* fix(regions): repair multiregion test setup
* chore(regions): appease ts
* chore(multiregion): update test multiregion config
* chore(multiregion): fix test docker config and test
* chore(multiregion): use transaction
* chore(multiregion): maybe this will work
* fix(multiregion): drop subs synchronously
* chore(multiregion): desperate test logs
* chore(multiregion): somehow that worked?
* chore(multiregion): add load-bearing log statement
* chore(multiregion): move services
* fix(multiregion): test drop waits
* chore(regions): fix import
* chore(regions): make test a bit more thorough for good measure
* fix(regions): speed up inserts
* fix(regions): ignore workspace conflict on move
* feat(webhook-service): learn to speak multi region
* feat(fileimport-service): talk multi region to me
* feat(fileuploads, blobs): multi region
* feat(workspaces): update delet workspace with billing and regions
* fix typo
* feat(workspaces): remove old billing resolvers
* test(workspaces): fix tests
* fix(workspaces): remove unused schema
* feat(projects): add project regions, default to null
* feat(multiregion): add projectRegion Db client lookup logic
* feat(multiregion): add project region repositories and caching
* feat(multiRegion): db initialization and get project db client
* feat(docker-compose): add second db for regions testing
* feat(multiRegion): initialize region with pubs and subs working
* fix(multiRegion): get region client even if it was registered in another pod
* feat(workspaces): create workspace resolver split
* feat: update server region metadata
* feat(projects): rewrite project creation
* feat(multiRegion): getRegionDb
* fix(workspaces): get projects now can retur null
* feat(multiRegion): make local multi region DB-s work
* feat: set d efault workspace region
* CR changes
* tests
* feat(multiRegion): bind region properly
* fe update
* test fixes
* feat(multiRegion): automatically create aiven extras plugin
* ci(postgres): use published postgres with aiven extras
* fix(multiRegion): roll back the aiven extras migration, there is a better way
* tests fix
* fix(billing): we do not need to add a seat, if the workspace is on a plan, but has no sub
---------
Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
* feat(workspaces): add workspace sso feature flag
* feat(workspaceSso): wip validate sso
* feat(workspaces): validate and add sso provider to the workspace with user sso sessions
* feat(workspaces): validate and add sso provider to the workspace with user sso sessions
* WIP
* fix(sso): restructure to handle all branches at end of flow
* fix(sso): add and validate emails used for sso
* fix(sso): park progress
* chore(workspaces): review sso login/valdate
* fix(sso): adjust validate url
* chore(sso): auth header puzzle
* fix(sso): happy-path config
* chore(gql): gqlgen
* fix(sso): almost almost
* fix(sso): auth endpoint
* a lil more terse
* fix(sso): light at the end of the tunnel
* fix(sso): improve catch block error messages
* fix(sso): session lifespan => validUntil
* fix(sso): I think we've got it
* feat(sso): limited workspace values for public sso login
* fix(sso): use factory functions
* fix(sso): til decrypt is single-use
* fix(sso): correct usage of access codes
* fix(sso): use finalize middleware in all routes
* chore(sso): cheeky tweak
* fix(sso): move some types around
* fix(sso): stencil final shape I'm sleepy
* fix(sso): more factories more factories
* fix(sso): on to final boss of factories
* fix(sso): needs a haircut but she works
* fix(sso): init rest w function, not side-effects
* fix(sso): /authn => /sso
* chore(sso): errors
* chore(sso): test test test
* chore(sso): test all the corners
* feat(sso): list workspace sso memberships
* chore(sso): tests, expose in rest
* fix(sso): sketch active user auth
* fix(sso): expose search via gql
* fix(sso): active user session information
* chore(sso): sso session test utils
* chore(sso): test sso session repo/services
* chore(sso): gqlgen
* feat(sso): throw error on missing or expired sso session
* chore(sso): tests for SSO access protection
---------
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
* feat(workspaces): add workspace sso feature flag
* feat(workspaceSso): wip validate sso
* feat(workspaces): validate and add sso provider to the workspace with user sso sessions
* feat(workspaces): validate and add sso provider to the workspace with user sso sessions
* WIP
* fix(sso): restructure to handle all branches at end of flow
* fix(sso): add and validate emails used for sso
* fix(sso): park progress
* chore(workspaces): review sso login/valdate
* fix(sso): adjust validate url
* chore(sso): auth header puzzle
* fix(sso): happy-path config
* chore(gql): gqlgen
* fix(sso): almost almost
* fix(sso): auth endpoint
* a lil more terse
* fix(sso): light at the end of the tunnel
* fix(sso): improve catch block error messages
* fix(sso): session lifespan => validUntil
* fix(sso): I think we've got it
* feat(sso): limited workspace values for public sso login
* fix(sso): use factory functions
* fix(sso): til decrypt is single-use
* fix(sso): correct usage of access codes
* fix(sso): use finalize middleware in all routes
* chore(sso): cheeky tweak
* fix(sso): move some types around
* fix(sso): stencil final shape I'm sleepy
* fix(sso): more factories more factories
* fix(sso): on to final boss of factories
* fix(sso): needs a haircut but she works
* fix(sso): init rest w function, not side-effects
* fix(sso): /authn => /sso
* chore(sso): errors
* chore(sso): test test test
* chore(sso): test all the corners
---------
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
* fix(errors): all error should define a status code (default is 500)
- rename NoInviteFoundError to InviteNotFoundError to match xNotFoundError pattern
* remove unused errors
* feat(workspaces): enable default project role in workspace
* fix(workspaces): not satisfying
* chore(workspaces): phrasing
* fix(workspaces): use new field in role mapping
* chore(workspaces): use roles
* fix(workspaces): update tests
* fix(workspaces): more parallel role update errors
* chore(workspaces): like this now
* chore(workspaces): revert changes to deps
* fix(workspaces): assert domain type conversion at gql layer
* fix(workspaces): repair tests
* fix(workspaces): fix more tests
* fix(users): verified should be a public limited user field
* feat(workspaceSecurity): update security tab copy
* feat(workspaces): add limited user domain policy compliance check
* Implemented workspace general page
* Added notifications to user input
* Allowed non-admins to view but not edit
* Added redirect to homeroute
* Fixed validation
* Squashed commit of the following:
commit 7bf14ab8af0f76b4c9d0aa87fc08085af7c34959
Author: Chuck Driesler <chuck@speckle.systems>
Date: Tue Aug 6 19:40:50 2024 +0200
mob next [ci-skip] [ci skip] [skip ci]
lastFile:packages/server/modules/workspacesCore/migrations/20240806160740_workspace_domains.ts
commit 8aa3fb0cb052c10eeeb83bf9874ae0d1c065e480
Author: Alessandro Magionami <alessandro.magionami@gmail.com>
Date: Tue Aug 6 18:54:15 2024 +0200
mob next [ci-skip] [ci skip] [skip ci]
lastFile:packages/server/modules/core/domain/userEmails/operations.ts
commit 66dfd0cf6c15a789c8f96a65a3168323e83a7b9e
Author: Chuck Driesler <chuck@speckle.systems>
Date: Tue Aug 6 18:30:22 2024 +0200
mob next [ci-skip] [ci skip] [skip ci]
lastFile:packages/server/modules/workspacesCore/domain/types.ts
Co-authored-by: Alessandro Magionami <alessandro.magionami@gmail.com>
* Move General to workspaces folder
* feat(workspaces): inputs on security section
* feat(workspaces): add domain to workspace mutation
* chore(workspaces): add blocked domains list
* fix(workspaces): modals with buttons
* feat(workspaceDomains): delete domain
* fix(workspaces): use mutation
* fix(workspaces): present user verified domains as options
* Moved sidebar menu to a composable
* Added coming soon tag back
* feat(workspaces): create domains resolver for workspace
* chore(workspaces): fix tests
* chore(workspaces): fix types
* chore(workspaces): fix linter
* fix(workspaces): do some delete I think
* chore(workspaces): add domainBasedMembershipProtectionEnabled field to workspace
* chore(workspaces): improve validation for email domain
* fix(workspace): query and do the thing
* chore(workspaces): add graphql schema for domainBasedMembershipProtection
* chore(workspaces): lint and test failures
* fix(workspaces): test issues w new field
* feat(workspaces): add discoverability flag
* chore(workspaces): they made me do it
* feat(workspaces): enable toggling domain protection
* feat(workspaces): add discoverability toggle to workspace settings
* feat(workspace): auto enable discoverability on first domain registration
* feat(workspace): discoverability toggle fixes
* fix(eventBus): fix tests
* feat(workspaces): user discoverable workspaces (#2620)
* feat(workspaces): it works just trust me
* fix(workspaces): don't worry about it
* fix(workspaces); happy path success
* fix(workspaces): almost there
* fix(workspaces): successful tests!
* fix(workspaces): we have DISCOVERED (#2621)
* Fixed linting issue
* Updated query
* Updated validation rules
* Updated validation rules
* Fix unsaved file with type export
* Addressed PR comments
* Updated cache
* Updated item classes, add fragment back
* Gergo/web 1574 join workspaces via discovery (#2623)
* chore(useremails): add find verified emails by user function
* chore(workspace): table helper for workspace domains
* chore(workspace): get workspace with domains function
* chore(workspace): test get workspace with domains function
* feat(workspace): restrict workspace membership when updating workspace role
* chore(workspaces): fix types
* feat(workspaces): WIP join
* feat(workspaces): join button makes u join
* chore(useremails): fix type for find verified emails function
* feat(workspaces): join
* feat(workspace): prevent inviting user without email matching domain
* chore(workspaces): fix linter
* fix(workspaces): invoke join (gergo wrote this)
* fuck
* fix(workspaces): properly get discoverable workspaces
* fix(workspaces): test
---------
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
Co-authored-by: Chuck Driesler <chuck@speckle.systems>
* fix(workspaces): some query stuff
* fix(workspaces): mutate cache instead of refetch
* fix(workspaces): more adjustments to gql query and fragment structure
* fix(workspaces): queries, style, structure
* fix(workspaces): match discoverability with current styles
* chore(workspaces): lint lint lint
* fix(workspaces): got it twisted
* chore(workspaces): fix test
* fix(workspaces): route to joined workspace on join
---------
Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
Co-authored-by: Chuck Driesler <chuck@speckle.systems>
Co-authored-by: Alessandro Magionami <alessandro.magionami@gmail.com>
* prep for new resources algo
* typescriptifying stuff
* minor types fix
* migrate to resources col
* repo & creation updated, WIP processing/retrieval
* WIP invite processing
* finished finalization refactor
* project invite management
* transformed all invites services
* fixed up projects & core serverinvites resolvers
* test fixes
* WIP workspace create GQL & test
* basic invite creation test works
* a buncha working tests
* more tests
* cancelation tests
* minor invite use refactor
* invite retrieval tasks
* invite use() works as expected
* filtering out broken invites
* enabled invite retrieval by token irregardless of who is it for
* minor adjustments
* tests fix
* test config improvements
* test env adjustment
* extra test case
* making resource access limits harder to ignore
* linter fixes
* eventBus type cleanup
* better generic names
* refactored serverinvites resource migration
* fix(server): better error message in project invite edge case
* feat(workspaces): drop createdByUserId from the dataschema
* feat(workspaces): repositories WIP
* merge
* protect against removing last admin in workspace
* quick impl and stub tests
* add tests
* services
* unit tests for role services
* feat(workspaces): authorize project creation if workspace specified
* feat(workspaces): emit project created event
* feat(workspaces): assign roles on project create in workspace
* feat(workspaces): update project roles when user added to workspace
* feat(workspaces): stencil gql resolvers
* fix(workspaces): lol lmao
* fix(workspaces): perform automatic project role update in service function
* fix(workspaces): also delete roles
* fix(workspaces): broke tests again oops
* fix(workspaces): update `onProjectCreated` listener to use new repo method
* fix(workspaces): use service function in event listener
* fix(workspaces): get workspace projects via existing stream repo functions
* fix(workspaces): roles mapping in domain, use enum
* feat(workspaces): stencil gql api and resolvers
* fix(workspaces): repair type reference in tests
* fix(workspaces): consolidate files, use different existing stream-getter
* fix(workspaces): more specific error
* fix(workspaces): roles and scopes
* fix(workspaces): yield per page
* fix(workspaces): some test dry
* fix(workspaces): superdry
* fix(workspaces): add scopes
* fix(workspaces): classic
* feat(workspaces): create workspace mutation
* feat(workspaces): I'm sure everything will be fine
* fix(workspaces): yep
* fix(workspaces): successful gql e2e test
* feat(workspaces): update workspace resolver
* chore(workspaces): update resolver test
* feat(workspaces): some retrieval resolvers
* chore(workspaces): tests for query resolvers
* fix(chore): revert temp test command change
* fix(workspaces): test structure and gql types
* fix(workspaces): validate user authz to perform some operations
* fix(workspaces): use existing test infrastructure
* fix(workspaces): stop `isPublic` check if authorizing a workspace resource
* fix(workspaces): better test hygiene
---------
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
* feat(workspaces): drop createdByUserId from the dataschema
* feat(workspaces): repositories WIP
* merge
* protect against removing last admin in workspace
* quick impl and stub tests
* add tests
* services
* unit tests for role services
* feat(workspaces): authorize project creation if workspace specified
* feat(workspaces): emit project created event
* feat(workspaces): assign roles on project create in workspace
* feat(workspaces): update project roles when user added to workspace
* fix(workspaces): perform automatic project role update in service function
* fix(workspaces): also delete roles
* fix(workspaces): broke tests again oops
* fix(workspaces): update `onProjectCreated` listener to use new repo method
* fix(workspaces): use service function in event listener
* fix(workspaces): get workspace projects via existing stream repo functions
* fix(workspaces): roles mapping in domain, use enum
* fix(workspaces): repair type reference in tests
* fix(workspaces): consolidate files, use different existing stream-getter
* fix(workspaces): more specific error
* fix(workspaces): yield per page
* fix(workspaces): some test dry
* fix(workspaces): superdry
* fix(workspaces): classic
---------
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>