jekyll-auth-naked 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,3 @@
1
+ _site
2
+ *.gem
3
+ .env
@@ -0,0 +1,9 @@
1
+ # This file is auto-generated by Jekyll Auth
2
+ # Feel free to add additional Rake tasks so long as
3
+ # `rake assets:precompile` continues to generate the jekyll site
4
+
5
+ namespace :assets do
6
+ task :precompile do
7
+ sh "bundle exec jekyll-auth build"
8
+ end
9
+ end
@@ -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
@@ -0,0 +1,4 @@
1
+ # This file is auto-generated by Jekyll Auth Naked
2
+
3
+ require "jekyll-auth-naked"
4
+ run JekyllAuthNaked.site
@@ -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
@@ -0,0 +1,7 @@
1
+ class JekyllAuthNaked
2
+ class JekyllSite < Sinatra::Base
3
+ register Sinatra::Index
4
+ set :public_folder, '_site'
5
+ use_static_index 'index.html'
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ class JekyllAuthNaked
2
+ VERSION = '0.1.17'
3
+ 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: []