Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F1090370
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Oct 15, 6:46 AM
Size
3 KB
Mime Type
text/x-diff
Expires
Fri, Oct 17, 6:46 AM (5 h, 51 m)
Engine
blob
Format
Raw Data
Handle
280395
Attached To
rARCHIVING archiving
View Options
diff --git a/lib/peter/strategies/vima.rb b/lib/peter/strategies/vima.rb
index 2e8ba4f..d1efa4d 100644
--- a/lib/peter/strategies/vima.rb
+++ b/lib/peter/strategies/vima.rb
@@ -1,89 +1,109 @@
## -*- encoding : utf-8 -*-
require 'oauth2'
Warden::Strategies.add(:vima) do
Key = Rails.application.secrets.oauth2_vima_client_id
Secret = Rails.application.secrets.oauth2_vima_secret
def valid?
params['vima'] || params['error'] || params['code']
end
def client
OAuth2::Client.new(
Key,
Secret,
site: 'https://vima.grnet.gr',
token_url: "/o/token",
authorize_url: "/o/authorize",
:ssl => {:ca_path => "/etc/ssl/certs"}
)
end
def redirect_uri
uri = URI.parse(request.url)
uri.scheme = 'https' unless Rails.env.development?
uri.path = '/vima'
uri.query = nil
uri.to_s
end
def redirect_to_vima
redirect! client.auth_code.authorize_url(:redirect_uri => redirect_uri, scope: 'read')
end
def authenticate!
if !Baas::settings[:vima_oauth_enabled]
return fail!("ViMa is temporarily disabled")
end
if params['error']
Rails.logger.warn("WARDEN: ERROR #{params['error']}")
return fail!("ViMa log in failed: #{params['error']}")
end
return redirect_to_vima if params['vima']
access_token = client.auth_code.get_token(
params['code'],
{ :redirect_uri => redirect_uri },
{ :mode => :query, :param_name => "access_token", :header_format => "" })
- user_data = access_token.get('https://vima.grnet.gr/instances/list?tag=vima:service:archiving',
- { mode: :query, param_name: 'access_token' }).
- parsed.deep_symbolize_keys
+ user_data = access_token.get(
+ 'https://vima.grnet.gr/user/details',
+ { mode: :query, param_name: 'access_token' }
+ ).parsed.deep_symbolize_keys
+
+ vms = access_token.get(
+ 'https://vima.grnet.gr/instances/list?tag=vima:service:archiving',
+ { mode: :query, param_name: 'access_token' }
+ ).parsed.deep_symbolize_keys
+
+ if [user_data[:username], user_data[:email], user_data[:id]].any?(&:blank?)
+ return fail!("ViMa login failed: no user data")
+ end
+
+ ###### TBR
+ # temporary, for user migration
+ user = User.find_or_initialize_by(username: user_data[:username],
+ email: user_data[:email])
+ user.identifier = "vima:#{user_data[:id]}"
+ ######
+
+ # actual implementation
+ #user = User.find_or_initialize_by(identifier: user_data[:identifier])
- user = User.find_or_initialize_by(username: user_data[:user][:username],
- email: user_data[:user][:email])
user.login_at = Time.now
if user.new_record?
user.enabled = true
+ # TBR
+ user.identifier = "vima:#{user_data[:id]}"
user.vima!
else
user.save!
end
- if user_data[:response][:errors] != false
- Rails.logger.warn("ViMa: errors on instances/list response for user #{user_data[:user][:username]}")
+ if vms[:response][:errors] != false
+ Rails.logger.warn("ViMa: errors on instances/list response for user #{vms[:user][:username]}")
end
if !user.enabled?
return fail!('Service not available')
end
- assign_vms(user, user_data[:response][:instances])
+ assign_vms(user, vms[:response][:instances])
success!(user)
end
def assign_vms(user, vms)
Rails.logger.warn("ViMa: user: #{user.username}")
Rails.logger.warn("ViMa: vms: #{vms}")
Rails.logger.warn("ViMa: session vms: #{session[:vms]}")
session[:vms] = vms.first(50)
Host.where(fqdn: vms).each do |host|
host.users << user unless host.users.include?(user)
end
end
end
Event Timeline
Log In to Comment