LDAP with sync rake task
This commit is contained in:
		
							parent
							
								
									7f05f21930
								
							
						
					
					
						commit
						d5a2de5476
					
				|  | @ -10,8 +10,16 @@ class Admin::ModuleAppsController < ApplicationController | |||
| 
 | ||||
| 
 | ||||
|   def reload_frontend_pages | ||||
|     @categories =[] | ||||
|     @module_app = ModuleApp.find(params[:id]) | ||||
|     @categories = @module_app.key.eql?('announcement') ? BulletinCategory.all : nil  | ||||
|     unless (@module_app.category.nil? rescue true) | ||||
|       @module_app.category.each do |category| | ||||
|         @categories << eval(category).all.entries | ||||
|       end | ||||
|       @categories.flatten! | ||||
|     else | ||||
|       @categories = nil | ||||
|     end | ||||
|     respond_to do |format| | ||||
|       format.js  {} | ||||
|     end | ||||
|  |  | |||
|  | @ -63,13 +63,16 @@ class Admin::PagePartsController < ApplicationController | |||
|   end | ||||
|    | ||||
|   def reload_widgets | ||||
|     @categories =[] | ||||
|     @module_app = ModuleApp.find(params[:id]) | ||||
|     case @module_app.key | ||||
|       when 'announcement' | ||||
|         @categories =  BulletinCategory.all | ||||
|       when 'web_resource' | ||||
|         @categories =  WebLinkCategory.all | ||||
| 
 | ||||
|     unless (@module_app.category.nil? rescue true) | ||||
|       @module_app.category.each do |category| | ||||
|         @categories << eval(category).all.entries | ||||
|       end | ||||
|       @categories.flatten! | ||||
|     end | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.js  {} | ||||
|     end | ||||
|  |  | |||
|  | @ -1,3 +1,3 @@ | |||
| class ObitWidgetController< OrbitFrontendComponentController | ||||
| class OrbitWidgetController< OrbitFrontendComponentController | ||||
| 
 | ||||
| end | ||||
|  | @ -5,14 +5,16 @@ class SessionsController < Devise::SessionsController | |||
| 
 | ||||
