|  | @@ -1,211 +1,3 @@
 | 
	
		
			
				|  |  | -Slack Invite Automation
 | 
	
		
			
				|  |  | -------------
 | 
	
		
			
				|  |  | +# slack-windhamdavid
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -[](https://travis-ci.com/outsideris/slack-invite-automation)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -A tiny web application to invite a user into your Slack team.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Inspired by
 | 
	
		
			
				|  |  | -[How I hacked Slack into a community platform with Typeform](https://levels.io/slack-typeform-auto-invite-sign-ups/)
 | 
	
		
			
				|  |  | -and Socket.io's Slack page.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -This project supports Heroku, Azure, Cloud Foundry, Amazon Web Services (AWS), and [ic.dev](https://ic.dev).
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -[](https://heroku.com/deploy)
 | 
	
		
			
				|  |  | -[](https://azuredeploy.net/)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Settings
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -You can set variables for your own purpose in `config.js` or environment variables.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### `config.js`
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Fill out `config.js` as your infomation.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -* `community`: your community or team name to display on join page.
 | 
	
		
			
				|  |  | -* `slackUrl` : your slack team url (ex.: socketio.slack.com)
 | 
	
		
			
				|  |  | -* `slacktoken` : Your access token for Slack. (see [Issue token](#issue-token))
 | 
	
		
			
				|  |  | -* `inviteToken`: An optional security measure - if it is set, then that token will be required to get invited.
 | 
	
		
			
				|  |  | -* `recaptchaSiteKey`: An optional security measure - if it is set, and `recaptchaSecretKey` is set, then a captcha will be required to get invited.
 | 
	
		
			
				|  |  | -* `recaptchaSecretKey`: An optional security measure - if it is set, and `recaptchaSiteKey` is set, then a captcha will be required to get invited.
 | 
	
		
			
				|  |  | -* `locale`: Application language (currently `cs`, `de`, `en`, `es`, `fr`, `it`,  `ja`, `ko`, `nl`, `pl`, `pt`, `pt-BR`, `tr`, `zh-CN` and `zh-TW` available).
 | 
	
		
			
				|  |  | -* `subpath`: Sub-path in URL. For example, if `/example` is set, it's served in `/example`, not `/`. Default is `/`.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### Environment Variables
 | 
	
		
			
				|  |  | -You can set environment variables directly or in `.env` file.
 | 
	
		
			
				|  |  | -If you want to use a `.env` file, create a file in the root called `.env` with the following key/value pairs.
 | 
	
		
			
				|  |  | -(`.env` files are added to the `.gitignore`.)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -- `COMMUNITY_NAME` : Your community or team name to display on join page.
 | 
	
		
			
				|  |  | -- `SLACK_URL` : Your Slack team url (ex.: socketio.slack.com)
 | 
	
		
			
				|  |  | -- `SLACK_TOKEN` : Your access token for Slack. (see [Issue token](#issue-token))
 | 
	
		
			
				|  |  | -- `INVITE_TOKEN`: An optional security measure - if it is set, then that token will be required to get invited.
 | 
	
		
			
				|  |  | -- `RECAPTCHA_SITE`: An optional security measure - used to enable reCAPTCHA.
 | 
	
		
			
				|  |  | -- `RECAPTCHA_SECRET`: An optional security measure - used to enable reCAPTCHA.
 | 
	
		
			
				|  |  | -- `LOCALE`: Application language (currently `cs`, `de`, `en`, `es`, `fr`, `it`, `ja`, `ko`, `nl`, `pl`, `pt`, `pt-BR`, `tr`, `zh-CN` and `zh-TW` available).
 | 
	
		
			
				|  |  | -- `SUBPATH`: Sub-path in URL. For example, if `/example` is set, it's served in `/example`, not `/`. Default is `/`.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -**Sample**
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -COMMUNITY_NAME=socketio
 | 
	
		
			
				|  |  | -SLACK_URL=socketio.slack.com
 | 
	
		
			
				|  |  | -SLACK_TOKEN=ffsdf-5411524512154-16875416847864648976-45641654654654654-444334f43b34566f
 | 
	
		
			
				|  |  | -INVITE_TOKEN=abcdefg
 | 
	
		
			
				|  |  | -LOCALE=en
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -You can test your token via curl:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  ```shell
 | 
	
		
			
				|  |  | -   curl -X POST 'https://YOUR-SLACK-TEAM.slack.com/api/users.admin.invite' \
 | 
	
		
			
				|  |  | -   --data 'email=EMAIL&token=TOKEN&set_active=true' \
 | 
	
		
			
				|  |  | -   --compressed
 | 
	
		
			
				|  |  | -  ```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### Heroku / Azure
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Add the application settings that are defined in the environment variables above.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### Amazon Web Services (AWS)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -If you have an AWS account and have already installed and configured the AWS CLI tool, you can easily deploy this application to API Gateway and Lambda via CloudFormation in a few minutes.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Instead of editing `config.js`, take these steps:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -1. Copy `aws/config.example.sh` to `aws/config.sh`
 | 
	
		
			
				|  |  | -2. Edit the values in `aws/config.sh`, which correspond to the variables described above, plus these:
 | 
	
		
			
				|  |  | -    * `StackName`: the name of the CloudFormation stack to create
 | 
	
		
			
				|  |  | -    * `S3BucketArtifacts`: the name of an existing S3 bucket you have write access to, for storing deployment artifacts
 | 
	
		
			
				|  |  | -    * `S3PrefixArtifacts`: the prefix to use within that S3 bucket for all deployment artifacts written
 | 
	
		
			
				|  |  | -3. Run `aws/deploy.sh` to create the CloudFormation stack and deploy your application, outputting the URL
 | 
	
		
			
				|  |  | -4. (Optional) For a friendlier URL, log into the AWS web console and establish a custom domain pointing to the API Gateway stage deployed in step 3.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### [ic.dev](https://ic.dev)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -If you haven't already installed the IC CLI, please refer to the [documentation](https://ic.dev/docs/en/installation).
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Deploy the `lsuss.slack_inviter` brick directly from the IC Public Index:
 | 
	
		
			
				|  |  | -```shell
 | 
	
		
			
				|  |  | -$ ic aws up lsuss.slack_inviter slack_inviter --params community_name='Your Community Name',slack_url=yourcommunity.slack.com,slack_token=xoxp-xxx-xxx-xxx-xxx
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Retreive the id and url of the API:
 | 
	
		
			
				|  |  | -```shell
 | 
	
		
			
				|  |  | -$ ic aws value slack_inviter
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Run
 | 
	
		
			
				|  |  | -[Node.js](http://nodejs.org/) is required.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -```shell
 | 
	
		
			
				|  |  | -$ git clone https://github.com/outsideris/slack-invite-automation.git
 | 
	
		
			
				|  |  | -$ cd slack-invite-automation
 | 
	
		
			
				|  |  | -$ npm install
 | 
	
		
			
				|  |  | -$ npm start
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -You can access <http://localhost:3000> on your web browser.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Run with Docker
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -It's easy to run this service if you have installed Docker on your system.
 | 
	
		
			
				|  |  | -Pull [the Docker image from Docker Hub](https://hub.docker.com/r/outsideris/slack-invite-automation/).
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -```shell
 | 
	
		
			
				|  |  | -$ docker pull outsideris/slack-invite-automation
 | 
	
		
			
				|  |  | -$ docker run -it --rm -e COMMUNITY_NAME="YOUR-TEAM-NAME" -e SLACK_URL="YOUR-TEAM.slack.com" -e SLACK_TOKEN="YOUR-ACCESS-TOKEN" -p 3000:3000 outsideris/slack-invite-automation
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Or, You can build a Docker image yourself.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -```shell
 | 
	
		
			
				|  |  | -$ git clone https://github.com/outsideris/slack-invite-automation.git
 | 
	
		
			
				|  |  | -$ cd slack-invite-automation
 | 
	
		
			
				|  |  | -$ docker build -t outsideris/slack-invite-automation .
 | 
	
		
			
				|  |  | -$ docker run -it --rm -e COMMUNITY_NAME="YOUR-TEAM-NAME" -e SLACK_URL="YOUR-TEAM.slack.com" -e SLACK_TOKEN="YOUR-ACCESS-TOKEN" -p 3000:3000 outsideris/slack-invite-automation
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Issue token
 | 
	
		
			
				|  |  | -**You should generate the token in admin user, not owner.** If you generate the token in owner user, a `missing_scope` error may occur.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -There are two ways to issue the access token.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### Legacy tokens
 | 
	
		
			
				|  |  | -1. Visit <https://api.slack.com/custom-integrations/legacy-tokens>.
 | 
	
		
			
				|  |  | -1. Click `Create token`.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -### OAuth tokens
 | 
	
		
			
				|  |  | -1. Visit <https://api.slack.com/apps> and Create New App.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -1. Click "Permissions".
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -1. In "OAuth & Permissions" page, select `admin` scope under "Permission Scopes" menu and save changes.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -1. Click "Install App to Workspace".
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -1. Visit <https://slack.com/oauth/authorize?&client_id=CLIENT_ID&team=TEAM_ID&install_redirect=install-on-team&scope=admin+client> in your browser and authorize your app.
 | 
	
		
			
				|  |  | -    * This form requires the `client` permission. Otherwise, you can see `{"ok":false,"error":"missing_scope","needed":"client","provided":"admin"}` error.
 | 
	
		
			
				|  |  | -    * Your `TEAM_ID` is the subdomain for your slack team, e.g. myteam.slack.com - your TEAM_ID is `myteam`.
 | 
	
		
			
				|  |  | -    * Your `CLIENT_ID` found in "Basic Information" section for your App.
 | 
	
		
			
				|  |  | -    * You will be shown a `Installed App Settings > OAuth Tokens for Your Team` screen.
 | 
	
		
			
				|  |  | -    * You can test auto invites with curl by providing the `OAuth Access Token`.
 | 
	
		
			
				|  |  | -    ```sh
 | 
	
		
			
				|  |  | -    curl -X POST 'https://myteam.slack.com/api/users.admin.invite' \
 | 
	
		
			
				|  |  | -   --data 'email=test@email.com&token=OAuthAccessToken&set_active=true' \
 | 
	
		
			
				|  |  | -   --compressed
 | 
	
		
			
				|  |  | -   ```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Badge
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -You can use the badge to show status of user in your slack.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -* With default colors:
 | 
	
		
			
				|  |  | -    ```
 | 
	
		
			
				|  |  | -    <img src="https://your.domain/badge.svg">
 | 
	
		
			
				|  |  | -    ```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -* With custom colors:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    * `?colorA=abcdef` Set background of the left part (hex color only)
 | 
	
		
			
				|  |  | -    * `?colorB=fedcba` Set background of the right part (hex color only)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ```
 | 
	
		
			
				|  |  | -    <img src="https://your.domain/badge.svg?colorA=155799&colorB=159957">
 | 
	
		
			
				|  |  | -    ```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## reCAPTCHA
 | 
	
		
			
				|  |  | -Register a new site in [Google reCAPTHCA](https://www.google.com/recaptcha/)
 | 
	
		
			
				|  |  | -as reCAPTCHA v2 type.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Set "Site key" as `recaptchaSiteKey` or `RECAPTCHA_SITE`,
 | 
	
		
			
				|  |  | -and "Secret key" as `recaptchaSecretKey` or `RECAPTCHA_SECRET`.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -## Associate fork with heroku
 | 
	
		
			
				|  |  | -If you use the "Deploy to Heroku" button and want to modify your App you should
 | 
	
		
			
				|  |  | -fork this project. After forking and making changes you should associate your
 | 
	
		
			
				|  |  | -repo with the deployed instance by running:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -`$ heroku git:remote -a thawing-inlet-61413` replacing your heroku app's name
 | 
	
		
			
				|  |  | -and running
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -`$ git push heroku master` to upload the changes. For full details see
 | 
	
		
			
				|  |  | -[Heroku: deploying with git](https://devcenter.heroku.com/articles/git#for-an-existing-heroku-app)
 | 
	
		
			
				|  |  | +upstream - [https://github.com/outsideris/slack-invite-automation](https://github.com/outsideris/slack-invite-automation)  
 |