oa-vkontakte 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,3 +19,7 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ .bundle
23
+ .rvmrc
24
+ Gemfile
25
+ Gemfile.lock
data/README.rdoc CHANGED
@@ -9,7 +9,7 @@
9
9
  Добавить в config/initializers/omniauth.rb:
10
10
 
11
11
  Rails.application.config.middleware.use OmniAuth::Builder do
12
- provider :vkontakte_open_api, <ID приложения>
12
+ provider :vkontakte_open_api, <ID приложения>, <Защищенный ключ приложения>
13
13
  end
14
14
 
15
15
  Если ещё не определен, добавить путь в config/routes.rb:
@@ -35,8 +35,8 @@
35
35
  'user_info' => {
36
36
  'name' => 'Nick Recobra',
37
37
  'nickname' => 'oruen',
38
- 'firstName' => 'Nick',
39
- 'lastName' => 'Recobra',
38
+ 'first_name' => 'Nick',
39
+ 'last_name' => 'Recobra',
40
40
  'image' => 'http://cs191.vkontakte.ru/u00001/e_375bc433.jpg', # путь до вконтактовского аватара
41
41
  'urls' => { 'Page' => 'http://vkontakte.ru/id1234567890' }
42
42
  }
data/Rakefile CHANGED
@@ -1,50 +1,12 @@
1
- require 'rubygems'
2
- require 'rake'
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
3
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "oa-vkontakte"
8
- gem.summary = %Q{OmniAuth extension for vkontakte.ru authentication}
9
- gem.description = %Q{OmniAuth extension for vkontakte.ru authentication}
10
- gem.email = "oruenu@gmail.com"
11
- gem.homepage = "http://github.com/oruen/oa-vkontakte"
12
- gem.authors = ["Nick Recobra"]
13
- gem.rubyforge_project = "oa-vkontakte"
14
- gem.add_dependency 'oa-core', '~>0.1.4'
15
- gem.add_development_dependency "rspec", ">= 1.2.9"
16
- gem.add_development_dependency "yard", ">= 0"
17
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
- end
19
- Jeweler::GemcutterTasks.new
20
- Jeweler::RubyforgeTasks.new do |rubyforge|
21
- rubyforge.doc_task = "yardoc"
22
- end
23
- rescue LoadError
24
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
4
+ require 'rspec/core/rake_task'
5
+ require 'rake/contrib/sshpublisher'
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
25
7
  end
26
-
27
- require 'spec/rake/spectask'
28
- Spec::Rake::SpecTask.new(:spec) do |spec|
29
- spec.libs << 'lib' << 'spec'
30
- spec.spec_files = FileList['spec/**/*_spec.rb']
31
- end
32
-
33
- Spec::Rake::SpecTask.new(:rcov) do |spec|
34
- spec.libs << 'lib' << 'spec'
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
37
- end
38
-
39
- task :spec => :check_dependencies
40
-
41
8
  task :default => :spec
42
9
 
43
- begin
44
- require 'yard'
45
- YARD::Rake::YardocTask.new
46
- rescue LoadError
47
- task :yardoc do
48
- abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
49
- end
10
+ require 'yard'
11
+ YARD::Rake::YardocTask.new do |t|
50
12
  end
data/lib/oa-vkontakte.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  require 'omniauth/vkontakte'
2
+
3
+ module Oa
4
+ module Vkontakte
5
+ end
6
+ end
7
+
2
8
  if defined?(Rails)
3
9
  ActionController::Base.helper OmniAuth::Strategies::VkontakteOpenApi::ViewHelper::PageHelper
4
10
  end
@@ -0,0 +1,5 @@
1
+ module Oa
2
+ module Vkontakte
3
+ VERSION = "0.1.4"
4
+ end
5
+ end
@@ -4,6 +4,7 @@ require 'omniauth/strategies/vkontakte_open_api/view_helper'
4
4
  module OmniAuth
5
5
  class Configuration
6
6
  attr_accessor :vkontakte_app_id
7
+ attr_accessor :vkontakte_app_key
7
8
  end
8
9
  end
9
10
 
@@ -13,9 +14,10 @@ module OmniAuth
13
14
  include OmniAuth::Strategy
14
15
  include ViewHelper::PageHelper
15
16
 
16
- def initialize(app, app_id, options = {})
17
+ def initialize(app, app_id, app_key, options = {})
17
18
  @options = options
18
19
  OmniAuth.config.vkontakte_app_id = app_id
20
+ OmniAuth.config.vkontakte_app_key = app_key
19
21
  super(app, :vkontakte)
20
22
  end
21
23
 
@@ -24,7 +26,20 @@ module OmniAuth
24
26
  def request_phase
25
27
  Rack::Response.new(vkontakte_login_page).finish
26
28
  end
