- As part of merging support for Template RBAC
and user groups a permission check on reading files
was relaxed.
With the addition of admin roles on individual templates, regular
users are now able to push template versions if they have
inherited the 'admin' role for a template. In order to do so
they need to be able to create and read their own files. Since
collisions on hash in the past were ignored, this means that a regular user
who pushes a template version with a file hash that collides with
an existing hash will not be able to read the file (since it belongs to
another user).
This commit fixes the underlying problem which was that
the files table had a primary key on the 'hash' column.
This was not a problem at the time because only template
admins and other users with similar elevated roles were
able to read all files regardless of ownership. To fix this
a new column and primary key 'id' has been introduced to the files
table. The unique constraint has been updated to be hash+created_by.
Tables (provisioner_jobs) that referenced files.hash have been updated
to reference files.id. Relevant API endpoints have also been updated.
- With the support of OIDC we began processing updates to a user's
email and username to stay in sync with the upstream provider. This
can cause issues in templates that use the user's username as a stable
identifier, potentially causing the deletion of user's home volumes.
- Fix some faulty error wrapping.
- move OAuth-related fields off of api_keys into a new user_links table
- restrict users to single form of login
- process updates to user email/usernames for OIDC
- added a login_type column to users
* chore: improve dump error output
- Properly report the error that occurs during the DB connection retry
loop.
- Fail fatally if migration is unsuccessful.
- Problems can arise spawning workspaces if a schemeless URL is passed
as the access URL.
If an access url is detected to not have an "http" or "https" scheme
then it is prepended with "https". If the hostname is detected
to be a loopback device then "http" is preferred.
- If the name is not specified the current working directory
name is used or the name specified by "--directory". This
reflects 'templates create" behavior.
* fix: Add reaper to coder agent
- The coder agent runs as PID 1 in some of our Docker workspaces.
In such cases it is the responsibility of the init process to
reap dead processes. Failing to do so can result in an inability
to create new processes by running out of PIDs.
This PR adds a reaper to our agent that is only spawned if it
detects that it is PID1.
- When a workspace is deleted the user is nudged
to create a new workspace. The page to which they
are routed 404s. This PR simply routes them to the
/templates page where they can pick a template for their
new workspace.
- Previously, specifying 'no' to the tunnel prompt just killed
the process. It should be possible to start the server without
a tunnel and not have the process killed.