Giter Club home page Giter Club logo

gaps's Introduction

Gaps

Easy management of your Google Apps email configuration.

Deploy

Overview

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.

What it looks like

Gaps

Configuring

Create a site.yaml with your local settings: cp site.yaml.sample site.yaml. You'll need:

  • A Google application. See instructions below, and then update site.yaml.
  • A running MongoDB instance. Gaps stores some soft state (cache of what it gets out of the API), but also has some hard state (the categorization of your groups, people's filter settings). Update site.yaml appropriately.
  • (At runtime) an admin account on your Google Apps domain.

Creating a Google application

  1. Make sure you have API access enabled for your Google Apps domain.
  2. Create a new project.
  3. Under the "APIs & auth" accordian for that project, select the "APIs" tab. Enable the Google+ API, Admin SDK, and Group Settings API.
  4. Under the same accordian, select the "Credentials" tab. Create a new "Web application" Client ID. Add your desired redirect URI and authorized origins. (In development that'll probably be http://localhost:3500 and http://localhost:3500/oauth2callback, respectively.)
  5. Copy your client ID and client secret into your site.yaml file.

Running

You can run Gaps directly or under Docker.

Running directly

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).

Running on Heroku

Just click here: Deploy

Running under Docker

Because there are a lot of settings, running under Docker requires a configuration file. Clone this repository and execute bin/docker-runner to run the Docker image we've published with your site.yaml bind-mounted inside.

Permissions

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 currrently 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:

  • Prefixing the name with private-.
  • Prefixing the name with the less-cumbersome but more-obscure acl-.
  • Adding a JSON tag as the last line of the group description with a "display" setting as follows: {"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.

Contributions

Patches welcome! There are many features that would be useful that Gaps doesn't yet support. For example:

  • Managing your group settings: generally you probably want all of your lists to have a standard set of configuration (such as Public posting, etc). Gaps could ensure that all lists in your domain have the appropriate settings.
  • More flexible filter generation, or better story for clearing filters.
  • Displaying your private lists.
  • Fully AJAX-ify the UI. As you can tell, there's still a lot of low-hanging fruit on the UI.

Contributors

  • Amber Feng
  • Andreas Fuchs
  • Brian Krausz
  • Carl Jackson
  • Evan Broder
  • Greg Brockman

gaps's People

Contributors

alvinlai avatar antifuchs avatar gdb avatar paxan avatar ukd1 avatar

Watchers

 avatar  avatar  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.