komandir 1.0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/komandir.gemspec +24 -0
- data/lib/komandir.rb +5 -0
- data/lib/komandir/action_controller.rb +63 -0
- data/lib/komandir/railtie.rb +8 -0
- data/lib/komandir/version.rb +3 -0
- metadata +87 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/komandir.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "komandir/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "komandir"
|
7
|
+
s.version = Komandir::VERSION
|
8
|
+
s.authors = ["divineforest"]
|
9
|
+
# s.email = [""]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Authenticate user using eToken}
|
12
|
+
# s.description = %q{TODO: Write a gem description}
|
13
|
+
|
14
|
+
s.rubyforge_project = "komandir"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "rake"
|
24
|
+
end
|
data/lib/komandir.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Komandir
|
2
|
+
module ControllerMethods
|
3
|
+
|
4
|
+
module ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
# TODO Переделать user в параметрах через @current_user
|
9
|
+
def action_signature_valid?(user)
|
10
|
+
raise "Blank komandir_signature" if params[:komandir_signature].blank?
|
11
|
+
raise "Blank certificate for user. Make sure user.certificate.body contains certificate" unless user.certificate.try(:body?)
|
12
|
+
|
13
|
+
verification_set = {
|
14
|
+
:message => digest,
|
15
|
+
:signature => params[:komandir_signature],
|
16
|
+
:certificate => user.certificate.body
|
17
|
+
}
|
18
|
+
Cryptopro::Signature.verify(verification_set)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def digest
|
24
|
+
"#{system_params}:#{serialized_form}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def serialized_form
|
28
|
+
# TODO Сортировать по алфавиту
|
29
|
+
pairs = request.raw_post.split("&")
|
30
|
+
pairs = remove_odd_params(pairs)
|
31
|
+
params_string = pairs.join("&")
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_odd_params(pair_strings)
|
35
|
+
odd_param_names = %w[utf8 authenticity_token commit komandir_signature komandir_time]
|
36
|
+
filtered_param_names = %w[password]
|
37
|
+
pair_strings.reject do |pair_string|
|
38
|
+
param_name = pair_string.split("=").first
|
39
|
+
odd_param_names.include?(param_name) || filtered_param_names.any? { |filtered_param_name| param_name.include?(filtered_param_name) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def system_params
|
44
|
+
check_client_time!
|
45
|
+
"#{request.path}:#{request.remote_ip}:#{params[:komandir_time]}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def check_client_time!
|
49
|
+
if params[:komandir_time].present?
|
50
|
+
server_time_epoch = Time.now.to_i
|
51
|
+
client_time_epoch = params[:komandir_time].to_i
|
52
|
+
raise "Время в подписи неверное" if (client_time_epoch - server_time_epoch).abs > 60
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.included(receiver) # :nodoc:
|
58
|
+
receiver.extend ClassMethods
|
59
|
+
receiver.send :include, InstanceMethods
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: komandir
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- divineforest
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-28 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
name: rake
|
34
|
+
version_requirements: *id001
|
35
|
+
description:
|
36
|
+
email:
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- Gemfile
|
46
|
+
- Rakefile
|
47
|
+
- komandir.gemspec
|
48
|
+
- lib/komandir.rb
|
49
|
+
- lib/komandir/action_controller.rb
|
50
|
+
- lib/komandir/railtie.rb
|
51
|
+
- lib/komandir/version.rb
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: ""
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
hash: 3
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project: komandir
|
82
|
+
rubygems_version: 1.6.2
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: Authenticate user using eToken
|
86
|
+
test_files: []
|
87
|
+
|