{"id":28839346,"url":"https://github.com/nebari-dev/nebari-self-registration","last_synced_at":"2026-02-03T09:02:34.565Z","repository":{"id":211120162,"uuid":"721809007","full_name":"nebari-dev/nebari-self-registration","owner":"nebari-dev","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-07T07:49:04.000Z","size":2597,"stargazers_count":2,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-13T16:45:03.347Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nebari-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-21T20:15:08.000Z","updated_at":"2025-12-10T15:59:08.000Z","dependencies_parsed_at":"2023-12-30T01:52:54.591Z","dependency_job_id":"b7e1ca9a-bdc7-408f-9a67-34c41d1908a3","html_url":"https://github.com/nebari-dev/nebari-self-registration","commit_stats":null,"previous_names":["metrostar/nebari-self-registration","nebari-dev/nebari-self-registration"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nebari-dev/nebari-self-registration","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-self-registration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-self-registration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-self-registration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-self-registration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nebari-dev","download_url":"https://codeload.github.com/nebari-dev/nebari-self-registration/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-self-registration/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29039341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T08:41:49.363Z","status":"ssl_error","status_checked_at":"2026-02-03T08:40:19.255Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-19T14:39:53.220Z","updated_at":"2026-02-03T09:02:34.560Z","avatar_url":"https://github.com/nebari-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nebari Plugin Self Registration\n\n[![PyPI - Version](https://img.shields.io/pypi/v/nebari-plugin-self-registration.svg)](https://pypi.org/project/nebari-plugin-self-registration)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/nebari-plugin-self-registration.svg)](https://pypi.org/project/nebari-plugin-self-registration)\n\n---\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [License](#license)\n\n## Installation\nThis project is meant to run as a plugin within a Nebari deployment. To learn how to get started with Nebari, check out the docs [here](https://www.nebari.dev/docs/welcome).\n\nIn order to install this plugin as part of a Nebari deployment:\n- Create a conda environment for your Nebari deployment\n- Install the self registration plugin with `pip install nebari-plugin-self-registration`\n- Continue the initialization and deployment of Nebari per your provider [instructions](https://www.nebari.dev/docs/explanations/provider-configuration).\n\n\u003e **NOTE:** When running `nebari render` and `nebari deploy`, Nebari will detect and install any extensions which are installed in your Python environment.  When managing multiple Nebari deployments, be sure to manage your conda environments to ensure the correct extensions and versions are installed in your target deployment.\n\n\n### Basic Configuration\nThe configuration of your self registration app can be customized in several ways within your `nebari-config.yaml` file under the key `self_registration`.\n\nConfiguration options include:\n\n- **coupons (required)**: Map of coupon codes and their configuration that can be used by individuals during the self registration process. The coupon configuration options are:\n  - **account_expiration_days (optional)**: Days an account remains active after the user registers.  Defaults to 7.  Note that the calculated end date is saved in Keycloak user attribute `account_expiration_date` and can be manually overridden by a Keycloak administrator.\n  - **approved_domains (required)**: List of approved email domains that can register accounts using the self registration service.  (supports names like `gmail.com` and wildcards such as `*.edu` or even `*`)\n  - **registration_groups (optional)**: List of Keycloak group where all registering users will be added.  This group can then be used to assign user properties such as available JupyterLab instance types, app sharing permissions, etc.\n- **name (optional)**: Name for resources that this extension will deploy via Terraform and Helm.  Defaults to `self-registration`\n- **namespace (optional)**: Kubernetes namespace for this service.  Defaults to Nebari's default namespace.\n- **registration_message (optional)**: A custom message to display on the landing page `/registration`\n- **values (optional)**: Any additional values that will be passed to the Helm chart as `overrides`\n- **affinity (optional)**: Set a custom Kubernetes affinity for the app and/or job.  Defaults to the `general` node group.\n\n\n\u003e **NOTE:** The `registration_group` must have been created in the Nebari realm in Keycloak prior to deploying the extension.\n\n#### Example Nebari Config File\n\n\u003e [!NOTE]\n\u003e The configuration options for the plugin were recently updated. Previously, `self_registration.coupons` accepted a list of coupon codes and there were shared options for all the specified coupons (e.g., `approved_domains`, `account_expiration_days`, etc...). Now, the field takes a map of coupon codes, where each coupon accepts individual configuration options (as outlined below). Please make sure to update the configuration values when updating to newer versions of the plugin after `0.0.14`.\n\n```yaml\nprovider: aws\nnamespace: dev\nnebari_version: 2024.4.1\nproject_name: my-project\n# ...\n# More Nebari configurations\n# ...\nself_registration:\n  namespace: self-registration\n  coupons:\n    abcdefg:\n      approved_domains:\n        - gmail.com\n        - '*.edu'\n      account_expiration_days: 30\n      registration_groups: [test-group, developer]\n    hijklmn:\n      approved_domains:\n        - '*'\n      account_expiration_days: 7\n      registration_groups: [admin]\n  affinity:\n    enabled: true\n    selector:\n      app: nodegroup_a\n      job: nodegroup_b\n```\n\n### Email Validation\n\nThe `approved_domains` feature of this self registration app is intended as an additional security feature to prevent unauthorized users from running up compute costs.  We recommend enabling email validation in conjunction with this extension. However, the extension itself does not enforce user email validation nor configure Nebari's Keycloak instance to send emails as those are both core Nebari settings.\n\nIn order to require email validation for your Nebari deployment, you must:\n\n1) **Enable email validation** in the Keycloak administration console under the Nebari Realm.  Go to \"Realm Settings\" and under the \"Login\" tab set \"Verify Email\" to ON.\n2) **Configure outgoing email** as described in Nebari's [How-To Guide for Configuring SMTP](https://www.nebari.dev/docs/how-tos/configuring-smtp).\n\n\u003e NOTE: As of May 2024, neither requiring email validation nor specifying outgoing SMTP are configurable within your `nebari-config.yaml` file.  However, these settings once configured manually will not be overridden by subsequent `nebari deploy` actions.\n\n### Theming\n\nThis extension's registration web pages will use Nebari's default styles out of the box.  It will also apply any styles which are applied to your main JupyterHub theme in your config file's `theme.jupyterhub`.  See [Customize JupyterHub Theme](https://www.nebari.dev/docs/explanations/customize-themes/) in Nebari docs for more details.\n\n## Running locally with Docker\n\n_Note_: running locally requires a `config.yaml` file to be present within the `self-registration` directory. Please create a copy of the `sample.config.yaml`, rename, and update as needed before proceeding:\n\n1. Navigate to the `self-registration` directory\n2. To build the docker image, run the following:\n\n```\ndocker build . --file Dockerfile.local -t self-registration\n```\n\n3. To run the app, run the following:\n\n```\ndocker run -p 8000:8000 --name self-registration self-registration\n```\n\n4. Navigate to http://0.0.0.0:8000/registration\n\n## User Registration via this extension\n\nSteps for self registration:\n\n- Navigate to your Nebari domain.\n\n\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/welcome-nebari.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/welcome-nebari.png\"\u003e\n  \u003cimg alt=\"Nebari welcome screen.\" src=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/welcome-nebari.png\" width=\"50%\"/\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n- You may have a hyperlink on the welcome page that takes you to the user registration form. If not, navigate to https://{your-domain-name}/registration\n\n\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-register.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-register.png\"\u003e\n  \u003cimg alt=\"Account registration screen.\" src=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-register.png\" width=\"50%\"/\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n- Enter your email address and coupon code.\n\n- After clicking \"Submit\" follow the instructions to login with your temporary password. By clicking the \"Login\" button, it will take you to a Welcome page where you can sign in with Keycloak.\n\n\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-confirm.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-confirm.png\"\u003e\n  \u003cimg alt=\"Account confirmation screen\" src=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/account-confirm.png\" width=\"75%\"/\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n- ***If email validation is configured***, the system will now send your email account a validation link at this step, and you then must follow email validation link you receive in order to complete your initial login.\n- After you login you will see the Nebari landing page.\n\n\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/nebari-splash.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/nebari-splash.png\"\u003e\n  \u003cimg alt=\"Nebari splash page.\" src=\"https://raw.githubusercontent.com/MetroStar/nebari-self-registration/main/images/nebari-splash.png\" width=\"75%\"/\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n## License\n\n`nebari-plugin-self-registration` is distributed under the terms of the [Apache](./LICENSE.md) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebari-dev%2Fnebari-self-registration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnebari-dev%2Fnebari-self-registration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebari-dev%2Fnebari-self-registration/lists"}