opensesame 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/README.md +9 -8
  2. data/app/assets/stylesheets/open_sesame/{application.css → opensesame.css} +0 -1
  3. data/app/assets/stylesheets/open_sesame/{welcome.css.scss → welcome.css} +50 -1
  4. data/app/controllers/open_sesame/application_controller.rb +1 -1
  5. data/app/controllers/open_sesame/sessions_controller.rb +22 -5
  6. data/app/helpers/open_sesame/application_helper.rb +1 -1
  7. data/app/views/layouts/open_sesame/application.html.erb +1 -2
  8. data/config/routes.rb +2 -2
  9. data/lib/open_sesame/configuration.rb +10 -13
  10. data/lib/open_sesame/engine.rb +21 -22
  11. data/lib/open_sesame/failure/app.rb +10 -0
  12. data/lib/open_sesame/failure/devise_app.rb +17 -0
  13. data/lib/open_sesame/github_auth.rb +9 -0
  14. data/lib/open_sesame/github_warden.rb +26 -0
  15. data/lib/open_sesame/{controller_helper.rb → helpers/controller_helper.rb} +2 -1
  16. data/lib/open_sesame/{view_helper.rb → helpers/view_helper.rb} +4 -3
  17. data/lib/open_sesame/member.rb +65 -0
  18. data/lib/open_sesame/version.rb +2 -1
  19. data/lib/open_sesame.rb +16 -4
  20. data/spec/dummy/app/views/home/index.html.erb +3 -1
  21. data/spec/dummy/config/initializers/opensesame.rb +16 -2
  22. data/spec/dummy/config/initializers/session_store.rb +1 -1
  23. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -1
  24. data/spec/dummy/config/routes.rb +1 -1
  25. data/spec/dummy/db/development.sqlite3 +0 -0
  26. data/spec/dummy/log/development.log +135 -6
  27. data/spec/dummy/log/test.log +41874 -530
  28. data/spec/dummy/tmp/cache/assets/C09/2F0/sprockets%2F76045b33d436a11b0156b36a91560651 +0 -0
  29. data/spec/dummy/tmp/cache/assets/C54/300/sprockets%2Fb83307a70e6040f817087f997dc73122 +0 -0
  30. data/spec/dummy/tmp/cache/assets/CAA/920/sprockets%2Ff2904820584f0723f5ab256dcf1a9225 +0 -0
  31. data/spec/dummy/tmp/cache/assets/CC2/790/sprockets%2F020f956f67983c52c9889ac9801ca4b4 +0 -0
  32. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  33. data/spec/dummy/tmp/cache/assets/CEC/240/sprockets%2Fdec29f626939d38247d1745e057c6ab2 +0 -0
  34. data/spec/dummy/tmp/cache/assets/D0C/2A0/sprockets%2F04922c120a656b333dd5fcd28c9f8f53 +0 -0
  35. data/spec/dummy/tmp/cache/assets/D12/EF0/sprockets%2F98d5a511dcf32074eef97c372f294a20 +0 -0
  36. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  37. data/spec/dummy/tmp/cache/assets/D38/DB0/sprockets%2Fe4441bec5b04f6a4ad4bf7056181558e +0 -0
  38. data/spec/dummy/tmp/cache/assets/D45/CE0/sprockets%2F6c1b76a50b27d5e7485d41cef59eb427 +0 -0
  39. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  40. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  41. data/spec/dummy/tmp/cache/assets/D60/400/sprockets%2F1f456ac6c7c736a4407ead0832adb42c +0 -0
  42. data/spec/dummy/tmp/cache/assets/D72/880/sprockets%2Fe5615e8c12de3dbb5626aee43388cb39 +0 -0
  43. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  44. data/spec/dummy/tmp/cache/assets/DDD/910/sprockets%2Ff8ed9a8d47ac232db51e9c7adb8377a9 +0 -0
  45. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  46. data/spec/dummy/tmp/cache/assets/E09/D90/sprockets%2Fd85890cff0dcafde74d69601baae198e +0 -0
  47. data/spec/dummy/tmp/cache/assets/E3C/B20/sprockets%2Fde9e6fc28cd2dfe38cc53fd0455b5b9e +0 -0
  48. data/spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame.css.scssc +0 -0
  49. data/spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame_bootstrap.css.scssc +0 -0
  50. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_accordion.scssc +0 -0
  51. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_alerts.scssc +0 -0
  52. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_breadcrumbs.scssc +0 -0
  53. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_button-groups.scssc +0 -0
  54. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_buttons.scssc +0 -0
  55. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_carousel.scssc +0 -0
  56. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_close.scssc +0 -0
  57. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_code.scssc +0 -0
  58. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_component-animations.scssc +0 -0
  59. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_dropdowns.scssc +0 -0
  60. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_forms.scssc +0 -0
  61. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_grid.scssc +0 -0
  62. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_hero-unit.scssc +0 -0
  63. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_labels-badges.scssc +0 -0
  64. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_layouts.scssc +0 -0
  65. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_mixins.scssc +0 -0
  66. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_modals.scssc +0 -0
  67. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navbar.scssc +0 -0
  68. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navs.scssc +0 -0
  69. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pager.scssc +0 -0
  70. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pagination.scssc +0 -0
  71. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_popovers.scssc +0 -0
  72. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_progress-bars.scssc +0 -0
  73. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_reset.scssc +0 -0
  74. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_scaffolding.scssc +0 -0
  75. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_sprites.scssc +0 -0
  76. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tables.scssc +0 -0
  77. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_thumbnails.scssc +0 -0
  78. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tooltip.scssc +0 -0
  79. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_type.scssc +0 -0
  80. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_utilities.scssc +0 -0
  81. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_variables.scssc +0 -0
  82. data/spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_wells.scssc +0 -0
  83. data/spec/dummy/tmp/cache/sass/c0430781249a04c227e0b0aca38159d7478590b1/_bootstrap.scssc +0 -0
  84. data/spec/dummy/tmp/capybara/{capybara-201205020845417136358435.html → capybara-201208201553167621643394.html} +2 -0
  85. data/spec/lib/open_sesame/configuration_spec.rb +0 -40
  86. data/spec/lib/open_sesame/github_auth_spec.rb +30 -0
  87. data/spec/lib/open_sesame/github_warden_spec.rb +44 -0
  88. data/spec/lib/open_sesame/member_spec.rb +51 -0
  89. data/spec/lib/open_sesame/sessions_spec.rb +23 -8
  90. data/spec/lib/open_sesame_spec.rb +7 -2
  91. data/spec/spec_helper.rb +0 -3
  92. data/spec/support/capybara.rb +24 -0
  93. data/spec/support/request_helpers.rb +61 -0
  94. data/spec/support/vcr.rb +22 -0
  95. data/spec/vcr/member/retrieves_attributes_from_github.yml +46 -0
  96. data/spec/vcr/member/returns_nil_if_no_github_member_found.yml +46 -0
  97. data/spec/vcr/member/serialize_from_session_returns_member_from_given_member_id.yml +89 -0
  98. data/spec/vcr/member/serialize_into_session_returns_given_member_id_in_array.yml +46 -0
  99. data/spec/vcr/session/allows_auto_login.yml +132 -0
  100. data/spec/vcr/session/enforces_opensesame_login.yml +132 -0
  101. data/spec/vcr/session/skips_auto_login_if_just_logged_out.yml +175 -0
  102. data/spec/vcr/session/tries_auto_login_and_ends_up_on_opensesame_page_after_failure.yml +46 -0
  103. metadata +239 -41
  104. data/app/assets/javascripts/open_sesame/application.js +0 -15
  105. data/app/assets/stylesheets/open_sesame/opensesame_bootstrap.css.scss +0 -8
  106. data/lib/open_sesame/failure_app.rb +0 -14
  107. data/spec/dummy/tmp/capybara/capybara-201205020845084431324775.html +0 -14
  108. data/spec/dummy/tmp/capybara/capybara-201205020846032430049397.html +0 -14
  109. data/spec/dummy/tmp/capybara/capybara-201205020848165144257335.html +0 -26
  110. data/spec/dummy/tmp/capybara/capybara-201205020849371072293414.html +0 -26
  111. data/spec/dummy/tmp/capybara/capybara-201205020851069360249571.html +0 -26
