lti_skydrive 0.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +20 -0
- data/app/assets/fonts/skydrive/font/FontAwesome.otf +0 -0
- data/app/assets/fonts/skydrive/font/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/skydrive/font/fontawesome-webfont.svg +399 -0
- data/app/assets/fonts/skydrive/font/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/skydrive/font/fontawesome-webfont.woff +0 -0
- data/app/assets/images/skydrive/banner.png +0 -0
- data/app/assets/images/skydrive/icon-file.png +0 -0
- data/app/assets/images/skydrive/icon-folder-back.png +0 -0
- data/app/assets/images/skydrive/icon-folder.png +0 -0
- data/app/assets/images/skydrive/icon-jpg.png +0 -0
- data/app/assets/images/skydrive/icon-pdf.png +0 -0
- data/app/assets/images/skydrive/icon-png.png +0 -0
- data/app/assets/images/skydrive/icon-word.png +0 -0
- data/app/assets/images/skydrive/logo.png +0 -0
- data/app/assets/images/skydrive/office_365.jpg +0 -0
- data/app/assets/images/skydrive/skydrive_icon.png +0 -0
- data/app/assets/javascripts/skydrive/application.js +16 -0
- data/app/assets/javascripts/skydrive/vendor/ember.js +23 -0
- data/app/assets/javascripts/skydrive/vendor/handlebars.js +362 -0
- data/app/assets/javascripts/skydrive/vendor/jquery.js +9597 -0
- data/app/assets/stylesheets/skydrive/app.css +5617 -0
- data/app/assets/stylesheets/skydrive/font-awesome/font-awesome.min.css +403 -0
- data/app/assets/stylesheets/skydrive/normalize.css +405 -0
- data/app/assets/stylesheets/skydrive/style.css +27 -0
- data/app/controllers/skydrive/api_keys_controller.rb +13 -0
- data/app/controllers/skydrive/application_controller.rb +40 -0
- data/app/controllers/skydrive/ember_controller.rb +23 -0
- data/app/controllers/skydrive/files_controller.rb +62 -0
- data/app/controllers/skydrive/launch_controller.rb +152 -0
- data/app/controllers/skydrive/session_controller.rb +12 -0
- data/app/controllers/skydrive/users_controller.rb +34 -0
- data/app/helpers/skydrive/application_helper.rb +4 -0
- data/app/helpers/skydrive/ember_helper.rb +4 -0
- data/app/models/skydrive/api_key.rb +47 -0
- data/app/models/skydrive/lti_key.rb +10 -0
- data/app/models/skydrive/token.rb +14 -0
- data/app/models/skydrive/user.rb +28 -0
- data/app/serializers/api_key_serializer.rb +5 -0
- data/app/serializers/user_serializer.rb +5 -0
- data/app/views/layouts/skydrive/application.html.erb +21 -0
- data/app/views/skydrive/ember/index.html.erb +20 -0
- data/config/initializers/sharepoint.rb +1 -0
- data/config/routes.rb +24 -0
- data/config/sharepoint.yml.example +17 -0
- data/db/migrate/20130710195807_create_users.rb +11 -0
- data/db/migrate/20130710195819_create_api_keys.rb +15 -0
- data/db/migrate/20130722173006_add_skydrive_token_storage.rb +15 -0
- data/db/migrate/20130725183724_add_client_domain_to_skydrive_tokens.rb +5 -0
- data/db/migrate/20130726170108_add_personal_url_to_skydrive_token.rb +5 -0
- data/db/migrate/20130730164700_add_init_params_to_api_key.rb +5 -0
- data/db/migrate/20130801181008_create_lti_keys.rb +9 -0
- data/db/migrate/20130802231147_change_skydrive_token_length.rb +6 -0
- data/db/migrate/20140103221052_skydrive_namespace.rb +13 -0
- data/lib/skydrive/client.rb +161 -0
- data/lib/skydrive/engine.rb +16 -0
- data/lib/skydrive/file.rb +49 -0
- data/lib/skydrive/folder.rb +13 -0
- data/lib/skydrive/version.rb +3 -0
- data/lib/skydrive.rb +4 -0
- data/lib/skydrive_proxy.rb +33 -0
- data/lib/tasks/ember.rake +48 -0
- data/lib/tasks/lti_key.rake +8 -0
- data/test/controllers/skydrive/ember_controller_test.rb +11 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/config/sharepoint.yml +15 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +60 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +6484 -0
- data/test/dummy/log/test.log +2958 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/00546f7f6da41f471084ed2589ca4442 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/049dac97744466d4435aa8de57cc6099 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0c92f67702b0dbd50edf7e6be63359ca +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0d26053221de21901f734bd6ba75bb28 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0e383306a92ebd12d003a9e49ef6d508 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/16fa9bed5ef4abda841d3ef00e727580 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/17588b92c903e02837946f638eca86db +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/21900b90dba7acf710178f3cd9dad43b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/25efc08f115a66b9c241a48e80a207ca +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3064fc29e24c9e97f7aad24f7e899cf6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/311d9a5a43eb3fee9bba76971680620f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/35a147c1af5b608250e82ccb2f569d4b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3dd0eb5a85d766c8d9fe5b29014edee4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/63616bfc6c3f0267d5951cbbc83308cd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/65aa42ce50eac6f72e31861670f94518 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/66a8e9d3d86505dece06e6dd0edd18e1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/78c4cbc0498be843f50ebdd02e2ead2f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7caeca69c3c375c50a3c8cad8584be79 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7d2b5e5332f464f65bf745d12ed9cbaa +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7e229ef6d57ba0e9f562cc129a3e4dfc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/87149d8992d83d7a95023dbfa4b53907 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8bf6a6b96f5c827206f1fd42babe6c5e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8c2066f7cc911ab8803cab8fea4e8bd6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9157ff048f219d7abc8b0f0fda771c92 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a17c28776c4a2887f0fff4893854ef1d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a29fed21bbc3985a31325c84a77e5f26 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a3119da5b51c1a0a3c5cb7414ec920f5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a674526f54bc8458ebe36912ef85f003 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/aa904c0cc06f37bb0df493db59f18d70 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/adfa454123f4741a4b3919023b570d82 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/af6eedeceb4b732776dca83f456b2b93 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b40cb2ddb88705f771e77d872feacf6a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bf64c92410e28e00afb6139c5d4c61b9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dc6268ee4fa18069ce7c21888ea1932e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/df9900b8557146382d16cc592306b17f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e3caec07cb46343e49b4f060e2d3392a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e6ebfb0e93a47d0164d0fc4637054c38 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ecb48e7374f399434aedbf30716e489a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/eeb495bc326785d2a6a14cf6d97024e4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ef91e47e51f204a8373f160f13a05a30 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f48290aae486ea863a9f456ba96443e9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fa078ac6abaaee94445294c5a7c6d793 +0 -0
- data/test/helpers/skydrive/ember_helper_test.rb +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/skydrive_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +375 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/* normalize.css v2.1.0 | MIT License | git.io/normalize */
|
|
2
|
+
/* ==========================================================================
|
|
3
|
+
HTML5 display definitions
|
|
4
|
+
========================================================================== */
|
|
5
|
+
/**
|
|
6
|
+
* Correct `block` display not defined in IE 8/9.
|
|
7
|
+
*/
|
|
8
|
+
/* line 22, ../../foundation/sass/normalize.scss */
|
|
9
|
+
article,
|
|
10
|
+
aside,
|
|
11
|
+
details,
|
|
12
|
+
figcaption,
|
|
13
|
+
figure,
|
|
14
|
+
footer,
|
|
15
|
+
header,
|
|
16
|
+
hgroup,
|
|
17
|
+
main,
|
|
18
|
+
nav,
|
|
19
|
+
section,
|
|
20
|
+
summary {
|
|
21
|
+
display: block;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Correct `inline-block` display not defined in IE 8/9.
|
|
26
|
+
*/
|
|
27
|
+
/* line 32, ../../foundation/sass/normalize.scss */
|
|
28
|
+
audio,
|
|
29
|
+
canvas,
|
|
30
|
+
video {
|
|
31
|
+
display: inline-block;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Prevent modern browsers from displaying `audio` without controls.
|
|
36
|
+
* Remove excess height in iOS 5 devices.
|
|
37
|
+
*/
|
|
38
|
+
/* line 41, ../../foundation/sass/normalize.scss */
|
|
39
|
+
audio:not([controls]) {
|
|
40
|
+
display: none;
|
|
41
|
+
height: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Address styling not present in IE 8/9.
|
|
46
|
+
*/
|
|
47
|
+
/* line 50, ../../foundation/sass/normalize.scss */
|
|
48
|
+
[hidden] {
|
|
49
|
+
display: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* ==========================================================================
|
|
53
|
+
Base
|
|
54
|
+
========================================================================== */
|
|
55
|
+
/**
|
|
56
|
+
* 1. Set default font family to sans-serif.
|
|
57
|
+
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
|
58
|
+
* user zoom.
|
|
59
|
+
*/
|
|
60
|
+
/* line 64, ../../foundation/sass/normalize.scss */
|
|
61
|
+
html {
|
|
62
|
+
font-family: sans-serif;
|
|
63
|
+
/* 1 */
|
|
64
|
+
-webkit-text-size-adjust: 100%;
|
|
65
|
+
/* 2 */
|
|
66
|
+
-ms-text-size-adjust: 100%;
|
|
67
|
+
/* 2 */
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Remove default margin.
|
|
72
|
+
*/
|
|
73
|
+
/* line 74, ../../foundation/sass/normalize.scss */
|
|
74
|
+
body {
|
|
75
|
+
margin: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* ==========================================================================
|
|
79
|
+
Links
|
|
80
|
+
========================================================================== */
|
|
81
|
+
/**
|
|
82
|
+
* Address `outline` inconsistency between Chrome and other browsers.
|
|
83
|
+
*/
|
|
84
|
+
/* line 86, ../../foundation/sass/normalize.scss */
|
|
85
|
+
a:focus {
|
|
86
|
+
outline: thin dotted;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Improve readability when focused and also mouse hovered in all browsers.
|
|
91
|
+
*/
|
|
92
|
+
/* line 95, ../../foundation/sass/normalize.scss */
|
|
93
|
+
a:active,
|
|
94
|
+
a:hover {
|
|
95
|
+
outline: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ==========================================================================
|
|
99
|
+
Typography
|
|
100
|
+
========================================================================== */
|
|
101
|
+
/**
|
|
102
|
+
* Address variable `h1` font-size and margin within `section` and `article`
|
|
103
|
+
* contexts in Firefox 4+, Safari 5, and Chrome.
|
|
104
|
+
*/
|
|
105
|
+
/* line 108, ../../foundation/sass/normalize.scss */
|
|
106
|
+
h1 {
|
|
107
|
+
font-size: 2em;
|
|
108
|
+
margin: 0.67em 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
|
113
|
+
*/
|
|
114
|
+
/* line 117, ../../foundation/sass/normalize.scss */
|
|
115
|
+
abbr[title] {
|
|
116
|
+
border-bottom: 1px dotted;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
|
121
|
+
*/
|
|
122
|
+
/* line 126, ../../foundation/sass/normalize.scss */
|
|
123
|
+
b,
|
|
124
|
+
strong {
|
|
125
|
+
font-weight: bold;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Address styling not present in Safari 5 and Chrome.
|
|
130
|
+
*/
|
|
131
|
+
/* line 134, ../../foundation/sass/normalize.scss */
|
|
132
|
+
dfn {
|
|
133
|
+
font-style: italic;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Address differences between Firefox and other browsers.
|
|
138
|
+
*/
|
|
139
|
+
/* line 142, ../../foundation/sass/normalize.scss */
|
|
140
|
+
hr {
|
|
141
|
+
-moz-box-sizing: content-box;
|
|
142
|
+
box-sizing: content-box;
|
|
143
|
+
height: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Address styling not present in IE 8/9.
|
|
148
|
+
*/
|
|
149
|
+
/* line 152, ../../foundation/sass/normalize.scss */
|
|
150
|
+
mark {
|
|
151
|
+
background: #ff0;
|
|
152
|
+
color: #000;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Correct font family set oddly in Safari 5 and Chrome.
|
|
157
|
+
*/
|
|
158
|
+
/* line 164, ../../foundation/sass/normalize.scss */
|
|
159
|
+
code,
|
|
160
|
+
kbd,
|
|
161
|
+
pre,
|
|
162
|
+
samp {
|
|
163
|
+
font-family: monospace, serif;
|
|
164
|
+
font-size: 1em;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Improve readability of pre-formatted text in all browsers.
|
|
169
|
+
*/
|
|
170
|
+
/* line 173, ../../foundation/sass/normalize.scss */
|
|
171
|
+
pre {
|
|
172
|
+
white-space: pre-wrap;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Set consistent quote types.
|
|
177
|
+
*/
|
|
178
|
+
/* line 181, ../../foundation/sass/normalize.scss */
|
|
179
|
+
q {
|
|
180
|
+
quotes: "\201C" "\201D" "\2018" "\2019";
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Address inconsistent and variable font size in all browsers.
|
|
185
|
+
*/
|
|
186
|
+
/* line 189, ../../foundation/sass/normalize.scss */
|
|
187
|
+
small {
|
|
188
|
+
font-size: 80%;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
|
193
|
+
*/
|
|
194
|
+
/* line 198, ../../foundation/sass/normalize.scss */
|
|
195
|
+
sub,
|
|
196
|
+
sup {
|
|
197
|
+
font-size: 75%;
|
|
198
|
+
line-height: 0;
|
|
199
|
+
position: relative;
|
|
200
|
+
vertical-align: baseline;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* line 205, ../../foundation/sass/normalize.scss */
|
|
204
|
+
sup {
|
|
205
|
+
top: -0.5em;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* line 209, ../../foundation/sass/normalize.scss */
|
|
209
|
+
sub {
|
|
210
|
+
bottom: -0.25em;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* ==========================================================================
|
|
214
|
+
Embedded content
|
|
215
|
+
========================================================================== */
|
|
216
|
+
/**
|
|
217
|
+
* Remove border when inside `a` element in IE 8/9.
|
|
218
|
+
*/
|
|
219
|
+
/* line 221, ../../foundation/sass/normalize.scss */
|
|
220
|
+
img {
|
|
221
|
+
border: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Correct overflow displayed oddly in IE 9.
|
|
226
|
+
*/
|
|
227
|
+
/* line 229, ../../foundation/sass/normalize.scss */
|
|
228
|
+
svg:not(:root) {
|
|
229
|
+
overflow: hidden;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* ==========================================================================
|
|
233
|
+
Figures
|
|
234
|
+
========================================================================== */
|
|
235
|
+
/**
|
|
236
|
+
* Address margin not present in IE 8/9 and Safari 5.
|
|
237
|
+
*/
|
|
238
|
+
/* line 241, ../../foundation/sass/normalize.scss */
|
|
239
|
+
figure {
|
|
240
|
+
margin: 0;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* ==========================================================================
|
|
244
|
+
Forms
|
|
245
|
+
========================================================================== */
|
|
246
|
+
/**
|
|
247
|
+
* Define consistent border, margin, and padding.
|
|
248
|
+
*/
|
|
249
|
+
/* line 253, ../../foundation/sass/normalize.scss */
|
|
250
|
+
fieldset {
|
|
251
|
+
border: 1px solid #c0c0c0;
|
|
252
|
+
margin: 0 2px;
|
|
253
|
+
padding: 0.35em 0.625em 0.75em;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* 1. Correct `color` not being inherited in IE 8/9.
|
|
258
|
+
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
|
259
|
+
*/
|
|
260
|
+
/* line 264, ../../foundation/sass/normalize.scss */
|
|
261
|
+
legend {
|
|
262
|
+
border: 0;
|
|
263
|
+
/* 1 */
|
|
264
|
+
padding: 0;
|
|
265
|
+
/* 2 */
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* 1. Correct font family not being inherited in all browsers.
|
|
270
|
+
* 2. Correct font size not being inherited in all browsers.
|
|
271
|
+
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
|
272
|
+
*/
|
|
273
|
+
/* line 278, ../../foundation/sass/normalize.scss */
|
|
274
|
+
button,
|
|
275
|
+
input,
|
|
276
|
+
select,
|
|
277
|
+
textarea {
|
|
278
|
+
font-family: inherit;
|
|
279
|
+
/* 1 */
|
|
280
|
+
font-size: 100%;
|
|
281
|
+
/* 2 */
|
|
282
|
+
margin: 0;
|
|
283
|
+
/* 3 */
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
|
288
|
+
* the UA stylesheet.
|
|
289
|
+
*/
|
|
290
|
+
/* line 290, ../../foundation/sass/normalize.scss */
|
|
291
|
+
button,
|
|
292
|
+
input {
|
|
293
|
+
line-height: normal;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
|
298
|
+
* All other form control elements do not inherit `text-transform` values.
|
|
299
|
+
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
|
300
|
+
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
|
301
|
+
*/
|
|
302
|
+
/* line 302, ../../foundation/sass/normalize.scss */
|
|
303
|
+
button,
|
|
304
|
+
select {
|
|
305
|
+
text-transform: none;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
|
310
|
+
* and `video` controls.
|
|
311
|
+
* 2. Correct inability to style clickable `input` types in iOS.
|
|
312
|
+
* 3. Improve usability and consistency of cursor style between image-type
|
|
313
|
+
* `input` and others.
|
|
314
|
+
*/
|
|
315
|
+
/* line 317, ../../foundation/sass/normalize.scss */
|
|
316
|
+
button,
|
|
317
|
+
html input[type="button"],
|
|
318
|
+
input[type="reset"],
|
|
319
|
+
input[type="submit"] {
|
|
320
|
+
-webkit-appearance: button;
|
|
321
|
+
/* 2 */
|
|
322
|
+
cursor: pointer;
|
|
323
|
+
/* 3 */
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Re-set default cursor for disabled elements.
|
|
328
|
+
*/
|
|
329
|
+
/* line 327, ../../foundation/sass/normalize.scss */
|
|
330
|
+
button[disabled],
|
|
331
|
+
html input[disabled] {
|
|
332
|
+
cursor: default;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* 1. Address box sizing set to `content-box` in IE 8/9.
|
|
337
|
+
* 2. Remove excess padding in IE 8/9.
|
|
338
|
+
*/
|
|
339
|
+
/* line 337, ../../foundation/sass/normalize.scss */
|
|
340
|
+
input[type="checkbox"],
|
|
341
|
+
input[type="radio"] {
|
|
342
|
+
box-sizing: border-box;
|
|
343
|
+
/* 1 */
|
|
344
|
+
padding: 0;
|
|
345
|
+
/* 2 */
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
|
350
|
+
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
|
351
|
+
* (include `-moz` to future-proof).
|
|
352
|
+
*/
|
|
353
|
+
/* line 348, ../../foundation/sass/normalize.scss */
|
|
354
|
+
input[type="search"] {
|
|
355
|
+
-webkit-appearance: textfield;
|
|
356
|
+
/* 1 */
|
|
357
|
+
-moz-box-sizing: content-box;
|
|
358
|
+
-webkit-box-sizing: content-box;
|
|
359
|
+
/* 2 */
|
|
360
|
+
box-sizing: content-box;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
|
365
|
+
* on OS X.
|
|
366
|
+
*/
|
|
367
|
+
/* line 361, ../../foundation/sass/normalize.scss */
|
|
368
|
+
input[type="search"]::-webkit-search-cancel-button,
|
|
369
|
+
input[type="search"]::-webkit-search-decoration {
|
|
370
|
+
-webkit-appearance: none;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Remove inner padding and border in Firefox 4+.
|
|
375
|
+
*/
|
|
376
|
+
/* line 370, ../../foundation/sass/normalize.scss */
|
|
377
|
+
button::-moz-focus-inner,
|
|
378
|
+
input::-moz-focus-inner {
|
|
379
|
+
border: 0;
|
|
380
|
+
padding: 0;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* 1. Remove default vertical scrollbar in IE 8/9.
|
|
385
|
+
* 2. Improve readability and alignment in all browsers.
|
|
386
|
+
*/
|
|
387
|
+
/* line 380, ../../foundation/sass/normalize.scss */
|
|
388
|
+
textarea {
|
|
389
|
+
overflow: auto;
|
|
390
|
+
/* 1 */
|
|
391
|
+
vertical-align: top;
|
|
392
|
+
/* 2 */
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/* ==========================================================================
|
|
396
|
+
Tables
|
|
397
|
+
========================================================================== */
|
|
398
|
+
/**
|
|
399
|
+
* Remove most spacing between table cells.
|
|
400
|
+
*/
|
|
401
|
+
/* line 393, ../../foundation/sass/normalize.scss */
|
|
402
|
+
table {
|
|
403
|
+
border-collapse: collapse;
|
|
404
|
+
border-spacing: 0;
|
|
405
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* Blue: 094AB2 */
|
|
2
|
+
|
|
3
|
+
body {
|
|
4
|
+
background: #272822;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
#wrapper {
|
|
8
|
+
background-color: #fff;
|
|
9
|
+
width: 630px;
|
|
10
|
+
height: 500px;
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
margin: 50px auto;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.top-bar {
|
|
16
|
+
background-color: #094AB2;
|
|
17
|
+
padding: 0 10px;
|
|
18
|
+
margin-bottom: 0px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ul.breadcrumbs {
|
|
22
|
+
border-top: 0px;
|
|
23
|
+
border-right: 0px;
|
|
24
|
+
border-left: 0px;
|
|
25
|
+
-webkit-border-radius: 0px;
|
|
26
|
+
border-radius: 0px;
|
|
27
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Skydrive
|
|
2
|
+
class ApiKeysController < ApplicationController
|
|
3
|
+
def oauth2_token
|
|
4
|
+
api_key = ApiKey.trade_oauth_code_for_access_token(params['code'])
|
|
5
|
+
if api_key
|
|
6
|
+
render json: { api_key: api_key }, status: 201
|
|
7
|
+
else
|
|
8
|
+
render json: {"message" => "invalid code"}, status: 400
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Skydrive
|
|
2
|
+
class ApplicationController < ActionController::Base
|
|
3
|
+
protected
|
|
4
|
+
|
|
5
|
+
# Renders a 401 status code if the current user is not authorized
|
|
6
|
+
def ensure_authenticated_user
|
|
7
|
+
head :unauthorized unless current_user
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Returns the active user associated with the access token if available
|
|
11
|
+
def current_user
|
|
12
|
+
return @current_user if @current_user
|
|
13
|
+
if current_api_key
|
|
14
|
+
return @current_user = current_api_key.user
|
|
15
|
+
else
|
|
16
|
+
return nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Parses the access token from the header
|
|
21
|
+
def current_api_key
|
|
22
|
+
return @current_api_key if @current_api_key.present?
|
|
23
|
+
|
|
24
|
+
bearer = request.headers["HTTP_AUTHORIZATION"]
|
|
25
|
+
|
|
26
|
+
bearer ||= params[:access_token]
|
|
27
|
+
|
|
28
|
+
# allows our tests to pass
|
|
29
|
+
bearer ||= request.headers["rack.session"].try(:[], 'Authorization')
|
|
30
|
+
|
|
31
|
+
if bearer.present?
|
|
32
|
+
token = bearer.split.last
|
|
33
|
+
@current_api_key = ApiKey.where(access_token: token).first
|
|
34
|
+
else
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
@current_api_key
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_dependency "skydrive/application_controller"
|
|
2
|
+
|
|
3
|
+
module Skydrive
|
|
4
|
+
class EmberController < ApplicationController
|
|
5
|
+
def index
|
|
6
|
+
@env = {
|
|
7
|
+
'CONFIG' => {
|
|
8
|
+
root_path: root_path
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
render layout: false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def health_check
|
|
15
|
+
begin
|
|
16
|
+
ApiKey.count
|
|
17
|
+
head 200
|
|
18
|
+
rescue
|
|
19
|
+
head 500
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'open-uri'
|
|
2
|
+
|
|
3
|
+
module Skydrive
|
|
4
|
+
class FilesController < ApplicationController
|
|
5
|
+
before_filter :ensure_authenticated_user, except: :download
|
|
6
|
+
before_filter :ensure_valid_skydrive_token, except: :download
|
|
7
|
+
|
|
8
|
+
def ensure_valid_skydrive_token
|
|
9
|
+
head :unauthorized unless current_user.valid_skydrive_token?
|
|
10
|
+
|
|
11
|
+
if current_user.token.not_before > Time.now
|
|
12
|
+
results = client.refresh_token(current_user.token.refresh_token)
|
|
13
|
+
current_user.token.update_attributes(results)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def client
|
|
18
|
+
@client ||= Skydrive::Client.new(SHAREPOINT.merge(
|
|
19
|
+
client_domain: current_user.token.client_domain,
|
|
20
|
+
token: current_user.token.access_token))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def index
|
|
24
|
+
uri = params[:uri]
|
|
25
|
+
uri = nil if uri == 'root' || uri == 'undefined'
|
|
26
|
+
has_parent = true
|
|
27
|
+
unless uri.present?
|
|
28
|
+
personal_url = current_user.token.personal_url
|
|
29
|
+
data = client.api_call(personal_url + "_api/web/lists/Documents/")
|
|
30
|
+
uri = data['RootFolder']['__deferred']['uri']
|
|
31
|
+
has_parent = false
|
|
32
|
+
end
|
|
33
|
+
folder = client.get_folder_and_files(uri)
|
|
34
|
+
folder.parent_uri = nil unless has_parent
|
|
35
|
+
|
|
36
|
+
tp = IMS::LTI::ToolProvider.new(nil, nil, current_api_key.params)
|
|
37
|
+
tp.extend IMS::LTI::Extensions::Content::ToolProvider
|
|
38
|
+
|
|
39
|
+
# Update the files with the correct homework submission url
|
|
40
|
+
folder.files.each do |file|
|
|
41
|
+
file.update_content_type_data( current_api_key.accepted_extensions )
|
|
42
|
+
file_download_url = download_url(token: current_api_key.access_token, file: file.server_relative_url)
|
|
43
|
+
file.homework_submission_url = tp.file_content_return_url(file_download_url, file.name)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
render json: folder
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def download
|
|
50
|
+
api_key = ApiKey.where(access_token: params[:token]).first
|
|
51
|
+
if api_key
|
|
52
|
+
user = api_key.user
|
|
53
|
+
uri = "#{user.token.personal_url}_api/Web/GetFileByServerRelativeUrl('#{params[:file].gsub(/ /, '%20')}')/$value"
|
|
54
|
+
tempfile = open(uri, { "Authorization" => "Bearer #{user.token.access_token}"})
|
|
55
|
+
send_file tempfile.path, filename: params[:file].split('/').last
|
|
56
|
+
else
|
|
57
|
+
render status: 401
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|