devise_bushido_authenticatable 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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'