@@ -0,0 +1,46 @@
1
+ ---
2
+ recorded_with: VCR 2.2.4
3
+ http_interactions:
4
+ - request:
5
+ method: get
6
+ uri: https://api.github.com/users/rossta
7
+ body:
8
+ string: ""
9
+ headers:
10
+ accept:
11
+ - "*/*"
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: OK
16
+ headers:
17
+ x-content-type-options:
18
+ - nosniff
19
+ etag:
20
+ - "\"273496f438b2eeed19fb151dc969a9b5\""
21
+ x-ratelimit-limit:
22
+ - "5000"
23
+ last-modified:
24
+ - Sun, 05 Aug 2012 18:48:05 GMT
25
+ connection:
26
+ - close
27
+ content-type:
28
+ - application/json; charset=utf-8
29
+ date:
30
+ - Tue, 21 Aug 2012 20:22:33 GMT
31
+ server:
32
+ - nginx/1.0.13
33
+ x-ratelimit-remaining:
34
+ - "4994"
35
+ content-length:
36
+ - "631"
37
+ vary:
38
+ - Accept
39
+ cache-control:
40
+ - public, max-age=60, s-maxage=60
41
+ status:
42
+ - 200 OK
43
+ body:
44
+ string: "{\"type\":\"User\",\"avatar_url\":\"https://secure.gravatar.com/avatar/b0169a78f851962058d63337ad0147d6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png\",\"public_repos\":38,\"following\":23,\"location\":\"New York City\",\"created_at\":\"2008-05-27T18:27:16Z\",\"company\":\"http://www.challengepost.com\",\"hireable\":false,\"gravatar_id\":\"b0169a78f851962058d63337ad0147d6\",\"login\":\"rossta\",\"bio\":null,\"public_gists\":16,\"blog\":\"http://www.rosskaff.com\",\"email\":\"rosskaff@gmail.com\",\"name\":\"Ross Kaffenberger\",\"url\":\"https://api.github.com/users/rossta\",\"id\":11673,\"followers\":13,\"html_url\":\"https://github.com/rossta\"}"
45
+ http_version: "1.1"
46
+ recorded_at: Tue, 21 Aug 2012 20:22:33 GMT
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opensesame
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,44 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-02 00:00:00.000000000Z
12
+ date: 2012-08-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70284434573420 !ruby/object:Gem::Requirement
16
+ requirement: &70224957748340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '3.1'
21
+ version: '3.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70284434573420
24
+ version_requirements: *70224957748340
25
25
  - !ruby/object:Gem::Dependency
