Slack Invite Automation ------------ [![Build Status](https://travis-ci.com/outsideris/slack-invite-automation.svg?branch=master)](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 and Cloud Foundry. [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) [![Deploy to Azure](http://azuredeploy.net/deploybutton.png)](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. ## 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 on your web browser. ![](screenshots/join-page.jpg) ## 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 . 1. Click `Create token`. ![](screenshots/legacy-token.gif) ### OAuth tokens 1. Visit and Create New App. ![](screenshots/oauth1.gif) 1. Click "Permissions". ![](screenshots/oauth2.gif) 1. In "OAuth & Permissions" page, select `admin` scope under "Permission Scopes" menu and save changes. ![](screenshots/oauth3.gif) 1. Click "Install App to Workspace". ![](screenshots/oauth4.gif) 1. Visit in your browser and authorize it. * It authorizes 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. ![](screenshots/basic_info-client_id.png) ## Badge ![](screenshots/badge.png) You can use the badge to show status of user in your slack. * With default colors: ``` ``` * 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) ``` ``` ## reCAPTCHA Register a new site in [Google reCAPTHCA](https://www.google.com/recaptcha/) as reCAPTCHA v2 type. ![](screenshots/recaptcha.gif) 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)