jekyll-auth-naked 0.1.17
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/.gitignore +3 -0
- data/Rakefile +9 -0
- data/bin/jekyll-auth-naked +148 -0
- data/config.ru +4 -0
- data/lib/jekyll-auth-naked.rb +20 -0
- data/lib/jekyll-auth-naked/auth-site.rb +67 -0
- data/lib/jekyll-auth-naked/config.rb +20 -0
- data/lib/jekyll-auth-naked/jekyll-site.rb +7 -0
- data/lib/jekyll-auth-naked/version.rb +3 -0
- metadata +197 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5aef66ac82523d7f44ad306b8ac543317906d467
|
4
|
+
data.tar.gz: f5562e1509db3ff9f6ed625045d9c70d94e4e6dd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 48365c25a0a2187f740e2a052aa2fddb66c51ae82247e23716afc5e34b4aa27a0541c1ca740c0b1ddeb291850b14d696a2fcb0fb4e25cb9675c1c75cb6425c61
|
7
|
+
data.tar.gz: d555d112e93ad2cba5fd919903bffbbf64406cfae9e156d21e85c619ee18813bc3be34057e02c74534fd9118629b641cab8f3e065159d9e9f6ea12ebdf15e0c5
|
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Command-line interface for jekyll-auth-naked
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'active_support/core_ext'
|
6
|
+
require 'commander/import'
|
7
|
+
require 'rake'
|
8
|
+
require 'jekyll-auth-naked'
|
9
|
+
require 'git'
|
10
|
+
|
11
|
+
def changed?
|
12
|
+
git = Git.init
|
13
|
+
git.diff('HEAD', 'config.ru').entries.length != 0
|
14
|
+
end
|
15
|
+
|
16
|
+
program :version, JekyllAuthNaked::VERSION
|
17
|
+
|
18
|
+
program :description, <<-DESCRIPTION
|
19
|
+
A simple way to use Github Oauth to serve a protected jekyll site to your GitHub organization
|
20
|
+
DESCRIPTION
|
21
|
+
|
22
|
+
command :new do |c|
|
23
|
+
|
24
|
+
c.syntax = 'jekyll-auth-naked new'
|
25
|
+
|
26
|
+
c.description = "Initialize an existing Jekyll site as a Jekyll Auth site"
|
27
|
+
|
28
|
+
c.action do |args, options|
|
29
|
+
|
30
|
+
source = File.expand_path( "../", File.dirname(__FILE__) )
|
31
|
+
|
32
|
+
destination = Dir.pwd
|
33
|
+
|
34
|
+
say "Initiating new Jekyll Auth site in #{destination}"
|
35
|
+
|
36
|
+
["config.ru", ".gitignore"].each do |file|
|
37
|
+
if File.exist? "#{destination}/#{file}"
|
38
|
+
say "* #{destination}/#{file} already exists... skipping."
|
39
|
+
else
|
40
|
+
say "* creating #{destination}/#{file}"
|
41
|
+
FileUtils.cp "#{source}/#{file}", "#{destination}/#{file}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
if changed?
|
46
|
+
system "git status"
|
47
|
+
say <<-CHANGES.strip_heredoc
|
48
|
+
Looks like you've made some changes, you may want to do a git
|
49
|
+
commit and git push sometime soon
|
50
|
+
CHANGES
|
51
|
+
end
|
52
|
+
|
53
|
+
say <<-COMPLETE
|
54
|
+
Setup complete. Run jekyll-auth-naked to view the authenticated site.
|
55
|
+
COMPLETE
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
command :setup do |c|
|
61
|
+
|
62
|
+
c.syntax = "jekyll-auth-naked setup"
|
63
|
+
|
64
|
+
c.description = "Configure your Jekyll Auth Naked site"
|
65
|
+
|
66
|
+
c.action do |args, options|
|
67
|
+
git = Git.init
|
68
|
+
|
69
|
+
git.add "config.ru"
|
70
|
+
|
71
|
+
if changed?
|
72
|
+
git.commit "[Jekyll Auth Naked] Initial setup"
|
73
|
+
end
|
74
|
+
|
75
|
+
say "Awesome. Let's config our GitHub settings."
|
76
|
+
|
77
|
+
client_id = ask "What's your GitHub Client ID? "
|
78
|
+
client_secret = ask "What's your GitHub Client Secret? "
|
79
|
+
team_id = ask "What's your GitHub Team ID?"
|
80
|
+
|
81
|
+
config_env = <<-EOConfig.strip_heredoc
|
82
|
+
GITHUB_TEAM_ID=#{team_id}
|
83
|
+
GITHUB_CLIENT_ID=#{client_id}
|
84
|
+
GITHUB_CLIENT_SECRET=#{client_secret}
|
85
|
+
EOConfig
|
86
|
+
|
87
|
+
if File.exist? ".env"
|
88
|
+
say "You already have a .env, make sure it has these vars..."
|
89
|
+
say config_env
|
90
|
+
else
|
91
|
+
File.open(".env", "w") do |f|
|
92
|
+
f.puts config_env
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
command :serve do |c|
|
99
|
+
c.syntax = "jekyll-auth-naked serve"
|
100
|
+
c.description = "Run Jekyll Auth site locally"
|
101
|
+
c.action do |args, options|
|
102
|
+
|
103
|
+
# Ensure environmental variables are set
|
104
|
+
["GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET"].each do |var|
|
105
|
+
next unless ENV[var].nil?
|
106
|
+
|
107
|
+
say <<-WHOOPS.strip_heredoc
|
108
|
+
|
109
|
+
Whoops. Looks like you forgot to tell Jekyll Auth Naked about
|
110
|
+
your app" Be sure to add these vars to the project's `.env`
|
111
|
+
|
112
|
+
GITHUB_CLIENT_ID=[client id]
|
113
|
+
GITHUB_CLIENT_SECRET=[client secret]
|
114
|
+
GITHUB_TEAM_ID=[team id]
|
115
|
+
|
116
|
+
See the readme for more information on where to find these
|
117
|
+
WHOOPS
|
118
|
+
|
119
|
+
exit(1)
|
120
|
+
end
|
121
|
+
|
122
|
+
# build site
|
123
|
+
command(:build).run
|
124
|
+
|
125
|
+
say <<-SPIN_UP.strip_heredoc
|
126
|
+
Spinning up the server with authentication. Use CTRL-C to stop.
|
127
|
+
To preview the site without authentication, use `jekyll serve`
|
128
|
+
SPIN_UP
|
129
|
+
|
130
|
+
sh "bundle exec rackup -p 4000"
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Run the standard jekyll build command
|
136
|
+
# Called by Rake task, to allow the gem
|
137
|
+
# to add functionality here in the future
|
138
|
+
command :build do |c|
|
139
|
+
c.syntax = 'jekyll-auth build'
|
140
|
+
c.description = "Build Jekyll site"
|
141
|
+
c.action do |args, options|
|
142
|
+
say "building the site..."
|
143
|
+
sh "bundle exec jekyll build"
|
144
|
+
say "site built."
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
default_command :serve
|
data/config.ru
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra-index'
|
3
|
+
require 'sinatra_auth_github'
|
4
|
+
require 'rack'
|
5
|
+
require 'dotenv'
|
6
|
+
require 'safe_yaml'
|
7
|
+
require File.dirname(__FILE__) + '/jekyll-auth-naked/version'
|
8
|
+
require File.dirname(__FILE__) + '/jekyll-auth-naked/config'
|
9
|
+
require File.dirname(__FILE__) + '/jekyll-auth-naked/auth-site'
|
10
|
+
require File.dirname(__FILE__) + '/jekyll-auth-naked/jekyll-site'
|
11
|
+
Dotenv.load
|
12
|
+
|
13
|
+
class JekyllAuthNaked
|
14
|
+
def self.site
|
15
|
+
Rack::Builder.new do
|
16
|
+
use JekyllAuthNaked::AuthSite
|
17
|
+
run JekyllAuthNaked::JekyllSite
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class JekyllAuthNaked
|
2
|
+
class AuthSite < Sinatra::Base
|
3
|
+
|
4
|
+
require 'json'
|
5
|
+
require 'openssl'
|
6
|
+
|
7
|
+
# require ssl
|
8
|
+
configure :production do
|
9
|
+
require 'rack-ssl-enforcer'
|
10
|
+
use Rack::SslEnforcer if JekyllAuthNaked.ssl?
|
11
|
+
end
|
12
|
+
|
13
|
+
use Rack::Session::Cookie, {
|
14
|
+
http_only: true,
|
15
|
+
secret: ENV['SESSION_SECRET'] || SecureRandom.hex
|
16
|
+
}
|
17
|
+
|
18
|
+
set :github_options, {
|
19
|
+
client_id: ENV['GITHUB_CLIENT_ID'],
|
20
|
+
client_secret: ENV['GITHUB_CLIENT_SECRET'],
|
21
|
+
scopes: 'user'
|
22
|
+
}
|
23
|
+
|
24
|
+
register Sinatra::Auth::Github
|
25
|
+
|
26
|
+
before %r{^(?!/hook$)} do
|
27
|
+
pass if JekyllAuthNaked.whitelist && JekyllAuthNaked.whitelist.match(request.path_info)
|
28
|
+
if ENV['GITHUB_TEAM_ID']
|
29
|
+
github_team_authenticate!(ENV['GITHUB_TEAM_ID'])
|
30
|
+
else
|
31
|
+
puts "ERROR: Jekyll Auth Naked is refusing to serve your site."
|
32
|
+
puts "Looks like your oauth credentials are not properly configured. RTFM."
|
33
|
+
halt 401
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
post '/hook' do
|
38
|
+
|
39
|
+
secret = ENV['GITHUB_WEBHOOK_SECRET']
|
40
|
+
HMAC_DIGEST = OpenSSL::Digest.new('sha1')
|
41
|
+
body = request.body.read
|
42
|
+
key = "sha1=#{OpenSSL::HMAC.hexdigest(HMAC_DIGEST, secret, body)}"
|
43
|
+
|
44
|
+
unless request.env['HTTP_X_HUB_SIGNATURE'] == key
|
45
|
+
puts "Github webhook secret failed to match"
|
46
|
+
halt 401
|
47
|
+
end
|
48
|
+
|
49
|
+
puts " Hook -------------------------------------------------------- "
|
50
|
+
puts request.env.to_yaml
|
51
|
+
|
52
|
+
puts " Request body ------------------------------------------------ "
|
53
|
+
request.body.rewind
|
54
|
+
data = JSON.parse request.body.read
|
55
|
+
puts data.to_yaml
|
56
|
+
|
57
|
+
system "git pull"
|
58
|
+
system "jekyll build"
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
get '/logout' do
|
63
|
+
logout!
|
64
|
+
redirect '/'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class JekyllAuthNaked
|
2
|
+
def self.setup_config
|
3
|
+
@config_file ||= YAML.safe_load_file(File.join(Dir.pwd, "_config.yml"))
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.config
|
7
|
+
config_file = JekyllAuthNaked.setup_config
|
8
|
+
return {} if config_file.nil? || config_file["jekyll_auth_naked"].nil?
|
9
|
+
config_file["jekyll_auth_naked"]
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.whitelist
|
13
|
+
whitelist = JekyllAuthNaked::config["whitelist"]
|
14
|
+
Regexp.new(whitelist.join("|")) unless whitelist.nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.ssl?
|
18
|
+
!!JekyllAuthNaked::config["ssl"]
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-auth-naked
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.17
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jason Milkins
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sinatra-index
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.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.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sinatra_auth_github
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: commander
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: git
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.2'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: dotenv
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.11'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.11'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '10.3'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '10.3'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rack-ssl-enforcer
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.2'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.2'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: safe_yaml
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.0'
|
153
|
+
description: |2
|
154
|
+
A simple way to self-host a Github OAuth protected jekyll site to your
|
155
|
+
GitHub Team. Forked from Jekyll-Auth, without the Heroku dependency, add
|
156
|
+
github webhook support, and intended for a self-hosted environment.
|
157
|
+
email: jasonm23@gmail.com
|
158
|
+
executables:
|
159
|
+
- jekyll-auth-naked
|
160
|
+
extensions: []
|
161
|
+
extra_rdoc_files: []
|
162
|
+
files:
|
163
|
+
- ".gitignore"
|
164
|
+
- Rakefile
|
165
|
+
- bin/jekyll-auth-naked
|
166
|
+
- config.ru
|
167
|
+
- lib/jekyll-auth-naked.rb
|
168
|
+
- lib/jekyll-auth-naked/auth-site.rb
|
169
|
+
- lib/jekyll-auth-naked/config.rb
|
170
|
+
- lib/jekyll-auth-naked/jekyll-site.rb
|
171
|
+
- lib/jekyll-auth-naked/version.rb
|
172
|
+
homepage: https://github.com/jasonm23/jekyll-auth-naked
|
173
|
+
licenses:
|
174
|
+
- MIT
|
175
|
+
metadata: {}
|
176
|
+
post_install_message:
|
177
|
+
rdoc_options: []
|
178
|
+
require_paths:
|
179
|
+
- lib
|
180
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
requirements: []
|
191
|
+
rubyforge_project:
|
192
|
+
rubygems_version: 2.2.2
|
193
|
+
signing_key:
|
194
|
+
specification_version: 4
|
195
|
+
summary: A simple way to self-host a Github OAuth protected jekyll site to your GitHub
|
196
|
+
Team.
|
197
|
+
test_files: []
|