26
- name: bootstrap-sass
27
- requirement: &70284434572500 !ruby/object:Gem::Requirement
26
+ name: omniauth-github
27
+ requirement: &70224957747780 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70224957747780
36
+ - !ruby/object:Gem::Dependency
37
+ name: octokit
38
+ requirement: &70224957746980 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
31
42
  - !ruby/object:Gem::Version
32
- version: 2.0.1
43
+ version: '1.10'
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *70284434572500
46
+ version_requirements: *70224957746980
36
47
  - !ruby/object:Gem::Dependency
37
- name: opensesame-github
38
- requirement: &70284434571740 !ruby/object:Gem::Requirement
48
+ name: warden
49
+ requirement: &70224957746560 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :runtime
45
56
  prerelease: false
46
- version_requirements: *70284434571740
57
+ version_requirements: *70224957746560
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: sqlite3
49
- requirement: &70284434569740 !ruby/object:Gem::Requirement
60
+ requirement: &70224957746100 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70284434569740
68
+ version_requirements: *70224957746100
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: rspec-rails
60
- requirement: &70284434568960 !ruby/object:Gem::Requirement
71
+ requirement: &70224957745580 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 2.9.0
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70284434568960
79
+ version_requirements: *70224957745580
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: capybara
71
- requirement: &70284434567980 !ruby/object:Gem::Requirement
82
+ requirement: &70224957745040 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,65 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70284434567980
90
+ version_requirements: *70224957745040
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: launchy
82
- requirement: &70284434566380 !ruby/object:Gem::Requirement
93
+ requirement: &70224957744040 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70224957744040
102
+ - !ruby/object:Gem::Dependency
103
+ name: pry
104
+ requirement: &70224957742940 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70224957742940
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry-nav
115
+ requirement: &70224957742480 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70224957742480
124
+ - !ruby/object:Gem::Dependency
125
+ name: vcr
126
+ requirement: &70224957741840 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70224957741840
135
+ - !ruby/object:Gem::Dependency
136
+ name: fakeweb
137
+ requirement: &70224957741200 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70224957741200
146
+ - !ruby/object:Gem::Dependency
147
+ name: guard-rspec
148
+ requirement: &70224957740280 !ruby/object:Gem::Requirement
83
149
  none: false
