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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in komandir.gemspec
4
+ gemspec
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,5 @@
1
+ require "komandir/version"
2
+ require "komandir/railtie"
3
+
4
+ module Komandir
5
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ module Komandir
2
+ class Railtie < Rails::Railtie
3
+ initializer "komandir.action_controller" do |app|
4
+ require 'komandir/action_controller'
5
+ ActionController::Base.send :include, Komandir::ControllerMethods
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Komandir
2
+ VERSION = "1.0.0"
3
+ 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
+