|   # POST /resource/sign_in | ||||
|   def create  | ||||
|     # login_password = params[:user][:password] | ||||
|     # login_uid = params[:user][:nccu_ldap_uid] | ||||
|     login_password = params[:user][:password] | ||||
|     login_uid = params[:user][:nccu_ldap_uid] | ||||
|     result = false | ||||
|     ldap = Net::LDAP.new | ||||
|     # ldap.port = '8001' | ||||
|     # ldap.host = '127.0.0.1' | ||||
|     ldap.port = '389'  | ||||
|     ldap.host = '140.119.166.23'  | ||||
|     ldap.port = '8001' | ||||
|     ldap.host = '127.0.0.1' | ||||
|     # ldap.port = '389'  | ||||
|     # ldap.host = '140.119.166.23'  | ||||
|     ldap_filter = "(uid=#{login_uid})" | ||||
|     ldap_base = 'ou=People,dc=nccu,dc=edu,dc=tw' | ||||
|     ldap.authenticate("cn=uccn,ou=profile,dc=nccu,dc=edu,dc=tw","nccu2ucc")  | ||||
|  | @ -24,9 +26,14 @@ class SessionsController < Devise::SessionsController | |||
|            # resource = env['warden'].authenticate!(:check_nccu_ldap) | ||||
|            # resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") | ||||
|            set_flash_message(:notice, :signed_in) if is_navigational_format? | ||||
|            resource_name = resource._type.downcase | ||||
|           sign_in(resource_name, resource) | ||||
|           respond_with resource, :location => redirect_location(resource_name, resource) | ||||
|            unless resource_name.nil? | ||||
|              resource_name = resource._type.downcase | ||||
|              sign_in(resource_name, resource) | ||||
|              respond_with resource, :location => redirect_location(resource_name, resource) | ||||
|            else | ||||
|              flash[:notice] = t('devise.failure.ldap_pass_but_account_not_in_orbit') | ||||
|              render :action => "new" | ||||
|            end | ||||
|         else | ||||
|           flash[:notice] = t('devise.failure.ldap_invalid') | ||||
|           render :action => "new"  | ||||
|  |  | |||
|  | @ -10,8 +10,8 @@ | |||
| 			<p class="alert hide">You need to sign in or sign up before continuing.</p> | ||||
| 			<div class="main"> | ||||
| 				<div class="control-group clear"> | ||||
| 					<%= f.label :email %> | ||||
| 					<%= f.email_field :email, :placeholder => t(:email), :style => "width: 330px;" %> | ||||
| 					<%= f.label :nccu_ldap_uid %> | ||||
| 					<%= f.text_field :nccu_ldap_uid, :placeholder => t("nccu"), :style => "width: 330px;" %> | ||||
| 					<span class="help-inline">Please correct the error</span> | ||||
| 				</div> | ||||
| 				<div class="control-group clear"> | ||||
|  |  | |||
|  | @ -67,7 +67,7 @@ | |||
| 									<li> | ||||
| 										<div class="input-prepend"> | ||||
| 											<span class="add-on"><i class="icon-user"></i></span> | ||||
| 											<%= f.text_field :email, :class => 'span2', :placeholder => t(:email), :size => 16 %> | ||||
| 											<%= f.text_field :nccu_ldap_uid, :class => 'span2', :placeholder => t('nccu_c.nccu_ldap_uid'), :size => 16 %> | ||||
| 										</div> | ||||
| 									</li> | ||||
| 									<li> | ||||
|  |  | |||
|  | @ -4,8 +4,8 @@ require 'mysql2' | |||
| 
 | ||||
| 
 | ||||