84
150
  requirements:
85
151
  - - ! '>='
@@ -87,7 +153,7 @@ dependencies:
87
153
  version: '0'
88
154
  type: :development
89
155
  prerelease: false
90
- version_requirements: *70284434566380
156
+ version_requirements: *70224957740280
91
157
  description: Rails engine for authenticating internal applications and private-access
92
158
  products
93
159
  email:
@@ -97,10 +163,8 @@ extensions: []
97
163
  extra_rdoc_files: []
98
164
  files:
99
165
  - app/assets/images/open_sesame/github_64.png
100
- - app/assets/javascripts/open_sesame/application.js
101
- - app/assets/stylesheets/open_sesame/application.css
102
- - app/assets/stylesheets/open_sesame/opensesame_bootstrap.css.scss
103
- - app/assets/stylesheets/open_sesame/welcome.css.scss
166
+ - app/assets/stylesheets/open_sesame/opensesame.css
167
+ - app/assets/stylesheets/open_sesame/welcome.css
104
168
  - app/controllers/open_sesame/application_controller.rb
105
169
  - app/controllers/open_sesame/sessions_controller.rb
106
170
  - app/helpers/open_sesame/application_helper.rb
@@ -109,11 +173,15 @@ files:
109
173
  - app/views/open_sesame/sessions/new.html.erb
110
174
  - config/routes.rb
111
175
  - lib/open_sesame/configuration.rb
112
- - lib/open_sesame/controller_helper.rb
113
176
  - lib/open_sesame/engine.rb
114
- - lib/open_sesame/failure_app.rb
177
+ - lib/open_sesame/failure/app.rb
178
+ - lib/open_sesame/failure/devise_app.rb
179
+ - lib/open_sesame/github_auth.rb
180
+ - lib/open_sesame/github_warden.rb
181
+ - lib/open_sesame/helpers/controller_helper.rb
182
+ - lib/open_sesame/helpers/view_helper.rb
183
+ - lib/open_sesame/member.rb
115
184
  - lib/open_sesame/version.rb
116
- - lib/open_sesame/view_helper.rb
117
185
  - lib/open_sesame.rb
118
186
  - lib/opensesame.rb
119
187
  - lib/tasks/opensesame_tasks.rake
@@ -156,16 +224,81 @@ files:
156
224
  - spec/dummy/Rakefile
157
225
  - spec/dummy/README.rdoc
158
226
  - spec/dummy/script/rails
