checkpoint 1.1.3 → 1.2.0
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 +4 -4
- data/.github/dependabot.yml +10 -0
- data/.github/workflows/test.yml +32 -0
- data/.standard.yml +1 -0
- data/CHANGELOG.md +10 -0
- data/README.md +17 -2
- data/Rakefile +1 -1
- data/bin/standardrb +29 -0
- data/checkpoint.gemspec +16 -12
- data/db/migrations/1_create_grants.rb +9 -9
- data/lib/checkpoint/agent/token.rb +4 -4
- data/lib/checkpoint/agent.rb +2 -2
- data/lib/checkpoint/authority.rb +9 -9
- data/lib/checkpoint/credential/permission.rb +1 -1
- data/lib/checkpoint/credential/role.rb +1 -1
- data/lib/checkpoint/credential/role_map_resolver.rb +1 -1
- data/lib/checkpoint/credential/token.rb +4 -4
- data/lib/checkpoint/credential.rb +9 -9
- data/lib/checkpoint/db/grant.rb +3 -3
- data/lib/checkpoint/db/params.rb +5 -5
- data/lib/checkpoint/db/query/ac.rb +6 -8
- data/lib/checkpoint/db/query/acr.rb +9 -11
- data/lib/checkpoint/db/query/ar.rb +8 -10
- data/lib/checkpoint/db/query/cr.rb +6 -8
- data/lib/checkpoint/db.rb +18 -18
- data/lib/checkpoint/grants.rb +2 -2
- data/lib/checkpoint/query/action_permitted.rb +5 -5
- data/lib/checkpoint/query/role_granted.rb +3 -3
- data/lib/checkpoint/query.rb +2 -2
- data/lib/checkpoint/railtie.rb +4 -4
- data/lib/checkpoint/resource/all_of_type.rb +1 -1
- data/lib/checkpoint/resource/any_entity_of_type.rb +1 -1
- data/lib/checkpoint/resource/token.rb +5 -5
- data/lib/checkpoint/resource.rb +6 -6
- data/lib/checkpoint/version.rb +1 -1
- data/lib/checkpoint.rb +8 -8
- data/lib/tasks/migrate.rake +14 -14
- metadata +66 -39
- data/.rubocop.yml +0 -45
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6e1f38df526120f3c876818d47b8ca2474cdda3cf01bb369ed85e785231a064
|
|
4
|
+
data.tar.gz: b1dc9721eb030b185f599bef7f406e2f06f122e2cda507b4c3b8ba2119b530bc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d15bfc9d3e20a6bdaa5d58eb4c3670f0be7cb8501f62da37441d6a8f6d5afddb03a7961d4f596aaad46ee694e67c858fb7e12aaaba22811dc40e05f7b8fdc220
|
|
7
|
+
data.tar.gz: cd2f5a448180b3c22ef86d3190bd02b336805d489b35198629fe1b3fa0ee2923acb4743e67295cd42a3b1a1eed10c4811cbecd679bdc917c5af24997b7b4db20
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ ubuntu-latest ]
|
|
14
|
+
ruby-version: [3.2, 3.3, 3.4, 4.0]
|
|
15
|
+
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v6
|
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
|
21
|
+
uses: ruby/setup-ruby@v1
|
|
22
|
+
with:
|
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
24
|
+
bundler-cache: true
|
|
25
|
+
- name: Run linter for Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }}
|
|
26
|
+
run: bin/standardrb
|
|
27
|
+
- name: Run tests for Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }}
|
|
28
|
+
run: bin/rspec
|
|
29
|
+
- name: Report to Coveralls
|
|
30
|
+
uses: coverallsapp/github-action@v2
|
|
31
|
+
with:
|
|
32
|
+
github-token: ${{ secrets.github_token }}
|
data/.standard.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby_version: 3.0.0
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
## v1.2.0 - 2026-01-26
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
In v1.2.0, there is a large jump in Ruby version support and requirements.
|
|
8
|
+
The `sqlite3` gem is upgraded to 2.9, and the minimum Ruby version is **3.2**.
|
|
9
|
+
The `sequel` gem is upgraded many versions to `5.100.0` However, there are no
|
|
10
|
+
API changes to Checkpoint.
|
data/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
[](https://github.com/mlibrary/checkpoint/actions/workflows/test.yml)
|
|
2
|
+
[](https://coveralls.io/github/mlibrary/checkpoint?branch=main)
|
|
3
|
+
[](https://github.com/testdouble/standard)
|
|
3
4
|
[](https://checkpoint.readthedocs.io/en/latest)
|
|
4
5
|
[](https://www.rubydoc.info/gems/checkpoint)
|
|
5
6
|
|
|
@@ -20,6 +21,20 @@ And then execute:
|
|
|
20
21
|
|
|
21
22
|
$ bundle
|
|
22
23
|
|
|
24
|
+
## Compatibility
|
|
25
|
+
|
|
26
|
+
Checkpoint is intended to be compatible with all community-supported Ruby branches (i.e., minor versions), currently:
|
|
27
|
+
|
|
28
|
+
- 3.2
|
|
29
|
+
- 3.3
|
|
30
|
+
- 3.4
|
|
31
|
+
- 4.0
|
|
32
|
+
|
|
33
|
+
We prefer the newest syntax and linting rules that preserve compatibility with the oldest branch in normal maintenance.
|
|
34
|
+
When the security maintenance for a branch expires, Checkpoint's compatibility should be considered unsupported.
|
|
35
|
+
|
|
36
|
+
See also, [Ruby's branch maintenance policy](https://www.ruby-lang.org/en/downloads/branches/).
|
|
37
|
+
|
|
23
38
|
## Documentation
|
|
24
39
|
|
|
25
40
|
User documentation source is available in the `docs` directory and in rendered format
|
data/Rakefile
CHANGED
data/bin/standardrb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# This file was generated by Bundler.
|
|
6
|
+
#
|
|
7
|
+
# The application 'standardrb' is installed as part of a gem, and
|
|
8
|
+
# this file is here to facilitate running it.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require "pathname"
|
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
13
|
+
Pathname.new(__FILE__).realpath)
|
|
14
|
+
|
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
|
16
|
+
|
|
17
|
+
if File.file?(bundle_binstub)
|
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
|
19
|
+
load(bundle_binstub)
|
|
20
|
+
else
|
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require "rubygems"
|
|
27
|
+
require "bundler/setup"
|
|
28
|
+
|
|
29
|
+
load Gem.bin_path("standard", "standardrb")
|
data/checkpoint.gemspec
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
lib = File.expand_path(
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require "checkpoint/version"
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
8
|
+
spec.name = "checkpoint"
|
|
9
9
|
spec.version = Checkpoint::VERSION
|
|
10
10
|
spec.authors = ["Noah Botimer", "Aaron Elkiss"]
|
|
11
|
-
spec.email
|
|
11
|
+
spec.email = ["botimer@umich.edu", "aelkiss@umich.edu"]
|
|
12
12
|
spec.license = "BSD-3-Clause"
|
|
13
13
|
|
|
14
14
|
spec.summary = <<~SUMMARY
|
|
@@ -21,21 +21,25 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
22
22
|
f.match(%r{^(test|spec|features)/})
|
|
23
23
|
end
|
|
24
|
-
spec.bindir
|
|
25
|
-
spec.executables
|
|
24
|
+
spec.bindir = "exe"
|
|
25
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
26
26
|
spec.require_paths = ["lib"]
|
|
27
27
|
|
|
28
|
+
spec.required_ruby_version = ">= 3.2.0"
|
|
29
|
+
|
|
28
30
|
spec.add_dependency "ettin", "~> 1.1"
|
|
29
|
-
spec.add_dependency "sequel", "~> 5.
|
|
31
|
+
spec.add_dependency "sequel", "~> 5.100"
|
|
30
32
|
|
|
31
|
-
spec.add_development_dependency "bundler"
|
|
32
|
-
spec.add_development_dependency "
|
|
33
|
+
spec.add_development_dependency "bundler"
|
|
34
|
+
spec.add_development_dependency "logger"
|
|
35
|
+
spec.add_development_dependency "simplecov"
|
|
36
|
+
spec.add_development_dependency "simplecov-lcov"
|
|
37
|
+
spec.add_development_dependency "ostruct"
|
|
33
38
|
spec.add_development_dependency "pry"
|
|
34
39
|
spec.add_development_dependency "pry-byebug"
|
|
35
|
-
spec.add_development_dependency "rake", "~>
|
|
40
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
36
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
37
|
-
spec.add_development_dependency "
|
|
38
|
-
spec.add_development_dependency "
|
|
39
|
-
spec.add_development_dependency "sqlite3", "~> 1.3"
|
|
42
|
+
spec.add_development_dependency "standard", "~> 1.53"
|
|
43
|
+
spec.add_development_dependency "sqlite3", "~> 2.9"
|
|
40
44
|
spec.add_development_dependency "yard", "~> 0.9"
|
|
41
45
|
end
|
|
@@ -4,16 +4,16 @@ Sequel.migration do
|
|
|
4
4
|
change do
|
|
5
5
|
create_table :grants do
|
|
6
6
|
primary_key :id
|
|
7
|
-
column :agent_type,
|
|
8
|
-
column :agent_id,
|
|
9
|
-
column :agent_token,
|
|
10
|
-
column :credential_type,
|
|
11
|
-
column :credential_id,
|
|
7
|
+
column :agent_type, String, size: 100, null: false
|
|
8
|
+
column :agent_id, String, size: 100, null: false
|
|
9
|
+
column :agent_token, String, size: 201, null: false
|
|
10
|
+
column :credential_type, String, size: 100, null: false
|
|
11
|
+
column :credential_id, String, size: 100, null: false
|
|
12
12
|
column :credential_token, String, size: 201, null: false
|
|
13
|
-
column :resource_type,
|
|
14
|
-
column :resource_id,
|
|
15
|
-
column :resource_token,
|
|
16
|
-
column :zone_id,
|
|
13
|
+
column :resource_type, String, size: 100, null: false
|
|
14
|
+
column :resource_id, String, size: 100, null: false
|
|
15
|
+
column :resource_token, String, size: 201, null: false
|
|
16
|
+
column :zone_id, String, size: 100, null: false
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -50,10 +50,10 @@ module Checkpoint
|
|
|
50
50
|
to_s.hash
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
alias_method :==, :eql?
|
|
54
|
+
alias_method :inspect, :uri
|
|
55
|
+
alias_method :agent_id, :id
|
|
56
|
+
alias_method :agent_type, :type
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
data/lib/checkpoint/agent.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "checkpoint/agent/resolver"
|
|
4
|
+
require "checkpoint/agent/token"
|
|
5
5
|
|
|
6
6
|
module Checkpoint
|
|
7
7
|
# An Agent is an any person or entity that might be granted various
|
data/lib/checkpoint/authority.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
3
|
+
require "checkpoint/agent/resolver"
|
|
4
|
+
require "checkpoint/credential/resolver"
|
|
5
|
+
require "checkpoint/resource/resolver"
|
|
6
|
+
require "checkpoint/grants"
|
|
7
7
|
|
|
8
8
|
module Checkpoint
|
|
9
9
|
# An Authority is the central point of contact for authorization questions in
|
|
@@ -14,12 +14,12 @@ module Checkpoint
|
|
|
14
14
|
agent_resolver: Agent::Resolver.new,
|
|
15
15
|
credential_resolver: Credential::Resolver.new,
|
|
16
16
|
resource_resolver: Resource::Resolver.new,
|
|
17
|
-
grants: Grants.new
|
|
18
|
-
|
|
19
|
-
@agent_resolver
|
|
17
|
+
grants: Grants.new
|
|
18
|
+
)
|
|
19
|
+
@agent_resolver = agent_resolver
|
|
20
20
|
@credential_resolver = credential_resolver
|
|
21
|
-
@resource_resolver
|
|
22
|
-
@grants
|
|
21
|
+
@resource_resolver = resource_resolver
|
|
22
|
+
@grants = grants
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# Check whether there are any matching grants that would allow this actor
|
|
@@ -49,10 +49,10 @@ module Checkpoint
|
|
|
49
49
|
to_s.hash
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
alias_method :==, :eql?
|
|
53
|
+
alias_method :inspect, :uri
|
|
54
|
+
alias_method :credential_type, :type
|
|
55
|
+
alias_method :credential_id, :id
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "checkpoint/credential/resolver"
|
|
4
|
+
require "checkpoint/credential/role_map_resolver"
|
|
5
|
+
require "checkpoint/credential/role"
|
|
6
|
+
require "checkpoint/credential/permission"
|
|
7
|
+
require "checkpoint/credential/token"
|
|
8
8
|
|
|
9
9
|
module Checkpoint
|
|
10
10
|
# A Credential is the permission to take a particular action, or any
|
|
@@ -19,7 +19,7 @@ module Checkpoint
|
|
|
19
19
|
# possibly bound to a {Resource}.
|
|
20
20
|
class Credential
|
|
21
21
|
attr_reader :type, :id
|
|
22
|
-
|
|
22
|
+
alias_method :name, :id
|
|
23
23
|
|
|
24
24
|
# Create a new generic Credential. This should generally not be called,
|
|
25
25
|
# preferring to use a factory or instantiate a {Permission}, {Role}, or
|
|
@@ -38,8 +38,8 @@ module Checkpoint
|
|
|
38
38
|
#
|
|
39
39
|
# @param name [String|Symbol] the name of this credential
|
|
40
40
|
def initialize(name)
|
|
41
|
-
@id
|
|
42
|
-
@type =
|
|
41
|
+
@id = name.to_s
|
|
42
|
+
@type = "credential"
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
# Return the list of Credentials that would grant this one.
|
|
@@ -90,6 +90,6 @@ module Checkpoint
|
|
|
90
90
|
type.eql?(other.type) && name.eql?(other.id)
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
alias_method :==, :eql?
|
|
94
94
|
end
|
|
95
95
|
end
|
data/lib/checkpoint/db/grant.rb
CHANGED
|
@@ -8,16 +8,16 @@ module Checkpoint
|
|
|
8
8
|
# resource, credential).
|
|
9
9
|
def self.from(agent, credential, resource, zone: default_zone)
|
|
10
10
|
new(
|
|
11
|
-
agent_type: agent.type,
|
|
11
|
+
agent_type: agent.type, agent_id: agent.id, agent_token: agent.token,
|
|
12
12
|
credential_type: credential.type, credential_id: credential.id, credential_token: credential.token,
|
|
13
|
-
resource_type: resource.type,
|
|
13
|
+
resource_type: resource.type, resource_id: resource.id, resource_token: resource.token,
|
|
14
14
|
zone_id: zone
|
|
15
15
|
)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# The default/system zone
|
|
19
19
|
def self.default_zone
|
|
20
|
-
|
|
20
|
+
"(all)"
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
data/lib/checkpoint/db/params.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Checkpoint
|
|
|
11
11
|
attr_reader :items, :prefix
|
|
12
12
|
|
|
13
13
|
def initialize(items, prefix)
|
|
14
|
-
@items
|
|
14
|
+
@items = [items].flatten
|
|
15
15
|
@prefix = prefix
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -24,10 +24,10 @@ module Checkpoint
|
|
|
24
24
|
def values
|
|
25
25
|
items.map.with_index do |item, i|
|
|
26
26
|
value = if item.respond_to?(:sql_value)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
item.sql_value
|
|
28
|
+
else
|
|
29
|
+
item.to_s
|
|
30
|
+
end
|
|
31
31
|
[:"#{prefix}_#{i}", value]
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -15,32 +15,30 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, credentials, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
19
|
@credentials = tokenize(credentials)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
|
-
agent_token:
|
|
24
|
+
agent_token: agent_params.placeholders,
|
|
25
25
|
credential_token: credential_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
credential_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((agent_params.values +
|
|
31
|
+
credential_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def agent_params
|
|
39
|
-
Params.new(agents,
|
|
37
|
+
Params.new(agents, "at")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def credential_params
|
|
43
|
-
Params.new(credentials,
|
|
41
|
+
Params.new(credentials, "ct")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
|
@@ -15,39 +15,37 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, credentials, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
19
|
@credentials = tokenize(credentials)
|
|
20
|
-
@resources
|
|
20
|
+
@resources = tokenize(resources)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def conditions
|
|
24
24
|
super.merge(
|
|
25
|
-
agent_token:
|
|
25
|
+
agent_token: agent_params.placeholders,
|
|
26
26
|
credential_token: credential_params.placeholders,
|
|
27
|
-
resource_token:
|
|
27
|
+
resource_token: resource_params.placeholders
|
|
28
28
|
)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def parameters
|
|
32
|
-
super.merge(
|
|
33
|
-
agent_params.values +
|
|
32
|
+
super.merge((agent_params.values +
|
|
34
33
|
credential_params.values +
|
|
35
|
-
resource_params.values
|
|
36
|
-
])
|
|
34
|
+
resource_params.values).to_h)
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
protected
|
|
40
38
|
|
|
41
39
|
def agent_params
|
|
42
|
-
Params.new(agents,
|
|
40
|
+
Params.new(agents, "at")
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
def credential_params
|
|
46
|
-
Params.new(credentials,
|
|
44
|
+
Params.new(credentials, "ct")
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
def resource_params
|
|
50
|
-
Params.new(resources,
|
|
48
|
+
Params.new(resources, "rt")
|
|
51
49
|
end
|
|
52
50
|
end
|
|
53
51
|
end
|
|
@@ -15,32 +15,30 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
19
|
-
@resources
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
|
+
@resources = tokenize(resources)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
|
-
agent_token:
|
|
25
|
-
resource_token:
|
|
24
|
+
agent_token: agent_params.placeholders,
|
|
25
|
+
resource_token: resource_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
resource_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((agent_params.values +
|
|
31
|
+
resource_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def agent_params
|
|
39
|
-
Params.new(agents,
|
|
37
|
+
Params.new(agents, "at")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def resource_params
|
|
43
|
-
Params.new(resources,
|
|
41
|
+
Params.new(resources, "rt")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
|
@@ -16,31 +16,29 @@ module Checkpoint::DB
|
|
|
16
16
|
def initialize(credentials, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
18
|
@credentials = tokenize(credentials)
|
|
19
|
-
@resources
|
|
19
|
+
@resources = tokenize(resources)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
24
|
credential_token: credential_params.placeholders,
|
|
25
|
-
resource_token:
|
|
25
|
+
resource_token: resource_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
resource_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((credential_params.values +
|
|
31
|
+
resource_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def credential_params
|
|
39
|
-
Params.new(credentials,
|
|
37
|
+
Params.new(credentials, "ct")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def resource_params
|
|
43
|
-
Params.new(resources,
|
|
41
|
+
Params.new(resources, "rt")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
data/lib/checkpoint/db.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "ostruct"
|
|
4
|
+
require "logger"
|
|
5
|
+
require "yaml"
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
11
|
-
require_relative
|
|
12
|
-
require_relative
|
|
7
|
+
require_relative "db/cartesian_select"
|
|
8
|
+
require_relative "db/params"
|
|
9
|
+
require_relative "db/query/acr"
|
|
10
|
+
require_relative "db/query/ac"
|
|
11
|
+
require_relative "db/query/ar"
|
|
12
|
+
require_relative "db/query/cr"
|
|
13
13
|
|
|
14
14
|
module Checkpoint
|
|
15
15
|
# Module for everything related to the Checkpoint database.
|
|
@@ -17,9 +17,9 @@ module Checkpoint
|
|
|
17
17
|
# Any error with the database that Checkpoint itself detects but cannot handle.
|
|
18
18
|
class DatabaseError < StandardError; end
|
|
19
19
|
|
|
20
|
-
CONNECTION_ERROR =
|
|
20
|
+
CONNECTION_ERROR = "The Checkpoint database is not initialized. Call initialize! first."
|
|
21
21
|
|
|
22
|
-
ALREADY_CONNECTED =
|
|
22
|
+
ALREADY_CONNECTED = "Already connected; refusing to connect to another database."
|
|
23
23
|
|
|
24
24
|
MISSING_CONFIG = <<~MSG
|
|
25
25
|
CHECKPOINT_DATABASE_URL and DATABASE_URL are both missing and a connection
|
|
@@ -91,7 +91,7 @@ module Checkpoint
|
|
|
91
91
|
def migrate!
|
|
92
92
|
connect! unless connected?
|
|
93
93
|
Sequel.extension :migration
|
|
94
|
-
Sequel::Migrator.run(db, File.join(__dir__,
|
|
94
|
+
Sequel::Migrator.run(db, File.join(__dir__, "../../db/migrations"), table: schema_table)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def schema_table
|
|
@@ -99,7 +99,7 @@ module Checkpoint
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def schema_file
|
|
102
|
-
|
|
102
|
+
"db/checkpoint.yml"
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def dump_schema!
|
|
@@ -117,19 +117,19 @@ module Checkpoint
|
|
|
117
117
|
|
|
118
118
|
def model_files
|
|
119
119
|
[
|
|
120
|
-
|
|
120
|
+
"db/grant"
|
|
121
121
|
]
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
# Merge url, opts, or db settings from a hash into our config
|
|
125
125
|
def merge_config!(config = {})
|
|
126
|
-
self.config.url
|
|
126
|
+
self.config.url = config[:url] if config.key?(:url)
|
|
127
127
|
self.config.opts = config[:opts] if config.key?(:opts)
|
|
128
|
-
self.config.db
|
|
128
|
+
self.config.db = config[:db] if config.key?(:db)
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
def conn_opts
|
|
132
|
-
log = {
|
|
132
|
+
log = {logger: Logger.new("db/checkpoint.log")}
|
|
133
133
|
url = config.url
|
|
134
134
|
opts = config.opts
|
|
135
135
|
if url
|
|
@@ -143,7 +143,7 @@ module Checkpoint
|
|
|
143
143
|
|
|
144
144
|
def config
|
|
145
145
|
@config ||= OpenStruct.new(
|
|
146
|
-
url: ENV[
|
|
146
|
+
url: ENV["CHECKPOINT_DATABASE_URL"] || ENV["DATABASE_URL"]
|
|
147
147
|
)
|
|
148
148
|
end
|
|
149
149
|
|
data/lib/checkpoint/grants.rb
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# application, there should be an initializer that reads whatever appropriate
|
|
8
8
|
# configuration and does the initialization.
|
|
9
9
|
|
|
10
|
-
require
|
|
10
|
+
require "checkpoint/db"
|
|
11
11
|
|
|
12
12
|
module Checkpoint
|
|
13
13
|
# The repository of grants -- a simple wrapper for the Sequel Datastore / grants table.
|
|
@@ -104,7 +104,7 @@ module Checkpoint
|
|
|
104
104
|
private
|
|
105
105
|
|
|
106
106
|
def scope
|
|
107
|
-
{
|
|
107
|
+
{scope: grants}
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def where(agents, credentials, resources)
|
|
@@ -20,11 +20,11 @@ module Checkpoint
|
|
|
20
20
|
user,
|
|
21
21
|
action,
|
|
22
22
|
target = Checkpoint::Resource.all,
|
|
23
|
-
authority: Authority::RejectAll.new
|
|
24
|
-
|
|
25
|
-
@user
|
|
26
|
-
@action
|
|
27
|
-
@target
|
|
23
|
+
authority: Authority::RejectAll.new
|
|
24
|
+
)
|
|
25
|
+
@user = user
|
|
26
|
+
@action = action.to_sym
|
|
27
|
+
@target = target
|
|
28
28
|
@authority = authority
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -37,9 +37,9 @@ module Checkpoint
|
|
|
37
37
|
# @param authority [Checkpoint::Authority] the authority to ask about
|
|
38
38
|
# this role-grant
|
|
39
39
|
def initialize(user, role, target = Resource.all, authority: Authority::RejectAll.new)
|
|
40
|
-
@user
|
|
41
|
-
@role
|
|
42
|
-
@target
|
|
40
|
+
@user = user
|
|
41
|
+
@role = role.to_sym
|
|
42
|
+
@target = target
|
|
43
43
|
@authority = authority
|
|
44
44
|
end
|
|
45
45
|
|
data/lib/checkpoint/query.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "checkpoint/query/role_granted"
|
|
4
|
+
require "checkpoint/query/action_permitted"
|
|
5
5
|
|
|
6
6
|
module Checkpoint
|
|
7
7
|
# The Query module is a container for the various types of checks or
|
data/lib/checkpoint/railtie.rb
CHANGED
|
@@ -68,9 +68,9 @@ module Checkpoint
|
|
|
68
68
|
unless config.url
|
|
69
69
|
case Rails.env
|
|
70
70
|
when "development"
|
|
71
|
-
config[:opts] = {
|
|
71
|
+
config[:opts] = {adapter: "sqlite", database: "db/checkpoint_development.sqlite3"}
|
|
72
72
|
when "test"
|
|
73
|
-
config[:opts] = {
|
|
73
|
+
config[:opts] = {adapter: "sqlite"}
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -95,8 +95,8 @@ module Checkpoint
|
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def rake_files
|
|
98
|
-
base = Pathname(__dir__) +
|
|
99
|
-
[base +
|
|
98
|
+
base = Pathname(__dir__) + "../tasks/"
|
|
99
|
+
[base + "migrate.rake"]
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
rake_tasks do
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "checkpoint/resource/resolver"
|
|
4
4
|
|
|
5
5
|
module Checkpoint
|
|
6
6
|
class Resource
|
|
@@ -78,10 +78,10 @@ module Checkpoint
|
|
|
78
78
|
to_s.hash
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
alias_method :==, :eql?
|
|
82
|
+
alias_method :inspect, :uri
|
|
83
|
+
alias_method :resource_type, :type
|
|
84
|
+
alias_method :resource_id, :id
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
end
|
data/lib/checkpoint/resource.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "checkpoint/resource/token"
|
|
4
|
+
require "checkpoint/resource/all_of_type"
|
|
5
|
+
require "checkpoint/resource/all_of_any_type"
|
|
6
|
+
require "checkpoint/resource/any_entity"
|
|
7
|
+
require "checkpoint/resource/any_entity_of_type"
|
|
8
8
|
|
|
9
9
|
module Checkpoint
|
|
10
10
|
# A Resource is any application object that should be considered for
|
|
@@ -37,7 +37,7 @@ module Checkpoint
|
|
|
37
37
|
|
|
38
38
|
# Special string to be used when granting or searching for grants on all
|
|
39
39
|
# types or all resources
|
|
40
|
-
ALL =
|
|
40
|
+
ALL = "(all)"
|
|
41
41
|
|
|
42
42
|
# Creates a Resource for this entity. Prefer the factory method {::from},
|
|
43
43
|
# which applies default conversion rules. This constructor does not
|
data/lib/checkpoint/version.rb
CHANGED
data/lib/checkpoint.rb
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require "checkpoint/version"
|
|
4
4
|
|
|
5
|
-
require
|
|
6
|
-
require
|
|
5
|
+
require "sequel"
|
|
6
|
+
require "ettin"
|
|
7
7
|
|
|
8
8
|
# All of the Checkpoint components are contained within this top-level module.
|
|
9
9
|
module Checkpoint
|
|
@@ -12,9 +12,9 @@ module Checkpoint
|
|
|
12
12
|
class NoIdentifierError < StandardError; end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
require
|
|
16
|
-
require
|
|
17
|
-
require
|
|
18
|
-
require
|
|
19
|
-
require
|
|
20
|
-
require
|
|
15
|
+
require "checkpoint/agent"
|
|
16
|
+
require "checkpoint/credential"
|
|
17
|
+
require "checkpoint/resource"
|
|
18
|
+
require "checkpoint/authority"
|
|
19
|
+
require "checkpoint/query"
|
|
20
|
+
require "checkpoint/railtie" if defined?(Rails)
|
data/lib/tasks/migrate.rake
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "checkpoint"
|
|
5
5
|
|
|
6
6
|
if defined?(Rails)
|
|
7
7
|
# When db:schema:dump is called directly, we can tack this on.
|
|
8
8
|
# If we do it unconditionally, db:migrate will try to dump before we have
|
|
9
9
|
# been able to migrate the checkpoint tables.
|
|
10
|
-
if Rake.application.top_level_tasks.include?(
|
|
11
|
-
Rake::Task[
|
|
12
|
-
Rake::Task[
|
|
10
|
+
if Rake.application.top_level_tasks.include?("db:schema:dump")
|
|
11
|
+
Rake::Task["db:schema:dump"].enhance do
|
|
12
|
+
Rake::Task["checkpoint:schema:dump"].invoke
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -17,13 +17,13 @@ if defined?(Rails)
|
|
|
17
17
|
# schema_info, so migrations don't try to double-run. The actual table
|
|
18
18
|
# structure is handled by the Rails schema:dump and schema:load.
|
|
19
19
|
# A db:setup will trigger this, so we don't have to handle it separately.
|
|
20
|
-
Rake::Task[
|
|
21
|
-
Rake::Task[
|
|
20
|
+
Rake::Task["db:schema:load"].enhance do
|
|
21
|
+
Rake::Task["checkpoint:schema:load"].invoke
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# We hook into db:migrate for convenience.
|
|
25
|
-
Rake::Task[
|
|
26
|
-
Rake::Task[
|
|
25
|
+
Rake::Task["db:migrate"].enhance do
|
|
26
|
+
Rake::Task["checkpoint:migrate"].invoke
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
end
|
|
@@ -36,7 +36,7 @@ namespace :checkpoint do
|
|
|
36
36
|
# The Railtie is smart enough to know whether we are in a Rake task,
|
|
37
37
|
# so it can avoid initializing and we can migrate safely before the
|
|
38
38
|
# models are loaded.
|
|
39
|
-
Rake::Task[
|
|
39
|
+
Rake::Task["environment"].invoke
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# After migrating, we initialize here, even though it isn't strictly
|
|
@@ -54,21 +54,21 @@ namespace :checkpoint do
|
|
|
54
54
|
namespace :schema do
|
|
55
55
|
desc "Dump the Checkpoint version to db/checkpoint.yml"
|
|
56
56
|
task :dump do
|
|
57
|
-
Rake::Task[
|
|
57
|
+
Rake::Task["environment"].invoke
|
|
58
58
|
Checkpoint::DB.dump_schema!
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
desc "Load the Checkpoint version from db/checkpoint.yml"
|
|
62
62
|
task :load do
|
|
63
|
-
Rake::Task[
|
|
63
|
+
Rake::Task["environment"].invoke
|
|
64
64
|
Checkpoint::DB.load_schema!
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# When running under Rails, we dump the schema after migrating so
|
|
68
68
|
# everything stays synced up for db:setup against a new database.
|
|
69
69
|
# Rake::Task['checkpoint:schema:dump'].invoke
|
|
70
|
-
Rake::Task[
|
|
71
|
-
Rake::Task[
|
|
70
|
+
Rake::Task["checkpoint:migrate"].enhance do
|
|
71
|
+
Rake::Task["checkpoint:schema:dump"].invoke
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: checkpoint
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Noah Botimer
|
|
8
8
|
- Aaron Elkiss
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: exe
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: ettin
|
|
@@ -31,44 +30,44 @@ dependencies:
|
|
|
31
30
|
requirements:
|
|
32
31
|
- - "~>"
|
|
33
32
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '5.
|
|
33
|
+
version: '5.100'
|
|
35
34
|
type: :runtime
|
|
36
35
|
prerelease: false
|
|
37
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
37
|
requirements:
|
|
39
38
|
- - "~>"
|
|
40
39
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '5.
|
|
40
|
+
version: '5.100'
|
|
42
41
|
- !ruby/object:Gem::Dependency
|
|
43
42
|
name: bundler
|
|
44
43
|
requirement: !ruby/object:Gem::Requirement
|
|
45
44
|
requirements:
|
|
46
|
-
- - "
|
|
45
|
+
- - ">="
|
|
47
46
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '
|
|
47
|
+
version: '0'
|
|
49
48
|
type: :development
|
|
50
49
|
prerelease: false
|
|
51
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
51
|
requirements:
|
|
53
|
-
- - "
|
|
52
|
+
- - ">="
|
|
54
53
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
54
|
+
version: '0'
|
|
56
55
|
- !ruby/object:Gem::Dependency
|
|
57
|
-
name:
|
|
56
|
+
name: logger
|
|
58
57
|
requirement: !ruby/object:Gem::Requirement
|
|
59
58
|
requirements:
|
|
60
|
-
- - "
|
|
59
|
+
- - ">="
|
|
61
60
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '0
|
|
61
|
+
version: '0'
|
|
63
62
|
type: :development
|
|
64
63
|
prerelease: false
|
|
65
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
65
|
requirements:
|
|
67
|
-
- - "
|
|
66
|
+
- - ">="
|
|
68
67
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '0
|
|
68
|
+
version: '0'
|
|
70
69
|
- !ruby/object:Gem::Dependency
|
|
71
|
-
name:
|
|
70
|
+
name: simplecov
|
|
72
71
|
requirement: !ruby/object:Gem::Requirement
|
|
73
72
|
requirements:
|
|
74
73
|
- - ">="
|
|
@@ -82,7 +81,7 @@ dependencies:
|
|
|
82
81
|
- !ruby/object:Gem::Version
|
|
83
82
|
version: '0'
|
|
84
83
|
- !ruby/object:Gem::Dependency
|
|
85
|
-
name:
|
|
84
|
+
name: simplecov-lcov
|
|
86
85
|
requirement: !ruby/object:Gem::Requirement
|
|
87
86
|
requirements:
|
|
88
87
|
- - ">="
|
|
@@ -96,75 +95,103 @@ dependencies:
|
|
|
96
95
|
- !ruby/object:Gem::Version
|
|
97
96
|
version: '0'
|
|
98
97
|
- !ruby/object:Gem::Dependency
|
|
99
|
-
name:
|
|
98
|
+
name: ostruct
|
|
100
99
|
requirement: !ruby/object:Gem::Requirement
|
|
101
100
|
requirements:
|
|
102
|
-
- - "
|
|
101
|
+
- - ">="
|
|
103
102
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '
|
|
103
|
+
version: '0'
|
|
105
104
|
type: :development
|
|
106
105
|
prerelease: false
|
|
107
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
107
|
requirements:
|
|
109
|
-
- - "
|
|
108
|
+
- - ">="
|
|
110
109
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: '
|
|
110
|
+
version: '0'
|
|
112
111
|
- !ruby/object:Gem::Dependency
|
|
113
|
-
name:
|
|
112
|
+
name: pry
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: pry-byebug
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: rake
|
|
114
141
|
requirement: !ruby/object:Gem::Requirement
|
|
115
142
|
requirements:
|
|
116
143
|
- - "~>"
|
|
117
144
|
- !ruby/object:Gem::Version
|
|
118
|
-
version: '
|
|
145
|
+
version: '13.0'
|
|
119
146
|
type: :development
|
|
120
147
|
prerelease: false
|
|
121
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
122
149
|
requirements:
|
|
123
150
|
- - "~>"
|
|
124
151
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: '
|
|
152
|
+
version: '13.0'
|
|
126
153
|
- !ruby/object:Gem::Dependency
|
|
127
|
-
name:
|
|
154
|
+
name: rspec
|
|
128
155
|
requirement: !ruby/object:Gem::Requirement
|
|
129
156
|
requirements:
|
|
130
157
|
- - "~>"
|
|
131
158
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: '0
|
|
159
|
+
version: '3.0'
|
|
133
160
|
type: :development
|
|
134
161
|
prerelease: false
|
|
135
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
136
163
|
requirements:
|
|
137
164
|
- - "~>"
|
|
138
165
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: '0
|
|
166
|
+
version: '3.0'
|
|
140
167
|
- !ruby/object:Gem::Dependency
|
|
141
|
-
name:
|
|
168
|
+
name: standard
|
|
142
169
|
requirement: !ruby/object:Gem::Requirement
|
|
143
170
|
requirements:
|
|
144
171
|
- - "~>"
|
|
145
172
|
- !ruby/object:Gem::Version
|
|
146
|
-
version: '1.
|
|
173
|
+
version: '1.53'
|
|
147
174
|
type: :development
|
|
148
175
|
prerelease: false
|
|
149
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
150
177
|
requirements:
|
|
151
178
|
- - "~>"
|
|
152
179
|
- !ruby/object:Gem::Version
|
|
153
|
-
version: '1.
|
|
180
|
+
version: '1.53'
|
|
154
181
|
- !ruby/object:Gem::Dependency
|
|
155
182
|
name: sqlite3
|
|
156
183
|
requirement: !ruby/object:Gem::Requirement
|
|
157
184
|
requirements:
|
|
158
185
|
- - "~>"
|
|
159
186
|
- !ruby/object:Gem::Version
|
|
160
|
-
version: '
|
|
187
|
+
version: '2.9'
|
|
161
188
|
type: :development
|
|
162
189
|
prerelease: false
|
|
163
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
164
191
|
requirements:
|
|
165
192
|
- - "~>"
|
|
166
193
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: '
|
|
194
|
+
version: '2.9'
|
|
168
195
|
- !ruby/object:Gem::Dependency
|
|
169
196
|
name: yard
|
|
170
197
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -179,7 +206,6 @@ dependencies:
|
|
|
179
206
|
- - "~>"
|
|
180
207
|
- !ruby/object:Gem::Version
|
|
181
208
|
version: '0.9'
|
|
182
|
-
description:
|
|
183
209
|
email:
|
|
184
210
|
- botimer@umich.edu
|
|
185
211
|
- aelkiss@umich.edu
|
|
@@ -188,11 +214,14 @@ extensions: []
|
|
|
188
214
|
extra_rdoc_files: []
|
|
189
215
|
files:
|
|
190
216
|
- ".envrc"
|
|
217
|
+
- ".github/dependabot.yml"
|
|
218
|
+
- ".github/workflows/test.yml"
|
|
191
219
|
- ".gitignore"
|
|
192
220
|
- ".rspec"
|
|
193
|
-
- ".
|
|
221
|
+
- ".standard.yml"
|
|
194
222
|
- ".travis.yml"
|
|
195
223
|
- ".yardopts"
|
|
224
|
+
- CHANGELOG.md
|
|
196
225
|
- Gemfile
|
|
197
226
|
- LICENSE.md
|
|
198
227
|
- README.md
|
|
@@ -202,6 +231,7 @@ files:
|
|
|
202
231
|
- bin/rspec
|
|
203
232
|
- bin/sequel
|
|
204
233
|
- bin/setup
|
|
234
|
+
- bin/standardrb
|
|
205
235
|
- bin/yard
|
|
206
236
|
- bin/yardoc
|
|
207
237
|
- checkpoint.gemspec
|
|
@@ -250,7 +280,6 @@ homepage: https://github.com/mlibrary/checkpoint
|
|
|
250
280
|
licenses:
|
|
251
281
|
- BSD-3-Clause
|
|
252
282
|
metadata: {}
|
|
253
|
-
post_install_message:
|
|
254
283
|
rdoc_options: []
|
|
255
284
|
require_paths:
|
|
256
285
|
- lib
|
|
@@ -258,16 +287,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
258
287
|
requirements:
|
|
259
288
|
- - ">="
|
|
260
289
|
- !ruby/object:Gem::Version
|
|
261
|
-
version:
|
|
290
|
+
version: 3.2.0
|
|
262
291
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
292
|
requirements:
|
|
264
293
|
- - ">="
|
|
265
294
|
- !ruby/object:Gem::Version
|
|
266
295
|
version: '0'
|
|
267
296
|
requirements: []
|
|
268
|
-
|
|
269
|
-
rubygems_version: 2.7.6.2
|
|
270
|
-
signing_key:
|
|
297
|
+
rubygems_version: 4.0.3
|
|
271
298
|
specification_version: 4
|
|
272
299
|
summary: Checkpoint provides a model and infrastructure for policy-based authorization,
|
|
273
300
|
especially in Rails applications.
|
data/.rubocop.yml
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
Rails:
|
|
2
|
-
Enabled: true
|
|
3
|
-
|
|
4
|
-
Rails/Delegate:
|
|
5
|
-
Enabled: false
|
|
6
|
-
|
|
7
|
-
# inherit_gem:
|
|
8
|
-
# rubocop-rails:
|
|
9
|
-
# - config/rails.yml
|
|
10
|
-
|
|
11
|
-
AllCops:
|
|
12
|
-
DisplayCopNames: true
|
|
13
|
-
TargetRubyVersion: 2.4
|
|
14
|
-
Exclude:
|
|
15
|
-
- 'bin/**/*'
|
|
16
|
-
- 'vendor/**/*'
|
|
17
|
-
|
|
18
|
-
Layout/EmptyLineAfterGuardClause:
|
|
19
|
-
Enabled: false
|
|
20
|
-
|
|
21
|
-
Layout/MultilineMethodDefinitionBraceLayout:
|
|
22
|
-
EnforcedStyle: same_line
|
|
23
|
-
|
|
24
|
-
Metrics/LineLength:
|
|
25
|
-
Max: 110
|
|
26
|
-
|
|
27
|
-
Metrics/BlockLength:
|
|
28
|
-
Exclude:
|
|
29
|
-
- '*.gemspec'
|
|
30
|
-
ExcludedMethods: ['describe', 'context', 'xdescribe', 'xcontext']
|
|
31
|
-
|
|
32
|
-
Layout/SpaceInsideBlockBraces:
|
|
33
|
-
Enabled: false
|
|
34
|
-
|
|
35
|
-
Layout/IndentFirstArrayElement:
|
|
36
|
-
EnforcedStyle: consistent
|
|
37
|
-
|
|
38
|
-
Style/ClassAndModuleChildren:
|
|
39
|
-
Enabled: false
|
|
40
|
-
|
|
41
|
-
Style/StringLiterals:
|
|
42
|
-
Enabled: false
|
|
43
|
-
|
|
44
|
-
Style/SymbolArray:
|
|
45
|
-
EnforcedStyle: brackets
|