Skip to content

Commit

Permalink
beginning to turn Profile into a self-contained class instead of a DB…
Browse files Browse the repository at this point in the history
… table
  • Loading branch information
aaronpk committed May 30, 2015
1 parent b73822d commit 834146b
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 114 deletions.
72 changes: 0 additions & 72 deletions Rakefile
Expand Up @@ -5,78 +5,6 @@ namespace :db do
task :bootstrap do
init
DataMapper.auto_migrate!

if SiteConfig.facebook && SiteConfig.facebook.app_id
facebook = Provider.create ({
:code => 'facebook',
:client_id => SiteConfig.facebook.app_id,
:client_secret => SiteConfig.facebook.app_secret,
:regex_username => 'https?:\/\/(?:www\.)?facebook\.com\/([^\/]+)'
})
end

if SiteConfig.flickr && SiteConfig.flickr.api_key
flickr = Provider.create ({
:code => 'flickr',
:client_id => SiteConfig.flickr.api_key,
:client_secret => SiteConfig.flickr.api_secret,
:regex_username => 'https?:\/\/(?:www\.)?flickr\.com\/(?:photos\/)?([^\/]+)'
})
end

if SiteConfig.geoloqi && SiteConfig.geoloqi.api_key
geoloqi = Provider.create ({
:code => 'geoloqi',
:client_id => SiteConfig.geoloqi.api_key,
:client_secret => SiteConfig.geoloqi.api_secret,
:regex_username => 'https?:\/\/(?:www\.)?geoloqi\.com\/([^\/]+)'
})
end

if SiteConfig.github && SiteConfig.github.api_key
github = Provider.create ({
:code => 'github',
:client_id => SiteConfig.github.client_id,
:client_secret => SiteConfig.github.client_secret,
:regex_username => 'https?:\/\/(?:www\.)?github\.com\/([^\/]+)'
})
end

if SiteConfig.google && SiteConfig.google.api_key
google = Provider.create ({
:code => 'google',
:client_id => SiteConfig.google.client_id,
:client_secret => SiteConfig.google.client_secret,
:regex_username => 'https?:\/\/(?:www\.)?profiles\.google\.com\/([^\/]+)'
})
end

if SiteConfig.twitter && SiteConfig.twitter.api_key
twitter = Provider.create ({
:code => 'twitter',
:client_id => SiteConfig.twitter.consumer_key,
:client_secret => SiteConfig.twitter.consumer_secret,
:regex_username => 'https?:\/\/(?:www\.)?twitter\.com\/([^\/]+)'
})
end

if SiteConfig.appnet && SiteConfig.appnet.api_key
appnet = Provider.create ({
:code => 'appnet',
:client_id => SiteConfig.appnet.client_id,
:client_secret => SiteConfig.appnet.client_secret,
:regex_username => 'https?:\/\/alpha\.app\.net\/([^\/]+)'
})
end

sms = Provider.create ({
:code => 'sms'
})

email = Provider.create ({
:code => 'email'
})

end
task :migrate do
init
Expand Down
4 changes: 2 additions & 2 deletions controllers/auth-web.rb
Expand Up @@ -442,7 +442,7 @@ def save_response_type

provider, profile_record, verified, error_description = verify_user_profile me_parser, profile, user

match = profile_record.href.match(Regexp.new provider['regex_username'])
match = profile_record.href.match(Regexp.new provider.regex_username)
session[:attempted_uri] = me
session[:attempted_userid] = user[:id]
session[:attempted_profile] = profile
Expand Down Expand Up @@ -549,7 +549,7 @@ def save_response_type
actual_username = ''
if profile.provider[:code] == 'google_oauth2'
authed_url = auth['extra']['raw_info']['profile']
if authed_url && (match=authed_url.match(Regexp.new profile.provider[:regex_username]))
if authed_url && (match=authed_url.match(Regexp.new profile.provider.regex_username))
actual_username = match[1]
end
else
Expand Down
6 changes: 4 additions & 2 deletions lib/omniauth.rb
Expand Up @@ -3,6 +3,10 @@ def self.provider_supported?(provider_name)
case provider_name
when nil
exists = false
when 'beeminder'
exists = class_exists?('Beeminder')
when 'eventbrite'
exists = class_exists?('Eventbrite')
when 'facebook'
exists = class_exists?('Facebook')
when 'flickr'
Expand All @@ -17,8 +21,6 @@ def self.provider_supported?(provider_name)
exists = class_exists?('GoogleOauth2')
when 'twitter'
exists = class_exists?('Twitter')
when 'open_id'
exists = class_exists?('OpenID')
when 'appnet'
exists = class_exists?('Appnet')
else
Expand Down
33 changes: 2 additions & 31 deletions lib/relparser.rb
Expand Up @@ -14,14 +14,6 @@ class InvalidContentError < Exception
attr_accessor :url
end