| mid_host = {  | ||||
|   :host => 'mruling.nccu.edu.tw',  #mruling.nccu.edu.tw or 127.0.0.1 | ||||
|   :port => 3006, #3306 or 8005 | ||||
|   :host => '127.0.0.1',  #mruling.nccu.edu.tw or 127.0.0.1 | ||||
|   :port => 8005, #3306 or 8005 | ||||
|   :username => "root", | ||||
|   :password => "a3G6yWd9", | ||||
|   :database => "RSS23_NCCU_MIDDLE", | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ en: | |||
|       unconfirmed: 'You have to confirm your account before continuing.' | ||||
|       ldap_invalid: 'Your LDAP account is invalid' | ||||
|       ldap_connection_failed: 'LDAP connection failed' | ||||
|       ldap_pass_but_account_not_in_orbit: 'LDAP account is not supported to sign up this site.' | ||||
|       locked: 'Your account is locked.' | ||||
|       invalid: 'Invalid email or password.' | ||||
|       invalid_token: 'Invalid authentication token.' | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ zh_tw: | |||
|       unconfirmed: '您的帳號需需要經過確認後,才能繼續。' | ||||
|       ldap_invalid: '您的LDAP帳號錯誤' | ||||
|       ldap_connection_failed: '與LDAP之間連線異常' | ||||
|       ldap_pass_but_account_not_in_orbit: '很抱歉,您的LDAP帳號並不支援在此網站登入' | ||||
|       locked: '您的帳號已被鎖定。' | ||||
|       invalid: 'Email 或密碼是無效的。' | ||||
|       invalid_token: '無效的認證代碼。' | ||||
|  |  | |||
|  | @ -117,6 +117,8 @@ en: | |||
|     no_layout: You don't have a layout | ||||
|     name: Name | ||||
|     nccu: NCCU Custom | ||||
|     nccu_c: | ||||
|       nccu_ldap_uid: NCCU LDAP Account | ||||
|     new_asset: New asset | ||||
|     new_component: New component | ||||
|     new_design: New design | ||||
|  |  | |||
|  | @ -77,6 +77,7 @@ zh_tw: | |||
|     description: 描述 | ||||
|     design:  網站版型 | ||||
|     disable_language: 禁用語言 | ||||
|     edit: 編輯 | ||||
|     editing_home: 編輯首頁 | ||||
|     editing_layout: 編輯樣板 | ||||
|     editing_link: 編輯連結 | ||||
|  | @ -95,7 +96,7 @@ zh_tw: | |||
|     intro: 簡介 | ||||
|     is_published: 被出版 | ||||
|     item: 網站架構 | ||||
|     key: 關鍵 | ||||
|     key: 鍵值 | ||||
|     language: 語言 | ||||
|     layout: 佈局 | ||||
|     layout_name: 佈局名字 | ||||
|  | @ -117,6 +118,8 @@ zh_tw: | |||
|     no_layout: 您沒有佈局 | ||||
|     name: 名稱 | ||||
|     nccu: 政大客制 | ||||
|     nccu_c: | ||||
|       nccu_ldap_uid: NCCU LDAP 帳號 | ||||
|     new_asset: 新增資產 | ||||
|     new_component: 新增元件 | ||||
|     new_design: 新設計 | ||||
|  |  | |||
|  | @ -1,32 +1,73 @@ | |||
| # encoding: utf-8  | ||||
| # require 'ruby-debug' | ||||
| 
 | ||||
| namespace :mid_site do | ||||
|   attr_from_mid = %w{nccu_id psn_nam ut_chi_m eml_adr off_tel_ext sta_num} | ||||
|   attr_from_mid = %w{nccu_id psn_nam ut_cod up_ut_cod eml_adr off_tel_ext sta_num} | ||||
|   officer_posgrp_code = %w{02 06 10 05} #from RSS2  | ||||
|   admin_role = nil | ||||
|   sub_role = nil | ||||
|    | ||||
|   task :sync => :environment do | ||||
|     users_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')})")     | ||||
|     info_profile = Info.first(conditions: {:key => 'profile'}) | ||||
|      | ||||
|     def find_or_create_sub_role(role,ut_query=[],key='') | ||||
|       sub_role = role.sub_roles.get_sub_role_from_key(key) | ||||
|       if sub_role.nil? | ||||
|         ut_data = ut_query.find{|ut_data| ut_data["ut_cod"] == key } | ||||
|         # debugger | ||||
|         i18n_for_new_sub_role = I18nVariable.create!( :document_class => 'SubRole', :key => key, :en => (ut_data["ut_eng_m"] rescue ''), :zh_tw => (ut_data["ut_chi_m"] rescue ''), :parent_id => role.i18n_variable.id ) | ||||
|         sub_role = role.sub_roles.create!(:key => key) | ||||
|         sub_role.i18n_variable = i18n_for_new_sub_role | ||||
|         sub_role.save! | ||||
|         p "Created SubRole(key: #{key}): EN: #{sub_role.i18n_variable.en}, CH: #{sub_role.i18n_variable.zh_tw} ParentRole(#{role.i18n_variable.key}): #{role.i18n_variable.en}" | ||||
|       end | ||||
|       sub_role | ||||
|     end | ||||
|      | ||||
|     users_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')})")  | ||||
|     ut_data_from_mid = MID_CLIENT.query("SELECT ut_odr, ut_cod, up_ut_cod, ut_chi_m, ut_eng_m FROM rss_paunit WHERE ut_tpe =  '1' AND ut_grp !=  '3' AND up_ut_cod !=  'F00' ORDER BY ut_odr, ut_cod")    | ||||
|     remote_list = users_from_mid.collect{|t| t["nccu_id"]} | ||||
|      | ||||
|     #remove delete user sho has been deleted at remote first | ||||
|     local_need_remove = User.all.collect{|t| t.nccu_id rescue nil}.uniq.delete_if {|x| x == nil} - remote_list | ||||
|     desc "Going to delete User with IDs: #{local_need_remove.inspect}" | ||||
|     local_need_remove.each{|user_id| (User.find user_id).destroy} | ||||
|     desc "Deletion completed! \n" | ||||
|      | ||||
|     #starting update user | ||||
|     users_from_mid.each do |mid_user| | ||||
|       local_user = User.find_or_initialize_by(:nccu_id => mid_user["nccu_id"]) | ||||
|       local_user.update_attributes(mid_user) | ||||
|     desc "Updating and Newing Users" | ||||
|     users_from_mid.each do |mid_user|       | ||||
|       ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] ==  mid_user["ut_cod"]} | ||||
|       up_ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] == mid_user["up_ut_cod"] } | ||||
|       local_user = User.find_or_initialize_by(:nccu_ldap_uid => mid_user["nccu_id"]) | ||||
|       AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name', :en => '', :zh_tw => (mid_user["psn_nam"].size <= 3? mid_user["psn_nam"][1..2]:mid_user["psn_nam"][2..-1]) ) | ||||
|       AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name', :en => '', :zh_tw => (mid_user["psn_nam"].size <= 3? mid_user["psn_nam"][0]:mid_user["psn_nam"][0..1]) ) | ||||
|        | ||||
|       user_model_mapper = Hash[:ut_cod => mid_user["ut_cod"] ,:up_ut_cod => mid_user["up_ut_cod"],:email => mid_user["eml_adr"],:off_tel_ext => mid_user["off_tel_ext"],:sta_num => mid_user["sta_num"]] | ||||
|       user_model_mapper[:admin] = false | ||||
|       local_user.update_attributes(user_model_mapper) | ||||
|        | ||||
|       i18n_department_admin = I18nVariable.find_or_create_by( :document_class => 'Role', :key => 'department_admin', :en => 'Department Admin', :zh_tw => '系所使用者' )       | ||||
|       local_user.role = Role.find_or_create_by( :key => "department_admin",:build_in => true) | ||||
|       local_user.role.i18n_variable = i18n_department_admin | ||||
|        | ||||
|        | ||||
|       unless local_user.ut_cod == local_user.up_ut_cod  #if the ut_cod has additions info for up ut | ||||
|         local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.up_ut_cod) | ||||
|       end | ||||
|        | ||||
|       local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.ut_cod) | ||||
|        | ||||
|       local_user.save! | ||||
|     end    | ||||
|   end | ||||
|    | ||||
|   task :install_admin => :before_instll_admin do | ||||
|     admins_nccu_id = '2772' | ||||
|     info_profile = Info.first(conditions: {:key => 'profile'}) | ||||
|      | ||||
|     # admin_role = Role.find_or_create_by( key: 'administrator') | ||||
|     # sub_role = admin_role.sub_roles.find_or_create_by(:key => 'computer_center') | ||||
|     info_profile = Info.first(conditions: {:key => 'profile'}) | ||||
|      | ||||
|     user_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')}) AND nccu_id = '#{admins_nccu_id}' limit 1")     | ||||
|     admin_at_mid =  user_from_mid.first | ||||
|  | @ -58,7 +99,7 @@ namespace :mid_site do | |||
|     local_user = User.find_or_initialize_by(:nccu_id => admin_at_mid["nccu_id"]) | ||||
|     local_user.update_attributes(:email => admin_at_mid["eml_adr"], :admin => true, :role_id => admin_role.id, :sub_role_ids => [sub_role.id]) | ||||
| 
 | ||||