27
-
29
+
30
+ def callback_phase
31
+ app_cookie = request.cookies["vk_app_#{OmniAuth.config.vkontakte_app_id}"]
32
+ return fail!(:invalid_credentials) unless app_cookie
33
+ args = app_cookie.split("&")
34
+ sig_index = args.index { |arg| arg =~ /^sig=/ }
35
+ return fail!(:invalid_credentials) unless sig_index
36
+ sig = args.delete_at(sig_index)
37
+ puts Digest::MD5.new.hexdigest(args.sort.join('') + OmniAuth.config.vkontakte_app_key)
38
+ puts sig
39
+ return fail!(:invalid_credentials) unless Digest::MD5.new.hexdigest(args.sort.join('') + OmniAuth.config.vkontakte_app_key) == sig[4..-1]
40
+ super
41
+ end
42
+
28
43
  def auth_hash
29
44
  OmniAuth::Utils.deep_merge(super(), {
30
45
  'uid' => request[:uid],
data/oa-vkontakte.gemspec CHANGED
@@ -1,65 +1,25 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "oa-vkontakte/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
6
  s.name = %q{oa-vkontakte}
8
- s.version = "0.1.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
7
+ s.version = Oa::Vkontakte::VERSION
11
8
  s.authors = ["Nick Recobra"]
12
- s.date = %q{2010-10-20}
9
+ s.summary = %q{OmniAuth extension for vkontakte.ru authentication}
13
10
  s.description = %q{OmniAuth extension for vkontakte.ru authentication}
14
11
  s.email = %q{oruenu@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/oa-vkontakte.rb",
27
- "lib/omniauth/strategies/vkontakte_open_api.rb",
28
- "lib/omniauth/strategies/vkontakte_open_api/view_helper.rb",
29
- "lib/omniauth/vkontakte.rb",
30
- "oa-vkontakte.gemspec",
31
- "spec/oa-vkontakte_spec.rb",
32
- "spec/spec.opts",
33
- "spec/spec_helper.rb"
34
- ]
35
12
  s.homepage = %q{http://github.com/oruen/oa-vkontakte}
36
- s.rdoc_options = ["--charset=UTF-8"]
37
- s.require_paths = ["lib"]
38
13
  s.rubyforge_project = %q{oa-vkontakte}
39
- s.rubygems_version = %q{1.3.7}
40
- s.summary = %q{OmniAuth extension for vkontakte.ru authentication}
41
- s.test_files = [
42
- "spec/oa-vkontakte_spec.rb",
43
- "spec/spec_helper.rb"
44
- ]
45
-
46
- if s.respond_to? :specification_version then
47
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
- s.specification_version = 3
14
+
15
+ s.add_dependency(%q<oa-core>, ["~> 0.1.4"])
16
+ s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
17
+ s.add_development_dependency(%q<yard>, [">= 0"])
18
+ s.add_development_dependency(%q<rack-test>, ["~> 0.5.6"])
49
19
 
50
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<oa-core>, ["~> 0.1.4"])
52
- s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
53
- s.add_development_dependency(%q<yard>, [">= 0"])
54
- else
55
- s.add_dependency(%q<oa-core>, ["~> 0.1.4"])
56
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
57
- s.add_dependency(%q<yard>, [">= 0"])
58
- end
59
- else
60
- s.add_dependency(%q<oa-core>, ["~> 0.1.4"])
61
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
62
- s.add_dependency(%q<yard>, [">= 0"])
63
- end
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
64
24
  end
65
25
 
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe OmniAuth::Strategies::VkontakteOpenApi, :type => :strategy do
4
+
5
+ include OmniAuth::Test::StrategyTestCase
6
+
7
+ def strategy
8
+ [OmniAuth::Strategies::VkontakteOpenApi, 1983892, '6FF1PUlZfEyutJxctvtd']
9
+ end
10
+
11
+ describe 'POST /auth/vkontakte_open_api/callback с логином и паролем' do
12
+ before(:each) do
13
+ @params = {
14
+ 'nickname' => 'oruen',
15
+ 'first_name' => 'Nick',
16
+ 'last_name' => 'Recobra',
17
+ 'photo' => 'http://cs191.vkontakte.ru/u00001/e_375bc433.jpg',
18
+ 'uid' => '1234567890'
19
+ }
20
+ end
21
+
22
+ context "неуспешный запрос" do
23
+ it "не должен быть успешным при отсутствии куки vk_app_<APP_ID>" do
24
+ clear_cookies
25
+ post '/auth/vkontakte/callback', @params
26
+ last_response.should_not be_ok
27
+ end
28
+
29
+ it "не должен быть успешным при невалидной куке vk_app_<APP_ID>" do
30
+ set_cookie "vk_app_#{OmniAuth.config.vkontakte_app_id}=expire"
31
+ post '/auth/vkontakte/callback', @params
32
+ last_response.should_not be_ok
33
+ end
34
+ end
35
+
36
+ context "успешный запрос" do
37
+ before(:each) do
38
+ strategy = nil
39
+ string = "expire=1271238742&mid=100172&secret=97c1e8933e&sid=549b550f608e4a4d247734941debb5e68df50a66c58dc6ee2a4f60a2&sig=372df9795fe8dd29684a2f996872457c"
40
+ set_cookie "vk_app_#{OmniAuth.config.vkontakte_app_id}=#{Rack::Utils::escape string}"
41
+ post '/auth/vkontakte/callback', @params
42
+ end
43
+
44
+ it "должен устанавливаться защищенный ключ" do
45
+ OmniAuth.config.vkontakte_app_key.should == '6FF1PUlZfEyutJxctvtd'
46
+ end
47
+
48
+
49
+ it 'должен быть успешным' do
50
+ last_response.should be_ok
51
+ end
52
+
53
+ sets_an_auth_hash
54
+
55
+ sets_provider_to 'vkontakte'
56
+
57
+ it 'должен устанавливать параметры' do
58
+ hash = last_request.env['omniauth.auth']
59
+ hash.should == {
60
+ 'uid' => '1234567890',
61
+ 'provider' => 'vkontakte',
62
+ 'user_info' => {
63
+ 'name' => 'Nick Recobra',
64
+ 'nickname' => 'oruen',
65
+ 'first_name' => 'Nick',
66
+ 'last_name' => 'Recobra',
67
+ 'image' => 'http://cs191.vkontakte.ru/u00001/e_375bc433.jpg',
68
+ 'urls' => { 'Page' => 'http://vkontakte.ru/id1234567890' }
69
+ }
70
+ }
71
+ end
72
+ end
73
+ end
74
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,13 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
1
  require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup
4
+ require 'rspec'
5
+ require 'omniauth/test'
6
+ require 'rack/test'
4
7
  require 'oa-vkontakte'
5
- require 'spec'
6
- require 'spec/autorun'
7
8
 
8
- Spec::Runner.configure do |config|
9
-
9
+ Rspec.configure do |c|
10
+ c.mock_with :rspec
11
+ c.include Rack::Test::Methods
12
+ c.extend OmniAuth::Test::StrategyMacros, :type => :strategy
10
13
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oa-vkontakte
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nick Recobra
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-20 00:00:00 +04:00
18
+ date: 2010-11-27 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -40,14 +40,14 @@ dependencies:
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ">="
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- hash: 13
45
+ hash: 11
46
46
  segments:
47
- - 1
48
47
  - 2
49
- - 9
50
- version: 1.2.9
48
+ - 1
49
+ - 0
50
+ version: 2.1.0
51
51
  type: :development
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
@@ -64,37 +64,52 @@ dependencies:
64
64
  version: "0"
65
65
  type: :development
66
66
  version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: rack-test
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ hash: 7
76
+ segments:
77
+ - 0
78
+ - 5
79
+ - 6
80
+ version: 0.5.6
81
+ type: :development
82
+ version_requirements: *id004
67
83
  description: OmniAuth extension for vkontakte.ru authentication
68
84
  email: oruenu@gmail.com
69
85
  executables: []
70
86
 
71
87
  extensions: []
72
88
 
73
- extra_rdoc_files:
74
- - LICENSE
75
- - README.rdoc
89
+ extra_rdoc_files: []
90
+
76
91
  files:
77
92
  - .document
78
93
  - .gitignore
79
94
  - LICENSE
80
95
  - README.rdoc
81
96
  - Rakefile
82
- - VERSION
83
97
  - lib/oa-vkontakte.rb
98
+ - lib/oa-vkontakte/version.rb
84
99
  - lib/omniauth/strategies/vkontakte_open_api.rb
85
100
  - lib/omniauth/strategies/vkontakte_open_api/view_helper.rb
86
101
  - lib/omniauth/vkontakte.rb
87
102
  - oa-vkontakte.gemspec
88
103
  - spec/oa-vkontakte_spec.rb
89
- - spec/spec.opts
104
+ - spec/omniauth/strategires/vkontakte_open_api_spec.rb
90
105
  - spec/spec_helper.rb
91
106
  has_rdoc: true
92
107
  homepage: http://github.com/oruen/oa-vkontakte
93
108
  licenses: []
94
109
 
95
110
  post_install_message:
96
- rdoc_options:
97
- - --charset=UTF-8
111
+ rdoc_options: []
112
+
98
113
  require_paths:
99
114
  - lib
100
115
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -124,4 +139,5 @@ specification_version: 3
124
139
  summary: OmniAuth extension for vkontakte.ru authentication
125
140
  test_files:
126
141
  - spec/oa-vkontakte_spec.rb
142
+ - spec/omniauth/strategires/vkontakte_open_api_spec.rb
127
143
  - spec/spec_helper.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.3
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --color