jekyll-auth 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2bc3f1b5a01a023ce6a06707d67be186171eb2c
4
- data.tar.gz: 944440d4dc8586bb5ce652bfcae1d98135169411
3
+ metadata.gz: 5252fb3ba4db62cb22f5f9949f54a2e0612ed060
4
+ data.tar.gz: ae51f402692073b5b79942f62af6885533bf41fc
5
5
  SHA512:
6
- metadata.gz: 035f53918722a1a28072452343193a39269dab8785e0592965cce0b24c099119fd2518c2f4fce6de27225d19254b20484c8aa337a181e4da85313ef7f33b6ba7
7
- data.tar.gz: 975a8e9ffb1a8c64aa6d2ba2fd30bdfe29dc9dcdf73ade840f5e882ac9f519b0a135e561438245ccb8bad7b9ebb4558e92c429a34c223ff15421921373657269
6
+ metadata.gz: c85daf40909c0eca989d2c468fd68edc67d4fea09b197f64dd06194f9bfb6a045849e8766720427ba683023b80ba58e154de8d9952c2a65cd3054640e13291d8
7
+ data.tar.gz: 1409e332aca6db366fa2dc1c4c8a00aea75e5dbd38f78800b21eb78f4c71ffe64d94790f8b5903758c427ba7de188db89bd2f8b1898f9c0165989d3f423e57c3
@@ -0,0 +1,20 @@
1
+ inherit_gem:
2
+ jekyll: .rubocop.yml
3
+
4
+ Style/Documentation:
5
+ Enabled: false
6
+
7
+ Metrics/MethodLength:
8
+ Enabled: false
9
+
10
+ Metrics/LineLength:
11
+ Enabled: false
12
+
13
+ Style/FileName:
14
+ Enabled: false
15
+
16
+ Metrics/BlockLength:
17
+ Enabled: false
18
+
19
+ Style/DoubleNegation:
20
+ Enabled: false
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -23,21 +23,21 @@ But what if you only want to share that site with a select number of people? Bef
23
23
 