|     AttributeValue.create( :user => local_user, :attribute_field => info_profile.attribute_fields[0], :key => 'first_name', :en => user_first_name, :zh_tw => user_first_name ) | ||||
|     AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name', :en => user_first_name, :zh_tw => user_first_name ) | ||||
|     AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name', :en => user_last_name, :zh_tw => user_last_name ) | ||||
|      | ||||
|   end | ||||
|  | @ -95,6 +136,10 @@ namespace :mid_site do | |||
|     i18ns.each  { |var|  var.destroy } | ||||
|   end | ||||
|    | ||||
|   task :clean_ldap_users => :environment do | ||||
|     User.where(:nccu_ldap_id.ne => nil ).each {|t| t.destroy} | ||||
|   end | ||||
|    | ||||
|   task :clean_admin_role_and_sub_role => :environment do | ||||
|     data = Role.any_in( key: ['administrator','computer_center']) | ||||
|     data.each  { |var|  var.destroy } | ||||
|  |  | |||
|  | @ -8,5 +8,6 @@ | |||
|   "create_date": "11-11-2011", | ||||
| 	"app_pages":  ["bulletins"], | ||||
| 	"widgets": ["bulletins", "bulletins_and_web_links"], | ||||
| 	"category": ["BulletinCategory"], | ||||
| 	"enable_frontend": true | ||||
| } | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| class Panel::Announcement::BackEnd::BulletinCategorysController < ApplicationController | ||||
|    | ||||
| class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendController | ||||
|   layout 'new_admin' | ||||
|    | ||||
|   def index | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| class Panel::Announcement::BackEnd::BulletinsController < ApplicationController | ||||
|    | ||||
| class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController | ||||
|   include AdminHelper | ||||
|   layout 'new_admin' | ||||
|    | ||||
|   before_filter :authenticate_user! | ||||
|  | @ -151,7 +151,6 @@ class Panel::Announcement::BackEnd::BulletinsController < ApplicationController | |||
|     elsif is_sub_manager? | ||||
|       @bulletin_categorys = BulletinCategory.authed_for_user(current_user,'submit_new') | ||||
|     end | ||||
| <<<<<<< HEAD | ||||
|   end | ||||
| 
 | ||||
