Giter Club home page Giter Club logo

auth0-deploy's Introduction

auth0-rules

Rules used for the Auth0 instances of Mozilla. You can find more information about Auth0 at https://www.auth0.com

The rules are snippets of javascript code running as webtasks (https://www.webtask.io), which modify the authentication flow of users in Auth0.

Branches

master: The master branch is used for development of rules and are auto-deployed on https://manage-dev.mozilla.auth0.com/

production: /!\ The production branch is used for deployments to the production Auth0 tenant. Deployment from the production branch to the production tenant is triggered by a manual execution of a CodeBuild job

Deployment & CI

Rules are deployed with auth0-ci https://github.com/mozilla-iam/auth0-ci after CI has completed. For testing, this looks like this:

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ uploader_rules.py <args>

Development

How do I know which nodejs modules are available to me?

At this time Auth0 runs nodejs8. The module list that is cached inside webtasks is listed here: https://auth0-extensions.github.io/canirequire/#rsa

Style

The primary goal is to follow the style of the Auth0 example rules. This appears to follow the Google JavaScript Style Guide in some ways as there are trailing semi-colon characters. In other ways the Auth0 rules do not follow the Google style as some contain var declarations Try to follow the Google style in the Mozilla rules in this repo.

Development cycle

This is the cycle today. In the future we hopefully add CI driven tests. This cycle could be improved.

Please note that for any large change (i.e. anything but a single rule change), it is recommended to backup the current rules before deploying. You can do this by following the run-book at https://mana.mozilla.org/wiki/display/SECURITY/Create+and+reload+auth0+rules+backup

  1. Write a rule in your local fork of the repo
  2. Run uploader_rules.py -r rules to deploy the uncommitted rule to auth0-dev
  3. Do manual testing in auth0-dev to determine if the rule does what you want
  4. Iterate steps 1-3 until you have a rule that works
  5. Remove the new rule from auth0-dev. This could be done by checking out master (which doesn't have the rule) and again running uploader_rules.py -r rules
  6. Push your branch to your fork and create a PR with your new rule, requesting a review of the PR.
  7. Someone reviews the PR, either suggesting changes or approving
  8. Merge the PR
  9. CI deploys the PR to auth0-dev
    • This CI runs in AWS CodeBuild in the mozilla-iam (320464205386) AWS account in the us-west-2 region in the AWS CodeBuild project auth0-deploy-stage.
    • The CodeBuild project follows the buildspec.yml which calls the Makefile which calls the uploader_rules.py tool which is installed from the auth0-ci project.
  10. Manually test again in auth0-dev to validate that the rule works. This is the stage to do more thorough testing as this is the last step before production deployment
  11. If testing validates the rule is good, create a second PR from master to production, requesting review and referencing in the text of the PR the first PR which contains the initial review. Ideally the changes in the first dev PR and this prod PR will be the same and the reviewer can leverage the dev PR's review. If that's not the case a new thorough review would be needed.
  12. During change window, merge the PR. Now you have to manually run the Codebuild job auth0-deploy-prod which will deploy the rules to the Auth0 production instance. You can do this using the AWS cli running aws codebuild start-build --project-name auth0-deploy-prod, or using the AWS UI console navigating to Codebuild, choosing 'auth0-deploy-prod', pressing 'Start build' and pressing again 'Start build' in the next screen. Once the job finish successfully, all the rules should be uploaded to Auth0 prod.
  13. Test in prod to make sure everything works and rollback if it doesn't.

Testing

Test are run by GitHub actions on every Pull Request. To run the tests locally, first setup your testing environment.

This is a one time step

  • cd tests
  • npm install

Next run the tests

  • cd tests
  • npm run tests

Known Issues

Auth0 Rule Web UI jshint configuration

The Auth0 web UI where you can view and modify rules, for example at https://manage-dev.mozilla.auth0.com/dashboard/pi/auth-dev/rules has a jshint built in which isn't aware that Auth0 rules are run under Node version 8.11.4 and as a result shows errors for things like require and let. To work around this add this to the top of your rule

/*jshint esversion: 6 */

Auth0 Rule Web UI save button

The Auth0 web UI where you can view and modify rules, for example at https://manage-dev.mozilla.auth0.com/dashboard/pi/auth-dev/rules when you click the Save button, a green banner saying The rule script has been saved shows up. The content however won't always be saved and the Save button won't always turn from blue to gray. If waiting on the page for the async save to complete isn't working you can click the Save button a second time.

auth0-deploy's People

Contributors

andrewkrug avatar april avatar comzeradd avatar danielhartnell avatar dependabot[bot] avatar flamingspaz avatar gdestuynder avatar gdestuynder-mozilla-owner avatar gene1wood avatar hidde avatar hmitsch avatar jdow avatar kangsterizer avatar mozilla-github-standards avatar pwnbus avatar the-smooth-operator avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.