devise_bushido_authenticatable 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/.gitignore +4 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +4 -20
  5. data/Gemfile.lock +151 -74
  6. data/README.md +4 -2
  7. data/Rakefile +1 -46
  8. data/app/controllers/devise/cas_sessions_controller.rb +59 -10
  9. data/app/views/devise/cas_sessions/unregistered.html.erb +150 -2
  10. data/app/views/devise/cas_sessions/unregistered.html.erb.old +2 -0
  11. data/devise_bushido_authenticatable.gemspec +28 -95
  12. data/lib/devise_bushido_authenticatable/version.rb +3 -0
  13. data/lib/devise_cas_authenticatable.rb +45 -3
  14. data/lib/devise_cas_authenticatable/missing_session_helpers.rb +9 -0
  15. data/lib/devise_cas_authenticatable/model.rb +5 -6
  16. data/lib/devise_cas_authenticatable/routes.rb +5 -3
  17. data/lib/devise_cas_authenticatable/single_sign_out.rb +22 -0
  18. data/lib/devise_cas_authenticatable/single_sign_out/session_store/active_record.rb +12 -0
  19. data/lib/devise_cas_authenticatable/single_sign_out/session_store/redis.rb +27 -0
  20. data/lib/devise_cas_authenticatable/single_sign_out/strategies.rb +58 -0
  21. data/lib/devise_cas_authenticatable/single_sign_out/strategies/base.rb +11 -0
  22. data/lib/devise_cas_authenticatable/single_sign_out/strategies/rails_cache.rb +31 -0
  23. data/lib/devise_cas_authenticatable/strategy.rb +15 -11
  24. data/spec/devise_cas_authenticatable/model_spec.rb +39 -0
  25. data/spec/routes_spec.rb +25 -7
  26. data/spec/scenario/app/models/user.rb +2 -2
  27. data/spec/scenario/config/environments/development.rb +0 -1
  28. data/spec/scenario/config/initializers/castronaut.rb +1 -0
  29. data/spec/scenario/config/initializers/session_store.rb +2 -2
  30. data/spec/scenario/db/migrate/20100401102949_create_tables.rb +3 -2
  31. data/spec/scenario/db/migrate/20111002012903_add_sessions_table.rb +16 -0
  32. data/spec/scenario/db/schema.rb +25 -0
  33. data/spec/spec_helper.rb +3 -2
  34. data/spec/strategy_spec.rb +20 -29
  35. metadata +118 -27
  36. data/VERSION +0 -1
  37. data/devise_cas_authenticatable.gemspec +0 -118
