add-to-org 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/add-to-org/server.rb +53 -0
- data/lib/add-to-org/version.rb +3 -0
- data/lib/add-to-org/views/error.erb +12 -0
- data/lib/add-to-org/views/forbidden.erb +12 -0
- data/lib/add-to-org/views/success.erb +16 -0
- data/lib/add-to-org.rb +60 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 18dc2fd4a2e9a3e0b5d5739198d12a7ad9a53686
|
4
|
+
data.tar.gz: 8a138d7e82808d71f3888865efd662640f95ae58
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2b34675089ad04b79b4a476357ad47ed53716c0ce3d7ed1aac6684528782b24997dcfed7f98beb896b31f936084df4ba200c5a2a4f2574156a5ccf1ede789a9b
|
7
|
+
data.tar.gz: 1c11908e629090694077d386cf4ea7264fd64be932969a5469e7ba32b4bfb754d9d1f898ca592f91d9b020e5bae701f9fef3db1dbde657cb9206058da6c3c24c
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module AddToOrg
|
2
|
+
class App < Sinatra::Base
|
3
|
+
|
4
|
+
use Rack::Session::Cookie, {
|
5
|
+
:http_only => true,
|
6
|
+
:secret => ENV['SESSION_SECRET'] || SecureRandom.hex
|
7
|
+
}
|
8
|
+
|
9
|
+
register Sinatra::Auth::Github
|
10
|
+
|
11
|
+
set :views, File.expand_path("views", File.dirname(__FILE__))
|
12
|
+
|
13
|
+
# require ssl
|
14
|
+
configure :production do
|
15
|
+
require 'rack-ssl-enforcer'
|
16
|
+
use Rack::SslEnforcer
|
17
|
+
end
|
18
|
+
|
19
|
+
# dat auth
|
20
|
+
before do
|
21
|
+
session[:return_to] = request.url #store requested URL for post-auth redirect
|
22
|
+
authenticate!
|
23
|
+
end
|
24
|
+
|
25
|
+
def success(locals={})
|
26
|
+
erb :success, locals
|
27
|
+
end
|
28
|
+
|
29
|
+
def forbidden
|
30
|
+
status 403
|
31
|
+
erb :forbidden
|
32
|
+
end
|
33
|
+
|
34
|
+
def error
|
35
|
+
status 500
|
36
|
+
erb :error
|
37
|
+
end
|
38
|
+
|
39
|
+
# request a GitHub (authenticated) URL
|
40
|
+
get "/*" do
|
41
|
+
|
42
|
+
path = request.path || "/#{team_id}"
|
43
|
+
halt redirect "https://github.com#{path}", 302 if member?
|
44
|
+
forbidden unless valid?
|
45
|
+
|
46
|
+
if add
|
47
|
+
success({ :redirect => "https://github.com#{path}" })
|
48
|
+
else
|
49
|
+
error
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<style>
|
4
|
+
body { padding: 20px; }
|
5
|
+
</style>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<h1>Ruh roh</h1>
|
9
|
+
<p>Looks like something went wrong.</p>
|
10
|
+
<p>Please contact <a href="mailto:<%= ENV['CONTACT_EMAIL'] %>"><%= ENV['CONTACT_EMAIL'] %></a>.</p>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<style>
|
4
|
+
body { padding: 20px; }
|
5
|
+
</style>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<h1>Sorry Charlie</h1>
|
9
|
+
<p>We're unable to verify your eligibility at this time.</p>
|
10
|
+
<p>Please contact <a href="mailto:<%= ENV['CONTACT_EMAIL'] %>"><%= ENV['CONTACT_EMAIL'] %></a> if you believe this is in error.</p>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<style>
|
4
|
+
body { padding: 20px; }
|
5
|
+
</style>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<h1>You're all set</h1>
|
9
|
+
<p>You should be <a href="<%= ERB::Util.html_escape(redirect) %>">redirected</a> automatically...</h1>
|
10
|
+
<script>
|
11
|
+
setTimeout(function () {
|
12
|
+
window.location.href = "<%= ERB::Util.html_escape(redirect) %>";
|
13
|
+
}, 5000);
|
14
|
+
</script>
|
15
|
+
</body>
|
16
|
+
</html>
|
data/lib/add-to-org.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'octokit'
|
2
|
+
require 'sinatra_auth_github'
|
3
|
+
require 'dotenv'
|
4
|
+
require_relative 'add-to-org/server'
|
5
|
+
|
6
|
+
Dotenv.load
|
7
|
+
|
8
|
+
module AddToOrg
|
9
|
+
class App < Sinatra::Base
|
10
|
+
|
11
|
+
set :github_options, {
|
12
|
+
:scopes => "user,user:email",
|
13
|
+
:secret => ENV['GITHUB_CLIENT_SECRET'],
|
14
|
+
:client_id => ENV['GITHUB_CLIENT_ID']
|
15
|
+
}
|
16
|
+
|
17
|
+
def user
|
18
|
+
env['warden'].user
|
19
|
+
end
|
20
|
+
|
21
|
+
# user client
|
22
|
+
def client
|
23
|
+
@client ||= Octokit::Client.new :access_token => user.token
|
24
|
+
end
|
25
|
+
|
26
|
+
# new org admin client
|
27
|
+
def sudo_client
|
28
|
+
@sudo_client ||= Octokit::Client.new :access_token => ENV['GITHUB_TOKEN']
|
29
|
+
end
|
30
|
+
|
31
|
+
# query api for the user's verified emails
|
32
|
+
def verified_emails
|
33
|
+
emails = client.emails :accept => 'application/vnd.github.v3'
|
34
|
+
emails.select { |email| email.verified }
|
35
|
+
end
|
36
|
+
|
37
|
+
# true if user is already a member of the org
|
38
|
+
def member?
|
39
|
+
client.organization_member? org_id, user.login
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid?
|
43
|
+
raise "You must define a custom valid? method to determine eligibility"
|
44
|
+
end
|
45
|
+
|
46
|
+
def team_id
|
47
|
+
ENV['GITHUB_TEAM_ID']
|
48
|
+
end
|
49
|
+
|
50
|
+
def org_id
|
51
|
+
ENV['GITHUB_ORG_ID']
|
52
|
+
end
|
53
|
+
|
54
|
+
# the main event...
|
55
|
+
def add
|
56
|
+
sudo_client.add_team_member team_id, user.login
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: add-to-org
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Balter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: warden-github
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sinatra_auth_github
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: octokit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rack-ssl-enforcer
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: dotenv
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: ''
|
84
|
+
email: ben.balter@github.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- lib/add-to-org.rb
|
90
|
+
- lib/add-to-org/server.rb
|
91
|
+
- lib/add-to-org/version.rb
|
92
|
+
- lib/add-to-org/views/error.erb
|
93
|
+
- lib/add-to-org/views/forbidden.erb
|
94
|
+
- lib/add-to-org/views/success.erb
|
95
|
+
homepage: https://github.com/benbalter/add-to-org
|
96
|
+
licenses:
|
97
|
+
- MIT
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.2.0
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: ''
|
119
|
+
test_files: []
|