Age | Commit message (Collapse) | Author |
|
Implement the "Authorization Code Flow" for the authentication of users.
* gn3/auth/authentication/oauth2/grants/authorisation_code_grant.py: query and
save the authorisation code.
* gn3/auth/authentication/oauth2/models/authorization_code.py: Implement the
`AuthorisationCode` model
* gn3/auth/authentication/oauth2/models/oauth2client.py: Fix typo
* gn3/auth/authentication/oauth2/server.py: Register the
`AuthorisationCodeGrant` grant with the server.
* gn3/auth/authentication/oauth2/views.py: Implement `/authorise` endpoint
* gn3/templates/base.html: New HTML Templates of authorisation UI
* gn3/templates/common-macros.html: New HTML Templates of authorisation UI
* gn3/templates/oauth2/authorise-user.html: New HTML Templates of
authorisation UI
* main.py: Allow both "code" and "token" response types.
|
|
With the assignment of `system:*` privileges to roles, we need to check for
their existence when doing authorisation.
This commit provides a hack for that, seeing as user groups (and the system
itself) are not treated as resources, and therefore the way to fetch the
privileges is not entirely consistent.
|
|
While creating new group roles, enable the listing of non-resource privileges,
e.g. `system:group:*` and `system:user:*` that the user has to allow for them
to be used in role creation.
|
|
|
|
|
|
|
|
|
|
Some roles should not be user-editable, and as such, we need to check before
allowing any edits on such roles. This commit makes that possible.
|
|
Previously, the `oauth2/data/authorisation` endpoint was returning hard-coded
values for the privileges assigned to the user for each resource. In this
change, we rework to return the actual privileges for the user.
|
|
|
|
|
|
|
|
|
|
Fix bugs with setting up of the selected traits for use while filtering the
search results.
|
|
|
|
|
|
|
|
|
|
Decouple the `gn3.db_utils` module from the global `flask.current_app` object,
ensuring that the database uri value is passed in as a required argument to
the `gn3.db_utils.database_connection` function.
|
|
We need a search through the available phenotype traits in the database when
linking the traits to user groups. Unfortunately, the Xapian Search indexes do
not (and should not) include the internal identifiers we use to disambiguate
the traits.
On the other hand, we do not want to present the user with traits that have
already been linked to any user group within the search results.
The script in this commit, together with the modified queries for fetching the
phenotype data form a "hack" of sorts to wrap around the way the search works
while ensuring we do not present the user with "non-actionable" (linked)
traits in the search results.
|
|
To avoid application context errors in external scripts, disconnect the
`gn3.auth.db` module from the `flask.current_app` dependency.
|
|
|
|
|
|
|
|
When a user selects some datasets and does a new search, we filter out the
selected datasets too, even though they are yet to be linked.
|
|
|
|
|
|
|
|
Fix the bug where the system was trying to load a user from a non-existing
OAuth2 client, leading to an exception.
|
|
This is an initial attempt: it does not allow a search to be carried out
across the data available in the database.
I will need to rework this, probably start from the UI and work backward.
|
|
|
|
Enable the 'OFFSET' clause in the queries to allow for progressive fetching of
data from the database using the 'Previous' and 'Next' buttons.
|
|
For Phenotypes, list the Phenotype traits rather than the dataset(s).
|
|
|
|
|
|
Rework the migration trigger endpoint such that it does a bulk import of all
the resources in the redis store.
It also expects that the user that triggers the migration have the appropriate
privileges.
|
|
|
|
The functions that fetch the unlinked data have checks to ensure they are
called by users with the appropriate privileges. This commit enables a
temporary escalation of privileges to enable fetching the data, so as to allow
successful data migration.
|
|
Due to the fact that the data migration requires higher privileges than the
user details, separate the user details migration endpoint from the data
migrations endpoint.
|
|
|
|
Implement the code to migrate the data from redis to SQLite.
|
|
Provide an outline of the data migration steps to be taken from some results
of the experiments with the data in redis.
|
|
The introspection endpoint could contain privileged information, thus requires
that the endpoint be protected. This commit ensures that a user has
authenticated to the system and that the client they are using be one of the
allowed clients.
|
|
To avoid repeating the same thing in multiple places, leading to errors and
breakages, reuse the same basic functions for password hashing.
|
|
Bcrypt is now somewhat vulnerable to offline cracking, so we move our password
hashing over to Argon2.
|
|
|
|
|
|
Fetching the user by id should return the user, or raise an exception. We get
rid of the Maybe monad here since it is leading to some weird code flows -
probably the wrong monad to use here.
|
|
|
|
|