@@ -1,2 +1,150 @@
1
- <p>The user <%=h params[:username] %> is not registered with this site.
2
- Please <%= link_to "sign in using a different account", Devise.cas_client.logout_url(new_session_url(resource_name)) %>.</p>
1
+ <!doctype html>
2
+
3
+ <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
4
+ <!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
5
+ <!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
6
+ <!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
7
+ <!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
8
+ <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
9
+ <head>
10
+ <meta charset="utf-8">
11
+
12
+ <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
13
+ Remove this if you use the .htaccess -->
14
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
15
+
16
+ <title>Beta Signups | Bushido</title>
17
+ <meta name="description" content="">
18
+ <meta name="author" content="">
19
+
20
+ <!-- Mobile viewport optimized: j.mp/bplateviewport -->
21
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
22
+
23
+ <!-- Place favicon.ico & apple-touch-icon.png in the root of your domain and delete these references -->
24
+ <link rel="shortcut icon" href="/favicon.ico">
25
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png" >
26
+
27
+ <!--[if (!IE)|(gte IE 8)]><!-->
28
+ <link href="/packages/common-datauri.css?1307048615" media="all" rel="stylesheet" type="text/css" />
29
+ <!--<![endif]-->
30
+ <!--[if lte IE 7]>
31
+ <link href="/packages/common-mhtml.css?1307084302" media="all" rel="stylesheet" type="text/css" />
32
+ <![endif]-->
33
+ <!--[if (!IE)|(gte IE 8)]><!-->
34
+ <link href="/packages/print-datauri.css?1307048614" media="print" rel="stylesheet" type="text/css" />
35
+ <!--<![endif]-->
36
+ <!--[if lte IE 7]>
37
+ <link href="/packages/print-mhtml.css?1307084303" media="print" rel="stylesheet" type="text/css" />
38
+ <![endif]-->
39
+
40
+ <!--[if IE]>
41
+ <link href="/stylesheets/ie.css?1307048560" media="screen, projection" rel="stylesheet" type="text/css" />
42
+ <![endif]-->
43
+ <!--[if !IE 7]>
44
+ <style type="text/css">
45
+ #wrap {display:table;height:100%}
46
+ </style>
47
+ <![endif]-->
48
+ <meta name="csrf-param" content="authenticity_token"/>
49
+ <meta name="csrf-token" content="P8qAtaA1MPX7p14725fxZyM3sFbvx4bSjokKHFmIs04="/>
50
+
51
+ <!-- Uncomment if you are specifically targeting less enabled mobile browsers
52
+ <link rel="stylesheet" media="handheld" href="css/handheld.css?v=2"> -->
53
+ <style>
54
+ @charset "UTF-8";.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png?1307048560) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png?1307048560) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png?1307048560) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png?1307048560) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png?1307048560) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-widget-content .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-widget-header .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_222222_256x240.png?1307048560)}.ui-state-default .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_888888_256x240.png?1307048560)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_454545_256x240.png?1307048560)}.ui-state-active .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_454545_256x240.png?1307048560)}.ui-state-highlight .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png?1307048560)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png?1307048560)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px - 48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png?1307048560) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(../javascripts/vendor/jquery-ui-1.8.12.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png?1307048560) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block;background-image:url(data:)}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-progressbar{height:2em;text-align:left}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.terminal .clipboard{position:absolute;bottom:0;left:0;opacity:.01;filter:alpha(opacity = .01);filter:alpha(opacity=0.01)}.cmd>.clipboard{position:fixed}.terminal{padding:10px;position:relative;overflow:hidden}.cmd{padding:0;margin:0;height:1.3em}.terminal .terminal-output div{display:block}.terminal,.terminal .terminal-output,.terminal .terminal-output div,.terminal .terminal-output div div,.cmd,.terminal .cmd span,.terminal .cmd div{font-family:monospace;color:#aaa;background-color:#000;font-size:12px}.terminal .cmd span{float:left}.terminal div::selection,.terminal span::selection{background-color:#aaa;color:#000}.terminal .cmd span.inverted{background-color:#aaa;color:#000}.terminal div::-moz-selection,.terminal span::-moz-selection{background-color:#aaa;color:#000}.terminal .terminal-output div.error,.terminal .terminal-output div.error div{color:red}.tilda{position:fixed;top:0;left:0;width:100%;z-index:1100}.inputContainer{position:relative;float:left}.formError{position:absolute;top:300px;left:300px;display:block;z-index:5000;cursor:pointer}.ajaxSubmit{padding:20px;background:#55ea55;border:1px solid #999;display:none}.formError .formErrorContent{width:100%;background:#ee0101;position:relative;z-index:5001;color:#fff;width:150px;font-family:tahoma;font-size:11px;border:2px solid #ddd;box-shadow:0 0 6px #000;-moz-box-shadow:0 0 6px #000;-webkit-box-shadow:0 0 6px #000;padding:4px 10px 4px 10px;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px}.greenPopup .formErrorContent{background:#33be40}.blackPopup .formErrorContent{background:#393939;color:#FFF}.formError .formErrorArrow{width:15px;margin:-2px 0 0 13px;position:relative;z-index:5006}.formError .formErrorArrowBottom{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;margin:0 0 0 12px;top:2px}.formError .formErrorArrow div{border-left:2px solid #ddd;border-right:2px solid #ddd;box-shadow:0 2px 3px #444;-moz-box-shadow:0 2px 3px #444;-webkit-box-shadow:0 2px 3px #444;font-size:0;height:1px;background:#ee0101;margin:0 auto;line-height:0;font-size:0;display:block}.formError .formErrorArrowBottom div{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.greenPopup .formErrorArrow div{background:#33be40}.blackPopup .formErrorArrow div{background:#393939;color:#FFF}.formError .formErrorArrow .line10{width:15px;border:none}.formError .formErrorArrow .line9{width:13px;border:none}.formError .formErrorArrow .line8{width:11px}.formError .formErrorArrow .line7{width:9px}.formError .formErrorArrow .line6{width:7px}.formError .formErrorArrow .line5{width:5px}.formError .formErrorArrow .line4{width:3px}.formError .formErrorArrow .line3{width:1px;border-left:2px solid #ddd;border-right:2px solid #ddd;border-bottom:0 solid #ddd}.formError .formErrorArrow .line2{width:3px;border:none;background:#ddd}.formError .formErrorArrow .line1{width:1px;border:none;background:#ddd}#facebox{position:absolute;top:0;left:0;z-index:100;text-align:left}#facebox .popup{position:relative;border:3px solid rgba(0,0,0,0);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 0 18px rgba(0,0,0,0.4);-moz-box-shadow:0 0 18px rgba(0,0,0,0.4);box-shadow:0 0 18px rgba(0,0,0,0.4)}#facebox .content{display:table;width:370px;padding:10px;background:#fff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#facebox .content>p:first-child{margin-top:0}#facebox .content>p:last-child{margin-bottom:0}#facebox .close{position:absolute;top:5px;right:5px;padding:2px;background:#fff}#facebox .close img{opacity:.3}#facebox .close:hover img{opacity:1.0}#facebox .loading{text-align:center}#facebox .image{text-align:center}#facebox img{border:0;margin:0}#facebox_overlay{position:fixed;top:0;left:0;height:100%;width:100%}.facebox_hide{z-index:-100}.facebox_overlayBG{background-color:#000;z-index:99}html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:before,blockquote:after{content:"";content:none}q:before,q:after{content:"";content:none}ins{background-color:#ff9;color:black;text-decoration:none}mark{background-color:#ff9;color:black;font-style:italic;font-weight:bold}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}body{font:13px/1.231 sans-serif;*font-size:small}select,input,textarea,button{font:99% sans-serif}pre,code,kbd,samp{font-family:monospace,sans-serif}html{overflow-y:scroll}a:hover,a:active{outline:none}ul{margin-left:2em}ol{margin-left:2em;list-style-type:decimal}nav ul,nav li{margin:0;list-style:none;list-style-image:none}small{font-size:85%}strong,th{font-weight:bold}td{vertical-align:top}sub{font-size:75%;line-height:0;position:relative}sup{font-size:75%;line-height:0;position:relative;top:-0.5em}sub{bottom:-0.25em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word;padding:15px}textarea{overflow:auto}.ie6 legend,.ie7 legend{margin-left:-7px}input[type="radio"]{vertical-align:text-bottom}input[type="checkbox"]{vertical-align:bottom}.ie7 input[type="checkbox"]{vertical-align:baseline}.ie6 input{vertical-align:text-bottom}label{cursor:pointer}input[type="button"],input[type="submit"],input[type="image"]{cursor:pointer}button{cursor:pointer;margin:0}input,select,textarea{margin:0}input:invalid,textarea:invalid{border-radius:1px;-moz-box-shadow:0 0 5px red;-webkit-box-shadow:0 0 5px red;box-shadow:0 0 5px red}.no-boxshadow input:invalid,.no-boxshadow textarea:invalid{background-color:#f0dddd}button{width:auto;overflow:visible}.ie7 img{-ms-interpolation-mode:bicubic}body,select,input,textarea{color:#444}.ir{display:block;text-indent:-999em;overflow:hidden;background-repeat:no-repeat;text-align:left;direction:ltr}.hidden{display:none;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix{zoom:1}.clearfix:before{content:"\0020";display:block;height:0;overflow:hidden}.clearfix:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}@media print{*{background:transparent!important;color:black!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a{color:#444!important;text-decoration:underline}a:visited{color:#444!important;text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after{content:""}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.fancy-button-reset-base-class,button,.button,button.hot,.button.hot,button.cool,.button.cool{font-family:"Lucida Grande",Lucida,Arial,sans-serif;background:url(../images/button_bg.png) repeat-x bottom left;margin:0;width:auto;overflow:visible;display:inline-block;cursor:pointer;text-decoration:none;border-style:solid;font-weight:bold}.fancy-button-reset-base-class::-moz-focus-inner,button::-moz-focus-inner,.button::-moz-focus-inner,button.hot::-moz-focus-inner,.button.hot::-moz-focus-inner,button.cool::-moz-focus-inner,.button.cool::-moz-focus-inner{border:none;padding:0}.fancy-button-reset-base-class:focus,button:focus,.button:focus,button.hot:focus,.button.hot:focus,button.cool:focus,.button.cool:focus{outline:none}.l{float:left}.r{float:right}.alpha{margin-left:0!important;padding-left:0!important}.omega{margin-right:0!important;padding-right:0!important}button,.button{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#444;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#989898),color-stop(10%,#6a6a6a),color-stop(50%,#3d3d3d),color-stop(50%,#353535),color-stop(100%,#4f4f4f));background-image:-moz-linear-gradient(top,#989898 0,#6a6a6a 10%,#3d3d3d 50%,#353535 50%,#4f4f4f 100%);background-image:linear-gradient(top,#989898 0,#6a6a6a 10%,#3d3d3d 50%,#353535 50%,#4f4f4f 100%);border-color:#1e1e1e;text-shadow:#040404 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.27) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box;font-weight:normal!important;font-size:1em!important}button,button:visited,.button,.button:visited{color:white}button:hover,button:focus,.button:hover,.button:focus{background-color:#3c3c3c;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#909090),color-stop(10%,#626262),color-stop(50%,#353535),color-stop(50%,#2d2d2d),color-stop(100%,#474747));background-image:-moz-linear-gradient(top,#909090 0,#626262 10%,#353535 50%,#2d2d2d 50%,#474747 100%);background-image:linear-gradient(top,#909090 0,#626262 10%,#353535 50%,#2d2d2d 50%,#474747 100%);border-color:#161616;text-shadow:black 0 1px 1px}button:hover,button:hover:visited,button:focus,button:focus:visited,.button:hover,.button:hover:visited,.button:focus,.button:focus:visited{color:white}button:active,.button:active{background-color:#353535;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#353535),color-stop(30%,#3a3a3a),color-stop(50%,#303030),color-stop(50%,#292929),color-stop(100%,#4a4a4a));background-image:-moz-linear-gradient(top,#353535 0,#3a3a3a 30%,#303030 50%,#292929 50%,#4a4a4a 100%);background-image:linear-gradient(top,#353535 0,#3a3a3a 30%,#303030 50%,#292929 50%,#4a4a4a 100%);border-color:#0f0f0f;text-shadow:black 0 -1px -1px;-moz-box-shadow:#1e1e1e 0 .08em .1em 1px inset;-webkit-box-shadow:#1e1e1e 0 .08em .1em 1px inset;-o-box-shadow:#1e1e1e 0 .08em .1em 1px inset;box-shadow:#1e1e1e 0 .08em .1em 1px inset}button:active,button:active:visited,.button:active,.button:active:visited{color:white}button.hot,.button.hot{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#ff1c1c;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#f8cbcb),color-stop(10%,#ed7a7a),color-stop(50%,#e22929),color-stop(50%,#de1e1e),color-stop(100%,#e64949));background-image:-moz-linear-gradient(top,#f8cbcb 0,#ed7a7a 10%,#e22929 50%,#de1e1e 50%,#e64949 100%);background-image:linear-gradient(top,#f8cbcb 0,#ed7a7a 10%,#e22929 50%,#de1e1e 50%,#e64949 100%);border-color:#b61919;text-shadow:#9c0000 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.55) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}button.hot,button.hot:visited,.button.hot,.button.hot:visited{color:white}button.hot:hover,button.hot:focus,.button.hot:hover,.button.hot:focus{background-color:#ff0d0d;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#f6bebe),color-stop(10%,#eb6d6d),color-stop(50%,#de1e1e),color-stop(50%,#d11c1c),color-stop(100%,#e53b3b));background-image:-moz-linear-gradient(top,#f6bebe 0,#eb6d6d 10%,#de1e1e 50%,#d11c1c 50%,#e53b3b 100%);background-image:linear-gradient(top,#f6bebe 0,#eb6d6d 10%,#de1e1e 50%,#d11c1c 50%,#e53b3b 100%);border-color:#a91717;text-shadow:#8d0000 0 1px 1px}button.hot:hover,button.hot:hover:visited,button.hot:focus,button.hot:focus:visited,.button.hot:hover,.button.hot:hover:visited,.button.hot:focus,.button.hot:focus:visited{color:white}button.hot:active,.button.hot:active{background-color:#fc0000;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#de1e1e),color-stop(30%,#e22424),color-stop(50%,#d51c1c),color-stop(50%,#c71b1b),color-stop(100%,#e53f3f));background-image:-moz-linear-gradient(top,#de1e1e 0,#e22424 30%,#d51c1c 50%,#c71b1b 50%,#e53f3f 100%);background-image:linear-gradient(top,#de1e1e 0,#e22424 30%,#d51c1c 50%,#c71b1b 50%,#e53f3f 100%);border-color:#9b1515;text-shadow:#7d0000 0 -1px -1px;-moz-box-shadow:#b61919 0 .08em .1em 1px inset;-webkit-box-shadow:#b61919 0 .08em .1em 1px inset;-o-box-shadow:#b61919 0 .08em .1em 1px inset;box-shadow:#b61919 0 .08em .1em 1px inset}button.hot:active,button.hot:active:visited,.button.hot:active,.button.hot:active:visited{color:white}button.cool,.button.cool{-moz-border-radius:6px;-webkit-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;font-size:18px;line-height:1.2em;padding:.3em 1em;border-width:1px;background-color:#0d225d;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#6075b3),color-stop(10%,#3b4c7c),color-stop(50%,#1d253d),color-stop(50%,#181f33),color-stop(100%,#283456));background-image:-moz-linear-gradient(top,#6075b3 0,#3b4c7c 10%,#1d253d 50%,#181f33 50%,#283456 100%);background-image:linear-gradient(top,#6075b3 0,#3b4c7c 10%,#1d253d 50%,#181f33 50%,#283456 100%);border-color:#090c14;text-shadow:black 0 1px 1px;-moz-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-webkit-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-o-box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;box-shadow:rgba(255,255,255,0.21) 0 0 .1em 1px inset;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}button.cool,button.cool:visited,.button.cool,.button.cool:visited{color:white}button.cool:hover,button.cool:focus,.button.cool:hover,.button.cool:focus{background-color:#0b1e50;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#546daf),color-stop(10%,#354672),color-stop(50%,#181f33),color-stop(50%,#131929),color-stop(100%,#232e4c));background-image:-moz-linear-gradient(top,#546daf 0,#354672 10%,#181f33 50%,#131929 50%,#232e4c 100%);background-image:linear-gradient(top,#546daf 0,#354672 10%,#181f33 50%,#131929 50%,#232e4c 100%);border-color:#05060a;text-shadow:black 0 1px 1px}button.cool:hover,button.cool:hover:visited,button.cool:focus,button.cool:focus:visited,.button.cool:hover,.button.cool:hover:visited,.button.cool:focus,.button.cool:focus:visited{color:white}button.cool:active,.button.cool:active{background-color:#091842;background-image:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0%,#181f33),color-stop(30%,#1b233a),color-stop(50%,#141a2c),color-stop(50%,#101421),color-stop(100%,#252f4f));background-image:-moz-linear-gradient(top,#181f33 0,#1b233a 30%,#141a2c 50%,#101421 50%,#252f4f 100%);background-image:linear-gradient(top,#181f33 0,#1b233a 30%,#141a2c 50%,#101421 50%,#252f4f 100%);border-color:black;text-shadow:black 0 -1px -1px;-moz-box-shadow:#090c14 0 .08em .1em 1px inset;-webkit-box-shadow:#090c14 0 .08em .1em 1px inset;-o-box-shadow:#090c14 0 .08em .1em 1px inset;box-shadow:#090c14 0 .08em .1em 1px inset}button.cool:active,button.cool:active:visited,.button.cool:active,.button.cool:active:visited{color:white}input[type="text"],.text,.password,input[type="password"]{padding:7px;border:2px solid #bcc3c8;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;color:#222c48;background:url(/images/input-sliver.png?1307048560) repeat-x}.app_cell{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;background:#f5f6f2;width:910px;height:90px;margin:20px auto 0 auto;padding:10px}.app_cell .delete_app{color:#e43737;text-decoration:none;text-shadow:none!important}.app_cell .delete_app:hover{text-decoration:underline}.app_details{margin-left:10px;color:#222548;text-shadow:2px 2px 0 white}.app_details h2{font-size:1.6em}.app_details h2 a{color:#222548;text-decoration:none}.app_details p{font-size:1.2em}.app_control{display:block;width:60px;text-align:center;margin-right:10px;text-decoration:none;color:#e43737}.app_control:hover .app_control_caption{text-decoration:underline}.app_control_caption{padding-top:5px}.control_frame{display:block;clear:both;width:60px;height:55px;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;line-height:60px;text-align:center;padding-top:15px;margin-bottom:5px;background:#e1e3e0}.control_icon{display:block;height:40px;width:40px;margin:0 auto;background:#e1e3e0 url(/images/actions-icons.png?1307048560) no-repeat}.logs_icon{background-position:0 -80px}.update_icon{background-position:0 -40px}.console_icon{background-position:0 -120px}.url-box{color:#002060;font-size:1.3em;padding:10px;width:434px;border:2px solid #002060;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}.url-form{float:left}.url-holder{padding-bottom:15px}.url-holder h2{font-size:1.3em;font-weight:bold;margin:10px 0;color:#002060;float:left;clear:right;padding-left:10px}.url-holder h3{font-size:1.4em;margin-bottom:10px}.title{margin-bottom:20px}.title h1{font-size:1.4em;font-weight:bold;color:#c1af8a}.error-logs{height:200px;border:1px solid;overflow:scroll;padding:10px}.progress{display:none;width:530px;height:68px;font-size:1.3em;border-radius:16px;-moz-border-radius:16px;-webkit-border-radius:16px}.progress-percent{float:left;margin:0 15px}.throbber-holder{float:left;margin-right:15px;position:relative;top:10px}.progress-overlay{position:absolute;width:0;height:68px;opacity:.4;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.08,#002060),color-stop(0.54,#364363));background-image:-moz-linear-gradient(center bottom,#002060 8%,#364363 54%)}.progress-box{position:relative;line-height:68px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.05,#323232),color-stop(0.1,#616161),color-stop(0.6,#c8c8c8),color-stop(0.8,#d6d6d6),color-stop(0.9,#e6e6e6));background-image:-moz-linear-gradient(center bottom,#323232 5%,#616161 10%,#c8c8c8 60%,#d6d6d6 80%,#e6e6e6 90%);color:#333}.progress-todo-list{list-style:none;position:absolute;left:65px}.showcase_app{float:left;display:block;width:279px;height:129px;padding:11px;background:#f5f6f2;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;text-decoration:none}.showcase_app:hover span{text-decoration:underline}.showcase_app h3{color:#e43737;font-size:1.5em}.showcase_app cite{color:#222c48}.showcase_images{float:left;margin-right:10px}.showcase_text{width:180px}#customizer{background:white;padding:30px;width:520px}#customizer h2{color:#7b8287;font-size:1.5em}#customizer ul{border:1px solid #bcc3c8;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;display:block;list-style-type:none;margin-left:0}#customizer ul li{border-bottom:1px solid #bcc3c8;padding:7px}#customizer p.domain_widget{padding-top:11px}#customizer .domain_input{width:388px;margin-right:4px}#variable_controls{padding-top:28px}.save_strip{height:40px;background:#f5f6f2;width:520px;text-align:center;padding:10px}body.logs_show,body.logs_index,body.console_index{background:white!important}body.logs_show #main,body.logs_index #main,body.console_index #main{padding:0;margin:0}body.logs_show .cursor,body.logs_index .cursor,body.console_index .cursor{background:#0e1e3a!important}.log_header{position:fixed;z-index:9000;width:100%}.log_body{padding-top:60px;font-family:sans-serif,monofont}.console_input{width:100%;display:inline}.terminal .clipboard{position:absolute;bottom:0;left:0;opacity:.01;filter:alpha(opacity=0.01);filter:alpha(opacity=0.01)}.cmd>.clipboard{position:fixed}.terminal{padding-left:10px;padding-right:10px;position:relative;overflow:hidden}.cmd{padding:0;margin:0;height:1.3em}.terminal{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output div{display:block;font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .terminal-output div div{font-family:monospace;color:black;background-color:white;font-size:12px}.cmd{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .cmd span,.terminal .cmd div{font-family:monospace;color:black;background-color:white;font-size:12px}.terminal .cmd span{float:left}.terminal div::selection,.terminal span::selection,.terminal .cmd span.inverted,.terminal div::-moz-selection,.terminal span::-moz-selection{background-color:black;color:white}.terminal .terminal-output div.error{color:red}.terminal .terminal-output div.error div{color:red}.tilda{position:fixed;top:0;left:0;width:100%;z-index:1100}.log_info{display:block;height:50px;line-height:50px;padding-left:15px}.log_controls{height:50px;line-height:50px}.sessions-holder{background:#f5f6f2;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;padding:30px;width:310px}.sessions-holder a{text-decoration:none;color:#e43737}.sessions-holder a:hover{text-decoration:underline}.sessions-holder p{padding-bottom:20px}.sessions-holder label{color:#7b8287;font-weight:bold;text-shadow:0 0 2px white}.sessions-holder input[type="text"],.sessions-holder input[type="password"]{margin-top:8px}.sessions_title{color:#222c48;padding-bottom:15px}.sessions_title a{text-decoration:none;color:#e43737}.sessions_title a:hover{text-decoration:underline}html{height:100%}body{height:100%;background:#eeeded url(/images/pattern-bg.png?1307048560) repeat;color:#222548}body>div#root{height:auto;min-height:100%}div#root{height:100%;width:990px;margin:0 auto;background:white;-moz-box-shadow:0 0 10px #888;-webkit-box-shadow:0 0 10px #888;box-shadow:0 0 10px #888}.main_header{display:block;height:100px}#footer{display:block;background:#222c48 url(/images/footer-bg.png?1307048560);width:960px;margin:0 auto;height:70px;margin-top:-70px!important;color:white;padding:15px}#footer ul{float:left;display:block;margin-right:72px;list-style-type:none;margin-left:0}#main{display:block;padding-bottom:100px;background:white}#content{padding:15px}.main_header,.log_header{height:50px;background:#222c48;border-bottom:5px solid #e43737}.main_header a,.log_header a{text-decoration:none;color:#e43737}.main_header a.logo,.log_header a.logo{color:white;padding:15px 0 0 15px}.main_header span,.log_header span{color:white}.main_site_nav a{display:block;height:50px;float:left;padding-right:25px;text-shadow:0 0 3px black;text-align:center;margin-top:17px}.main_site_nav span{color:#e43737!important}.main_site_nav a.hot .flag{display:block;border-color:transparent transparent #e43737 transparent;border-style:solid;border-width:9px;margin:0 auto;width:0;height:0}#auth_links{padding:16px 15px 0}#auth_links .flag{display:block;border-color:white transparent transparent transparent;border-style:solid;border-width:7px;float:right;margin:5px 0 0 5px;width:0;height:0}.section_header{background:#f5f6f2 url(/images/title-bg.png?1307048560);padding:30px 15px}.section_logo{height:66px;height:66px;padding-left:65px}.section_title{color:#e43737;line-height:66px;font-size:2.8em;display:block;height:66px;padding-left:15px}.section_logo{background:url(/images/title-icons.png?1307048560)}.apps{background-position:0 -65px}.sign_up{background-position:0 -130px}.section_text{height:66px;line-height:66px;font-size:1.3em;color:#222c48}.section_text a{color:#e43737;text-decoration:none}.section_text a:hover{text-decoration:underline}.divider{height:40px;width:960px;padding:0 15px;line-height:40px}.divider label{color:#7b8287;text-shadow:0 0 3px white}.divider input[type="text"]{margin-left:15px;height:22px;width:120px;padding:0 10px;border:2px solid #7b8287;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}.divider.dark{background:#bbc2c7;-moz-box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888;-webkit-box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888;box-shadow:inset 0 2px 5px #888,inset 0 -2px 5px #888}.bushi_box{background:#f5f6f2;@rounded_corners(10px);padding:30px;font-weight:bold;color:#7b8287}.bushi_box a{color:#e43737;text-decoration:none}.bushi_box a:hover{text-decoration:underline}#auth_links{display:block;background:#222c48}#auth_links nav{display:none;padding:10px 0;background:#222c48}#auth_links.open{-moz-box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;-webkit-box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;box-shadow:inset 0 5px 5px #888,0px 5px 5px #888;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}
55
+ </style>
56
+ </head>
57
+
58
+ <body class="static_splash">
59
+
60
+ <div id="root">
61
+ <div class="clearfix main_header">
62
+ <a href="http://bushi.do" class="logo l clearfix">
63
+ <img src="http://bushi.do/images/header-logo.png" class="l" style="position:relative;bottom:10px;">
64
+ <img src="http://bushi.do/images/logo.png" height="20" width="93" alt="bushido" class="l logo_text" style="margin-left:10px;">
65
+ </a>
66
+ </div>
67
+
68
+ <section id="main">
69
+ <h1>The user <%=h params[:username] %> is not registered with this site.
70
+ Please <%= link_to "sign in using a different account", Devise.cas_client.logout_url(new_session_path(resource_name)) %>.</h1>
71
+ </section>
72
+
73
+ </div> <!-- end of #ro0t -->
74
+
75
+ <footer id="footer">
76
+ <div class="main_footer clearfix">
77
+ <!-- <div class="footer_disclaimer">
78
+
79
+ </div> -->
80
+ </div>
81
+
82
+ </footer>
83
+ <!-- Javascript at the bottom for fast page loading -->
84
+
85
+ <!-- Grab Google CDNs jQuery. fall back to local if necessary -->
86
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
87
+
88
+ <script type="text/javascript">
89
+ (function () {
90
+ var $name = $("#name");
91
+ var $url = $("#url");
92
+ var $source = $("#source");
93
+ var $message = $("#message");
94
+
95
+ var bushidoName = location.hostname.split(".bushi.do")[0];
96
+
97
+ $name.text("Your app's Bushido name is '" + bushidoName + "'.");
98
+ $url.html("The full address for the app is <a href='http://" + bushidoName + ".bushi.do/'>http://" + bushidoName + ".bushi.do/</a>");
99
+
100
+ var issueAppCommand = function(command, cb) {
101
+ //console.log("Updating app status for " + bushidoName);
102
+ $.ajax({
103
+ url: "http://bushi.do/apps/" + bushidoName + "/command",
104
+ type: "get",
105
+ dataType: "jsonp",
106
+ data: {
107
+ command: command
108
+ },
109
+ error: function(err, status, xhr){
110
+ //console.log(err, status, xhr);
111
+ return cb(err);
112
+ },
113
+ success: function(data, status, xhr){
114
+ return cb(null, data);
115
+ }
116
+ });
117
+ };
118
+
119
+ var checkIntervalHandle;
120
+
121
+ var updateAppStatus = function() {
122
+ issueAppCommand("status", function(err, data) {
123
+ if (err) {
124
+ $message.html("We're experiencing some difficulty right now. Please try refreshing. If that doesn't work, shoot us an email at support@bushi.do and we'll get on it as soon as we can.");
125
+ } else if ("stopped" === data.status) {
126
+ issueAppCommand("start", function() {});
127
+ } else {
128
+ $message.html("Your app is currently <strong>" + data.status + "</strong>");
129
+ $source.html("This app was deployed from " + data.app.app.url);
130
+
131
+ if ("running" === data.status) {
132
+ window.location = window.location;
133
+ clearInterval(checkIntervalHandle);
134
+ }
135
+ }
136
+ });
137
+ };
138
+
139
+ updateAppStatus();
140
+ checkIntervalHandle = setInterval(updateAppStatus, 1000);
141
+ })();
142
+ </script>
143
+
144
+ <!--[if lt IE 7 ]>
145
+ <script src="js/libs/dd_belatedpng.js"></script>
146
+ <script> DD_belatedPNG.fix('img, .png_bg'); //fix any <img> or .png_bg background-images </script>
147
+ <![endif]-->y
148
+ </body>
149
+ </html>
150
+
@@ -0,0 +1,2 @@
1
+ <p>The user <%=h params[:username] %> is not registered with this site.
2
+ Please <%= link_to "sign in using a different account", Devise.cas_client.logout_url(new_session_url(resource_name)) %>.</p>
@@ -1,103 +1,36 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "devise_bushido_authenticatable/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{devise_bushido_authenticatable}
8
- s.version = "1.0.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Akash Manohar J", "Sean Grove", "Didier Lafforgue"]
12
- s.date = %q{2011-08-25}
6
+ s.name = "devise_bushido_authenticatable"
7
+ s.version = DeviseBushidoAuthenticatable::VERSION
8
+ s.authors = ["Akash Manohar J", "Sean Grove", "Didier Lafforgue"]
9
+ s.email = "s@bushi.do"
10
+ s.homepage = "http://github.com/bushido/bushido_cas_authenticatable"
11
+ s.summary = %q{Bushido SSO authentication module for Devise}
13
12
  s.description = %q{Bushido SSO authentication module for Devise. A slight variant of the excellent work from Nat Budlin on devise_cas_authenticatable.}
