From 9d45df1c5a49e723ba8aae6ff71ac16594c5dca5 Mon Sep 17 00:00:00 2001 From: Spen Date: Thu, 26 Sep 2013 15:23:03 +0800 Subject: [PATCH] sso for ntu mb all sites Conflicts: app/assets/stylesheets/basic/global.css app/views/devise/sessions/new.html.erb app/views/layouts/devise.html.erb --- app/assets/stylesheets/basic/global.css | 6 +- .../stylesheets/basic/orbit_bar.css.erb | 77 ++++++++++++++++--- app/controllers/sessions_controller.rb | 40 ++++++++++ app/views/devise/sessions/new.html.erb | 73 +++++++++--------- app/views/layouts/_right_menu.html.erb | 5 ++ app/views/layouts/devise.html.erb | 4 + config/routes.rb | 8 ++ 7 files changed, 163 insertions(+), 50 deletions(-) create mode 100644 app/controllers/sessions_controller.rb diff --git a/app/assets/stylesheets/basic/global.css b/app/assets/stylesheets/basic/global.css index 1880808e..6be8050e 100644 --- a/app/assets/stylesheets/basic/global.css +++ b/app/assets/stylesheets/basic/global.css @@ -682,8 +682,8 @@ legend { margin-bottom: 25px; } .sign-in .btn { - padding: 4px 0; display: block; + padding: 4px 0; width: 100%; margin-bottom: 10px; } @@ -711,7 +711,7 @@ legend { .sign-in .checkbox { position: absolute; text-align: left; - bottom: 37px; + bottom: 47px; } .sign-in .switchboard { color: #08C; @@ -766,4 +766,4 @@ legend { #main-wrap .wrap-inner { padding: 20px 0; } -} \ No newline at end of file +} diff --git a/app/assets/stylesheets/basic/orbit_bar.css.erb b/app/assets/stylesheets/basic/orbit_bar.css.erb index c381c4dd..72b6c6eb 100644 --- a/app/assets/stylesheets/basic/orbit_bar.css.erb +++ b/app/assets/stylesheets/basic/orbit_bar.css.erb @@ -2,16 +2,17 @@ top: 0px; left: -10px; right: -10px; - height: 40px; z-index: 1041; position: fixed; margin-bottom: 0; + height: 40px; } #orbit-bar .orbitlogo { - width: 20px; - height: 20px; + width: 50px; + height: 40px; + padding: 0!important; background-size: 70%; - display: inline-block; + display: block; background-position: center; background-repeat: no-repeat; background-image: url(<%= asset_path 'orbit-logo.svg' %>); @@ -19,8 +20,23 @@ /* For Suck IE */ background-image: url(<%= asset_path 'orbit-logo.png' %>)\9; } +#orbit-bar .dropdown-menu li > a { + padding: 0 20px; + display: block; + height: 30px; + line-height: 30px; +} +#orbit-bar .dropdown-menu li i { + float: left; + display: inline-block; + margin-right: 5px; + line-height: 30px; + height: 100%; +} #orbit-bar.navbar .nav > li > a { color: #EEE; + padding: 0 15px; + display: block; text-shadow: 0 -1px 0 #000; border-right: 1px solid #363636; box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3); @@ -34,6 +50,11 @@ background-color: #0095CF; text-shadow: 0 -1px 0 #014380; } +#orbit-bar.navbar .nav > li > a > [class^="icon"], +#orbit-bar.navbar .nav > li > a > [class*=" icon"] { + line-height: 40px; + display: block; +} #orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle, #orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle, #orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle { @@ -41,9 +62,7 @@ text-shadow: 0 -1px 0 #014380; } #orbit-bar .navbar-inner { - height: 40px; border-width: 0; - min-height: 40px; background-color: #333333; -webkit-border-radius: 0px; -moz-border-radius: 0px; @@ -66,6 +85,10 @@ right: auto; bottom: auto; } +#orbit-bar .nav > li { + display: block; + line-height: 40px; +} #orbit-bar .nav [class^="icon"], #orbit-bar .nav [class*=" icon"] { font-size: 1.5em; @@ -92,17 +115,45 @@ #orbit-bar .modal .input-prepend { margin-bottom: 15px; } +#orbit-bar .modal .other-sign-in { + position: relative; + text-align: center; + margin-top: 20px; + margin-bottom: 30px; + padding-bottom: 20px; + border-bottom: 1px solid #EDEDED; +} +#orbit-bar .modal .other-sign-in .btn { + padding: 4px 0; + display: block; + margin-bottom: 5px; + width: 100%; +} +#orbit-bar .modal .other-sign-in p { + position: absolute; + width: 30px; + height: 30px; + background-color: #FFF; + padding: 0 10px; + margin-bottom: 0; + margin-left: -25px; + line-height: 30px; + left: 50%; + bottom: -15px; + font-size: 1.3em; + color: #B1B1B1; +} /*Search*/ #orbit-bar #search { margin-bottom: 0; position: relative; - padding: 8px 10px 0; + padding: 0 10px; border-right: 1px solid #363636; box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3); } #orbit-bar #search form { - margin-bottom: 8px; + margin: 8px 0; } #orbit-bar #search input[type="text"] { height: 14px; @@ -110,6 +161,7 @@ font-size: 13px; padding-left: 25px; padding-right: 25px; + display: block; -webkit-border-radius: 12px; -moz-border-radius: 12px; -o-border-radius: 12px; @@ -122,15 +174,16 @@ #orbit-bar #search .search-clear { position: absolute; color: #A3A3A3; - top: 14px; + top: 16px; } #orbit-bar #search .icon-search { - left: 13px; - top: 15px; + left: 15px; font-size: 1.2em; + width: 1.25em; + margin-top: 0; } #orbit-bar #search .search-clear { - right: 14px; + right: 13px; font-size: 1.3em; } #orbit-bar #search .search-clear:hover { diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 00000000..3e5a5ed3 --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,40 @@ +# encoding: utf-8 + +class SessionsController < Devise::SessionsController + prepend_before_filter :require_no_authentication, :only => [ :new, :create ] + + + def create + @site = Site.first + + private_key = OpenSSL::PKey::RSA.new(@site.private_key) + wresult = private_key.private_decrypt(request.params['wresult']) + + @ids = wresult.split("@") + + login_uid = @ids[0] + + resource = User.first(conditions:{user_id: login_uid}) + + if !resource.blank? + resource_name = resource.class.to_s.downcase + sign_in(resource_name, resource) + session[:user_id_type] = "myntumb" + redirect_to after_sign_in_path_for(resource) + else + flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員
Sorry, you don't have the account or authority to login. Please contact the website administrator." + redirect_to :root + end + end + + def destroy + @user_id_type = session[:user_id_type] + sign_out + if @user_id_type == "myntumb" + redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://management.ntu.edu.tw" + else + redirect_to root_path + end + end + +end \ No newline at end of file diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 1b77fce2..7722b9f4 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -1,59 +1,62 @@ -
+ + -
\ No newline at end of file diff --git a/app/views/layouts/_right_menu.html.erb b/app/views/layouts/_right_menu.html.erb index b4efb307..920babb9 100644 --- a/app/views/layouts/_right_menu.html.erb +++ b/app/views/layouts/_right_menu.html.erb @@ -56,6 +56,11 @@