Initial commit

This commit is contained in:
ErickSkrauch 2016-11-24 14:15:11 +03:00
commit d8abf6d0ba
13 changed files with 244 additions and 0 deletions

18
.gitignore vendored Normal file
View File

@ -0,0 +1,18 @@
.idea
*.gem
*.rbc
.bundle
.config
.yardoc
Gemfile.lock
InstalledFiles
_yardoc
coverage
doc/
lib/bundler/man
/pkg
rdoc
spec/reports
test/tmp
test/version_tmp
tmp

1
.rspec Normal file
View File

@ -0,0 +1 @@
--colour

12
Gemfile Normal file
View File

@ -0,0 +1,12 @@
source 'http://rubygems.org'
# Specify your gem's dependencies in omniauth-ely.gemspec
gemspec
group :development, :test do
gem 'guard'
gem 'guard-rspec'
gem 'guard-bundler'
gem 'rb-fsevent'
gem 'growl'
end

10
Guardfile Normal file
View File

@ -0,0 +1,10 @@
guard 'rspec', :version => 2 do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
end
guard 'bundler' do
watch('Gemfile')
watch('omniauth-ely.gemspec')
end

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
# The MIT License (MIT)
Copyright (c) 2016 Ely.by <team@ely.by>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.

26
README.md Normal file
View File

@ -0,0 +1,26 @@
# OmniAuth Ely.by
This is the official OmniAuth strategy for authenticating to Ely.by. To
use it, you'll need to sign up for an OAuth2 Application ID and Secret
on the [Ely.by Account Applications Page](#).
## Usage
Add the strategy to your `Gemfile` alongside OmniAuth:
```ruby
gem 'omniauth'
gem 'omniauth-ely'
```
Integrate this strategy to your OmniAuth middleware.
```ruby
use OmniAuth::Builder do
provider :ely, 'application_id', 'secret'
end
```
You need to add your key and secret.
For more information check the [OmniAuth wiki](https://github.com/intridea/omniauth/wiki).

8
Rakefile Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env rake
require "bundler/gem_tasks"
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new
desc 'Run specs'
task :default => :spec

2
lib/omniauth-ely.rb Normal file
View File

@ -0,0 +1,2 @@
require 'omniauth-ely/version'
require 'omniauth/strategies/ely'

View File

@ -0,0 +1,5 @@
module OmniAuth
module Ely
VERSION = '0.1.0'
end
end

View File

@ -0,0 +1,49 @@
require 'omniauth-oauth2'
module OmniAuth
module Strategies
class Ely < OmniAuth::Strategies::OAuth2
option :client_options, {
:site => 'https://account.ely.by',
:authorize_url => 'https://account.ely.by/oauth2/v1/',
:token_url => 'https://account.ely.by/api/oauth2/v1/token',
}
uid { raw_info['id'].to_s }
info do
{
:name => raw_info['username'],
:email => raw_info['email'],
:urls => {
:Ely => profile_url,
:Skin => skin_url,
},
}
end
extra do
{
:raw_info => raw_info,
:uuid => raw_info['uuid'],
:registered_at => raw_info['registeredAt'],
:preferred_language => raw_info['preferredLanguage']
}
end
def raw_info
@raw_info ||= access_token.get('https://account.ely.by/api/account/v1/info').parsed
end
def skin_url
'http://skinsystem.ely.by/skins/' + raw_info['username'] + '.png'
end
def profile_url
'http://ely.by/u' + raw_info['id'].to_s
end
end
end
end
OmniAuth.config.add_camelization 'ely', 'Ely'

27
omniauth-ely.gemspec Normal file
View File

@ -0,0 +1,27 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/omniauth-ely/version', __FILE__)
Gem::Specification.new do |gem|
gem.name = 'omniauth-ely'
gem.version = OmniAuth::Ely::VERSION
gem.homepage = 'https://github.com/elyby/omniauth-ely'
gem.license = 'MIT'
gem.authors = ['Ely.by team', 'ErickSkrauch']
gem.email = ['team@ely.by', 'erickskrauch@ely.by']
gem.description = %q{Official OmniAuth strategy for Ely.by.}
gem.summary = %q{Official OmniAuth strategy for Ely.by.}
gem.add_dependency 'omniauth', '~> 1.0'
gem.add_dependency 'omniauth-oauth2', '>= 1.1.1', '< 2.0'
gem.add_development_dependency 'rspec', '~> 2.7'
gem.add_development_dependency 'rack-test'
gem.add_development_dependency 'simplecov'
gem.add_development_dependency 'webmock'
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
gem.files = `git ls-files`.split("\n")
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
gem.require_paths = ['lib']
end

View File

@ -0,0 +1,50 @@
require 'spec_helper'
describe OmniAuth::Strategies::Ely do
let(:access_token) { stub('AccessToken', :options => {}) }
let(:parsed_response) { stub('ParsedResponse') }
let(:response) { stub('Response', :parsed => parsed_response) }
subject do
OmniAuth::Strategies::Ely.new({})
end
before(:each) do
subject.stub!(:access_token).and_return(access_token)
end
context 'client options' do
it 'should have correct site' do
subject.options.client_options.site.should eq('https://account.ely.by')
end
it 'should have correct authorize url' do
subject.options.client_options.authorize_url.should eq('https://account.ely.by/oauth2/v1/')
end
it 'should have correct token url' do
subject.options.client_options.token_url.should eq('https://account.ely.by/api/oauth2/v1/token')
end
end
context '#raw_info' do
it 'should use relative paths' do
access_token.should_receive(:get).and_return(response)
subject.raw_info.should eq(parsed_response)
end
it 'should build valid profile link' do
raw_info = Hash.new
raw_info['id'] = 1
subject.stub!(:raw_info).and_return(raw_info)
subject.profile_url.should eq('http://ely.by/u1')
end
it 'should build valid skin link' do
raw_info = Hash.new
raw_info['username'] = 'Steve'
subject.stub!(:raw_info).and_return(raw_info)
subject.skin_url.should eq('http://skinsystem.ely.by/skins/Steve.png')
end
end
end

15
spec/spec_helper.rb Normal file
View File

@ -0,0 +1,15 @@
$:.unshift File.expand_path('..', __FILE__)
$:.unshift File.expand_path('../../lib', __FILE__)
require 'simplecov'
SimpleCov.start
require 'rspec'
require 'rack/test'
require 'webmock/rspec'
require 'omniauth'
require 'omniauth-ely'
RSpec.configure do |config|
config.include WebMock::API
config.include Rack::Test::Methods
config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
end