def self.sms_regex
/sms:\/?\/?([0-9\-+]+)/
end

def self.email_regex
/mailto:\/?\/?(.+@.+\..+)/
end

attr_accessor :url
attr_accessor :redirects

Expand Down Expand Up @@ -144,7 +136,7 @@ def rel_me_links(opts={})
href = link.attribute("href").value
href = URI.decode href

if href.match RelParser.sms_regex or href.match RelParser.email_regex
if href.match Provider.sms_regex or href.match Provider.email_regex
links << href
else
begin
Expand Down Expand Up @@ -203,29 +195,8 @@ def gpg_keys
keys
end

def get_provider
return nil if @url.nil?

if @url.match RelParser.sms_regex
return Provider.first :code => 'sms'
end

if @url.match RelParser.email_regex
return Provider.first :code => 'email'
end

Provider.all.each do |provider|
if provider['regex_username'] != '' && @url.match(Regexp.new provider['regex_username'])
# puts "Provider name for #{url} is #{provider['code']}"
return provider
end
end

return nil
end

def is_supported_provider?
provider = self.get_provider
provider = Provider.provider_for_url @url
return false if provider.nil?
return OmniAuth.provider_supported? provider['code']
end
Expand Down
52 changes: 49 additions & 3 deletions models/provider.rb
@@ -1,4 +1,5 @@
class Provider
class Provider # < Hash
#include Hashie::Extensions::MethodAccess
include DataMapper::Resource
property :id, Serial

Expand All @@ -7,12 +8,57 @@ class Provider
property :code, String, :length => 20
property :client_id, String, :length => 255
property :client_secret, String, :length => 255
property :regex_username, String, :length => 255
property :profile_url_template, String, :length => 255

property :created_at, DateTime
property :updated_at, DateTime

def self.sms_regex
/sms:\/?\/?([0-9\-+]+)/
end

def self.email_regex
/mailto:\/?\/?(.+@.+\..+)/
end

def self.provider_for_url(url)
if url.match Provider.sms_regex
return Provider.first :code => 'sms'
end

if url.match Provider.email_regex
return Provider.first :code => 'email'
end

Provider.regexes.each do |c,regex|
if regex != '' && url.match(Regexp.new(regex))
return Provider.first :code => c
end
end
end

def self.regexes
{
'beeminder' => 'https?:\/\/(?:www\.)?beeminder\.com\/(.+)',
'eventbrite' => 'https?:\/\/(.+)\.eventbrite\.com',
'flickr' => 'https?:\/\/(?:www\.)?flickr\.com\/(?:people\/)?([^\/]+)',
'geoloqi' => 'https?:\/\/(?:www\.)?geoloqi\.com\/([^\/]+)',
'github' => 'https?:\/\/(?:www\.)?github\.com\/([^\/]+)',
'google_oauth2' => 'https?:\/\/(?:www\.)?(?:profiles\.|plus\.|)google\.com\/([^\/]+)',
'lastfm' => 'https?:\/\/(?:www\.)?last\.fm\/user\/(.+)',
'twitter' => 'https?:\/\/(?:www\.)?twitter\.com\/([^\/]+)'
}
end

def regex_username
return_regex = nil
Provider.regexes.each do |c,regex|
if self.code == c
return_regex = regex
end
end
return_regex
end

def username_for_url(url)
#puts "username_for_url #{url}"
parser = RelParser.new url
Expand Down
3 changes: 0 additions & 3 deletions sql/appnet.sql

This file was deleted.

1 change: 0 additions & 1 deletion views/auth.erb
Expand Up @@ -252,7 +252,6 @@ function verify_link_back(me, link, i, use_cached) {
if(link.provider == 'totp') {
$("#profile_"+i+" .link").html('<button class="btn disabled">Google Authenticator</button>');
set_provider_status(i, 'error', 'Google Authenticator logins are no longer supported. <a href="/totp">Read why</a>.');
set_up_totp_auth();
provider_verification_finished();
return;
}
Expand Down

0 comments on commit 834146b

Please sign in to comment.