159
- - spec/dummy/tmp/capybara/capybara-201205020845084431324775.html
160
- - spec/dummy/tmp/capybara/capybara-201205020845417136358435.html
161
- - spec/dummy/tmp/capybara/capybara-201205020846032430049397.html
162
- - spec/dummy/tmp/capybara/capybara-201205020848165144257335.html
163
- - spec/dummy/tmp/capybara/capybara-201205020849371072293414.html
164
- - spec/dummy/tmp/capybara/capybara-201205020851069360249571.html
227
+ - spec/dummy/tmp/cache/assets/C09/2F0/sprockets%2F76045b33d436a11b0156b36a91560651
228
+ - spec/dummy/tmp/cache/assets/C54/300/sprockets%2Fb83307a70e6040f817087f997dc73122
229
+ - spec/dummy/tmp/cache/assets/CAA/920/sprockets%2Ff2904820584f0723f5ab256dcf1a9225
230
+ - spec/dummy/tmp/cache/assets/CC2/790/sprockets%2F020f956f67983c52c9889ac9801ca4b4
231
+ - spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
232
+ - spec/dummy/tmp/cache/assets/CEC/240/sprockets%2Fdec29f626939d38247d1745e057c6ab2
233
+ - spec/dummy/tmp/cache/assets/D0C/2A0/sprockets%2F04922c120a656b333dd5fcd28c9f8f53
234
+ - spec/dummy/tmp/cache/assets/D12/EF0/sprockets%2F98d5a511dcf32074eef97c372f294a20
235
+ - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
236
+ - spec/dummy/tmp/cache/assets/D38/DB0/sprockets%2Fe4441bec5b04f6a4ad4bf7056181558e
237
+ - spec/dummy/tmp/cache/assets/D45/CE0/sprockets%2F6c1b76a50b27d5e7485d41cef59eb427
238
+ - spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
239
+ - spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
240
+ - spec/dummy/tmp/cache/assets/D60/400/sprockets%2F1f456ac6c7c736a4407ead0832adb42c
241
+ - spec/dummy/tmp/cache/assets/D72/880/sprockets%2Fe5615e8c12de3dbb5626aee43388cb39
242
+ - spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
243
+ - spec/dummy/tmp/cache/assets/DDD/910/sprockets%2Ff8ed9a8d47ac232db51e9c7adb8377a9
244
+ - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
245
+ - spec/dummy/tmp/cache/assets/E09/D90/sprockets%2Fd85890cff0dcafde74d69601baae198e
246
+ - spec/dummy/tmp/cache/assets/E3C/B20/sprockets%2Fde9e6fc28cd2dfe38cc53fd0455b5b9e
247
+ - spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame.css.scssc
248
+ - spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame_bootstrap.css.scssc
249
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_accordion.scssc
250
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_alerts.scssc
251
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_breadcrumbs.scssc
252
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_button-groups.scssc
253
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_buttons.scssc
254
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_carousel.scssc
255
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_close.scssc
256
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_code.scssc
257
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_component-animations.scssc
258
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_dropdowns.scssc
259
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_forms.scssc
260
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_grid.scssc
261
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_hero-unit.scssc
262
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_labels-badges.scssc
263
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_layouts.scssc
264
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_mixins.scssc
265
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_modals.scssc
266
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navbar.scssc
267
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navs.scssc
268
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pager.scssc
269
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pagination.scssc
270
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_popovers.scssc
271
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_progress-bars.scssc
272
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_reset.scssc
273
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_scaffolding.scssc
274
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_sprites.scssc
275
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tables.scssc
276
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_thumbnails.scssc
277
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tooltip.scssc
278
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_type.scssc
279
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_utilities.scssc
280
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_variables.scssc
281
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_wells.scssc
282
+ - spec/dummy/tmp/cache/sass/c0430781249a04c227e0b0aca38159d7478590b1/_bootstrap.scssc
283
+ - spec/dummy/tmp/capybara/capybara-201208201553167621643394.html
165
284
  - spec/lib/open_sesame/configuration_spec.rb