|   def get_sorted_bulletins | ||||
|  | @ -196,8 +195,7 @@ class Panel::Announcement::BackEnd::BulletinsController < ApplicationController | |||
|         a.flatten! | ||||
|         a.uniq | ||||
|      end | ||||
| ======= | ||||
| >>>>>>> 26cd6951dba43b1f6eaf5056160309c5c77a8716 | ||||
| 
 | ||||
|   end | ||||
|    | ||||
|    | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::Announcement::FrontEnd::BulletinsController < ObitWidgetController | ||||
| class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController | ||||
|    | ||||
|   def initialize | ||||
|     super | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::Announcement::Widget::BulletinsController < ObitWidgetController | ||||
| class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController | ||||
| 
 | ||||
|   def initialize | ||||
|     super | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::NewBlog::Widget::PostsController < ObitWidgetController | ||||
| class Panel::NewBlog::Widget::PostsController < \" | ||||
|   # GET /posts | ||||
|   # GET /posts.xml | ||||
|   def index | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::PageContent::FrontEnd::PageContextsController < ObitWidgetController | ||||
| class Panel::PageContent::FrontEnd::PageContextsController < \" | ||||
|    | ||||
|   def initialize | ||||
|     super | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::WebResource::FrontEnd::WebLinksController < ObitWidgetController | ||||
| class Panel::WebResource::FrontEnd::WebLinksController < \" | ||||
|    | ||||
|   def initialize | ||||
|     super | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class Panel::WebResource::Widget::WebLinksController < ObitWidgetController | ||||
| class Panel::WebResource::Widget::WebLinksController < \" | ||||
| 
 | ||||
|   def initialize | ||||
|     super | ||||
|  |  | |||
|  | @ -8,5 +8,6 @@ | |||
|   "create_date": "11-11-2011", | ||||
| 	"app_pages":  ["web_links"], | ||||
| 	"widgets": ["web_links"], | ||||
| 	"category": ["WebLinkCategory"], | ||||
| 	"enable_frontend": true | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue