.. title:: Features
.. _features:
########
Features
########
REST API for user object operations
===================================
At its core, Thunder is a REST API that provides endpoints to manage user accounts and information.
Your frontend application can use Thunder to create, retrieve, update, and delete user accounts.
All of the user information is stored in a database that Thunder interfaces with.
Multiple Database Providers
===========================
Thunder provides implementations for multiple database providers so that you can use the database
of your choice. Currently, Thunder supports Amazon DynamoDB and MongoDB, with support for additional
providers coming in the near future. See :ref:`configuration-database` for more information on
configuring a specific database provider.
Email Verification
==================
Thunder provides functionality to send verification emails and keep email verification state.
``POST`` requests to ``/verify`` will send a verification email with a verification URL. ``GET``
requests to ``/verify`` will mark the email address as verified. Finally, applications can also
reset the verification status of a user's email address for any reason at ``/verify/reset``.
.. note::
Thunder currently relies on Simple Email Service (SES) to send emails, so an AWS account is
required if email verification is enabled for your instance of Thunder.
Server-Side Password Hashing
============================
Thunder can perform server-side password hashing of user passwords. By default in version 2.0+,
Thunder will not hash any user passwords. However, you can enable this in your configuration, and
additionally specify the hashing algorithm to be used. See :ref:`configuration-hash` for more
information on the configuration options.
Secrets Fetching
================
Thunder is able to fetch values defined in your configuration file from a secrets provider. This is
particularly useful for configuration such as a MongoDB connection string, or the secret key used
to validate HMAC-SHA signed JWT tokens. See :ref:`configuration-secrets` for more information.
Basic Authentication or OAuth 2.0
=================================
Thunder requires authentication from clients when making requests to the API. This authentication
can be configured to be either basic authentication (with a user-defined list of allowed
username/password combinations), or OAuth 2.0 authentication. When using OAuth 2.0, you must have
a separate service that will supply OAuth JWT tokens, which clients will then send to Thunder in the
Authorization header. Thunder will verify that the JWT tokens it receives are valid and that they
contain the right claims specified by the user in the configuration file. See :ref:`configuration-auth`
for more information.
Additional User Properties
==========================
Thunder always requires that your user objects contain an email address and a password. However,
you can include any additional number of properties in your user objects. By default, additional
user properties are flexible and Thunder will not perform any validation of these properties. For
example, you can create two users like the following:
User 1
------
.. code-block:: json
{
"email": "sampleuser@sanctionco.com",
"password": "hunter2",
"appId": 1234567890
}
User 2
------
.. code-block:: json
{
"email": "seconduser@sanctionco.com",
"password": "hunter3",
"appId": 1234567890,
"additionalProperty": "So many properties!"
}
and Thunder will accept both.
You can also configure Thunder to perform validation on these properties to ensure that all users
have the same properties and that they are the correct type (String, Integer, Double, etc). See
:ref:`configuration-properties` for more information on the configuration options.
Customizable Email Contents
===========================
The contents of verification emails can be completely customized. See :ref:`configuration-email`
for more information on the configuration options.
Customizable Verification Success Page
======================================
The success page that is shown to the end-user when their email is successfully verified can be
customized. See :ref:`configuration-email` for more information on the configuration options.
Generated OpenAPI (Swagger) Specifications
==========================================
Thunder offers generated `OpenAPI `_ documentation
that is available at the ``/openapi.yaml`` or ``/openapi.json`` endpoints. This generated
documentation can be used to automatically generate client libraries that are supported by the
`openapi-generator `_. Additionally, Thunder runs
Swagger UI at the ``/swagger`` endpoint. You can use the UI to view all of the available endpoints
as well as to make requests against the API.
Official Docker Image
=====================
Thunder provides an `official Docker image `_ so that
your instance of Thunder can be easily run in a container environment. There is also documentation
on how to run Thunder in Kubernetes.
Client Libraries
================
Thunder provides client libraries for easy communication between your application and your instance
of Thunder. See :ref:`client-libraries` for more information on the client libraries.