285
+ - spec/lib/open_sesame/github_auth_spec.rb
286
+ - spec/lib/open_sesame/github_warden_spec.rb
287
+ - spec/lib/open_sesame/member_spec.rb
166
288
  - spec/lib/open_sesame/sessions_spec.rb
167
289
  - spec/lib/open_sesame_spec.rb
168
290
  - spec/spec_helper.rb
291
+ - spec/support/capybara.rb
292
+ - spec/support/request_helpers.rb
293
+ - spec/support/vcr.rb
294
+ - spec/vcr/member/retrieves_attributes_from_github.yml
295
+ - spec/vcr/member/returns_nil_if_no_github_member_found.yml
296
+ - spec/vcr/member/serialize_from_session_returns_member_from_given_member_id.yml
297
+ - spec/vcr/member/serialize_into_session_returns_given_member_id_in_array.yml
298
+ - spec/vcr/session/allows_auto_login.yml
299
+ - spec/vcr/session/enforces_opensesame_login.yml
300
+ - spec/vcr/session/skips_auto_login_if_just_logged_out.yml
301
+ - spec/vcr/session/tries_auto_login_and_ends_up_on_opensesame_page_after_failure.yml
169
302
  homepage: https://github.com/rossta/opensesame
170
303
  licenses: []
171
304
  post_install_message:
@@ -180,7 +313,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
313
  version: '0'
181
314
  segments:
182
315
  - 0
183
- hash: -2528380639608533410
316
+ hash: -894394095062412372
184
317
  required_rubygems_version: !ruby/object:Gem::Requirement
185
318
  none: false
186
319
  requirements:
@@ -189,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
322
  version: '0'
190
323
  segments:
191
324
  - 0
192
- hash: -2528380639608533410
325
+ hash: -894394095062412372
193
326
  requirements: []
194
327
  rubyforge_project:
195
328
  rubygems_version: 1.8.10
@@ -234,13 +367,78 @@ test_files:
234
367
  - spec/dummy/Rakefile
235
368
  - spec/dummy/README.rdoc
236
369
  - spec/dummy/script/rails
237
- - spec/dummy/tmp/capybara/capybara-201205020845084431324775.html
238
- - spec/dummy/tmp/capybara/capybara-201205020845417136358435.html
239
- - spec/dummy/tmp/capybara/capybara-201205020846032430049397.html
240
- - spec/dummy/tmp/capybara/capybara-201205020848165144257335.html
241
- - spec/dummy/tmp/capybara/capybara-201205020849371072293414.html
242
- - spec/dummy/tmp/capybara/capybara-201205020851069360249571.html
370
+ - spec/dummy/tmp/cache/assets/C09/2F0/sprockets%2F76045b33d436a11b0156b36a91560651
371
+ - spec/dummy/tmp/cache/assets/C54/300/sprockets%2Fb83307a70e6040f817087f997dc73122
372
+ - spec/dummy/tmp/cache/assets/CAA/920/sprockets%2Ff2904820584f0723f5ab256dcf1a9225
373
+ - spec/dummy/tmp/cache/assets/CC2/790/sprockets%2F020f956f67983c52c9889ac9801ca4b4
374
+ - spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
375
+ - spec/dummy/tmp/cache/assets/CEC/240/sprockets%2Fdec29f626939d38247d1745e057c6ab2
376
+ - spec/dummy/tmp/cache/assets/D0C/2A0/sprockets%2F04922c120a656b333dd5fcd28c9f8f53
377
+ - spec/dummy/tmp/cache/assets/D12/EF0/sprockets%2F98d5a511dcf32074eef97c372f294a20
378
+ - spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
379
+ - spec/dummy/tmp/cache/assets/D38/DB0/sprockets%2Fe4441bec5b04f6a4ad4bf7056181558e
380
+ - spec/dummy/tmp/cache/assets/D45/CE0/sprockets%2F6c1b76a50b27d5e7485d41cef59eb427
381
+ - spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
382
+ - spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
383
+ - spec/dummy/tmp/cache/assets/D60/400/sprockets%2F1f456ac6c7c736a4407ead0832adb42c
384
+ - spec/dummy/tmp/cache/assets/D72/880/sprockets%2Fe5615e8c12de3dbb5626aee43388cb39
385
+ - spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
386
+ - spec/dummy/tmp/cache/assets/DDD/910/sprockets%2Ff8ed9a8d47ac232db51e9c7adb8377a9
387
+ - spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
388
+ - spec/dummy/tmp/cache/assets/E09/D90/sprockets%2Fd85890cff0dcafde74d69601baae198e
389
+ - spec/dummy/tmp/cache/assets/E3C/B20/sprockets%2Fde9e6fc28cd2dfe38cc53fd0455b5b9e
390
+ - spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame.css.scssc
391
+ - spec/dummy/tmp/cache/sass/19921c2f5bb8eaa817ba254313d0f93dbf32f1df/opensesame_bootstrap.css.scssc
392
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_accordion.scssc
393
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_alerts.scssc
394
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_breadcrumbs.scssc
395
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_button-groups.scssc
396
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_buttons.scssc
397
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_carousel.scssc
398
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_close.scssc
399
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_code.scssc
400
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_component-animations.scssc
401
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_dropdowns.scssc
402
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_forms.scssc
403
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_grid.scssc
404
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_hero-unit.scssc
405
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_labels-badges.scssc
406
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_layouts.scssc
407
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_mixins.scssc
408
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_modals.scssc
409
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navbar.scssc
410
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_navs.scssc
411
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pager.scssc
412
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_pagination.scssc
413
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_popovers.scssc
414
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_progress-bars.scssc
415
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_reset.scssc
416
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_scaffolding.scssc
417
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_sprites.scssc
418
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tables.scssc
419
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_thumbnails.scssc
420
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_tooltip.scssc
421
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_type.scssc
422
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_utilities.scssc
423
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_variables.scssc
424
+ - spec/dummy/tmp/cache/sass/bf8de80767f3492905bcacdfb6abfd679aef3272/_wells.scssc
425
+ - spec/dummy/tmp/cache/sass/c0430781249a04c227e0b0aca38159d7478590b1/_bootstrap.scssc
426
+ - spec/dummy/tmp/capybara/capybara-201208201553167621643394.html
243
427
  - spec/lib/open_sesame/configuration_spec.rb
428
+ - spec/lib/open_sesame/github_auth_spec.rb
429
+ - spec/lib/open_sesame/github_warden_spec.rb
430
+ - spec/lib/open_sesame/member_spec.rb
244
431
  - spec/lib/open_sesame/sessions_spec.rb
245
432
  - spec/lib/open_sesame_spec.rb
246
433
  - spec/spec_helper.rb
