Added files

This commit is contained in:
Toastie 2024-11-23 17:55:44 +13:00
parent 3f1abb701b
commit c45355aa0b
Signed by: toastie_t0ast
GPG key ID: 27F3B6855AFD40A4
11 changed files with 221 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
.bundle
*.swp
.gem
Gemfile.lock

8
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/omniauth-weibo-oauth2.iml" filepath="$PROJECT_DIR$/.idea/omniauth-weibo-oauth2.iml" />
</modules>
</component>
</project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="RUBY_MODULE" version="4">
<component name="ModuleRunConfigurationManager">
<shared />
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
</content>
<orderEntry type="jdk" jdkName="ruby-3.2.3-p157" jdkType="RUBY_SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.5.6, ruby-3.2.3-p157) [gem]" level="application" />
<orderEntry type="library" scope="PROVIDED" name="growl (v1.0.3, ruby-3.2.3-p157) [gem]" level="application" />
<orderEntry type="library" scope="PROVIDED" name="rake (v13.2.1, ruby-3.2.3-p157) [gem]" level="application" />
<orderEntry type="library" scope="PROVIDED" name="rb-fsevent (v0.11.2, ruby-3.2.3-p157) [gem]" level="application" />
</component>
</module>

13
Gemfile Normal file
View file

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

21
LICENSE.txt Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2024 Toastie
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.

7
Rakefile Normal file
View file

@ -0,0 +1,7 @@
#!/usr/bin/env rake
require File.join('bundler', 'gem_tasks')
require File.join('rspec', 'core', 'rake_task')
RSpec::Core::RakeTask.new(:spec)
task :default => :spec

View file

@ -0,0 +1,2 @@
require "omniauth-weibo-oauth2/version"
require "omniauth/strategies/weibo"

View file

@ -0,0 +1,5 @@
module OmniAuth
module WeiboOauth2
VERSION = "0.5.2"
end
end

View file

@ -0,0 +1,113 @@
require "omniauth-oauth2"
module OmniAuth
module Strategies
class Weibo < OmniAuth::Strategies::OAuth2
option :client_options, {
:site => "https://api.weibo.com",
:authorize_url => "/oauth2/authorize",
:token_url => "/oauth2/access_token",
:token_method => :post
}
option :token_params, {
:parse => :json
}
uid do
raw_info['id']
end
info do
{
:nickname => raw_info['screen_name'],
:name => raw_info['name'],
:location => raw_info['location'],
:image => image_url,
:description => raw_info['description'],
:urls => {
'Blog' => raw_info['url'],
'Weibo' => raw_info['domain'].empty? ? "https://weibo.com/u/#{raw_info['id']}" : "https://weibo.com/#{raw_info['domain']}",
}
}
end
extra do
{
:raw_info => raw_info
}
end
def callback_url
token_params_redirect || (full_host + script_name + callback_path)
end
def token_params_redirect
token_params['redirect_uri'] || token_params[:redirect_uri]
end
def raw_info
access_token.options[:mode] = :query
access_token.options[:param_name] = 'access_token'
@uid ||= access_token.get('/2/account/get_uid.json').parsed["uid"]
@raw_info ||= access_token.get("/2/users/show.json", :params => {:uid => @uid}).parsed
end
def find_image
raw_info[%w(avatar_hd avatar_large profile_image_url).find { |e| raw_info[e].present? }]
end
#url: option: size:
#avatar_hd original original_size
#avatar_large large 180x180
#profile_image_url middle 50x50
# small 30x30
#default is middle
def image_url
image_size = options[:image_size] || :middle
case image_size.to_sym
when :original
url = raw_info['avatar_hd']
when :large
url = raw_info['avatar_large']
when :small
url = raw_info['avatar_large'].sub('/180/','/30/')
else
url = raw_info['profile_image_url']
end
end
##
# You can pass +display+, +with_offical_account+ or +state+ params to the auth request, if
# you need to set them dynamically. You can also set these options
# in the OmniAuth config :authorize_params option.
#
# /auth/weibo?display=mobile&with_offical_account=1
#
def authorize_params
super.tap do |params|
%w[display with_offical_account forcelogin state].each do |v|
if request.params[v]
params[v.to_sym] = request.params[v]
end
session["omniauth.state"] = params[v.to_sym] if v == 'state'
end
end
end
protected
def build_access_token
params = {
'client_id' => client.id,
'client_secret' => client.secret,
'code' => request.params['code'],
'grant_type' => 'authorization_code',
'redirect_uri' => callback_url
}.merge(token_params.to_hash(symbolize_keys: true))
client.get_token(params, deep_symbolize(options.token_params))
end
end
end
end
OmniAuth.config.add_camelization "weibo", "Weibo"

View file

@ -0,0 +1,21 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/omniauth-weibo-oauth2/version', __FILE__)
Gem::Specification.new do |gem|
gem.authors = "Bin He"
gem.email = "beenhero@gmail.com"
gem.description = %q{OmniAuth Oauth2 strategy for weibo.com.}
gem.summary = %q{OmniAuth Oauth2 strategy for weibo.com.}
gem.homepage = "https://github.com/beenhero/omniauth-weibo-oauth2"
gem.license = "MIT"
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.name = "omniauth-weibo-oauth2"
gem.require_paths = ["lib"]
gem.version = OmniAuth::WeiboOauth2::VERSION
gem.add_dependency 'omniauth', '~> 1.5'
gem.add_dependency 'omniauth-oauth2', '>= 1.4.0'
end