14
- s.email = %q{s@bushi.do}
15
- s.extra_rdoc_files = [
16
- "README.md"
17
- ]
18
- s.files = [
19
- ".project",
20
- "Gemfile",
21
- "Gemfile.lock",
22
- "README.md",
23
- "Rakefile",
24
- "VERSION",
25
- "app/controllers/devise/cas_sessions_controller.rb",
26
- "app/views/devise/cas_sessions/new.html.erb",
27
- "app/views/devise/cas_sessions/unregistered.html.erb",
28
- "devise_bushido_authenticatable.gemspec",
29
- "devise_cas_authenticatable.gemspec",
30
- "lib/devise_bushido_authenticatable.rb",
31
- "lib/devise_cas_authenticatable.rb",
32
- "lib/devise_cas_authenticatable/exceptions.rb",
33
- "lib/devise_cas_authenticatable/model.rb",
34
- "lib/devise_cas_authenticatable/routes.rb",
35
- "lib/devise_cas_authenticatable/schema.rb",
36
- "lib/devise_cas_authenticatable/strategy.rb",
37
- "rails/init.rb",
38
- "spec/routes_spec.rb",
39
- "spec/scenario/.gitignore",
40
- "spec/scenario/app/controllers/application_controller.rb",
41
- "spec/scenario/app/controllers/home_controller.rb",
42
- "spec/scenario/app/models/user.rb",
43
- "spec/scenario/app/views/layouts/application.html.erb",
44
- "spec/scenario/config.ru",
45
- "spec/scenario/config/application.rb",
46
- "spec/scenario/config/boot.rb",
47
- "spec/scenario/config/castronaut.yml",
48
- "spec/scenario/config/database.yml",
49
- "spec/scenario/config/environment.rb",
50
- "spec/scenario/config/environments/development.rb",
51
- "spec/scenario/config/environments/production.rb",
52
- "spec/scenario/config/environments/test.rb",
53
- "spec/scenario/config/initializers/backtrace_silencers.rb",
54
- "spec/scenario/config/initializers/devise.rb",
55
- "spec/scenario/config/initializers/inflections.rb",
56
- "spec/scenario/config/initializers/mime_types.rb",
57
- "spec/scenario/config/initializers/secret_token.rb",
58
- "spec/scenario/config/initializers/session_store.rb",
59
- "spec/scenario/config/locales/en.yml",
60
- "spec/scenario/config/routes.rb",
61
- "spec/scenario/config/rubycas-server.yml",
62
- "spec/scenario/db/migrate/20100401102949_create_tables.rb",
63
- "spec/scenario/public/.gitkeep",
64
- "spec/spec_helper.rb",
65
- "spec/strategy_spec.rb",
66
- "spec/support/migrations.rb"
67
- ]
68
- s.homepage = %q{http://github.com/bushido/bushido_cas_authenticatable}
13
+
14
+ s.rubyforge_project = "devise_bushido_authenticatable"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
69
19
  s.require_paths = ["lib"]
70
- s.rubygems_version = %q{1.6.2}
71
- s.summary = %q{Bushido SSO authentication module for Devise}
72
20
 
73
- if s.respond_to? :specification_version then
74
- s.specification_version = 3
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ s.add_runtime_dependency(%q<devise>, [">= 1.0.6"])
25
+ s.add_runtime_dependency(%q<rubycas-client>, [">= 2.2.1"])
75
26
 
76
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
77
- s.add_runtime_dependency(%q<devise>, [">= 0"])
78
- s.add_development_dependency(%q<linecache>, ["= 0.43"])
79
- s.add_development_dependency(%q<ruby-debug>, [">= 0"])
80
- s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
81
- s.add_development_dependency(%q<jeweler>, [">= 0"])
82
- s.add_runtime_dependency(%q<devise>, [">= 1.0.6"])
83
- s.add_runtime_dependency(%q<rubycas-client>, [">= 2.2.1"])
84
- else
85
- s.add_dependency(%q<devise>, [">= 0"])
86
- s.add_dependency(%q<linecache>, ["= 0.43"])
87
- s.add_dependency(%q<ruby-debug>, [">= 0"])
88
- s.add_dependency(%q<ruby-debug19>, [">= 0"])
89
- s.add_dependency(%q<jeweler>, [">= 0"])
90
- s.add_dependency(%q<devise>, [">= 1.0.6"])
91
- s.add_dependency(%q<rubycas-client>, [">= 2.2.1"])
92
- end
93
- else
94
- s.add_dependency(%q<devise>, [">= 0"])
95
- s.add_dependency(%q<linecache>, ["= 0.43"])
96
- s.add_dependency(%q<ruby-debug>, [">= 0"])
97
- s.add_dependency(%q<ruby-debug19>, [">= 0"])
98
- s.add_dependency(%q<jeweler>, [">= 0"])
99
- s.add_dependency(%q<devise>, [">= 1.0.6"])
100
- s.add_dependency(%q<rubycas-client>, [">= 2.2.1"])
101
- end
27
+ s.add_development_dependency("rspec")
28
+ s.add_development_dependency("mocha")
29
+ s.add_development_dependency("shoulda")
30
+ s.add_development_dependency("sqlite3-ruby")
31
+ s.add_development_dependency("sham_rack")
32
+ s.add_development_dependency("capybara")
33
+ s.add_development_dependency('crypt-isaac')
34
+ s.add_development_dependency('launchy')
35
+ s.add_development_dependency('pry')
102
36
  end
103
-
@@ -0,0 +1,3 @@
1
+ module DeviseBushidoAuthenticatable
2
+ VERSION = "1.0.1"
3
+ end
@@ -1,9 +1,41 @@
1
+ if defined?(Rails) && Rails::VERSION::MAJOR == 3
2
+ require "action_dispatch"
3
+ end
4
+
1
5
  require 'devise'
2
6
 
3
7
  require 'devise_cas_authenticatable/schema'
4
8
  require 'devise_cas_authenticatable/routes'
5
9
  require 'devise_cas_authenticatable/strategy'
6
10
  require 'devise_cas_authenticatable/exceptions'
11
+ require 'devise_cas_authenticatable/missing_session_helpers'
12
+ require 'devise_cas_authenticatable/single_sign_out'
13
+
14
+ if ActiveSupport.respond_to? :on_load
15
+ ActiveSupport.on_load(:action_controller) do
16
+ include MissingSessionHelpers
17
+ end
18
+
19
+ ActiveSupport.on_load(:action_view) do
20
+ include MissingSessionHelpers
21
+ end
22
+ else
23
+ ActionController.instance_eval do
24
+ include MissingSessionHelpers
25
+ end
26
+
27
+ ActionView.instance_eval do
28
+ include MissingSessionHelpers
29
+ end
30
+ end
31
+
32
+ if defined?(ActiveRecord::SessionStore)
33
+ require 'devise_cas_authenticatable/single_sign_out/session_store/active_record'
34
+ end
35
+
36
+ if defined?(Redis::Store)
37
+ require 'devise_cas_authenticatable/single_sign_out/session_store/redis'
38
+ end
7
39
 
8
40
  require 'rubycas-client'
9
41
 
@@ -21,7 +53,7 @@ end
21
53
  module Devise
22
54
  # The base URL of the CAS server. For example, http://cas.example.com. Specifying this
23
55
  # is mandatory.
24
- @@cas_base_url = "https://auth.bushi.do/cas"
56
+ @@cas_base_url = ENV['BUSHIDO_CAS_URL'] || "https://bushi.do/cas"
25
57
 
26
58
  # The login URL of the CAS server. If undefined, will default based on cas_base_url.
27
59
  @@cas_login_url = nil
@@ -32,6 +64,15 @@ module Devise
32
64
  # The login URL of the CAS server. If undefined, will default based on cas_base_url.
33
65
  @@cas_validate_url = nil
34
66
 
67
+ # Should devise_cas_authenticatable enable single-sign-out? Requires use of a supported
68
+ # session_store. Currently supports active_record or redis.
69
+ # False by default.
70
+ @@cas_enable_single_sign_out = true
71
+
72
+ # What strategy should single sign out use for tracking token->session ID mapping.
73
+ # :rails_cache by default.
74
+ @@cas_single_sign_out_mapping_strategy = :rails_cache
75
+
35
76
  # Should devise_cas_authenticatable attempt to create new user records for
36
77
  # unknown usernames? True by default.
37
78
  @@cas_create_user = true
@@ -43,7 +84,7 @@ module Devise
43
84
  # Name of the parameter passed in the logout query
44
85
  @@cas_destination_logout_param_name = nil
45
86
 
46
- mattr_accessor :cas_base_url, :cas_login_url, :cas_logout_url, :cas_validate_url, :cas_create_user, :cas_destination_logout_param_name, :cas_username_column
87
+ mattr_accessor :cas_base_url, :cas_login_url, :cas_logout_url, :cas_validate_url, :cas_create_user, :cas_destination_logout_param_name, :cas_username_column, :cas_enable_single_sign_out, :cas_single_sign_out_mapping_strategy
47
88
 
48
89
  def self.cas_create_user?
49
90
  cas_create_user
@@ -56,7 +97,8 @@ module Devise
56
97
  :cas_base_url => @@cas_base_url,
57
98
  :login_url => @@cas_login_url,
58
99
  :logout_url => @@cas_logout_url,
59
- :validate_url => @@cas_validate_url
100
+ :validate_url => @@cas_validate_url,
101
+ :enable_single_sign_out => @@cas_enable_single_sign_out
60
102
  )