434
+ - spec/support/capybara.rb
435
+ - spec/support/request_helpers.rb
436
+ - spec/support/vcr.rb
437
+ - spec/vcr/member/retrieves_attributes_from_github.yml
438
+ - spec/vcr/member/returns_nil_if_no_github_member_found.yml
439
+ - spec/vcr/member/serialize_from_session_returns_member_from_given_member_id.yml
440
+ - spec/vcr/member/serialize_into_session_returns_given_member_id_in_array.yml
441
+ - spec/vcr/session/allows_auto_login.yml
442
+ - spec/vcr/session/enforces_opensesame_login.yml
443
+ - spec/vcr/session/skips_auto_login_if_just_logged_out.yml
444
+ - spec/vcr/session/tries_auto_login_and_ends_up_on_opensesame_page_after_failure.yml
@@ -1,15 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // the compiled file.
9
- //
10
- // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
- // GO AFTER THE REQUIRES BELOW.
12
- //
13
- //= require jquery
14
- //= require jquery_ujs
15
- //= require_tree .
@@ -1,8 +0,0 @@
1
- @import "bootstrap";
2
-
3
- .content-header {
4
- border-bottom: 1px solid #ccc;
5
- margin-bottom: 1em;
6
-
7
- h1 { font-size: 24px; }
8
- }
@@ -1,14 +0,0 @@
1
- require 'devise'
2
- module OpenSesame
3
- class FailureApp < Devise::Delegator
4
-
5
- def call(env)
6
- if (env['warden.options'] && (scope = env["warden.options"][:scope]) && scope == :opensesame)
7
- OpenSesame::SessionsController.action(:new).call(env)
8
- else
9
- super
10
- end
11
- end
12
-
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>Dummy</title>
6
- <link href="/assets/application.css" media="all" rel="stylesheet" type="text/css">
7
- <script src="/assets/application.js" type="text/javascript"></script>
8
- </head>
9
- <body>
10
-
11
- <h1>Welcome Home!</h1>
12
-
13
- </body>
14
- </html>
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>Dummy</title>
6
- <link href="/assets/application.css" media="all" rel="stylesheet" type="text/css">
7
- <script src="/assets/application.js" type="text/javascript"></script>
8
- </head>
9
- <body>
10
-
11
- <h1>Welcome Home!</h1>
12
-
13
- </body>
14
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>OpenSesame</title>
6
- <link href="/assets/open_sesame/application.css" media="all" rel="stylesheet" type="text/css">
7
- <script src="/assets/open_sesame/application.js" type="text/javascript"></script>
8
- </head>
9
- <body>
10
-
11
- <div class="container">
12
- <div class="inner-container">
13
- <div id="opensesame-session">
14
- <header class="content-header"><h1>Login</h1>
15
- </header><p>Welcome! You have arrived at a Challengepost application requiring additional credentials. To continue, please log in via:</p>
16
- <div class="table">
17
- <div class="table-cell align-middle">
18
- <a href="/welcome/auth/github" class="btn btn-large"><img alt="Github_64" src="/assets/open_sesame/github_64.png"><br><span>github</span></a>
19
- </div>
20
- </div>
21
- </div>
22
- </div>
23
- </div>
24
-
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>OpenSesame</title>
6
- <link href="/assets/open_sesame/application.css" media="all" rel="stylesheet" type="text/css">
7
- <script src="/assets/open_sesame/application.js" type="text/javascript"></script>
8
- </head>
9
- <body>
10
-
11
- <div class="container">
12
- <div class="inner-container">
13
- <div id="opensesame-session">
14
- <header class="content-header"><h1>Login</h1>
15
- </header><p>Welcome! You have arrived at a Challengepost application requiring additional credentials. To continue, please log in via:</p>
16
- <div class="table">
17
- <div class="table-cell align-middle">
18
- <a href="/welcome/auth/github" class="btn btn-large"><img alt="Github_64" src="/assets/open_sesame/github_64.png"><br><span>github</span></a>
19
- </div>
20
- </div>
21
- </div>
22
- </div>
23
- </div>
24
-
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>OpenSesame</title>
6
- <link href="/assets/open_sesame/application.css" media="all" rel="stylesheet" type="text/css">
7
- <script src="/assets/open_sesame/application.js" type="text/javascript"></script>
8
- </head>
9
- <body>
10
-
11
- <div class="container">
12
- <div class="inner-container">
13
- <div id="opensesame-session">
14
- <header class="content-header"><h1>Login</h1>
15
- </header><p>Welcome! You have arrived at a Challengepost application requiring additional credentials. To continue, please log in via:</p>
16
- <div class="table">
17
- <div class="table-cell align-middle">
18
- <a href="/welcome/auth/github" class="btn btn-large"><img alt="Github_64" src="/assets/open_sesame/github_64.png"><br><span>github</span></a>
19
- </div>
20
- </div>
21
- </div>
22
- </div>
23
- </div>
24
-
25
- </body>
26
- </html>