OpenNebulaOpenID-4.4.diff
| src/sunstone/etc/sunstone-server.conf | ||
|---|---|---|
| 145 | 145 | |
| 146 | 146 |
:routes: |
| 147 | 147 |
- oneflow |
| 148 | ||
| 149 |
#new: openid support |
|
| 150 |
#openid->enabled |
|
| 151 |
# turns openid on or off |
|
| 152 |
#openid->auto_register |
|
| 153 |
# global setting for auto registering new users |
|
| 154 |
# if false, user who is not registered (not in OpenNebula user base) |
|
| 155 |
# will be refused in authorization |
|
| 156 |
# if true, OpenNebula user will be created |
|
| 157 |
#openid->case_sensitive |
|
| 158 |
# global setting for case sensivity |
|
| 159 |
# if true, same user written in different case will be treated as different users |
|
| 160 |
# different OpenID servers might have different settings on their side |
|
| 161 |
# better check it beforehand and make server-specific settings |
|
| 162 |
#openid->servers |
|
| 163 |
# list of servers to show in OpenID dropdown list |
|
| 164 |
# server-specific settings also go here |
|
| 165 |
#openid->servers->addr |
|
| 166 |
# url of OpenID server |
|
| 167 |
# precisely, all that goes before user name |
|
| 168 |
#openid->servers->auto_register |
|
| 169 |
#openid->servers->case_sensitive |
|
| 170 |
# same as above, but server-specific |
|
| 171 |
#openid->enforce_serverlist |
|
| 172 |
# if true, only users from servers listed in openid->servers are allowed |
|
| 173 |
# all other OpenID authorities are forbidden |
|
| 174 |
# if false, "Other" option appears in OpenID dropdown list and any authority is allowed |
|
| 175 |
#openid->autocheck_servers |
|
| 176 |
# list of servers for which claimed identities are checked |
|
| 177 |
# immediate OpenID requests are sent to listed authorities |
|
| 178 |
# if any identity is claimed on the server and available in immediate mode, |
|
| 179 |
# it appears on the claimed identities list |
|
| 180 | ||
| 181 |
:openid: |
|
| 182 |
:enabled: true |
|
| 183 |
:servers: |
|
| 184 |
- :addr: http://openid.mail.ru/ |
|
| 185 |
:case_sensitive: true |
|
| 186 |
:auto_register: false |
|
| 187 |
- :addr: http://openid.yandex.ru/ |
|
| 188 |
:case_sensitive: false |
|
| 189 |
:auto_register: true |
|
| 190 |
:auto_register: false |
|
| 191 |
:case_sensitive: false |
|
| 192 |
:autocheck_servers: |
|
| 193 |
- http://openid.mail.ru/ |
|
| 194 |
- http://openid.yandex.ru/ |
|
| 195 |
:enforce_serverlist: true |
|
| src/sunstone/public/css/login.css | ||
|---|---|---|
| 21 | 21 | |
| 22 | 22 |
} |
| 23 | 23 | |
| 24 | ||
| 25 | 24 |
#header {
|
| 26 | 25 |
height: 30px; |
| 27 | 26 |
background-color: #353735; |
| ... | ... | |
| 74 | 73 |
vertical-align: center; |
| 75 | 74 |
} |
| 76 | 75 | |
| 77 |
div#login {
|
|
| 76 |
#login_tabs |
|
| 77 |
{
|
|
| 78 |
width: 400px; |
|
| 79 |
min-height: 300px; |
|
| 80 |
font-size: 1em; |
|
| 81 |
margin-left: auto; |
|
| 82 |
margin-right: auto; |
|
| 83 |
position: relative; |
|
| 84 |
top: 30px; |
|
| 85 |
} |
|
| 86 | ||
| 87 |
#login_tabs div.content |
|
| 88 |
{
|
|
| 89 |
margin-left: 30px; |
|
| 90 |
padding-top: 0px; |
|
| 91 |
} |
|
| 92 | ||
| 93 |
#login_tabs input#login_btn, #login_tabs input#openid_login_btn {
|
|
| 94 |
margin-right: 20px; |
|
| 95 |
} |
|
| 96 | ||
| 97 |
div#login, div#openid_login {
|
|
| 78 | 98 |
width: 400px; |
| 79 | 99 |
height: 300px; |
| 80 | 100 |
position: relative; |
| ... | ... | |
| 87 | 107 |
background: url(../images/panel.png) no-repeat center ; |
| 88 | 108 | |
| 89 | 109 |
vertical-align: center; |
| 110 | ||
| 111 |
margin-bottom: 40px; |
|
| 90 | 112 |
} |
| 91 | 113 | |
| 114 |
#openid_serverlist {
|
|
| 115 |
text-align: left; |
|
| 116 |
line-height: 150%; |
|
| 117 |
} |
|
| 92 | 118 | |
| 93 | 119 |
.box {
|
| 94 |
font-size:0.8em; |
|
| 120 |
font-size:0.8em !important;
|
|
| 95 | 121 |
width: 300px; |
| 96 | 122 |
height: 25px; |
| 97 | 123 |
background: #FFFFFF; |
| ... | ... | |
| 121 | 147 |
-moz-border-radius-bottomleft: 5px; |
| 122 | 148 |
} |
| 123 | 149 | |
| 124 | ||
| 125 | ||
| 126 |
div#login input#login_btn {
|
|
| 150 |
input#login_btn, input#openid_login_btn {
|
|
| 127 | 151 |
width: 130px; |
| 128 | 152 |
height: 45px; |
| 129 | 153 |
cursor: pointer; |
| ... | ... | |
| 136 | 160 |
background: url(../images/login.png) no-repeat center ; |
| 137 | 161 |
} |
| 138 | 162 | |
| 139 |
div#login input#login_btn:hover {
|
|
| 163 |
input#login_btn:hover, input#openid_login_btn:hover {
|
|
| 140 | 164 |
width: 130px; |
| 141 | 165 |
height: 45px; |
| 142 | 166 |
cursor: pointer; |
| ... | ... | |
| 217 | 241 | |
| 218 | 242 |
#error_box {
|
| 219 | 243 |
margin-top:70px; |
| 220 |
} |
|
| 244 |
} |
|
| src/sunstone/public/js/openid.js | ||
|---|---|---|
| 1 |
var identities_found; |
|
| 2 |
function oidResponse(identity, error) |
|
| 3 |
{
|
|
| 4 |
if (!error) {
|
|
| 5 |
$("#openid_serverlist").append("<li><a href='#' onclick='openidLogin(" + '"' + identity + '"' + "); return false'>" + decodeURIComponent(identity) + "</a></li>");
|
|
| 6 |
if (!identities_found) {
|
|
| 7 |
identities_found = true; |
|
| 8 |
$("#identities_none").hide();
|
|
| 9 |
$("#identities_link").click();
|
|
| 10 |
} |
|
| 11 |
} |
|
| 12 |
} |
|
| 13 | ||
| 14 |
function openidLogin(identity) |
|
| 15 |
{
|
|
| 16 |
$("#openid_url").val(identity);
|
|
| 17 |
$("#openid_form").submit();
|
|
| 18 |
} |
|
| 19 | ||
| 20 |
function loadIdentList(count_resp) |
|
| 21 |
{
|
|
| 22 |
$("#openid_serverlist").empty();
|
|
| 23 |
if(count_resp["error"] == true) {
|
|
| 24 |
alert("Error occured");
|
|
| 25 |
return; |
|
| 26 |
} |
|
| 27 |
var servercnt = count_resp["count"]; |
|
| 28 |
var tab_ident = document.getElementById("tab_auth_identities");
|
|
| 29 |
for(var i = 0; i < servercnt; i++) {
|
|
| 30 |
var openid_frame = document.createElement("iframe");
|
|
| 31 |
openid_frame.style = "width: 0px; height: 0px; display: none;"; |
|
| 32 |
tab_ident.appendChild(openid_frame); |
|
| 33 |
openid_frame.src = "openid_info?action=getserver&id=" + i; |
|
| 34 |
} |
|
| 35 |
} |
|
| 36 | ||
| 37 |
$(document).ready(function() {
|
|
| 38 |
$("#openid_login_btn").click(function () {
|
|
| 39 |
var openid_prefix = ""; |
|
| 40 |
var openid_pref_sel = $("#openid_prefix");
|
|
| 41 |
if(openid_pref_sel.length) {
|
|
| 42 |
openid_prefix = openid_pref_sel.val(); |
|
| 43 |
if(openid_prefix.toLowerCase() == "other") |
|
| 44 |
openid_prefix = ""; |
|
| 45 |
} |
|
| 46 |
$("#openid_url").val(openid_prefix + $("#openid_ident").val());
|
|
| 47 |
$("#openid_form").submit();
|
|
| 48 |
return false; |
|
| 49 |
}); |
|
| 50 | ||
| 51 |
$("#login_tabs").tabs();
|
|
| 52 | ||
| 53 |
$.ajax({
|
|
| 54 |
url: "openid_info", |
|
| 55 |
data: { action: "servercount" },
|
|
| 56 |
type: "GET", |
|
| 57 |
dataType : "json", |
|
| 58 |
success: loadIdentList, |
|
| 59 |
error: function( jqXHR, textStatus, errorThrown ) {
|
|
| 60 |
alert( "Error occured getting OpenID identity list. " + textStatus + "\nAdditional information: " + errorThrown); |
|
| 61 |
} |
|
| 62 |
}); |
|
| 63 |
}); |
|
| src/sunstone/public/js/plugins/users-tab.js | ||
|---|---|---|
| 734 | 734 |
$.each(users_list,function(){
|
| 735 | 735 |
//if (this.USER.ID == uid) |
| 736 | 736 |
// dashboardQuotasHTML(this.USER); |
| 737 |
if(this.USER.AUTH_DRIVER == "openid_stub"){
|
|
| 738 |
this.USER.AUTH_DRIVER = "OpenID"; |
|
| 739 |
this.USER.NAME = decodeURIComponent(this.USER.NAME); //unescape(this.USER.NAME); |
|
| 740 |
} |
|
| 737 | 741 |
user_list_array.push(userElementArray(this)); |
| 738 | 742 |
}); |
| 739 | 743 |
updateView(user_list_array,dataTable_users); |
| src/sunstone/sunstone-openid.rb | ||
|---|---|---|
| 1 |
require 'sinatra' |
|
| 2 |
require 'omniauth' |
|
| 3 |
require 'omniauth-openid' |
|
| 4 |
require 'openid/store/filesystem' |
|
| 5 |
require 'openid/store/memory' |
|
| 6 |
require 'uri' |
|
| 7 |
require 'securerandom' |
|
| 8 | ||
| 9 |
module OmniAuth |
|
| 10 |
module Strategies |
|
| 11 |
class OpenID |
|
| 12 |
def identifier |
|
| 13 |
i = options.identifier || |
|
| 14 |
request.params[options.identifier_param.to_s] |
|
| 15 |
return nil if i.empty? |
|
| 16 | ||
| 17 |
if $settings.config[:openid][:enforce_serverlist] == false || |
|
| 18 |
$settings.config[:openid][:servers].nil? || |
|
| 19 |
$settings.config[:openid][:servers].empty? |
|
| 20 |
srv_in_list = true |
|
| 21 |
else |
|
| 22 |
srv_in_list = $settings.config[:openid][:servers].any? { |srv| i.start_with?(srv[:addr])}
|
|
| 23 |
end |
|
| 24 | ||
| 25 |
srv_in_list ? i : nil |
|
| 26 |
end |
|
| 27 |
end |
|
| 28 |
end |
|
| 29 |
end |
|
| 30 | ||
| 31 |
helpers do |
|
| 32 |
def openid_consumer |
|
| 33 |
#@openid_consumer ||= OpenID::Consumer.new(session, OpenID::Store::Filesystem.new("#{File.dirname(__FILE__)}/tmp/openid"))
|
|
| 34 |
@openid_consumer ||= OpenID::Consumer.new(session, OpenID::Store::Memory.new) |
|
| 35 |
end |
|
| 36 |
def root_url |
|
| 37 |
request.url.match(/(^.*\/{2}[^\/]*)/)[1]
|
|
| 38 |
end |
|
| 39 |
end |
|
| 40 | ||
| 41 |
use OmniAuth::Builder do |
|
| 42 |
#provider :open_id, :store => OpenID::Store::Filesystem.new('/tmp')
|
|
| 43 |
provider :open_id |
|
| 44 |
end |
|
| 45 | ||
| 46 |
post '/auth/open_id/callback' do |
|
| 47 |
#Defaults |
|
| 48 |
srv_case = false |
|
| 49 |
srv_autoreg = true |
|
| 50 |
#Get OmniAuth OpenID auth data and settings from config |
|
| 51 |
auth = request.env['omniauth.auth'] |
|
| 52 |
#Extract claimed identity, make server-specific settings, if possible |
|
| 53 |
username = auth['uid'] |
|
| 54 |
username = URI.decode_www_form_component(username) |
|
| 55 |
username_friendly = username |
|
| 56 |
srv_case ||= settings.config[:openid][:case_sensitive] |
|
| 57 |
srv_autoreg = settings.config[:openid][:auto_register] unless settings.config[:openid][:auto_register].nil? |
|
| 58 |
#Delete server name and slashes to get friendly display name |
|
| 59 |
if settings.config[:openid][:servers] && |
|
| 60 |
(srv = settings.config[:openid][:servers].detect { |srv| username.start_with?(srv[:addr]) })
|
|
| 61 |
username_friendly = username[srv[:addr].length..-1].chomp '/' |
|
| 62 |
srv_case = srv[:case_sensitive] unless srv[:case_sensitive].nil? |
|
| 63 |
srv_autoreg = srv[:auto_register] unless srv[:auto_register].nil? |
|
| 64 |
end |
|
| 65 |
#encode username to store as OpenNebula user |
|
| 66 |
username.downcase! unless srv_case |
|
| 67 |
username_encoded = URI.encode_www_form_component(username) |
|
| 68 |
#Check if user exists |
|
| 69 |
client = OpenNebula::Client.new |
|
| 70 |
userpool = OpenNebula::UserPool.new(client) |
|
| 71 |
userpool.info |
|
| 72 |
user_id = userpool["/USER_POOL/USER[NAME='#{username_encoded}']/ID"]
|
|
| 73 |
#If it does, get user and pass to session constructor |
|
| 74 |
#Otherwise - create user first |
|
| 75 |
if user_id.nil? |
|
| 76 |
if srv_autoreg |
|
| 77 |
xml = OpenNebula::User.build_xml |
|
| 78 |
user = OpenNebula::User.new(xml, client) |
|
| 79 |
user.allocate(username_encoded, SecureRandom.hex, 'openid_stub') |
|
| 80 |
else |
|
| 81 |
user = nil |
|
| 82 |
err_msg = "This OpenID user can't access system" |
|
| 83 |
redirect "/?openid_error=#{err_msg}"
|
|
| 84 |
end |
|
| 85 |
else |
|
| 86 |
user = OpenNebula::User.new_with_id(user_id.to_i, client) |
|
| 87 |
end |
|
| 88 |
#Build session with found or newly created user |
|
| 89 |
build_session(user, username_friendly) |
|
| 90 |
redirect '/' |
|
| 91 |
end |
|
| 92 | ||
| 93 |
get '/auth/failure' do |
|
| 94 |
#Redirect to login page with OpenID error box displayed |
|
| 95 |
redirect "/?openid_error=#{params['message']}"
|
|
| 96 |
end |
|
| 97 | ||
| 98 |
get '/openid_info' do |
|
| 99 |
case request["action"].downcase |
|
| 100 |
when "servercount" then |
|
| 101 |
unless settings.config[:openid][:autocheck_servers].nil? |
|
| 102 |
response = {"count" => settings.config[:openid][:autocheck_servers].length, "error" => false}
|
|
| 103 |
else |
|
| 104 |
response = {"error" => true}
|
|
| 105 |
end |
|
| 106 |
when "getserver" then |
|
| 107 |
unless settings.config[:openid][:autocheck_servers].nil? || request["id"].nil? || settings.config[:openid][:autocheck_servers][request["id"].to_i].nil? |
|
| 108 |
openid = params[:openid_identifier] |
|
| 109 |
begin |
|
| 110 |
oidreq = openid_consumer.begin(settings.config[:openid][:autocheck_servers][request["id"].to_i]) |
|
| 111 |
rescue OpenID::DiscoveryFailure => why |
|
| 112 |
content_type 'text/html', :charset => 'utf-8' |
|
| 113 |
return erb :_openid_check, :locals => {:openid_error => true, :identifier => why}
|
|
| 114 |
else |
|
| 115 |
redirect oidreq.redirect_url(root_url, root_url + "/openid_info/return", true) |
|
| 116 |
end |
|
| 117 |
else |
|
| 118 |
content_type 'text/html', :charset => 'utf-8' |
|
| 119 |
return erb :_openid_check, :locals => {:openid_error => true, :identifier => "No server found"}
|
|
| 120 |
end |
|
| 121 |
else |
|
| 122 |
response = {"error" => true}
|
|
| 123 |
end |
|
| 124 |
response.to_json |
|
| 125 |
end |
|
| 126 | ||
| 127 |
get '/openid_info/return' do |
|
| 128 |
content_type 'text/html', :charset => 'utf-8' |
|
| 129 |
oidresp = openid_consumer.complete(params, request.url) |
|
| 130 |
ident = oidresp.display_identifier |
|
| 131 |
unless oidresp.status == OpenID::Consumer::SUCCESS |
|
| 132 |
openid_error = true |
|
| 133 |
ident = oidresp.status.to_s |
|
| 134 |
else |
|
| 135 |
openid_error = false |
|
| 136 |
end |
|
| 137 |
erb :_openid_check, :locals => {:openid_error => openid_error, :identifier => ident}
|
|
| 138 |
end |
|
| src/sunstone/sunstone-server.rb | ||
|---|---|---|
| 1 | 1 |
#!/usr/bin/env ruby |
| 2 | 2 |
# -*- coding: utf-8 -*- |
| 3 | 3 | |
| 4 | ||
| 4 | 5 |
# -------------------------------------------------------------------------- # |
| 5 | 6 |
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs # |
| 6 | 7 |
# # |
| ... | ... | |
| 101 | 102 |
exit(-1) |
| 102 | 103 |
end |
| 103 | 104 | |
| 105 |
# Enable OpenID, if required |
|
| 106 |
if settings.config[:openid][:enabled] |
|
| 107 |
require 'sunstone-openid' |
|
| 108 |
require 'opennebula' |
|
| 109 | ||
| 110 |
include OpenNebula |
|
| 111 |
end |
|
| 112 |
$settings = settings |
|
| 104 | 113 |
# Enable logger |
| 105 | 114 | |
| 106 | 115 |
include CloudLogger |
| ... | ... | |
| 139 | 148 |
session[:ip] && session[:ip]==request.ip ? true : false |
| 140 | 149 |
end |
| 141 | 150 | |
| 142 |
def build_session |
|
| 143 |
begin |
|
| 144 |
result = $cloud_auth.auth(request.env, params) |
|
| 145 |
rescue Exception => e |
|
| 146 |
logger.error { e.message }
|
|
| 147 |
return [500, ""] |
|
| 148 |
end |
|
| 149 | ||
| 150 |
if result.nil? |
|
| 151 |
logger.info { "Unauthorized login attempt" }
|
|
| 152 |
return [401, ""] |
|
| 151 |
def build_session(openid_user = nil, openid_display_name = nil) |
|
| 152 |
if openid_user |
|
| 153 |
user = openid_user |
|
| 153 | 154 |
else |
| 155 |
begin |
|
| 156 |
result = $cloud_auth.auth(request.env, params) |
|
| 157 |
rescue Exception => e |
|
| 158 |
logger.error { e.message }
|
|
| 159 |
return [500, ""] |
|
| 160 |
end |
|
| 161 | ||
| 162 |
if result.nil? |
|
| 163 |
logger.info { "Unauthorized login attempt" }
|
|
| 164 |
return [401, ""] |
|
| 165 |
end |
|
| 154 | 166 |
client = $cloud_auth.client(result) |
| 155 | 167 |
user_id = OpenNebula::User::SELF |
| 156 | 168 | |
| 157 | 169 |
user = OpenNebula::User.new_with_id(user_id, client) |
| 158 |
rc = user.info |
|
| 159 |
if OpenNebula.is_error?(rc) |
|
| 160 |
logger.error { rc.message }
|
|
| 161 |
return [500, ""] |
|
| 162 |
end |
|
| 170 |
end |
|
| 163 | 171 | |
| 164 |
session[:user] = user['NAME'] |
|
| 165 |
session[:user_id] = user['ID'] |
|
| 166 |
session[:user_gid] = user['GID'] |
|
| 167 |
session[:user_gname] = user['GNAME'] |
|
| 168 |
session[:ip] = request.ip |
|
| 169 |
session[:remember] = params[:remember] |
|
| 170 |
session[:display_name] = user[DISPLAY_NAME_XPATH] || user['NAME'] |
|
| 172 |
rc = user.info |
|
| 173 |
if OpenNebula.is_error?(rc) |
|
| 174 |
logger.error { rc.message }
|
|
| 175 |
return [500, ""] |
|
| 176 |
end |
|
| 171 | 177 | |
| 172 |
#User IU options initialization |
|
| 173 |
#Load options either from user settings or default config. |
|
| 174 |
# - LANG |
|
| 175 |
# - WSS CONECTION |
|
| 176 |
# - TABLE ORDER |
|
| 178 |
session[:user] = user['NAME'] |
|
| 179 |
session[:user_id] = user['ID'] |
|
| 180 |
session[:user_gid] = user['GID'] |
|
| 181 |
session[:user_gname] = user['GNAME'] |
|
| 182 |
session[:ip] = request.ip |
|
| 183 |
session[:remember] = params[:remember] |
|
| 184 |
if openid_display_name |
|
| 185 |
session[:display_name] = openid_display_name |
|
| 186 |
else |
|
| 187 |
session[:display_name] = user[DISPLAY_NAME_XPATH] || user['NAME'] |
|
| 188 |
end |
|
| 177 | 189 | |
| 178 |
if user['TEMPLATE/LANG']
|
|
| 179 |
session[:lang] = user['TEMPLATE/LANG']
|
|
| 180 |
else
|
|
| 181 |
session[:lang] = $conf[:lang]
|
|
| 182 |
end
|
|
| 190 |
#User IU options initialization
|
|
| 191 |
#Load options either from user settings or default config.
|
|
| 192 |
# - LANG
|
|
| 193 |
# - WSS CONECTION
|
|
| 194 |
# - TABLE ORDER
|
|
| 183 | 195 | |
| 184 |
if user['TEMPLATE/VNC_WSS'] |
|
| 185 |
session[:vnc_wss] = user['TEMPLATE/VNC_WSS'] |
|
| 186 |
else |
|
| 187 |
wss = $conf[:vnc_proxy_support_wss] |
|
| 188 |
#limit to yes,no options |
|
| 189 |
session[:vnc_wss] = (wss == true || wss == "yes" || wss == "only" ? |
|
| 190 |
"yes" : "no") |
|
| 191 |
end |
|
| 196 |
if user['TEMPLATE/LANG'] |
|
| 197 |
session[:lang] = user['TEMPLATE/LANG'] |
|
| 198 |
else |
|
| 199 |
session[:lang] = $conf[:lang] |
|
| 200 |
end |
|
| 192 | 201 | |
| 193 |
if user['TEMPLATE/TABLE_ORDER'] |
|
| 194 |
session[:table_order] = user['TEMPLATE/TABLE_ORDER'] |
|
| 195 |
else |
|
| 196 |
session[:table_order] = $conf[:table_order] |
|
| 197 |
end |
|
| 202 |
if user['TEMPLATE/VNC_WSS'] |
|
| 203 |
session[:vnc_wss] = user['TEMPLATE/VNC_WSS'] |
|
| 204 |
else |
|
| 205 |
wss = $conf[:vnc_proxy_support_wss] |
|
| 206 |
#limit to yes,no options |
|
| 207 |
session[:vnc_wss] = (wss == true || wss == "yes" || wss == "only" ? |
|
| 208 |
"yes" : "no") |
|
| 209 |
end |
|
| 198 | 210 | |
| 199 |
if user['TEMPLATE/DEFAULT_VIEW']
|
|
| 200 |
session[:default_view] = user['TEMPLATE/DEFAULT_VIEW']
|
|
| 201 |
else
|
|
| 202 |
session[:default_view] = $views_config.available_views(session[:user], session[:user_gname]).first
|
|
| 203 |
end
|
|
| 211 |
if user['TEMPLATE/TABLE_ORDER']
|
|
| 212 |
session[:table_order] = user['TEMPLATE/TABLE_ORDER']
|
|
| 213 |
else |
|
| 214 |
session[:table_order] = $conf[:table_order]
|
|
| 215 |
end |
|
| 204 | 216 | |
| 205 |
#end user options |
|
| 217 |
if user['TEMPLATE/DEFAULT_VIEW'] |
|
| 218 |
session[:default_view] = user['TEMPLATE/DEFAULT_VIEW'] |
|
| 219 |
else |
|
| 220 |
session[:default_view] = $views_config.available_views(session[:user], session[:user_gname]).first |
|
| 221 |
end |
|
| 206 | 222 | |
| 207 |
if params[:remember] == "true" |
|
| 208 |
env['rack.session.options'][:expire_after] = 30*60*60*24-1 |
|
| 209 |
end |
|
| 223 |
#end user options |
|
| 210 | 224 | |
| 211 |
return [204, ""] |
|
| 225 |
if params[:remember] == "true" |
|
| 226 |
env['rack.session.options'][:expire_after] = 30*60*60*24-1 |
|
| 212 | 227 |
end |
| 228 | ||
| 229 |
return [204, ""] |
|
| 213 | 230 |
end |
| 214 | 231 | |
| 215 | 232 |
def destroy_session |
| ... | ... | |
| 221 | 238 |
before do |
| 222 | 239 |
cache_control :no_store |
| 223 | 240 |
content_type 'application/json', :charset => 'utf-8' |
| 224 |
unless request.path=='/login' || request.path=='/' || request.path=='/vnc' |
|
| 241 |
unless request.path=='/login' || request.path=='/' || request.path=='/vnc' || (settings.config[:openid][:enabled] && (request.path == '/auth/open_id' || request.path == '/auth/open_id/callback' || request.path == '/auth/failure' || request.path == '/openid_info' || request.path == '/openid_info/return'))
|
|
| 225 | 242 |
halt 401 unless authorized? |
| 226 | 243 | |
| 227 | 244 |
@SunstoneServer = SunstoneServer.new( |
| ... | ... | |
| 257 | 274 |
############################################################################## |
| 258 | 275 |
get '/' do |
| 259 | 276 |
content_type 'text/html', :charset => 'utf-8' |
| 277 | ||
| 260 | 278 |
if !authorized? |
| 261 | 279 |
return erb :login |
| 262 | 280 |
end |
| ... | ... | |
| 449 | 467 |
request.body.read) |
| 450 | 468 |
end |
| 451 | 469 | |
| 452 |
Sinatra::Application.run! if(!defined?(WITH_RACKUP)) |
|
| 453 | 470 | |
| 471 |
Sinatra::Application.run! if(!defined?(WITH_RACKUP)) |
|
| src/sunstone/views/_login_standard_new.erb | ||
|---|---|---|
| 1 |
<form id="login_form"> |
|
| 2 |
<div class="content"> |
|
| 3 |
Username |
|
| 4 |
<input type="text" size="15" name="username" id="username" class="box"/> |
|
| 5 |
Password |
|
| 6 |
<input type="password" size="15" name="password" id="password" class="box"/> |
|
| 7 |
<br /> |
|
| 8 |
<input type="checkbox" id="check_remember" /> |
|
| 9 |
<label id="label_remember" for="check_remember">Keep me logged in</label> |
|
| 10 |
<input type="submit" id="login_btn" value="" /> |
|
| 11 |
<img src="images/ajax-loader.gif" alt="retrieving" id="login_spinner" /> |
|
| 12 |
</div> |
|
| 13 |
<div id="error_box" class="hidden alert-box alert" style="display: none"> |
|
| 14 |
<span id="error_message"></span> |
|
| 15 |
</div> |
|
| 16 |
</form> |
|
| src/sunstone/views/_openid.erb | ||
|---|---|---|
| 1 |
<%openid_error = params["openid_error"]?'style="margin-top: 100px"':'style="display: none"'%> |
|
| 2 | ||
| 3 |
<form id="openid_form" method="POST" action="/auth/open_id"> |
|
| 4 |
<div class="content" > |
|
| 5 |
<% if settings.config[:openid][:servers] && settings.config[:openid][:servers].any? %> |
|
| 6 |
OpenID server |
|
| 7 |
<br /> |
|
| 8 |
<select class="box" id="openid_prefix"> |
|
| 9 |
<% settings.config[:openid][:servers].each do |openid_server| %> |
|
| 10 |
<option><%=openid_server[:addr]%></option> |
|
| 11 |
<% end %> |
|
| 12 |
<% unless settings.config[:openid][:enforce_serverlist] %> |
|
| 13 |
<option>Other</option> |
|
| 14 |
<% end %> |
|
| 15 |
</select> |
|
| 16 |
<% end %> |
|
| 17 |
Identity |
|
| 18 |
<input type="text" size="15" id="openid_ident" class="box"/> |
|
| 19 |
<input type="hidden" name="openid_url" id="openid_url"> |
|
| 20 |
<br /> |
|
| 21 |
<input type="submit" id="openid_login_btn" value="" /> |
|
| 22 |
</div> |
|
| 23 |
<div id="openid_error_box" class="hidden alert-box alert" <%=openid_error%>> |
|
| 24 |
<span id="openid_error_message">OpenID error: <%=params["openid_error"]%></span> |
|
| 25 |
</div> |
|
| 26 |
</form> |
|
| src/sunstone/views/_openid_check.erb | ||
|---|---|---|
| 1 |
<!DOCTYPE html><head><script type="text/javascript"> |
|
| 2 |
parent.oidResponse(<%="'#{identifier}'"%>, <%=openid_error.to_s%>);
|
|
| 3 |
</script></head></html> |
|
| src/sunstone/views/login.erb | ||
|---|---|---|
| 5 | 5 |
<title>OpenNebula Sunstone Login</title> |
| 6 | 6 |
<link rel="stylesheet" type="text/css" href="css/login.css" /> |
| 7 | 7 |
<script type="text/javascript" src="vendor/4.0/jquery-1.9.1.min.js"></script> |
| 8 | ||
| 9 |
<script type="text/javascript" src="vendor/4.0/jquery-ui-1.10.3/js/jquery-ui-1.10.3.custom.min.js"></script> |
|
| 10 |
<link rel="stylesheet" type="text/css" href="vendor/4.0/jquery-ui-1.10.3/css/smoothness/jquery-ui-1.10.3.custom.min.css" /> |
|
| 11 | ||
| 12 |
<script type="text/javascript" src="js/openid.js"></script> |
|
| 8 | 13 |
<!--[if IE]> |
| 9 | 14 |
<script type="text/javascript" src="vendor/crypto-js/core-min.js"></script> |
| 10 | 15 |
<script type="text/javascript" src="vendor/crypto-js/enc-base64-min.js"></script> |
| ... | ... | |
| 12 | 17 | |
| 13 | 18 |
<script type="text/javascript" src="js/opennebula.js"></script> |
| 14 | 19 |
<script type="text/javascript" src="js/login.js"></script> |
| 15 | ||
| 16 | 20 |
</head> |
| 17 | 21 | |
| 18 | ||
| 19 | 22 |
<body> |
| 20 | ||
| 21 |
<% if settings.config[:auth] == "x509" %> |
|
| 22 |
<%= erb :_login_x509 %> |
|
| 23 |
<% unless settings.config[:openid][:enabled] %> |
|
| 24 |
<% if settings.config[:auth] == "x509" %> |
|
| 25 |
<%= erb :_login_x509 %> |
|
| 26 |
<% else %> |
|
| 27 |
<%= erb :_login_standard %> |
|
| 28 |
<% end %> |
|
| 23 | 29 |
<% else %> |
| 24 |
<%= erb :_login_standard %>
|
|
| 25 |
<% end %>
|
|
| 30 |
<div id="wrapper">
|
|
| 31 |
<div id="logo_sunstone" style="background: url(<%=$views_config.logo%>) no-repeat center; background-size: 355px;"></div>
|
|
| 26 | 32 | |
| 33 |
<div id="login_tabs"> |
|
| 34 |
<ul> |
|
| 35 |
<li><a href="#tab_auth_local">Local auth</a></li> |
|
| 36 |
<li><a href="#tab_auth_openid">OpenID</a></li> |
|
| 37 |
<li><a id="identities_link" href="#tab_auth_identities">Claimed Identities</a></li> |
|
| 38 |
</ul> |
|
| 39 |
<div id="tab_auth_local"> |
|
| 40 |
<%= erb :_login_standard_new %> |
|
| 41 |
</div> |
|
| 42 |
<div id="tab_auth_openid"> |
|
| 43 |
<%= erb :_openid %> |
|
| 44 |
</div> |
|
| 45 |
<div id="tab_auth_identities"> |
|
| 46 |
<span id="identities_none">No identities</span> |
|
| 47 |
<ul id="openid_serverlist"></ul> |
|
| 48 |
</div> |
|
| 49 |
</div> |
|
| 50 |
</div> |
|
| 51 |
<% end %> |
|
| 27 | 52 | |
| 28 | 53 |
<div id="footer" style="overflow:visible;"> |
| 29 | 54 |
<a href="http://opennebula.org" target="_blank">OpenNebula 4.4.0</a> by <a href="http://c12g.com" target="_blank">C12G Labs</a>. |