61
103
  end
62
104
 
@@ -0,0 +1,9 @@
1
+ module MissingSessionHelpers
2
+ def new_session_path(resource_name, *args)
3
+ send "new_#{resource_name}_session_path".to_sym, *args
4
+ end
5
+
6
+ def destroy_session_path(resource_name, *args)
7
+ send "destroy_#{resource_name}_session_path".to_sym, *args
8
+ end
9
+ end
@@ -27,9 +27,7 @@ module Devise
27
27
  puts "ticket = #{ticket.inspect}"
28
28
 
29
29
  if ticket.is_valid?
30
-
31
- conditions = {::Devise.cas_username_column => ticket.response.user}
32
-
30
+ conditions = {::Devise.cas_username_column => ticket.respond_to?(:user) ? ticket.user : ticket.response.user}
33
31
  # We don't want to override Devise 1.1's find_for_authentication
34
32
  resource = if respond_to?(:find_for_authentication)
35
33
  find_for_authentication(conditions)
@@ -43,9 +41,10 @@ module Devise
43
41
 
44
42
  return nil unless resource
45
43
 
46
- resource.bushido_extra_attributes(ticket.response.extra_attributes) if resource.respond_to? :bushido_extra_attributes
47
-
48
- # puts "resource.cas_extra_attributes = #{resource.cas_extra_attributes.inspect}"
44
+ if resource.respond_to? :bushido_extra_attributes
45
+ extra_attributes = ticket.respond_to?(:extra_attributes) ? ticket.extra_attributes : ticket.response.extra_attributes
46
+ resource.bushido_extra_attributes(extra_attributes)
47
+ end
49
48
 
50
49
  resource.save
51
50
  resource
@@ -1,4 +1,4 @@
1
- if ActionController::Routing.name =~ /ActionDispatch/
1
+ if defined?(ActionDispatch)
2
2
  # Rails 3
3
3
 
4
4
  ActionDispatch::Routing::Mapper.class_eval do
@@ -7,7 +7,8 @@ if ActionController::Routing.name =~ /ActionDispatch/
7
7
  def devise_bushido_authenticatable(mapping, controllers)
8
8
  # service endpoint for CAS server
9
9
  get "service", :to => "#{controllers[:cas_sessions]}#service", :as => "service"
10
-
10
+ post "service", :to => "#{controllers[:cas_sessions]}#single_sign_out", :as => "single_sign_out"
11
+
11
12
  resource :session, :only => [], :controller => controllers[:cas_sessions], :path => "" do
12
13
  get :new, :path => mapping.path_names[:sign_in], :as => "new"
13
14
  get :unregistered
@@ -24,7 +25,8 @@ else
24
25
 
25
26
  def bushido_authenticatable(routes, mapping)
26
27
  routes.with_options(:controller => 'devise/cas_sessions', :name_prefix => nil) do |session|
27
- session.send(:"#{mapping.name}_service", "/service", :action => 'service', :conditions => {:method => :get})
28
+ session.send(:"#{mapping.name}_service", '/service', :action => 'service', :conditions => {:method => :get})
29
+ session.send(:"#{mapping.name}_service", '/service', :action => 'single_sign_out', :conditions => {:method => :post})
28
30
  session.send(:"unregistered_#{mapping.name}_session", '/unregistered', :action => "unregistered", :conditions => {:method => :get})
29
31
  session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'new', :conditions => {:method => :get})
30
32
  session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :post})
@@ -0,0 +1,22 @@
1
+ module DeviseCasAuthenticatable
2
+ module SingleSignOut
3
+ module SetSession
4
+ def set_session_with_storage(env, sid, session_data, options={})
5
+ if session_data['cas_last_valid_ticket_store']
6
+ ::DeviseCasAuthenticatable::SingleSignOut::Strategies.current_strategy.store_session_id_for_index(session_data['cas_last_valid_ticket'], sid)
7
+ session_data['cas_last_valid_ticket_store'] = nil
8
+ end
9
+
10
+ if method(:set_session_without_storage).arity == 4
11
+ set_session_without_storage(env, sid, session_data, options)
12
+ else
13
+ set_session_without_storage(env, sid, session_data)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ require 'devise_cas_authenticatable/single_sign_out/strategies'
21
+ require 'devise_cas_authenticatable/single_sign_out/strategies/base'
22
+ require 'devise_cas_authenticatable/single_sign_out/strategies/rails_cache'