Easy management of your Google Apps email configuration.
At Stripe, we've long had many more Google Group mailing lists than employees. As the number of lists grew, so too did the complexity of managing your email setup: which lists were you on? Why are you receiving email for this list you're not subscribed to? How do you set up your filters to usually archive email to a list, but only if you're not present on the CC?
Gaps is the main tool we've used to help make these questions manageable. The core functionality is surprisingly simple: a single list of all your Google Groups in one place, which lets you view your subscriptions (including whether you're receiving mail from a list being subscribed to another list), and subscribe or unsubscribe by the click of a button.
More recently, we've also added filter generation and maintenance. Unfortunately Google's email settings API only allows you to create new filters, so it's up to the user to delete their old ones.
Create a site.yaml
with your local settings: cp site.yaml.sample site.yaml
. You'll need:
site.yaml
.site.yaml
appropriately.http://localhost:3500
and http://localhost:3500/oauth2callback
,
respectively.)site.yaml
file.You can run Gaps directly or under Docker.
Run bundle install
to install your dependencies. Gaps should run on
Ruby 1.9 and up. Then execute bin/gaps_server.rb
(or
bin/dev-runner
if you want auto-reloading upon code changes).
First, you need to configure Gaps by creating a .env
file and filling in your configuration:
ORG_DOMAIN=
ORG_NAME=
ADD_NEW_GROUP_URL=
OAUTH_CLIENT_ID=
OAUTH_CLIENT_SECRET=
OAUTH_REDIRECT_URL=
SESSION_SECRET=
To run a local development environment, you can use Docker Compose:
$ docker-compose up
To run in production, you can just run the image on Docker Hub:
$ docker run -p 80:3500 --env-file=.env stripeoss/gaps
Gaps uses your domain admin's credentials to perform most actions (listing all groups, joining a group). So permissions are entrusted to Gaps's business logic rather than your Google settings directly.
Gaps currently comes with two schemes to mark a list as private. Any private lists are currently completely omitted from Gaps: they'll be left out of the directory listing, their creation won't be emailed about, and users won't be able to join them.
The first is the Gaps-custom scheme, which grew out of Stripe's desire for a very lightweight private-group creation. It's probably a reasonable place to start if you are starting with very few private lists:
private-
.acl-
.-confidential
.{"display": "none"}
The second is using the Google Groups Settings API. This checks that the group is set to be shown in the group directory, that anyone in the domain can join, and that anyone in the domain can view it.
Choose your privacy schemes using the Configatron keys under
permissions.privacy_settings
.
Patches welcome! There are many features that would be useful that Gaps doesn't yet support. For example: