-
Added support for an in-memory database provider. This should NOT be used in production, but provides a useful way to perform unit or integration tests.
database: type: memory
-
Added support for custom email address validation rules. Thunder will apply these rules to new email addresses that are used when creating users. You can use any of
startswith
,endswith
,contains
, ordoesnotcontain
along with the value to check against.emailAddressValidation: rules: - check: endswith value: 'my.domain.com'
-
Added
argon
as a supported server-side password hash algorithm, which uses Argon 2 internally.
- Sha256 password hashing no longer logs the generated salt.
-
Added a new constructor for the
User
object in the Java API module that allows construction without specifying a property map (an empty map will be created by default).User user = new User(Email.unverified("test@test.com"), "password");
- Migrated integration tests to use k6.
- Upgraded to Java 21.
- Upgraded ESLint to v9.0.0
-
Support for secret values within Thunder configuration.
If you want to keep specific values in your configuration file a secret, you can now use the
${name-of-secret}
notation.By default, Thunder will try to read secrets from environment variables. You can also specify where Thunder should read secrets from with new configuration:
secrets: provider: [env|secretsmanager]
-
OAuth 2.0 is now a supported authentication mechanism. Currently, JWT tokens that use HMAC or RSA for token signing are supported. Use the following config:
auth: type: oauth hmacSecret: ${thunderHmacSigningSecret} rsaPublicKeyFilePath: "path/to/public-key.der" issuer: "your-issuer-name" audience: "optional-audience-to-verify"
-
Timer and success/failure metrics for both basic and OAuth authentication.
-
Thunder is now more performant as it processes requests asynchronously behind the scenes.
-
Thunder now times out requests after 30 seconds by default. You can customize the timeout duration with the following config:
options: operationTimeout: 20s
- The
setProperty(String, Object)
method onUser
objects has been changed frompublic
topackage-private
in order to avoid potential race conditions.
- Migrated integration tests to use Artillery instead of a custom framework.
- Added load tests to ensure Thunder performs well under load.
- Add ability to perform a full Thunder release through Github Actions.
- Release artifacts into Maven Central on tags with Github Actions.
- Updated the
verifyUser
method in the Java client to return aCompletableFuture<String>
instead of aCompletableFuture<ResponseBody>
.
- Updated the client Javadoc return descriptions.
- OpenAPI (Swagger) specifications are now available at
/openapi.yaml
and/openapi.json
- Swagger UI is available at
/swagger
- New configuration option: Allow common password mistakes
- Ability to use different database providers
- Added MongoDB database provider
- Added Healthcheck for email providers
- Added more metrics for better observability
- New password hashing algorithm:
sha256
- DynamoDB table will be created on application startup if it does not exist
- A Helm chart is available for deploying Thunder to a Kubernetes cluster
- Required
type
option on thedatabase
configuration. - The
md5
password hashing algorithm is no longer available. You should usesha256
instead. - Property validation configuration has changed, and allows for more flexible validation. See the docs for more details:
properties:
allowSubset: [true|false]
allowSuperset: [true|false]
allowed:
- name:
type:
- name:
type:
- Email verification is now disabled by default. There is a new
type
option in the configuration to specify your email provider:
email:
type: [none|ses]
- Additional
User
properties are no longer contained in a JSON object. They should be included directly in theUser
object:
{
"email" : {
"address" : "test@test.com",
"verified" : true,
"verificationToken" : "hashToken"
},
"password" : "12345",
"customBoolean" : true,
"customDouble" : 1.2,
"customInt" : 1,
"customList" : ["hello", "world"],
"customMap" : {
"key" : "value"
},
"customString" : "value"
}
- A potential bug that would cause all of a user's data to be lost when updating a user's email address has been addressed.
- The endpoint used to build
ThunderClient
is no longer required to end in/
. - All methods in
ThunderClient
now return aCompletableFuture<User>
instead of a retrofitCall<User>
.
- Migrated the CI build from
Travis CI
toGitHub Actions CI
. - Migrated Dependabot updates from
dependabot.com
to Github-Native. - Added GitHub Action to automatically check for updates to the Bootstrap CSS version.
- Added Github Action to automatically approve pull requests from Dependabot.
- AWS Java SDK upgraded from
1.11.x
to2.x
async
in/scripts
upgraded from2.6.2
to3.x
-
New endpoint to reset a user's verification status (
POST /verify/reset
). -
Server-side hashing is now available. In the new
passwordHash
configuration, setserverSideHash
totrue
in order to enable it. Server-side hashing will use the algorithm defined in thealgorithm
option. By default, the algorithm issimple
, which does not actually perform a hash. You can also disable the header check for passwords. By default, most endpoints will require thepassword
header to be set to the user's password. To disable this, setheaderCheck
tofalse
.passwordHash: algorithm: [simple|md5|bcrypt] serverSideHash: true headerCheck: true
- When updating a user (
PUT /users
), email verification information can no longer be overwritten. Existing verification status will remain the same, or if the email has been updated, the verification status will be reset. - (docs) Moved user documentation from the Github Wiki to ReadTheDocs.
- (docs) Updated all Javadoc to match new Thunder Javadoc guidelines.
- (docs) Javadoc for generated Dagger source files is no longer generated.
- Support for the new
/verify/reset
endpoint.
- Run all CI tasks on Travis, and run multiple integration tests in CI.
- Update GitHub Issue templates to set default labels and assignees.
aws-java-sdk
1.11.385 -> 1.11.486checkstyle
8.12 -> 8.16dagger
2.17 -> 2.21dropwizard
1.3.5 -> 1.3.8jackson-api
2.9.6 -> 2.9.8jacoco-maven-plugin
0.8.1 -> 0.8.2junit-jupiter
5.2.0 -> 5.3.2junit-platform
1.2.0 -> 1.3.2maven-shade-plugin
3.1.1 -> 3.2.1maven-surefire-plugin
2.22.0 -> 2.22.1mockito
2.21.0 -> 2.23.4nexus-staging-maven-plugin
1.6.7 -> 1.6.8retrofit
2.4.0 -> 2.5.0- Python (Documentation) Dependencies:
sphinx
1.7.7 -> 1.8.2
- Node.js (DevOps) Dependencies:
aws-sdk
2.291.0 -> 2.391.0eslint
5.3.0 -> 5.12.1eslint-config-google
0.9.1 -> 0.11.0thunder-client
0.3.0 -> 0.4.1
-
Property Validation
Additional properties defined in the
User
JSON can be validated onPOST
andPUT
. Simply define theproperties
in the configuration, and they will be automatically validated. To disable validation, do not includeproperties
in the configuration.Example:
properties: - name: myFirstProperty type: string - name: mySecondProperty type: list
Supported property types are:
string
,integer
,double
,boolean
,list
, andmap
. -
Optionally Disable Email Verification
You can now disable email verification if you don't want the endpoints to be active. Simply set the
enabled
option tofalse
:email: enabled: false
-
More Email Configuration Options
Use your own HTML pages or email message bodies, or use a custom subject line! Default ones are provided, but you can specify your own:
email: messageOptions: subject: Welcome to My App bodyHtmlFilePath: /path/to/verification.html bodyTextFilePath: /path/to/verification.txt urlPlaceholderString: PLACEHOLDER successHtmlFilePath: /path/to/success.html
On each
POST
/verify
request, a verification URL will be generated for the specific user and a String replacement will replace theurlPlaceholderString
with the correct URL before sending the message. The default placeholder string isCODEGEN-URL
. -
Documentation on How to Get Started with HTTPS
-
⚠️ PilotUser
has been renamed toUser
-
⚠️ The user object now has an expandable map of properties, so the user JSON is no longer confined to what is defined in the code.Example of new User object:
{ "email" : { "address" : "test@test.com", "verified" : "true", "verificationToken" : "hashToken" }, "password" : "12345", "properties" : { "stringProperty" : "myUserObject", "integerProperty": 1000, "listsWorkToo": ["hello", "world"] } }
This applies to ALL
/user
methods:GET
,POST
,PUT
,DELETE
and ALL/verify
methods:GET
,POST
-
⚠️ All configuration options that used hyphens now are camel-case. For example,table-name
has becometableName
-
⚠️ Theses
configuration object has been renamed toemail
-
⚠️ Thedynamo
configuration object has been renamed todatabase
-
⚠️ The package name for theapi
,application
, andclient
have changed fromcom.sanction.thunder
tocom.sanctionco.thunder
POST
/verify
now correctly checks for a matching user password in the request header before sending the email.
⚠️ PilotUser
renamed toUser
and object definition changed. See theFeatures
section above for more information.
- New logo!
- Multiple custom issue templates added for creating new Github issues
- Enforce Javadoc on class definitions
- Switch to Codecov for coverage reports
- A new integration test format, more thorough tests, and integration tests against the Docker image
- Maven release build adds Javadoc, sources, and GPG signatures
aws-java-sdk
1.11.311 -> 1.11.385checkstyle
8.9 -> 8.12dagger
2.15 -> 2.17dropwizard
1.3.1 -> 1.3.5jackson-api
2.9.5 -> 2.9.6junit
4.12 -> 5.2.0maven-compiler-plugin
3.7.0 -> 3.8.0maven-shade-plugin
2.3 -> 3.1.1maven-surefire-plugin
2.21.0 -> 2.22.0mockito
2.18.0 -> 2.21.0- Node.js (DevOps) Dependencies:
async
2.6.0 -> 2.6.1aws-sdk
2.238.1 -> 2.291.0eslint
4.19.1 -> 5.3.0thunder-client
0.1.0 -> 0.2.0
- Add support for returning HTML in the response for
/verify
⚠️ Upgraded Retrofit from v1.9 to v2.4-
All endpoint URLs passed into
ThunderBuilder
must end in a slash/
-
ThunderClient
now returns aCall<PilotUser>
instead ofPilotUser
. Example:1.1.2 (old):
PilotUser user = thunderClient.getUser("USERNAME", "PASSWORD");
1.2.0 (new):
PilotUser user = thunderClient.getUser("USERNAME", "PASSWORD").execute().body();
-
- Added
sendVerificationEmail()
method that callsPOST /verify
- Added
verifyUser()
overload that provides an option for theResponseType
(either HTML or JSON)
- Added
bootstrap.sh
script to easily bootstrap a new development machine with dependencies - All Node.js code is now being checked for code style using ESLint
- The
thunder-client
code has been moved into its own package here - Introduce a build on GitLab for Docker builds. See the mirror here
- Thunder is now available as a Docker image! Click here
- Added Kubernetes deployment files to easily deploy Thunder on a K8s cluster
- Code coverage is now at 99% 🎉
aws-java-sdk
1.11.275 -> 1.11.311checkstyle
8.2 -> 8.9 [ChangeImportOrder
check toCustomImportOrder
]dagger
2.14.1 -> 2.15dropwizard
1.2.3 -> 1.3.1jackson
2.9.4 -> 2.9.5jacoco-plugin
0.8.0 -> 0.8.1mockito
2.13.0 -> 2.18.0retrofit
1.9.0 -> 2.4.0 [⚠️ Breaking change - see above]- Node.js (DevOps) Dependencies:
argparse
1.0.9 -> 1.0.10aws-sdk
2.192.0 -> 2.224.1
- Travis now runs integration tests on PR checks and commits to master
aws-java-sdk
1.11.273 -> 1.11.275- Node.js (DevOps) Dependencies:
aws-ses-local
1.1.1 -> 1.3.0aws-sdk
2.152.0 -> 2.192.0
- Travis now deploys release jars to the Github Releases Page!
- Bug fix for compiling project on earlier versions of Maven (fixes JitPack build)
aws-java-sdk
1.11.272 -> 1.11.273
- Removed basic auth from
GET /verify
- Fixed bug with the link in sent emails
- Moved SES Configuration to the
config.yaml
, including:endpoint
,region
, andfromAddress
- Added
endpoint
andregion
for DynamoDB to theconfig.yaml
- Replaced Python scripts with improved Node.js scripts
aws-java-sdk
1.11.x -> 1.11.272dagger
2.9 -> 2.14.1dropwizard
1.0.6 -> 1.2.3jackson
2.7.8 -> 2.9.4mockito
1.10.19 -> 2.13.0 [Replaced deprecatedMatchers
withArgumentMatchers
]
- New resource
VerificationResource
. Provides two endpoints:POST /verify
- sends an email to a user providing them the ability to verify their email address. Uses Amazon SES to send the email.GET /verify
- the user is sent to this endpoint in the email, which will handle validating the verification token and marking the user as verified.
- New query parameter
email
forPUT /users
.- This allows for updates to the email address. Put the existing email address as the query parameter, and the new email in the body of the Pilot user.
- Corresponding updates to
ThunderClient
to include the newemail
parameter on theupdateUser()
method.
- Removed Guava and Commons-Codec dependencies, replaced with pure Java 8
- Much improved logging
- Better handling of AWS errors
- Minor code quality improvements
- Replaced the
username
PilotUser field with anemail
field - Reordered the parameters on
getUser()
,updateUser()
, anddeleteUser()
methods inThunderClient
- Moved DynamoDB table name to configuration file
config.yaml
- Upgraded AWS DynamoDB SDK to 1.11.91
- Removed DynamoDB endpoint from configuration file and coded the region in
DynamoDbModule
- Removed DynamoDB endpoint from configuration file and coded the region in
- Upgraded Checkstyle to 7.5.1
- Upgraded Dagger to 2.9
- Upgraded Dropwizard to 1.0.6
- Upgraded Guava to 21.0
- Changed deprecated
Throwables.propagate(e)
tothrow new RuntimeException(e)
- Changed deprecated
- Upgraded Jackson to 2.7.8
- Improved unit testing
- Improved endpoint testing
- Updated documentation
- Fix bug where when DynamoDB was down, the response returned would be an Internal Server Error
- Improve Client unit tests
- Upgrade Dropwizard to 0.9.2
- Upgrade AWS DynamoDB SDK to 1.10.68
- Upgrade Guava to 19.0
- Introduce HeaderParam for user's password for improved security
- Corresponding updates to client to include the password in method calls
- Improved testing
- Better documentation
- Refactored StormUser to PilotUser in light of project change
- Added an ID field to objects in database
- Added authentication to all endpoints
- Added a healthcheck to determine if DynamoDB is available
- Included Dropwizard metrics to count endpoint requests
- Initial pre-release