24
24
  1. Navigate to [the GitHub app registration page](https://github.com/settings/applications/new)
25
25
  2. Give your app a name
26
- 3. Tell GitHub the URL you want the app to eventually live at. If using a free Heroku account, this will be something like http://my-site.herokuapp.com
27
- 4. Specify the callback URL; should be like this: https://my-site.herokuapp.com/auth/github/callback; note that this is **https**, not http.
26
+ 3. Tell GitHub the URL you want the app to eventually live at. If using a free Heroku account, this will be something like <http://my-site.herokuapp.com>
27
+ 4. Specify the callback URL; should be like this: <https://my-site.herokuapp.com/auth/github/callback>; note that this is **https**, not http.
28
28
  5. Hit Save, but leave the page open, you'll need some of the information in a moment
29
29
 
30
- Remember the 'my-site' part for later on when using `heroku create`. Also, my-site is often called 'app-name' in Heroku documenation.
30
+ Remember the 'my-site' part for later on when using `heroku create`. Also, my-site is often called 'app-name' in Heroku documentation.
31
31
 
32
32
  ### Add Jekyll Auth to your site
33
33
 
34
- 1. Within your new site repository or orphaned github [branch](https://help.github.com/articles/creating-project-pages-manually/) (the branch could be named anything except 'gh-pages' since this would then be public on github!), add `gem 'jekyll-auth'` to your `Gemfile` or if you don't already have a `Gemfile`, create a file called `Gemfile` in the root of your site's repository with the following content:
34
+ 1. Within your new site repository or orphaned github [branch](https://help.github.com/articles/creating-project-pages-manually/) (the branch could be named anything except 'gh-pages' since this would then be public on GitHub!), add `gem 'jekyll-auth'` to your `Gemfile` or if you don't already have a `Gemfile`, create a file called `Gemfile` in the root of your site's repository with the following content:
35
35
 
36
- ```ruby
37
- source "https://rubygems.org"
36
+ ```ruby
37
+ source "https://rubygems.org"
38
38
 
39
- gem 'jekyll-auth'
40
- ```
39
+ gem 'jekyll-auth'
40
+ ```
41
41
 
42
42
  2. `cd` into your project's directory and run `bundle install`. If you get an error using `bundle install`, see Troubleshooting below.
43
43
 
@@ -55,20 +55,20 @@ Run `bundle exec jekyll-auth setup --client_id XXX --client_secret XXX --org_nam
55
55
 
56
56
  1. You may need to add and commit the files generated by `jekyll-auth new` to Git before continuing
57
57
  2. Make sure you have [the Heroku toolbelt](https://toolbelt.heroku.com/) installed
58
- 3. Run `heroku create my-site` from your site's directory; make sure my-site matches what you specified in the Githup application registration above.
58
+ 3. Run `heroku create my-site` from your site's directory; make sure my-site matches what you specified in the GitHub application registration above.
59
59
  4. `heroku config:set GITHUB_CLIENT_ID=XXX GITHUB_CLIENT_SECRET=XXX GITHUB_ORG_NAME=XXX` (or `GITHUB_TEAM_ID`)
60
- 5. `git push heroku`, or if you are maintaining the site in an orphaned branch of your github repo (say 'heroku-pages'), do `git push heroku heroku-pages:master`
60
+ 5. `git push heroku`, or if you are maintaining the site in an orphaned branch of your GitHub repo (say 'heroku-pages'), do `git push heroku heroku-pages:master`
61
61
  6. `heroku open` to open the site in your browser
62
62
 
63
- #### Find the organization ID (needed to find team ID)
63
+ #### Find the Organization ID (needed to find Team ID)
64
64
 
65
- If you need to find an organization's ID, you can use the following curl command:
65
+ If you need to find an organization's ID, you can use the following cURL command:
66
66
 
67
67
  ```
68
68
  curl https://api.github.com/orgs/{org_name}
69
69
  ```
70
70
 
71
- #### Finding the team ID
71
+ #### Finding the Team ID
72
72
 
73
73
  If you need help finding a team's numeric ID, you can use the `jekyll-auth team_id` command.
74
74
 
@@ -78,13 +78,13 @@ For example, to find the team ID for @jekyll/maintainers you'd run the command:
78
78
  jekyll-auth team_id --org jekyll --team maintainers
79
79
  ```
80
80
 
81
- You'll want to add a [personal access token](https://github.com/settings/tokens/new) to your `.env` file so that Jekyll-Auth can make the necessary API request, but the command will run you through the process if you dont.
81
+ You'll want to add a [personal access token](https://github.com/settings/tokens/new) to your `.env` file so that Jekyll-Auth can make the necessary API request, but the command will run you through the process if you do not provide this.
82
82
 
83
83
  ## Configuration
84
84
 
85
85
  ### Whitelisting
86
86
 
87
- Don't want to require authentication for every part of your site? Fine! Add a whitelist to your Jekyll's *_config.yml_* file:
87
+ Don't want to require authentication for every part of your site? Fine! Add a whitelist to your Jekyll's **config.yml** file:
88
88
 
89
89
  ```yaml
90
90
  jekyll_auth:
@@ -94,7 +94,7 @@ jekyll_auth:
94
94
 
95
95
  `jekyll_auth.whitelist` takes an array of regular expressions as strings. The default auth behavior checks (and blocks) against root (`/`). Any path defined in the whitelist won't require authentication on your site.
96
96
 
97
- What if you want to go the other way, and unauthenticate the entire site _except_ for certain portions? You can define some regex magic for that:
97
+ What if you want to go the other way, and unauthenticate the entire site *except* for certain portions? You can define some regex magic for that:
98
98
 
99
99
  ```yaml
100
100
  jekyll_auth:
@@ -123,7 +123,7 @@ Want to run it locally?
123
123
 
124
124
  ### Without authentication
125
125
 
126
- Just run `jekyll serve` as you would normally
126
+ Just run `jekyll serve` as you would normally.
127
127
 
128
128
  ### With authentication
129
129
 
@@ -132,7 +132,7 @@ Just run `jekyll serve` as you would normally
132
132
  3. `export GITHUB_ORG_NAME=[org name]` or `export GITHUB_TEAM_ID=[team id]` or `export GITHUB_TEAM_IDS=1234,5678`
133
133
  4. `jekyll-auth serve`
134
134
 
135
- *Pro-tip #1:* For sanity sake, and to avoid problems with your callback URL, you may want to have two apps, one with a local oauth callback, and one for production if you're going to be testing auth locally.
135
+ *Pro-tip #1:* For sanity's sake, and to avoid problems with your callback URL, you may want to have two apps, one with a local Oauth callback, and one for production if you're going to be testing auth locally.
136
136
 
137
137
  *Pro-tip #2*: Jekyll Auth supports [dotenv](https://github.com/bkeepers/dotenv) out of the box. You can create a `.env` file in the root of site and add your configuration variables there. It's ignored by `.gitignore` if you use `jekyll-auth new`, but be sure not to accidentally commit your `.env` file. Here's what your `.env` file might look like:
138
138
 
@@ -146,11 +146,11 @@ GITHUB_TEAM_ID=12345
146
146
 
147
147
  Every time you push to Heroku, we take advantage of the fact that Heroku automatically runs the `rake assets:precompile` command (normally used for Rails sites) to build our Jekyll site and store it statically, just like GitHub pages would.
148
148
 
149
- Anytime a request comes in for a page, we run it through [Sinatra](http://www.sinatrarb.com/) (using the `_site` folder as the static file folder, just as `public` would be normally), and authenticate it using [sinatra_auth_github](https://github.com/atmos/sinatra_auth_github).
149
+ Anytime a request comes in for a page, we run it through [Sinatra](http://www.sinatrarb.com/) (using the `_site` folder as the static file folder, just as `public` would be normally), and authenticate it using [sinatra\_auth\_github](https://github.com/atmos/sinatra_auth_github).
150
150
 
151
151
  If they're in the org, they get the page. Otherwise, all they ever get is [the bouncer](http://octodex.github.com/bouncer/).
152
152
 
153
- ## Upgrading from Jekyll Auth < 0.1.0
153
+ ## Upgrading from Jekyll Auth &lt; 0.1.0
154
154
 
155
155
  1. `cd` to your project directory
156
156
  2. `rm config.ru`
@@ -163,6 +163,7 @@ If they're in the org, they get the page. Otherwise, all they ever get is [the b
163
163
 
164
164
  * **ERROR: YOUR SITE COULD NOT BE BUILT** during install, either locally or on Heroku. You likely need to add `exclude: [vendor]` to `_config.yml` in your branch's root directory (create the file if it does not exist already). If you still have problems on the *local* install, you may have better luck using `bundle install --deployment`, but be sure to add the resulting 'vendor' directory to .gitignore. For completeness, the full error may look something like this:
165
165
 
166
+
166
167
  ```
167
168
  remote: Configuration file: none
168
169
  remote: ERROR: YOUR SITE COULD NOT BE BUILT:
@@ -170,10 +171,9 @@ remote: ------------------------------------
170
171
  remote: Invalid date '0000-00-00': Post '/vendor/bundle/ruby/2.0.0/gems/jekyll-2.5.3/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb' does not have a valid date in the filename.
171
172
  ```
172
173
 
173
- * **Pushing to heroku**. If you are working from a new github-cloned repo (where you have not run `heroku create`), you may also want to push to heroku. You do not add the remote in the standard way using git, but instead do this:
174
+ * **Pushing to heroku**. If you are working from a new GitHub-cloned repo (where you have not run `heroku create`), you may also want to push to Heroku. Instead of adding the remote in the standard way with Git, do this:
175
+
174
176
 
175
177
  ```
176
178
  heroku git:remote -a my-site
177
179
  ```
178
-
179
-
data/Rakefile CHANGED
@@ -4,17 +4,17 @@ require 'bundler'
4
4
  require 'fileutils'
5
5
  require 'dotenv'
6
6
 
7
- task :default => [:spec]
7
+ task default: [:spec]
8
8
 
9
9
  task :site do
10
10
  Dotenv.load
11
- FileUtils.chdir "templates"
11
+ FileUtils.chdir 'templates'
12
12
  `bundle exec jekyll-auth`
13
13
  end
14
14
 
15
15
  require 'rspec/core/rake_task'
16
- desc "Run specs"
16
+ desc 'Run specs'
17
17
  RSpec::Core::RakeTask.new do |t|
18
18
  t.pattern = 'spec/**/*_spec.rb'
19
- t.rspec_opts = ["--order", "rand", "--color"]
19
+ t.rspec_opts = ['--order', 'rand', '--color']
20
20
  end
@@ -1,20 +1,19 @@
1
1
  #!/usr/bin/env ruby
2
2
  # Command-line interface for jekyll-auth
3
3
 
4
- require 'mercenary'
5
- require 'jekyll-auth'
6
- require 'open3'
4
+ require "mercenary"
5
+ require "jekyll-auth"
6
+ require "open3"
7
7
 
8
8
  Mercenary.program("jekyll-auth") do |p|
9
- p.version JekyllAuth::VERSION
9
+ p.version JekyllAuth::VERSION
10
10
  p.description "A simple way to use Github OAuth to serve a protected jekyll site to your GitHub organization"
11
- p.syntax 'jekyll-auth <subcommand> options'
11
+ p.syntax "jekyll-auth <subcommand> options"
12
12
 
13
13
  p.command(:new) do |c|
14
- c.syntax 'new'
14
+ c.syntax "new"
15
15
  c.description "Initialize an existing Jekyll site as a Jekyll Auth site"
16
- c.action do |args, options|
17
-
16
+ c.action do |_args, _options|
18
17
  JekyllAuth::Commands.copy_templates
19
18
 
20
19
  if JekyllAuth::Commands.changed?
@@ -29,23 +28,22 @@ Mercenary.program("jekyll-auth") do |p|
29
28
  # Called by Rake task, to allow the gem
30
29
  # to add functionality here in the future
31
30
  p.command(:build) do |c|
32
- c.syntax 'build'
31
+ c.syntax "build"
33
32
  c.description "Build the Jekyll site"
34
- c.action do |args, options|
35
- require 'jekyll'
33
+ c.action do |_args, options|
34
+ require "jekyll"
36
35
  Jekyll::Commands::Build.process(options)
37
36
  end
38
37
  end
39
38
 
40
39
  p.command(:team_id) do |c|
41
- c.syntax 'team_id --org <ORG> --team <TEAM>'
40
+ c.syntax "team_id --org <ORG> --team <TEAM>"
42
41
  c.description "Retrieve a team's ID"
43
- c.option 'org', '--org <ORG>', 'The GitHub Organization, e.g., "jekyll"'
44
- c.option 'team', '--team <TEAM>', 'The team name, e.g., "maintainers"'
45
-
46
- c.action do |args, options|
42
+ c.option "org", "--org <ORG>", 'The GitHub Organization, e.g., "jekyll"'
43
+ c.option "team", "--team <TEAM>", 'The team name, e.g., "maintainers"'
47
44
 
48
- if !JekyllAuth::Commands.env_var_set? "GITHUB_TOKEN"
45
+ c.action do |_args, options|
46
+ unless JekyllAuth::Commands.env_var_set? "GITHUB_TOKEN"
49
47
  puts "You'll need to go to https://github.com/settings/tokens/new and create a personal access token".red
50
48
  puts "Once you've got the token, prefix the jekyll-auth command with GITHUB_TOKEN=[YOUR TOKEN]".red
51
49
  puts "You can also add it to a `.env` file in this directory".red
@@ -74,10 +72,12 @@ Mercenary.program("jekyll-auth") do |p|
74
72
  p.command(:serve) do |c|
75
73
  c.syntax "serve"
76
74
  c.description "Run Jekyll Auth site locally"
77
- c.action do |args, options|
75
+ c.option "host", "--host <HOST>", "Listen at the given hostname, e.g., 127.0.0.1"
76
+ c.option "port", "--port <PORT>", "Listen on the given port, e.g., 4000"
78
77
 
78
+ c.action do |_args, options|
79
79
  # Ensure environmental variables are set
80
- unless ["GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET"].all? { |v| JekyllAuth::Commands.env_var_set?(v) }
80
+ unless %w(GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET).all? { |v| JekyllAuth::Commands.env_var_set?(v) }
81
81
  puts "Whoops. Looks like you forgot to tell Jekyll Auth about your app".red
82
82
  puts "Be sure to run export GITHUB_CLIENT_ID=[client id], export GITHUB_CLIENT_SECRET=[client secret], and export GITHUB_ORG_NAME=[org name] (or GITHUB_TEAM_ID)".red
83
83
  puts "See the readme for more information on where to find these".red
@@ -87,10 +87,12 @@ Mercenary.program("jekyll-auth") do |p|
87
87
  # build site
88
88
  p.go ["build"]
89
89
 
90
+ host = options["host"] || "0.0.0.0"
91
+ port = options["port"] || "4000"
92
+
90
93
  puts "Spinning up the server with authentication. Use CTRL-C to stop."
91
94
  puts "To preview the site without authentication, use the `jekyll serve` command"
92
- JekyllAuth::Commands.execute_command "bundle", "exec", "rackup", "-p", "4000"
93
-
95
+ JekyllAuth::Commands.execute_command "bundle", "exec", "rackup", "-o", host, "-p", port
94
96
  end
95
97
  end
96
98
 
@@ -101,8 +103,7 @@ Mercenary.program("jekyll-auth") do |p|
101
103
  c.option "client_secret", "--client_secret", "Your oauth app client secret"
102
104
  c.option "team_id", "--team_id", "The team to authenticate against"
103
105
  c.option "org_name", "--org_name", "An organization to authenticate against"
104
- c.action do |args, options|
105
-
106
+ c.action do |_args, options|
106
107
  if find_executable("heroku").nil?
107
108
  say "Looks like we're missing the Heroku client. Let's see if we can't install it..."
108
109
  JekyllAuth::Commands.execute_command "wget", "-qO-", "https://toolbelt.heroku.com/install.sh", "|", "sh"
@@ -1,31 +1,33 @@
1
1
  require './lib/jekyll_auth/version'
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = "jekyll-auth"
4
+ s.name = 'jekyll-auth'
5
5
  s.version = JekyllAuth::VERSION
6
- s.summary = "A simple way to use GitHub OAuth to serve a protected jekyll site to your GitHub organization"
7
- s.description = "A simple way to use GitHub OAuth to serve a protected jekyll site to your GitHub organization."
8
- s.authors = "Ben Balter"
9
- s.email = "ben@balter.com"
10
- s.homepage = "https://github.com/benbalter/jekyll-auth"
11
- s.license = "MIT"
6
+ s.summary = 'A simple way to use GitHub OAuth to serve a protected jekyll site to your GitHub organization'
7
+ s.description = 'A simple way to use GitHub OAuth to serve a protected jekyll site to your GitHub organization.'
8
+ s.authors = 'Ben Balter'
9
+ s.email = 'ben@balter.com'
10
+ s.homepage = 'https://github.com/benbalter/jekyll-auth'
11
+ s.license = 'MIT'
12
12
  s.files = `git ls-files`.split("\n")
13
13
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
- s.require_paths = ["lib"]
14
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
15
+ s.require_paths = ['lib']
16
16
 
17
- s.add_dependency "jekyll", ">= 2.0"
18
- s.add_dependency "sinatra-index", "~> 0.0"
19
- s.add_dependency "sinatra_auth_github", "~> 1.1"
20
- s.add_dependency "rack", "~> 1.6"
21
- s.add_dependency "dotenv", "~> 2.0"
22
- s.add_dependency "rake", "~> 10.3"
23
- s.add_dependency "rack-ssl-enforcer", "~> 0.2"
24
- s.add_dependency "mercenary", "~> 0.3"
25
- s.add_dependency 'safe_yaml', "~> 1.0"
26
- s.add_dependency "colorator", "~> 0.1"
27
- s.add_development_dependency "rspec", "~> 3.1"
28
- s.add_development_dependency "rack-test", "~> 0.6"
29
- s.add_development_dependency "webmock", "~> 1.2 "
30
- s.add_development_dependency "pry", "~> 0.10"
17
+ s.add_dependency 'jekyll', '~> 3.0'
18
+ s.add_dependency 'sinatra-index', '~> 0.0'
19
+ s.add_dependency 'sinatra_auth_github', '~> 1.1'
20
+ s.add_dependency 'rack', '~> 1.6'
21
+ s.add_dependency 'dotenv', '~> 2.0'
22
+ s.add_dependency 'rake', '~> 10.3'
23
+ s.add_dependency 'rack-ssl-enforcer', '~> 0.2'
24
+ s.add_dependency 'mercenary', '~> 0.3'
25
+ s.add_dependency 'safe_yaml', '~> 1.0'
26
+ s.add_dependency 'colorator', '~> 1.0'
27
+ s.add_dependency 'activesupport', '~> 4.0'
28
+ s.add_development_dependency 'rspec', '~> 3.1'
29
+ s.add_development_dependency 'rack-test', '~> 0.6'
30
+ s.add_development_dependency 'webmock', '~> 1.2 '
31
+ s.add_development_dependency 'pry', '~> 0.10'
32
+ s.add_development_dependency 'rubocop', '~> 0.35'
31
33
  end
@@ -1,16 +1,16 @@
1
- require 'sinatra-index'
2
- require 'sinatra_auth_github'
3
- require 'dotenv'
4
- require 'safe_yaml'
5
- require 'colorator'
6
- require 'mkmf'
7
- require_relative 'jekyll_auth/version'
8
- require_relative 'jekyll_auth/helpers'
9
- require_relative 'jekyll_auth/config'
10
- require_relative 'jekyll_auth/auth_site'
11
- require_relative 'jekyll_auth/jekyll_site'
12
- require_relative 'jekyll_auth/config_error'
13
- require_relative 'jekyll_auth/commands'
1
+ require "sinatra-index"
2
+ require "sinatra_auth_github"
3
+ require "dotenv"
4
+ require "safe_yaml"
5
+ require "colorator"
6
+ require "mkmf"
7
+ require_relative "jekyll_auth/version"
8
+ require_relative "jekyll_auth/helpers"
9
+ require_relative "jekyll_auth/config"
10
+ require_relative "jekyll_auth/auth_site"
11
+ require_relative "jekyll_auth/jekyll_site"
12
+ require_relative "jekyll_auth/config_error"
13
+ require_relative "jekyll_auth/commands"
14
14
 
15
15
  Dotenv.load
16
16
 
@@ -1,21 +1,16 @@
1
1
  class JekyllAuth
2
2
  class AuthSite < Sinatra::Base
3
-
4
3
  configure :production do
5
- require 'rack-ssl-enforcer'
4
+ require "rack-ssl-enforcer"
6
5
  use Rack::SslEnforcer if JekyllAuth.ssl?
7
6
  end
8
7
 
9
- use Rack::Session::Cookie, {
10
- :http_only => true,
11
- :secret => ENV['SESSION_SECRET'] || SecureRandom.hex
12
- }
8
+ use Rack::Session::Cookie, :http_only => true,
9
+ :secret => ENV["SESSION_SECRET"] || SecureRandom.hex
13
10
 
14
- set :github_options, {
15
- :scopes => 'read:org'
16
- }
11
+ set :github_options, :scopes => "read:org"
17
12
 
18
- ENV['WARDEN_GITHUB_VERIFIER_SECRET'] ||= SecureRandom.hex
13
+ ENV["WARDEN_GITHUB_VERIFIER_SECRET"] ||= SecureRandom.hex
19
14
  register Sinatra::Auth::Github
20
15
 
21
16
  use Rack::Logger
@@ -29,19 +24,19 @@ class JekyllAuth
29
24
 
30
25
  case authentication_strategy
31
26
  when :team
32
- github_team_authenticate! ENV['GITHUB_TEAM_ID']
27
+ github_team_authenticate! ENV["GITHUB_TEAM_ID"]
33
28
  when :teams
34
- github_teams_authenticate! ENV['GITHUB_TEAM_IDS'].split(",")
29
+ github_teams_authenticate! ENV["GITHUB_TEAM_IDS"].split(",")
35
30
  when :org
36
- github_organization_authenticate! ENV['GITHUB_ORG_NAME']
31
+ github_organization_authenticate! ENV["GITHUB_ORG_NAME"]
37
32
  else
38
33
  raise JekyllAuth::ConfigError
39
34
  end
40
35
  end
41
36
 
42
- get '/logout' do
37
+ get "/logout" do
43
38
  logout!
44
- redirect '/'
39
+ redirect "/"
45
40
  end
46
41
  end
47
42
  end
@@ -1,11 +1,10 @@
1
1
  class JekyllAuth
2
2
  class Commands
3
-
4
- FILES = %w{Rakefile config.ru .gitignore .env}
5
- VARS = %w{client_id client_secret team_id org_name}
3
+ FILES = %w(Rakefile config.ru .gitignore .env).freeze
4
+ VARS = %w(client_id client_secret team_id org_name).freeze
6
5
 
7
6
  def self.source
8
- @source ||= File.expand_path( "../../templates", File.dirname(__FILE__) )
7
+ @source ||= File.expand_path("../../templates", File.dirname(__FILE__))
9
8
  end
10
9
 
11
10
  def self.destination
@@ -13,14 +12,14 @@ class JekyllAuth
13
12
  end
14
13
 
15
14
  def self.changed?
16
- execute_command("git", "status", destination, "--porcelain").length != 0
15
+ !execute_command("git", "status", destination, "--porcelain").empty?
17
16
  rescue
18
17
  false
19
18
  end
20
19
 
21
20
  def self.execute_command(*args)
22
21
  output, status = Open3.capture2e(*args)
23
- raise "Command `#{args.join(" ")}` failed: #{output}" if status != 0
22
+ raise "Command `#{args.join(" ")}` failed: #{output}" unless status.exitstatus.zero?
24
23
  output
25
24
  end
26
25
 
@@ -44,7 +43,7 @@ class JekyllAuth
44
43
  end
45
44
 
46
45
  def self.env_var_set?(var)
47
- !(ENV[var].to_s.blank?)
46
+ !ENV[var].to_s.blank?
48
47
  end
49
48
 
50
49
  def self.init_repo
@@ -61,7 +60,7 @@ class JekyllAuth
61
60
 
62
61
  def self.heroku_remote_set?
63
62
  remotes = execute_command "git", "remote", "-v"
64
- !!(remotes =~ /^heroku\s/)
63
+ !!(remotes =~ %r!^heroku\s!)
65
64
  end
66
65
 
67
66
  def self.configure_heroku(options)
@@ -13,11 +13,11 @@ class JekyllAuth
13
13
  end
14
14
 
15
15
  def self.whitelist
16
- whitelist = JekyllAuth::config["whitelist"]
16
+ whitelist = JekyllAuth.config["whitelist"]
17
17
  Regexp.new(whitelist.join("|")) unless whitelist.nil?
18
18
  end
19
19
 
20
20
  def self.ssl?
21
- !!JekyllAuth::config["ssl"]
21
+ !!JekyllAuth.config["ssl"]
22
22
  end
23
23
  end
@@ -1,6 +1,5 @@
1
1
  class JekyllAuth
2
- class ConfigError < SecurityError
3
-
2
+ class ConfigError < RuntimeError
4
3
  def message
5
4
  "Jekyll Auth is refusing to serve your site because your oauth credentials are not properly configured."
6
5
  end
@@ -6,11 +6,11 @@ class JekyllAuth
6
6
  end
7
7
 
8
8
  def authentication_strategy
9
- if !ENV['GITHUB_TEAM_ID'].to_s.blank?
9
+ if !ENV["GITHUB_TEAM_ID"].to_s.blank?
10
10
  :team
11
- elsif !ENV['GITHUB_TEAM_IDS'].to_s.blank?
11
+ elsif !ENV["GITHUB_TEAM_IDS"].to_s.blank?
12
12
  :teams
13
- elsif !ENV['GITHUB_ORG_NAME'].to_s.blank?
13
+ elsif !ENV["GITHUB_ORG_NAME"].to_s.blank?
14
14
  :org
15
15
  end
16
16
  end
@@ -1,14 +1,13 @@
1
1
  class JekyllAuth
2
2
  class JekyllSite < Sinatra::Base
3
-
4
3
  register Sinatra::Index
5
- set :public_folder, File.expand_path('_site', Dir.pwd)
6
- use_static_index 'index.html'
4
+ set :public_folder, File.expand_path("_site", Dir.pwd)
5
+ use_static_index "index.html"
7
6
 
8
7
  not_found do
9
8
  status 404
10
- four_oh_four = File.expand_path('_site/404.html', Dir.pwd)
11
- File.read(four_oh_four) if File.exists?(four_oh_four)
9
+ four_oh_four = File.expand_path("_site/404.html", Dir.pwd)
10
+ File.read(four_oh_four) if File.exist?(four_oh_four)
12
11
  end
13
12
  end
14
13
  end
@@ -1,3 +1,3 @@
1
1
  class JekyllAuth
2
- VERSION = '2.0.0'
2
+ VERSION = "2.1.0".freeze
3
3
  end
@@ -3,6 +3,11 @@
3
3
 
4
4
  set -e
5
5
 
6
+ export GITHUB_CLIENT_ID=FOO
7
+ export GITHUB_CLIENT_SECRET=BAR
8
+ export GITHUB_ORG_NAME="balter-test-org"
9
+
6
10
  bundle exec rake spec
11
+ bundle exec rubocop
7
12
  bundle exec gem build jekyll-auth.gemspec
8
13
  bundle exec jekyll-auth --version
@@ -9,34 +9,32 @@ describe "logged in user" do
9
9
 
10
10
  before(:each) do
11
11
  setup_tmp_dir
12
- @user = make_user('login' => 'benbaltertest')
12
+ @user = make_user("login" => "benbaltertest")
13
13
  login_as @user
14
14
 
15
- ENV['GITHUB_ORG_NAME'] = "balter-test-org"
16
-
17
- stub_request(:get, "https://api.github.com/orgs/#{ENV["GITHUB_ORG_NAME"]}/members/benbaltertest").
18
- to_return(:status => 200)
15
+ ENV["GITHUB_ORG_NAME"] = "balter-test-org"
16
+
17
+ stub_request(:get, "https://api.github.com/orgs/#{ENV["GITHUB_ORG_NAME"]}/members/benbaltertest")
18
+ .to_return(:status => 200)
19
19
  end
20
20
 
21
21
  it "shows the securocat when github returns an oauth error" do
22
22
  get "/auth/github/callback?error=redirect_uri_mismatch"
23
- expect(last_response.body).to match(%r{securocat\.png})
23
+ expect(last_response.body).to match(%r!securocat\.png!)
24
24
  end
25
25
 
26
26
  it "logs the user out" do
27
27
  get "/logout"
28
28
  expect(last_response.status).to eql(302)
29
- expect(last_response.headers['Location']).to eql("http://example.org/")
29
+ expect(last_response.headers["Location"]).to eql("http://example.org/")
30
30
 
31
31
  get "/"
32
32
  expect(last_response.status).to eql(302)
33
- expect(last_response.headers['Location']).to match(%r{^https://github\.com/login/oauth/authorize})
33
+ expect(last_response.headers["Location"]).to match(%r!^https://github\.com/login/oauth/authorize!)
34
34
  end
35
-
36
35
  end
37
36
 
38
37
  describe "logged out user" do
39
-
40
38
  include Rack::Test::Methods
41
39
 
42
40
  def app
@@ -44,33 +42,33 @@ describe "logged out user" do
44
42
  end
45
43
 
46
44
  before do
47
- ENV['GITHUB_ORG_NAME'] = "balter-test-org"
45
+ ENV["GITHUB_ORG_NAME"] = "balter-test-org"
48
46
  end
49
47
 
50
48
  it "doesn't let you view indexes" do
51
49
  get "/"
52
50
  expect(last_response.status).to eql(302)
53
- expect(last_response.headers['Location']).to match(%r{^https://github\.com/login/oauth/authorize})
51
+ expect(last_response.headers["Location"]).to match(%r!^https://github\.com/login/oauth/authorize!)
54
52
 
55
53
  get "/some_dir"
56
54
  expect(last_response.status).to eql(302)
57
- expect(last_response.headers['Location']).to match(%r{^https://github\.com/login/oauth/authorize})
55
+ expect(last_response.headers["Location"]).to match(%r!^https://github\.com/login/oauth/authorize!)
58
56
  end
59
57
 
60
58
  it "doesn't let you view files" do
61
59
  get "/index.html"
62
60
  expect(last_response.status).to eql(302)
63
- expect(last_response.headers['Location']).to match(%r{^https://github\.com/login/oauth/authorize})
61
+ expect(last_response.headers["Location"]).to match(%r!^https://github\.com/login/oauth/authorize!)
64
62
 
65
63
  get "/some_dir/index.html"
66
64
  expect(last_response.status).to eql(302)
67
- expect(last_response.headers['Location']).to match(%r{^https://github\.com/login/oauth/authorize})
65
+ expect(last_response.headers["Location"]).to match(%r!^https://github\.com/login/oauth/authorize!)
68
66
  end
69
67
 
70
68
  it "refuses to serve the site without an authentication strategy" do
71
69
  ENV["GITHUB_ORG_NAME"] = nil
72
70
  ENV["GITHUB_TEAM_ID"] = nil
73
71
  ENV["GITHUB_TEAMS_ID"] = nil
74
- expect{get "/"}.to raise_error(JekyllAuth::ConfigError)
72
+ expect { get "/" }.to raise_error(JekyllAuth::ConfigError)
75
73
  end
76
74
  end
@@ -6,23 +6,22 @@ describe "bin" do
6
6
  end
7
7
 
8
8
  it "spits out the help do" do
9
- env = { "GITHUB_TOKEN" => nil}
9
+ env = { "GITHUB_TOKEN" => nil }
10
10
  output = execute_bin(env, "--help")
11
- expect(output).to match(%r{A simple way to use Github OAuth to serve a protected jekyll site to your GitHub organization})
11
+ expect(output).to match(%r!A simple way to use Github OAuth to serve a protected jekyll site to your GitHub organization!)
12
12
  end
13
13
 
14
14
  describe "team id" do
15
-
16
15
  it "errors if no token is given" do
17
- env = { "GITHUB_TOKEN" => nil}
18
- expect{execute_bin(env, "team_id", "--org", "balter-test-org", "--team", "1")}.to raise_error(RuntimeError).
19
- with_message(/prefix the jekyll-auth command with GITHUB_TOKEN/)
16
+ env = { "GITHUB_TOKEN" => nil }
17
+ expect { execute_bin(env, "team_id", "--org", "balter-test-org", "--team", "1") }.to raise_error(RuntimeError)
18
+ .with_message(%r!prefix the jekyll-auth command with GITHUB_TOKEN!)
20
19
  end
21
20
 
22
21
  it "errors if no team_id or org_name is given" do
23
- env = { "GITHUB_TOKEN" => "1234"}
24
- expect{execute_bin(env, "team_id")}.to raise_error(RuntimeError).
25
- with_message(/An org name and team ID are required/)
22
+ env = { "GITHUB_TOKEN" => "1234" }
23
+ expect { execute_bin(env, "team_id") }.to raise_error(RuntimeError)
24
+ .with_message(%r!An org name and team ID are required!)
26
25
  end
27
26
  end
28
27
 
@@ -30,7 +29,7 @@ describe "bin" do
30
29
  `git init`
31
30
  `git add .`
32
31
  `git commit -m 'initial commit'`
33
- execute_bin({"RACK_ENV" => "TEST"}, "new")
32
+ execute_bin({ "RACK_ENV" => "TEST" }, "new")
34
33
  expect(File).to exist("#{tmp_dir}/config.ru")
35
34
  expect(File).to exist("#{tmp_dir}/Rakefile")
36
35
  expect(File).to exist("#{tmp_dir}/.gitignore")
@@ -1,7 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "commands" do
4
-
5
4
  before do
6
5
  setup_tmp_dir
7
6
  end
@@ -16,12 +15,12 @@ describe "commands" do
16
15
  end
17
16
 
18
17
  it "should execute a command" do
19
- expect(JekyllAuth::Commands.execute_command("ls")).to match(/index\.html/)
18
+ expect(JekyllAuth::Commands.execute_command("ls")).to match(%r!index\.html!)
20
19
  end
21
20
 
22
21
  it "should retrieve a team's ID" do
23
- stub_request(:get, "https://api.github.com/orgs/batler-test-org/teams?per_page=100").
24
- to_return(:status => 204, :body => [{:slug => "test-team", :id => 1}])
22
+ stub_request(:get, "https://api.github.com/orgs/batler-test-org/teams?per_page=100")
23
+ .to_return(:status => 204, :body => [{ :slug => "test-team", :id => 1 }])
25
24
  expect(JekyllAuth::Commands.team_id("batler-test-org", "test-team")).to eql(1)
26
25
  end
27
26
 
@@ -71,6 +70,6 @@ describe "commands" do
71
70
  `git add foo.md`
72
71
  JekyllAuth::Commands.initial_commit
73
72
  output = JekyllAuth::Commands.execute_command "git", "log"
74
- expect(output).to match(/\[Jekyll Auth\] Initial setup/)
73
+ expect(output).to match(%r!\[Jekyll Auth\] Initial setup!)
75
74
  end
76
75
  end
@@ -1,11 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "strategies" do
4
-
5
4
  class TestHelper
6
5
  include JekyllAuth::Helpers
7
6
 
8
- def initialize(path=nil)
7
+ def initialize(path = nil)
9
8
  @path = path
10
9
  end
11
10
 
@@ -40,5 +40,4 @@ describe "jekyll site" do
40
40
  expect(last_response.status).to eql(404)
41
41
  expect(last_response.body).to eql("My custom 404")
42
42
  end
43
-
44
43
  end
@@ -1,10 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "JekyllAuth" do
4
-
5
4
  before(:each) do
6
5
  setup_tmp_dir
7
- JekyllAuth.instance_variable_set("@config",nil)
6
+ JekyllAuth.instance_variable_set("@config", nil)
8
7
  end
9
8
 
10
9
  it "should know the config file path" do
@@ -23,7 +22,7 @@ describe "JekyllAuth" do
23
22
 
24
23
  it "should return the config hash if the config files contains jekyll_auth" do
25
24
  File.write(JekyllAuth.config_file, "jekyll_auth:\n ssl: true\n whitelist:\n - drafts?\n")
26
- expect(JekyllAuth.config).to eql({"ssl"=>true, "whitelist"=>["drafts?"]})
25
+ expect(JekyllAuth.config).to eql("ssl" => true, "whitelist" => ["drafts?"])
27
26
  end
28
27
 
29
28
  it "should disable ssl by default" do
@@ -42,6 +41,6 @@ describe "JekyllAuth" do
42
41
 
43
42
  it "should parse the whitelist" do
44
43
  File.write(JekyllAuth.config_file, "jekyll_auth:\n whitelist:\n - drafts?\n")
45
- expect(JekyllAuth.whitelist).to eql(/drafts?/)
44
+ expect(JekyllAuth.whitelist).to eql(%r!drafts?!)
46
45
  end
47
46
  end
@@ -1,15 +1,15 @@
1
1
  require "bundler/setup"
2
- require 'fileutils'
2
+ require "fileutils"
3
3
 
4
- ENV['RACK_ENV'] = 'test'
5
- $:.push File.join(File.dirname(__FILE__), '..', 'lib')
4
+ ENV["RACK_ENV"] = "test"
5
+ $LOAD_PATH.push File.join(File.dirname(__FILE__), "..", "lib")
6
6
 
7
- require 'rack/test'
8
- require 'sinatra/auth/github'
9
- require 'sinatra/auth/github/test/test_helper'
10
- require 'webmock/rspec'
11
- require 'dotenv'
12
- require 'open3'
7
+ require "rack/test"
8
+ require "sinatra/auth/github"
9
+ require "sinatra/auth/github/test/test_helper"
10
+ require "webmock/rspec"
11
+ require "dotenv"
12
+ require "open3"
13
13
 
14
14
  def base_dir
15
15
  File.expand_path "../", File.dirname(__FILE__)
@@ -50,6 +50,8 @@ def execute_bin(env, *args)
50
50
  end
51
51
 
52
52
  Dotenv.load
53
+ ENV["GITHUB_CLIENT_ID"] ||= "IGNORE"
54
+ ENV["GITHUB_CLIENT_SECRET"] ||= "IGNORE"
53
55
  setup_tmp_dir
54
56
 
55
57
  require_relative "../lib/jekyll-auth"
@@ -4,6 +4,6 @@
4
4
 
5
5
  namespace :assets do
6
6
  task :precompile do
7
- sh "bundle exec jekyll-auth build"
7
+ sh 'bundle exec jekyll-auth build'
8
8
  end
9
9
  end
@@ -1,5 +1,5 @@
1
1
  # This file is auto-generated by Jekyll Auth
2
2
  # It tells Heroku how to launch our site
3
3
 
4
- require "jekyll-auth"
4
+ require 'jekyll-auth'
5
5
  run JekyllAuth.site
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-11 00:00:00.000000000 Z
11
+ date: 2016-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sinatra-index
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,28 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0.1'
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
+ - !ruby/object:Gem::Dependency
154
+ name: activesupport
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '4.0'
146
160
  type: :runtime
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '0.1'
166
+ version: '4.0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rspec
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +220,20 @@ dependencies:
206
220
  - - "~>"
207
221
  - !ruby/object:Gem::Version
208
222
  version: '0.10'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rubocop
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.35'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '0.35'
209
237
  description: A simple way to use GitHub OAuth to serve a protected jekyll site to
210
238
  your GitHub organization.
211
239
  email: ben@balter.com
@@ -215,6 +243,7 @@ extensions: []
215
243
  extra_rdoc_files: []
216
244
  files:
217
245
  - ".gitignore"
246
+ - ".rubocop.yml"
218
247
  - ".travis.yml"
219
248
  - Gemfile
220
249
  - README.md
@@ -268,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
297
  version: '0'
269
298
  requirements: []
270
299
  rubyforge_project:
271
- rubygems_version: 2.5.0
300
+ rubygems_version: 2.6.7
272
301
  signing_key:
273
302
  specification_version: 4
274
303
  summary: A simple way to use GitHub OAuth to serve a protected jekyll site to your
@@ -281,4 +310,3 @@ test_files:
281
310
  - spec/jekyll_auth_jekyll_site_spec.rb
282
311
  - spec/jekyll_auth_spec.rb
283
312
  - spec/spec_helper.rb
284
- has_rdoc: