platform 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (480) hide show
  1. data/.gitignore +21 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +191 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +5 -0
  7. data/Rakefile +37 -0
  8. data/app/assets/images/platform/.gitkeep +0 -0
  9. data/app/assets/images/platform/accept.png +0 -0
  10. data/app/assets/images/platform/action_tab_bkgd.gif +0 -0
  11. data/app/assets/images/platform/action_tab_white_bkgd.gif +0 -0
  12. data/app/assets/images/platform/add.png +0 -0
  13. data/app/assets/images/platform/apps/app_icon.gif +0 -0
  14. data/app/assets/images/platform/apps/app_logo.gif +0 -0
  15. data/app/assets/images/platform/arrow_down.gif +0 -0
  16. data/app/assets/images/platform/arrow_down.png +0 -0
  17. data/app/assets/images/platform/arrow_down_grey.png +0 -0
  18. data/app/assets/images/platform/arrow_right.gif +0 -0
  19. data/app/assets/images/platform/arrow_up.png +0 -0
  20. data/app/assets/images/platform/arrow_up_grey.png +0 -0
  21. data/app/assets/images/platform/bullet_go.png +0 -0
  22. data/app/assets/images/platform/buttons.png +0 -0
  23. data/app/assets/images/platform/cancel.png +0 -0
  24. data/app/assets/images/platform/clipboard_icon.gif +0 -0
  25. data/app/assets/images/platform/close.gif +0 -0
  26. data/app/assets/images/platform/cross.png +0 -0
  27. data/app/assets/images/platform/default_app_icon.gif +0 -0
  28. data/app/assets/images/platform/default_app_logo.gif +0 -0
  29. data/app/assets/images/platform/delete.png +0 -0
  30. data/app/assets/images/platform/disk.png +0 -0
  31. data/app/assets/images/platform/exclamation.png +0 -0
  32. data/app/assets/images/platform/eye.png +0 -0
  33. data/app/assets/images/platform/eye_not.png +0 -0
  34. data/app/assets/images/platform/field_sprite.gif +0 -0
  35. data/app/assets/images/platform/find.png +0 -0
  36. data/app/assets/images/platform/globe.gif +0 -0
  37. data/app/assets/images/platform/help.png +0 -0
  38. data/app/assets/images/platform/help/app_reg.png +0 -0
  39. data/app/assets/images/platform/help/app_reg_ext.png +0 -0
  40. data/app/assets/images/platform/help/app_reg_web.png +0 -0
  41. data/app/assets/images/platform/help/auth_desktop.png +0 -0
  42. data/app/assets/images/platform/help/auth_iframe.png +0 -0
  43. data/app/assets/images/platform/help/auth_iphone.png +0 -0
  44. data/app/assets/images/platform/help/auth_web.png +0 -0
  45. data/app/assets/images/platform/help/authorize.png +0 -0
  46. data/app/assets/images/platform/help/ext.png +0 -0
  47. data/app/assets/images/platform/help/login.png +0 -0
  48. data/app/assets/images/platform/help/login_desktop.png +0 -0
  49. data/app/assets/images/platform/help/login_iphone.png +0 -0
  50. data/app/assets/images/platform/help/login_web.png +0 -0
  51. data/app/assets/images/platform/help2.png +0 -0
  52. data/app/assets/images/platform/information.png +0 -0
  53. data/app/assets/images/platform/keyboard.png +0 -0
  54. data/app/assets/images/platform/language_selector_arrow.gif +0 -0
  55. data/app/assets/images/platform/left_quote.png +0 -0
  56. data/app/assets/images/platform/lightning.png +0 -0
  57. data/app/assets/images/platform/loading.gif +0 -0
  58. data/app/assets/images/platform/loading2.gif +0 -0
  59. data/app/assets/images/platform/loading3.gif +0 -0
  60. data/app/assets/images/platform/loading_animation.gif +0 -0
  61. data/app/assets/images/platform/loading_large.gif +0 -0
  62. data/app/assets/images/platform/lock.png +0 -0
  63. data/app/assets/images/platform/lock_add.png +0 -0
  64. data/app/assets/images/platform/lock_delete.png +0 -0
  65. data/app/assets/images/platform/lock_open.png +0 -0
  66. data/app/assets/images/platform/medals/bronze.png +0 -0
  67. data/app/assets/images/platform/medals/gold.png +0 -0
  68. data/app/assets/images/platform/medals/runner.png +0 -0
  69. data/app/assets/images/platform/medals/silver.png +0 -0
  70. data/app/assets/images/platform/minus_node.png +0 -0
  71. data/app/assets/images/platform/oauth/perm_tile.gif +0 -0
  72. data/app/assets/images/platform/oauth/right_grey.png +0 -0
  73. data/app/assets/images/platform/pencil.png +0 -0
  74. data/app/assets/images/platform/photo_silhouette.gif +0 -0
  75. data/app/assets/images/platform/pixel.gif +0 -0
  76. data/app/assets/images/platform/platform.png +0 -0
  77. data/app/assets/images/platform/platform2.png +0 -0
  78. data/app/assets/images/platform/platform3.png +0 -0
  79. data/app/assets/images/platform/platform4.png +0 -0
  80. data/app/assets/images/platform/platform5.png +0 -0
  81. data/app/assets/images/platform/plus.png +0 -0
  82. data/app/assets/images/platform/plus_node.png +0 -0
  83. data/app/assets/images/platform/random.png +0 -0
  84. data/app/assets/images/platform/random2.png +0 -0
  85. data/app/assets/images/platform/rating_star0.png +0 -0
  86. data/app/assets/images/platform/rating_star05.png +0 -0
  87. data/app/assets/images/platform/rating_star1.png +0 -0
  88. data/app/assets/images/platform/rating_stars.gif +0 -0
  89. data/app/assets/images/platform/rating_stars.psd +0 -0
  90. data/app/assets/images/platform/reply.png +0 -0
  91. data/app/assets/images/platform/right_quote.png +0 -0
  92. data/app/assets/images/platform/rotating_world.gif +0 -0
  93. data/app/assets/images/platform/script.png +0 -0
  94. data/app/assets/images/platform/script_edit.png +0 -0
  95. data/app/assets/images/platform/script_gear.png +0 -0
  96. data/app/assets/images/platform/site_sprite.gif +0 -0
  97. data/app/assets/images/platform/spinner.gif +0 -0
  98. data/app/assets/images/platform/star.png +0 -0
  99. data/app/assets/images/platform/table_edit.png +0 -0
  100. data/app/assets/images/platform/table_gear.png +0 -0
  101. data/app/assets/images/platform/table_multiple.png +0 -0
  102. data/app/assets/images/platform/thumb_down.png +0 -0
  103. data/app/assets/images/platform/thumb_up.png +0 -0
  104. data/app/assets/images/platform/top_left_stem.png +0 -0
  105. data/app/assets/images/platform/top_right_stem.png +0 -0
  106. data/app/assets/images/platform/translate_icn.gif +0 -0
  107. data/app/assets/images/platform/treeview/diffDoc.gif +0 -0
  108. data/app/assets/images/platform/treeview/diffFolder.gif +0 -0
  109. data/app/assets/images/platform/treeview/ftv2blank.gif +0 -0
  110. data/app/assets/images/platform/treeview/ftv2doc.gif +0 -0
  111. data/app/assets/images/platform/treeview/ftv2folderclosed.gif +0 -0
  112. data/app/assets/images/platform/treeview/ftv2folderopen.gif +0 -0
  113. data/app/assets/images/platform/treeview/ftv2lastnode.gif +0 -0
  114. data/app/assets/images/platform/treeview/ftv2link.gif +0 -0
  115. data/app/assets/images/platform/treeview/ftv2mlastnode.gif +0 -0
  116. data/app/assets/images/platform/treeview/ftv2mnode.gif +0 -0
  117. data/app/assets/images/platform/treeview/ftv2node.gif +0 -0
  118. data/app/assets/images/platform/treeview/ftv2plastnode.gif +0 -0
  119. data/app/assets/images/platform/treeview/ftv2pnode.gif +0 -0
  120. data/app/assets/images/platform/treeview/ftv2vertline.gif +0 -0
  121. data/app/assets/images/platform/wizard.png +0 -0
  122. data/app/assets/images/platform/world_link.png +0 -0
  123. data/app/assets/javascripts/platform/api_explorer.js +628 -0
  124. data/app/assets/javascripts/platform/application.js +9 -0
  125. data/app/assets/javascripts/platform/ftiens4.js +1197 -0
  126. data/app/assets/javascripts/platform/jsdk.js +539 -0
  127. data/app/assets/javascripts/platform/platform.js +447 -0
  128. data/app/assets/javascripts/platform/shortcut.js +223 -0
  129. data/app/assets/javascripts/platform/ua.js +147 -0
  130. data/app/assets/stylesheets/platform/api_explorer.css.scss +140 -0
  131. data/app/assets/stylesheets/platform/application.css.scss +6 -0
  132. data/app/assets/stylesheets/platform/components.css.scss +208 -0
  133. data/app/assets/stylesheets/platform/layout.css.scss +119 -0
  134. data/app/assets/stylesheets/platform/oauth.css +51 -0
  135. data/app/assets/stylesheets/platform/platform.css.scss +311 -0
  136. data/app/controllers/platform/admin/apps_controller.rb +99 -0
  137. data/app/controllers/platform/admin/base_controller.rb +60 -0
  138. data/app/controllers/platform/admin/categories_controller.rb +132 -0
  139. data/app/controllers/platform/admin/clientsdk_controller.rb +30 -0
  140. data/app/controllers/platform/admin/developers_controller.rb +30 -0
  141. data/app/controllers/platform/admin/exceptions_controller.rb +30 -0
  142. data/app/controllers/platform/admin/forum_controller.rb +34 -0
  143. data/app/controllers/platform/admin/metrics_controller.rb +42 -0
  144. data/app/controllers/platform/api/apps_controller.rb +40 -0
  145. data/app/controllers/platform/api/base_controller.rb +541 -0
  146. data/app/controllers/platform/apps_controller.rb +142 -0
  147. data/app/controllers/platform/base_controller.rb +127 -0
  148. data/app/controllers/platform/developer/api_explorer_controller.rb +56 -0
  149. data/app/controllers/platform/developer/apps_controller.rb +161 -0
  150. data/app/controllers/platform/developer/base_controller.rb +51 -0
  151. data/app/controllers/platform/developer/blog_controller.rb +29 -0
  152. data/app/controllers/platform/developer/dashboard_controller.rb +63 -0
  153. data/app/controllers/platform/developer/forum_controller.rb +85 -0
  154. data/app/controllers/platform/developer/help_controller.rb +113 -0
  155. data/app/controllers/platform/developer/info_controller.rb +41 -0
  156. data/app/controllers/platform/developer/registration_controller.rb +39 -0
  157. data/app/controllers/platform/developer/resources_controller.rb +30 -0
  158. data/app/controllers/platform/forum_controller.rb +74 -0
  159. data/app/controllers/platform/oauth_controller.rb +421 -0
  160. data/app/controllers/platform/ratings_controller.rb +61 -0
  161. data/app/helpers/platform/admin/categories_helper.rb +54 -0
  162. data/app/helpers/platform/apps_helper.rb +26 -0
  163. data/app/helpers/platform/developer/dashboard_helper.rb +42 -0
  164. data/app/helpers/platform/developer/help_helper.rb +45 -0
  165. data/app/helpers/platform_helper.rb +26 -0
  166. data/app/models/platform/application.rb +394 -0
  167. data/app/models/platform/application_category.rb +34 -0
  168. data/app/models/platform/application_developer.rb +30 -0
  169. data/app/models/platform/application_filter.rb +30 -0
  170. data/app/models/platform/application_log.rb +32 -0
  171. data/app/models/platform/application_log_filter.rb +34 -0
  172. data/app/models/platform/application_metric.rb +58 -0
  173. data/app/models/platform/application_metric_filter.rb +34 -0
  174. data/app/models/platform/application_permission.rb +30 -0
  175. data/app/models/platform/application_permission_filter.rb +30 -0
  176. data/app/models/platform/application_usage_metric.rb +58 -0
  177. data/app/models/platform/application_usage_metric_filter.rb +34 -0
  178. data/app/models/platform/application_user.rb +45 -0
  179. data/app/models/platform/application_user_filter.rb +34 -0
  180. data/app/models/platform/base_filter.rb +46 -0
  181. data/app/models/platform/category.rb +64 -0
  182. data/app/models/platform/daily_application_metric.rb +31 -0
  183. data/app/models/platform/developer.rb +45 -0
  184. data/app/models/platform/developer_filter.rb +26 -0
  185. data/app/models/platform/forum_message.rb +35 -0
  186. data/app/models/platform/forum_message_filter.rb +26 -0
  187. data/app/models/platform/forum_topic.rb +38 -0
  188. data/app/models/platform/forum_topic_filter.rb +26 -0
  189. data/app/models/platform/logged_exception.rb +290 -0
  190. data/app/models/platform/logged_exception_filter.rb +58 -0
  191. data/app/models/platform/media/image.rb +26 -0
  192. data/app/models/platform/media/media.rb +58 -0
  193. data/app/models/platform/monthly_application_metric.rb +31 -0
  194. data/app/models/platform/oauth/access_token.rb +57 -0
  195. data/app/models/platform/oauth/client_token.rb +38 -0
  196. data/app/models/platform/oauth/oauth_model_methods.rb +41 -0
  197. data/app/models/platform/oauth/oauth_token.rb +57 -0
  198. data/app/models/platform/oauth/oauth_token_filter.rb +34 -0
  199. data/app/models/platform/oauth/refresh_token.rb +47 -0
  200. data/app/models/platform/oauth/request_token.rb +50 -0
  201. data/app/models/platform/permission.rb +27 -0
  202. data/app/models/platform/rating.rb +43 -0
  203. data/app/models/platform/rating_filter.rb +30 -0
  204. data/app/models/platform/rollup_log.rb +27 -0
  205. data/app/models/platform/rollup_log_filter.rb +30 -0
  206. data/app/models/platform/total_application_metric.rb +40 -0
  207. data/app/models/platform/weekly_application_metric.rb +31 -0
  208. data/app/views/platform/admin/apps/_categories.html.erb +17 -0
  209. data/app/views/platform/admin/apps/_categories_scripts.html.erb +17 -0
  210. data/app/views/platform/admin/apps/_tabs.html.erb +25 -0
  211. data/app/views/platform/admin/apps/index.html.erb +32 -0
  212. data/app/views/platform/admin/apps/permissions.html.erb +7 -0
  213. data/app/views/platform/admin/apps/ratings.html.erb +7 -0
  214. data/app/views/platform/admin/apps/tokens.html.erb +18 -0
  215. data/app/views/platform/admin/apps/users.html.erb +7 -0
  216. data/app/views/platform/admin/apps/view.html.erb +170 -0
  217. data/app/views/platform/admin/categories/_tabs.html.erb +22 -0
  218. data/app/views/platform/admin/categories/category_assigner.html.erb +9 -0
  219. data/app/views/platform/admin/categories/category_assigner_tree.html.erb +81 -0
  220. data/app/views/platform/admin/categories/index.html.erb +106 -0
  221. data/app/views/platform/admin/categories/items.html.erb +153 -0
  222. data/app/views/platform/admin/categories/lb_update_application_category.html.erb +54 -0
  223. data/app/views/platform/admin/categories/lb_update_category.html.erb +64 -0
  224. data/app/views/platform/admin/categories/tree.html.erb +64 -0
  225. data/app/views/platform/admin/clientsdk/index.html.erb +89 -0
  226. data/app/views/platform/admin/common/_footer.html.erb +1 -0
  227. data/app/views/platform/admin/common/_header.html.erb +32 -0
  228. data/app/views/platform/admin/common/_lightbox_buttons.html.erb +5 -0
  229. data/app/views/platform/admin/common/_paginator.html.erb +20 -0
  230. data/app/views/platform/admin/developers/_tabs.html.erb +22 -0
  231. data/app/views/platform/admin/developers/index.html.erb +7 -0
  232. data/app/views/platform/admin/exceptions/_tabs.html.erb +22 -0
  233. data/app/views/platform/admin/exceptions/index.html.erb +7 -0
  234. data/app/views/platform/admin/forum/_tabs.html.erb +22 -0
  235. data/app/views/platform/admin/forum/index.html.erb +7 -0
  236. data/app/views/platform/admin/forum/messages.html.erb +7 -0
  237. data/app/views/platform/admin/metrics/_tabs.html.erb +25 -0
  238. data/app/views/platform/admin/metrics/application_log.html.erb +7 -0
  239. data/app/views/platform/admin/metrics/index.html.erb +9 -0
  240. data/app/views/platform/admin/metrics/rollup_log.html.erb +7 -0
  241. data/app/views/platform/admin/metrics/usage.html.erb +7 -0
  242. data/app/views/platform/apps/_actions_module.html.erb +3 -0
  243. data/app/views/platform/apps/_app_footer.html.erb +8 -0
  244. data/app/views/platform/apps/_app_header.html.erb +25 -0
  245. data/app/views/platform/apps/_apps_module.html.erb +42 -0
  246. data/app/views/platform/apps/_authorize_form.html.erb +11 -0
  247. data/app/views/platform/apps/_categories_module.html.erb +11 -0
  248. data/app/views/platform/apps/_featured_apps_module.html.erb +40 -0
  249. data/app/views/platform/apps/_left.html.erb +20 -0
  250. data/app/views/platform/apps/_monthly_users_module.html.erb +8 -0
  251. data/app/views/platform/apps/_paginator.html.erb +13 -0
  252. data/app/views/platform/apps/_rank_module.html.erb +18 -0
  253. data/app/views/platform/apps/_search_apps_module.html.erb +35 -0
  254. data/app/views/platform/apps/canvas_app.html.erb +15 -0
  255. data/app/views/platform/apps/index.html.erb +86 -0
  256. data/app/views/platform/apps/view.html.erb +71 -0
  257. data/app/views/platform/apps/xd.html.erb +11 -0
  258. data/app/views/platform/common/_footer.html.erb +1 -0
  259. data/app/views/platform/common/_header.html.erb +4 -0
  260. data/app/views/platform/common/_paginator.html.erb +32 -0
  261. data/app/views/platform/common/_scripts.html.erb +7 -0
  262. data/app/views/platform/common/_user_login.html.erb +11 -0
  263. data/app/views/platform/developer/api_explorer/history.html.erb +31 -0
  264. data/app/views/platform/developer/api_explorer/index.html.erb +134 -0
  265. data/app/views/platform/developer/api_explorer/oauth_lander.html.erb +4 -0
  266. data/app/views/platform/developer/api_explorer/options.html.erb +44 -0
  267. data/app/views/platform/developer/apps/_form.html.erb +340 -0
  268. data/app/views/platform/developer/apps/create_version.html.erb +19 -0
  269. data/app/views/platform/developer/apps/edit.html.erb +21 -0
  270. data/app/views/platform/developer/apps/index.html.erb +375 -0
  271. data/app/views/platform/developer/apps/new.html.erb +20 -0
  272. data/app/views/platform/developer/blog/index.html.erb +7 -0
  273. data/app/views/platform/developer/common/_footer.html.erb +1 -0
  274. data/app/views/platform/developer/common/_header.html.erb +34 -0
  275. data/app/views/platform/developer/dashboard/_apps_info.html.erb +84 -0
  276. data/app/views/platform/developer/dashboard/_discussions.html.erb +68 -0
  277. data/app/views/platform/developer/dashboard/_header.html.erb +12 -0
  278. data/app/views/platform/developer/dashboard/_reviews.html.erb +53 -0
  279. data/app/views/platform/developer/dashboard/_statistics.html.erb +105 -0
  280. data/app/views/platform/developer/dashboard/index.html.erb +85 -0
  281. data/app/views/platform/developer/dashboard/settings.html.erb +23 -0
  282. data/app/views/platform/developer/forum/_message.html.erb +17 -0
  283. data/app/views/platform/developer/forum/_messages.html.erb +14 -0
  284. data/app/views/platform/developer/forum/_new_message.html.erb +28 -0
  285. data/app/views/platform/developer/forum/_new_topic.html.erb +39 -0
  286. data/app/views/platform/developer/forum/index.html.erb +89 -0
  287. data/app/views/platform/developer/forum/topic.html.erb +28 -0
  288. data/app/views/platform/developer/help/_footer.html.erb +4 -0
  289. data/app/views/platform/developer/help/_header.html.erb +95 -0
  290. data/app/views/platform/developer/help/_navigation.html.erb +99 -0
  291. data/app/views/platform/developer/help/api.html.erb +120 -0
  292. data/app/views/platform/developer/help/credits.html.erb +77 -0
  293. data/app/views/platform/developer/help/index.html.erb +19 -0
  294. data/app/views/platform/developer/help/license.html.erb +586 -0
  295. data/app/views/platform/developer/help/oauth_app_login.html.erb +177 -0
  296. data/app/views/platform/developer/help/oauth_client_side.html.erb +264 -0
  297. data/app/views/platform/developer/help/oauth_desktop.html.erb +191 -0
  298. data/app/views/platform/developer/help/oauth_extensions.html.erb +342 -0
  299. data/app/views/platform/developer/help/oauth_intro.html.erb +371 -0
  300. data/app/views/platform/developer/help/oauth_mobile.html.erb +292 -0
  301. data/app/views/platform/developer/help/oauth_server_side.html.erb +603 -0
  302. data/app/views/platform/developer/help/oauth_trusted_client.html.erb +202 -0
  303. data/app/views/platform/developer/help/reference.html.erb +42 -0
  304. data/app/views/platform/developer/help/sdk_ios.html.erb +31 -0
  305. data/app/views/platform/developer/help/sdk_js.html.erb +202 -0
  306. data/app/views/platform/developer/info/_basic_info.html.erb +74 -0
  307. data/app/views/platform/developer/info/_header.html.erb +12 -0
  308. data/app/views/platform/developer/info/index.html.erb +23 -0
  309. data/app/views/platform/developer/registration/index.html.erb +134 -0
  310. data/app/views/platform/developer/resources/index.html.erb +23 -0
  311. data/app/views/platform/forum/_message.html.erb +17 -0
  312. data/app/views/platform/forum/_messages.html.erb +14 -0
  313. data/app/views/platform/forum/_new_message.html.erb +26 -0
  314. data/app/views/platform/forum/_new_topic.html.erb +38 -0
  315. data/app/views/platform/forum/_topic.html.erb +18 -0
  316. data/app/views/platform/forum/_topics.html.erb +74 -0
  317. data/app/views/platform/login/index.html.erb +31 -0
  318. data/app/views/platform/login/register.html.erb +55 -0
  319. data/app/views/platform/oauth/_authorization_box.html.erb +75 -0
  320. data/app/views/platform/oauth/_authorization_popup.html.erb +38 -0
  321. data/app/views/platform/oauth/_authorize_form.html.erb +11 -0
  322. data/app/views/platform/oauth/auth_failed.html.erb +0 -0
  323. data/app/views/platform/oauth/auth_success.html.erb +0 -0
  324. data/app/views/platform/oauth/authorize_desktop.html.erb +76 -0
  325. data/app/views/platform/oauth/authorize_failure_iframe.html.erb +1 -0
  326. data/app/views/platform/oauth/authorize_failure_mobile.html.erb +24 -0
  327. data/app/views/platform/oauth/authorize_failure_popup.html.erb +24 -0
  328. data/app/views/platform/oauth/authorize_failure_web.html.erb +1 -0
  329. data/app/views/platform/oauth/authorize_iframe.html.erb +16 -0
  330. data/app/views/platform/oauth/authorize_mobile.html.erb +1 -0
  331. data/app/views/platform/oauth/authorize_popup.html.erb +1 -0
  332. data/app/views/platform/oauth/authorize_success_iframe.html.erb +1 -0
  333. data/app/views/platform/oauth/authorize_success_mobile.html.erb +24 -0
  334. data/app/views/platform/oauth/authorize_success_popup.html.erb +24 -0
  335. data/app/views/platform/oauth/authorize_success_web.html.erb +1 -0
  336. data/app/views/platform/oauth/authorize_web.html.erb +3 -0
  337. data/app/views/platform/oauth/xd.html.erb +13 -0
  338. data/app/views/platform/ratings/_list.html.erb +30 -0
  339. data/app/views/platform/ratings/_new.html.erb +70 -0
  340. data/app/views/platform/ratings/_rating.html.erb +17 -0
  341. data/config/platform/config.yml +133 -0
  342. data/config/platform/data/default_applications.yml +39 -0
  343. data/config/platform/data/default_categories.yml +56 -0
  344. data/config/platform/data/default_permissions.yml +0 -0
  345. data/config/platform/site/features.yml +66 -0
  346. data/config/routes.rb +59 -0
  347. data/db/migrate/20110602232141_create_platform_tables.rb +262 -0
  348. data/docs/Classes.graffle +7315 -0
  349. data/docs/Classes.pdf +0 -0
  350. data/lib/generators/platform/platform_generator.rb +56 -0
  351. data/lib/generators/platform/templates/db/create_platform_tables.rb +262 -0
  352. data/lib/generators/platform/templates/layouts/platform.html.erb +49 -0
  353. data/lib/generators/platform/templates/layouts/platform_admin.html.erb +60 -0
  354. data/lib/platform.rb +6 -0
  355. data/lib/platform/api/already_jsoned_string.rb +9 -0
  356. data/lib/platform/api/proxy.rb +45 -0
  357. data/lib/platform/api/proxy/base.rb +62 -0
  358. data/lib/platform/cache.rb +78 -0
  359. data/lib/platform/config.rb +666 -0
  360. data/lib/platform/engine.rb +5 -0
  361. data/lib/platform/exception.rb +27 -0
  362. data/lib/platform/extensions/action_controller_extension.rb +65 -0
  363. data/lib/platform/extensions/action_view_extension.rb +168 -0
  364. data/lib/platform/extensions/object_extension.rb +51 -0
  365. data/lib/platform/helper.rb +33 -0
  366. data/lib/platform/logger.rb +62 -0
  367. data/lib/platform/railtie.rb +52 -0
  368. data/lib/platform/random_password_generator.rb +76 -0
  369. data/lib/platform/simple_string_permissions.rb +40 -0
  370. data/lib/platform/version.rb +3 -0
  371. data/lib/tasks/platform.rake +119 -0
  372. data/platform.gemspec +45 -0
  373. data/script/rails +6 -0
  374. data/spec/config/config_spec.rb +10 -0
  375. data/spec/dummy_app.rb +52 -0
  376. data/spec/models/application_spec.rb +53 -0
  377. data/spec/models/developer_spec.rb +23 -0
  378. data/spec/spec_helper.rb +29 -0
  379. data/test/dummy/Rakefile +7 -0
  380. data/test/dummy/app/assets/javascripts/application.js +7 -0
  381. data/test/dummy/app/assets/stylesheets/admin.css +200 -0
  382. data/test/dummy/app/assets/stylesheets/application.css +47 -0
  383. data/test/dummy/app/assets/stylesheets/components.css.scss +211 -0
  384. data/test/dummy/app/assets/stylesheets/layout.css.scss +143 -0
  385. data/test/dummy/app/controllers/admin/admins_controller.rb +7 -0
  386. data/test/dummy/app/controllers/admin/base_controller.rb +12 -0
  387. data/test/dummy/app/controllers/admin/bookmarks_controller.rb +7 -0
  388. data/test/dummy/app/controllers/admin/users_controller.rb +19 -0
  389. data/test/dummy/app/controllers/api/base_controller.rb +5 -0
  390. data/test/dummy/app/controllers/api/bookmarks_controller.rb +35 -0
  391. data/test/dummy/app/controllers/api/users_controller.rb +19 -0
  392. data/test/dummy/app/controllers/application_controller.rb +31 -0
  393. data/test/dummy/app/controllers/home_controller.rb +7 -0
  394. data/test/dummy/app/controllers/login_controller.rb +65 -0
  395. data/test/dummy/app/helpers/application_helper.rb +9 -0
  396. data/test/dummy/app/helpers/home_helper.rb +2 -0
  397. data/test/dummy/app/mailers/.gitkeep +0 -0
  398. data/test/dummy/app/models/.gitkeep +0 -0
  399. data/test/dummy/app/models/admin.rb +4 -0
  400. data/test/dummy/app/models/admin_filter.rb +7 -0
  401. data/test/dummy/app/models/bookmark.rb +7 -0
  402. data/test/dummy/app/models/user.rb +34 -0
  403. data/test/dummy/app/views/admin/admins/index.html.erb +7 -0
  404. data/test/dummy/app/views/admin/bookmarks/index.html.erb +5 -0
  405. data/test/dummy/app/views/admin/users/index.html.erb +10 -0
  406. data/test/dummy/app/views/demo/index.rhtml +108 -0
  407. data/test/dummy/app/views/demo/tokens.rhtml +35 -0
  408. data/test/dummy/app/views/home/index.html.erb +43 -0
  409. data/test/dummy/app/views/layouts/_footer.html.erb +16 -0
  410. data/test/dummy/app/views/layouts/_header.html.erb +22 -0
  411. data/test/dummy/app/views/layouts/admin.html.erb +97 -0
  412. data/test/dummy/app/views/layouts/application.html.erb +25 -0
  413. data/test/dummy/app/views/layouts/minimal.html.erb +37 -0
  414. data/test/dummy/app/views/layouts/popup.html.erb +43 -0
  415. data/test/dummy/app/views/login/index.html.erb +34 -0
  416. data/test/dummy/app/views/login/register.html.erb +51 -0
  417. data/test/dummy/config.ru +4 -0
  418. data/test/dummy/config/application.rb +51 -0
  419. data/test/dummy/config/boot.rb +10 -0
  420. data/test/dummy/config/database.yml +25 -0
  421. data/test/dummy/config/environment.rb +5 -0
  422. data/test/dummy/config/environments/development.rb +30 -0
  423. data/test/dummy/config/environments/production.rb +60 -0
  424. data/test/dummy/config/environments/test.rb +42 -0
  425. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  426. data/test/dummy/config/initializers/inflections.rb +10 -0
  427. data/test/dummy/config/initializers/mime_types.rb +5 -0
  428. data/test/dummy/config/initializers/secret_token.rb +7 -0
  429. data/test/dummy/config/initializers/session_store.rb +8 -0
  430. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  431. data/test/dummy/config/locales/en.yml +5 -0
  432. data/test/dummy/config/platform/api/0/bookmark.yml +18 -0
  433. data/test/dummy/config/platform/api/0/user.yml +17 -0
  434. data/test/dummy/config/platform/api/1/bookmark.yml +58 -0
  435. data/test/dummy/config/platform/api/1/user.yml +36 -0
  436. data/test/dummy/config/platform/config.yml +135 -0
  437. data/test/dummy/config/platform/data/default_applications.yml +39 -0
  438. data/test/dummy/config/platform/data/default_categories.yml +56 -0
  439. data/test/dummy/config/platform/data/default_permissions.yml +0 -0
  440. data/test/dummy/config/platform/site/features.yml +66 -0
  441. data/test/dummy/config/platform/site/sample_apps.yml +100 -0
  442. data/test/dummy/config/routes.rb +30 -0
  443. data/test/dummy/config/tr8n/config.yml +247 -0
  444. data/test/dummy/config/tr8n/data/ip_locations.csv +93460 -0
  445. data/test/dummy/config/tr8n/rules/default_date_rules.yml +20 -0
  446. data/test/dummy/config/tr8n/rules/default_gender_list_rules.yml +82 -0
  447. data/test/dummy/config/tr8n/rules/default_gender_rules.yml +20 -0
  448. data/test/dummy/config/tr8n/rules/default_language_cases.yml +272 -0
  449. data/test/dummy/config/tr8n/rules/default_list_rules.yml +19 -0
  450. data/test/dummy/config/tr8n/rules/default_numeric_rules.yml +42 -0
  451. data/test/dummy/config/tr8n/rules/default_value_rules.yml +18 -0
  452. data/test/dummy/config/tr8n/site/default_glossary.yml +18 -0
  453. data/test/dummy/config/tr8n/site/default_languages.yml +1591 -0
  454. data/test/dummy/config/tr8n/site/features.yml +111 -0
  455. data/test/dummy/config/tr8n/site/shortcuts.yml +55 -0
  456. data/test/dummy/config/tr8n/site/sitemap.json +42 -0
  457. data/test/dummy/config/tr8n/tokens/data.yml +19 -0
  458. data/test/dummy/config/tr8n/tokens/decorations.yml +19 -0
  459. data/test/dummy/config/will_filter/config.yml +99 -0
  460. data/test/dummy/db/migrate/20101207014543_create_users.rb +23 -0
  461. data/test/dummy/db/migrate/20110113223509_create_admins.rb +15 -0
  462. data/test/dummy/db/migrate/20110930041143_create_will_filter_filters.rb +15 -0
  463. data/test/dummy/db/migrate/20110930041150_create_tr8n_tables.rb +350 -0
  464. data/test/dummy/db/migrate/20111004075531_create_platform_tables.rb +262 -0
  465. data/test/dummy/db/migrate/20111012055603_create_bookmarks.rb +10 -0
  466. data/test/dummy/db/schema.rb +683 -0
  467. data/test/dummy/lib/assets/.gitkeep +0 -0
  468. data/test/dummy/lib/platform/api/bookmark_proxy_0.rb +12 -0
  469. data/test/dummy/lib/platform/api/bookmark_proxy_1.rb +12 -0
  470. data/test/dummy/lib/platform/api/user_proxy_0.rb +12 -0
  471. data/test/dummy/lib/platform/api/user_proxy_1.rb +12 -0
  472. data/test/dummy/log/.gitkeep +0 -0
  473. data/test/dummy/public/404.html +26 -0
  474. data/test/dummy/public/422.html +26 -0
  475. data/test/dummy/public/500.html +26 -0
  476. data/test/dummy/public/favicon.ico +0 -0
  477. data/test/dummy/script/rails +6 -0
  478. data/test/dummy/test/fixtures/documents.yml +11 -0
  479. data/test/dummy/test/unit/document_test.rb +7 -0
  480. metadata +886 -0
@@ -0,0 +1,177 @@
1
+ <%= render :partial => "header" %>
2
+ <div class="documentation_section_title">
3
+ <%= tr("Application Login Flow") %>
4
+ </div>
5
+ <div class="documentation_section">
6
+ <p>
7
+ <%=tr("In this flow, application requests authorization to make calls on its behalf.") %>
8
+ <%=tr("By using this flow application will get higher rate limits for the public API calls than making unauthorized calls without an access token.") %>
9
+ <%=tr("Application will also be able to get app related data, such as statistics and metrics.") %>
10
+ </p>
11
+
12
+ <h2><%=tr("Application Authorization") %></h2>
13
+ <p>
14
+ <%=tr("In order to authenticate your app, you must pass the following parameter to the request_token endpoint:") %>
15
+ </p>
16
+ <h3><%=tr("Oauth Endpoint") %></h3>
17
+ <div class="code_snippet">
18
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/request_token
19
+ </div>
20
+ <h3><%=tr("Parameters") %></h3>
21
+ <p>
22
+ <table class="documentation_table">
23
+ <tr>
24
+ <th style="width:150px;">
25
+ <%=tr("Name") %>
26
+ </th>
27
+ <th>
28
+ <%=tr("Description") %>
29
+ </th>
30
+ <th style="width:150px;">
31
+ <%=tr("Required") %>
32
+ </th>
33
+ </tr>
34
+ <tr>
35
+ <td>
36
+ client_id
37
+ </td>
38
+ <td>
39
+ <%=tr("Application key generated during the app registration.") %>
40
+ </td>
41
+ <td>
42
+ true
43
+ </td>
44
+ </tr>
45
+ <tr>
46
+ <td>
47
+ client_secret
48
+ </td>
49
+ <td>
50
+ <%=tr("Application secret generated during the registration process and availble in the application settings.") %>
51
+ </td>
52
+ <td>
53
+ true
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <td>
58
+ grant_type
59
+ </td>
60
+ <td>
61
+ <%=tr("For this flow you must set it to \"client_credentials\".") %>
62
+ </td>
63
+ <td>
64
+ true
65
+ </td>
66
+ </tr>
67
+ </table>
68
+ </p>
69
+ <h3><%=tr("Example") %></h3>
70
+ <div class="code_snippet">
71
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/request_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials
72
+ </div>
73
+ <p>
74
+ <%=tr("If your app is successfully authenticated, the authorization server will return the access token in a JSON format:") %>
75
+ </p>
76
+ <h3><%=tr("Returned Fields") %></h3>
77
+ <p>
78
+ <table class="documentation_table">
79
+ <tr>
80
+ <th style="width:150px;">
81
+ <%=tr("Name") %>
82
+ </th>
83
+ <th style="width:150px;">
84
+ <%=tr("Type") %>
85
+ </th>
86
+ <th>
87
+ <%=tr("Description") %>
88
+ </th>
89
+ </tr>
90
+ <tr>
91
+ <td style="widtd:150px;">
92
+ access_token
93
+ </td>
94
+ <td style="widtd:150px;">
95
+ String
96
+ </td>
97
+ <td>
98
+ <%=tr("Access token to be used with every API request")%>
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <td style="widtd:150px;">
103
+ expires_in
104
+ </td>
105
+ <td style="widtd:150px;">
106
+ Number
107
+ </td>
108
+ <td>
109
+ <%=tr("Seconds until the token will expire") %>
110
+ </td>
111
+ </tr>
112
+ <tr>
113
+ <td style="widtd:150px;">
114
+ refresh_token
115
+ </td>
116
+ <td style="widtd:150px;">
117
+ String
118
+ </td>
119
+ <td>
120
+ <%=tr("Token that can be used to get a new access token") %>
121
+ </td>
122
+ </tr>
123
+ </table>
124
+ </p>
125
+ <h3><%=tr("Example") %></h3>
126
+ <div class="code_snippet">
127
+ {"expires_in":86400,"refresh_token":"wEq6FMb3CcfPN6CckQv7","access_token":"sye4NMd130L4wqq13zjqqLHwuHd5jnnKwdVi9S8X"}
128
+ </div>
129
+ <p>
130
+ <%=tr("If your app failed to provide appropriate parameters, you will get one of the errors below in JSON format: ") %>
131
+ </p>
132
+ <h3><%=tr("Returned Fields") %></h3>
133
+ <p>
134
+ <table class="documentation_table">
135
+ <tr>
136
+ <th style="width:150px;">
137
+ <%=tr("Name") %>
138
+ </th>
139
+ <th style="width:150px;">
140
+ <%=tr("Type") %>
141
+ </th>
142
+ <th>
143
+ <%=tr("Description") %>
144
+ </th>
145
+ </tr>
146
+ <tr>
147
+ <tr>
148
+ <td style="widtd:150px;">
149
+ error
150
+ </td>
151
+ <td style="widtd:150px;">
152
+ String
153
+ </td>
154
+ <td>
155
+ <%=tr("Error code") %>
156
+ </td>
157
+ </tr>
158
+ <tr>
159
+ <td style="widtd:150px;">
160
+ error_description
161
+ </td>
162
+ <td style="widtd:150px;">
163
+ String
164
+ </td>
165
+ <td>
166
+ <%=tr("Error description") %>
167
+ </td>
168
+ </tr>
169
+ </table>
170
+ </p>
171
+ <h3><%=tr("Examples") %></h3>
172
+ <div class="code_snippet">
173
+ {"error_description":"invalid client application id","error":"unauthorized_client"}
174
+ <br>
175
+ </div>
176
+ </div>
177
+ <%= render :partial => "footer" %>
@@ -0,0 +1,264 @@
1
+ <%= render :partial => "header" %>
2
+ <div class="documentation_section_title">
3
+ <%= tr("Client Side Authorization Flow") %>
4
+ </div>
5
+ <div class="documentation_section">
6
+ <p>
7
+ <%=tr("Client side authentication and authorization flow is very similar to the server side flow.") %>
8
+ <%=tr("The difference is in the parameters passed to the server and in the response fields that you get back.") %>
9
+ </p>
10
+ <h2><%=tr("Authentication & Authorization") %></h2>
11
+ <p>
12
+ <%=tr("To enter the authentication/authorization client-side flow, you must pass the following parameters to the authorization URL:")%>
13
+ </p>
14
+ <h3><%=tr("Oauth URL")%></h3>
15
+ <div class="code_snippet">
16
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/authorize
17
+ </div>
18
+ <h3><%=tr("Parameters")%></h3>
19
+ <p>
20
+ <table class="documentation_table">
21
+ <tr>
22
+ <th style="width:150px;">
23
+ <%=tr("Name") %>
24
+ </th>
25
+ <th>
26
+ <%=tr("Description") %>
27
+ </th>
28
+ <th style="width:150px;">
29
+ <%=tr("Required") %>
30
+ </th>
31
+ </tr>
32
+ <tr>
33
+ <td>
34
+ client_id
35
+ </td>
36
+ <td>
37
+ <%=tr("Application key generated during the app registration.")%>
38
+ </td>
39
+ <td>
40
+ true
41
+ </td>
42
+ </tr>
43
+ <tr>
44
+ <td>
45
+ redirect_uri
46
+ </td>
47
+ <td>
48
+ <%=tr("URL that the user's browser will be redirected back to once the application authorization is completed.") %>
49
+ <%=tr("You can specify this URL in your application settings as a Callback URL, or pass it as a request paremeter.") %>
50
+ <%=tr("The redirect_uri must be within the same domain as the Site Domain you specified in the application settings.") %>
51
+ </td>
52
+ <td>
53
+ true
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <td>
58
+ response_type
59
+ </td>
60
+ <td>
61
+ <%=tr("For the server side flow the response type is defaulted to \"token\" and you don't need to pass it as a parameter.") %>
62
+ </td>
63
+ <td>
64
+ true
65
+ </td>
66
+ </tr>
67
+ <tr>
68
+ <td>
69
+ scope
70
+ </td>
71
+ <td>
72
+ <%=tr("A comma delimited list of permissions that the application needs.") %> <%=tr("By default the scope is set to a full data access.") %><%=tr("This is subject to change in the upcoming releases.") %>
73
+ </td>
74
+ <td>
75
+ false
76
+ </td>
77
+ </tr>
78
+ <tr>
79
+ <td>
80
+ display
81
+ </td>
82
+ <td>
83
+ <%=tr("For the server side flow the display parameter is defaulted to \"web\".") %>
84
+ </td>
85
+ <td>
86
+ false
87
+ </td>
88
+ </tr>
89
+ </table>
90
+ </p>
91
+ <h3><%=tr("Example")%></h3>
92
+ <div class="code_snippet">
93
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/authorize?client_id=YOUR_APP_KEY&redirect_uri=YOUR_URL&response_type=token
94
+ </div>
95
+ <p>
96
+ <%=tr("If the user is already logged in, we validate the login cookie that we have stored on the user's browser and authenticate the user.") %><%=tr("If the user is not logged in, they are prompted to enter their credentials:") %>
97
+ </p>
98
+ <p style="text-align:center">
99
+ <%=image_tag("platform/help/login_web.png", :style=>"width:600px;", :class => "screenshot") %>
100
+ </p>
101
+ <p>
102
+ <%=tr("Once we have successfully authenticated the user, we will prompt the user to authorize your application:") %>
103
+ </p>
104
+ <p style="text-align:center">
105
+ <%=image_tag("platform/help/auth_web.png", :style=>"width:600px;", :class => "screenshot") %>
106
+ </p>
107
+ <p>
108
+ <%=tr("If the user presses Don't Allow, your app is not authorized.") %><%=tr("The user will be redirected (via HTTP 302) to the URL you passed in the redirect_uri parameter with the following error information:") %>
109
+ </p>
110
+ <h3><%=tr("Returned Fields") %></h3>
111
+ <p>
112
+ <table class="documentation_table">
113
+ <tr>
114
+ <th style="width:150px;">
115
+ <%=tr("Name") %>
116
+ </th>
117
+ <th style="width:150px;">
118
+ <%=tr("Type") %>
119
+ </th>
120
+ <th>
121
+ <%=tr("Description") %>
122
+ </th>
123
+ </tr>
124
+ <tr>
125
+ <td style="widtd:150px;">
126
+ status
127
+ </td>
128
+ <td style="widtd:150px;">
129
+ String
130
+ </td>
131
+ <td>
132
+ <%=tr("If user cancels the authorization flow, the status will be set to \"unauthorized\".") %>
133
+ </td>
134
+ </tr>
135
+ <tr>
136
+ <td style="widtd:150px;">
137
+ message
138
+ </td>
139
+ <td style="widtd:150px;">
140
+ String
141
+ </td>
142
+ <td>
143
+ <%=tr("Error message") %>
144
+ </td>
145
+ </tr>
146
+ </table>
147
+ </p>
148
+ <h3><%=tr("Example") %></h3>
149
+ <div class="code_snippet">
150
+ http://YOUR_URL#status=unauthorized&message=user+canceled
151
+ </div>
152
+ <p>
153
+ <%=tr("If the user presses Allow, your app is authorized.") %><%=tr("The user will be redirected (via HTTP 302) to the URL you passed in the redirect_uri parameter with an authorization code:") %>
154
+ </p>
155
+ <h3><%=tr("Returned Fields") %></h3>
156
+ <p>
157
+ <table class="documentation_table">
158
+ <tr>
159
+ <th style="width:150px;">
160
+ <%=tr("Name") %>
161
+ </th>
162
+ <th style="width:150px;">
163
+ <%=tr("Type") %>
164
+ </th>
165
+ <th>
166
+ <%=tr("Description") %>
167
+ </th>
168
+ </tr>
169
+ <tr>
170
+ <td style="widtd:150px;">
171
+ access_token
172
+ </td>
173
+ <td style="widtd:150px;">
174
+ String
175
+ </td>
176
+ <td>
177
+ <%=tr("Access token to be used with every API request")%>
178
+ </td>
179
+ </tr>
180
+ <tr>
181
+ <td style="widtd:150px;">
182
+ expires_in
183
+ </td>
184
+ <td style="widtd:150px;">
185
+ Number
186
+ </td>
187
+ <td>
188
+ <%=tr("Seconds until the token will expire")%>
189
+ </td>
190
+ </tr>
191
+ </table>
192
+ </p>
193
+ <h3><%=tr("Example")%></h3>
194
+ <div class="code_snippet">
195
+ http://YOUR_URL#access_token=ACCESS_TOKEN_GENERATED_BY_SERVER&expires_in=SECONDS_UNTIL_IT_IS_EXPIRED
196
+ </div>
197
+ <h2><%=tr("Cross Domain API Calls")%></h2>
198
+ <p>
199
+ <%=tr("{site_title} Platform supports cross-domain API calls using [link: JSONP] framework.", "", :site_title => Platform::Config.site_title, :link => ["http://en.wikipedia.org/wiki/JSONP"]) %>
200
+ <%=tr("Below is a simple example for Geni JSONP API call.")%>
201
+ <%=tr("You must provide a valid access token in order to make an JSONP API call.")%>
202
+ </p>
203
+ <h3><%=tr("Example")%></h3>
204
+ <pre class="code_snippet">
205
+ var Geni = {callbacks:{}, client_id:"YOUR_APP_KEY", access_token:""};
206
+
207
+ function jsonp(url, params, callback) {
208
+ var script = document.createElement('script');
209
+ var g_uuid = 'g' + (((1+Math.random())*0x10000)|0).toString(16).substring(1);
210
+
211
+ params = params || {};
212
+ params['callback'] = 'Geni.callbacks.' + g_uuid;
213
+
214
+ var query = [];
215
+ for(var p in params) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(params[p]));
216
+ query = query.join("&");
217
+
218
+ url = url + (url.indexOf('?')>-1 ? '&' : '?') + query;
219
+
220
+ Geni.callbacks[g_uuid] = function(data) {
221
+ if(callback) callback(data);
222
+ delete Geni.callbacks[g_uuid];
223
+ }
224
+ script.src = url;
225
+ document.getElementsByTagName('head')[0].appendChild(script);
226
+ }
227
+
228
+
229
+ // Parse access token from the URL if it is available
230
+ if (Geni.access_token == "") {
231
+ var params = {};
232
+
233
+ var anchor = window.location.href.split("#");
234
+ if (anchor.length &gt; 1) {
235
+ var parts = anchor[1].split("&");
236
+ for (var i=0; i &lt; parts.length; i++) {
237
+ var values = parts[i].split("=");
238
+ params[values[0]] = values[1];
239
+ }
240
+ }
241
+
242
+ // Add code to store/retrieve access token from a cookie
243
+
244
+ Geni.access_token = params["access_token"];
245
+ }
246
+
247
+ if (Geni.access_token == "") {
248
+ window.location = "https://www.geni.com/oauth/authorize?client_id" + Geni.client_id + "&redirect_uri="
249
+ + window.location.href + "&response_type=token";
250
+ } else {
251
+ // Get profile data
252
+ jsonp("/profile", {access_token:Geni.access_token}, function(data) {
253
+ alert("Hello " + data["name"]);
254
+ })
255
+ }
256
+
257
+ </pre>
258
+ <h3><%=tr("{site_title} JavaScript Client SDK", "", :site_title => Platform::Config.site_title)%></h3>
259
+ <p>
260
+ <%=tr("{site_title} Platform comes with a [link: full featured JavaScript library] that allows you to build dynamic web applications in the browser with {site_title}'s data.", "", :site_title => Platform::Config.site_title, :link => ["/platform/developer/help/sdk_js"])%>
261
+ <%=tr("It supports authentication, autherization and API calls to get the site data.")%>
262
+ </p>
263
+ </div>
264
+ <%= render :partial => "footer" %>
@@ -0,0 +1,191 @@
1
+ <%= render :partial => "header" %>
2
+ <div class="documentation_section_title">
3
+ <%= tr("Desktop Application Authorization Flow") %>
4
+ </div>
5
+ <div class="documentation_section">
6
+ <p>
7
+ <%=tr("Desktop application flow is a slightly modified version of the client-side flow.")%>
8
+ <%=tr("Since desktop applications do not normally run their own web servers, we cannot redirect back to the desktop app URL. Instead, we will redirect to an internal url with the returned fields.")%>
9
+ <%=tr("Desktop applications can listen to the browser URL changes.") %> <%=tr("Once a URL is matched against a special Platform URL, desktop application can get the access token and other parameters from the URL.")%>
10
+ </p>
11
+ <h2><%=tr("Authentication & Authorization")%></h2>
12
+ <p>
13
+ <%=tr("To enter the authentication/authorization desktop client flow, you must point an embedded browser to the authorization url and pass the following parameters:")%>
14
+ </p>
15
+ <h3><%=tr("Oauth URL")%></h3>
16
+ <div class="code_snippet">
17
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/authorize
18
+ </div>
19
+ <h3><%=tr("Parameters")%></h3>
20
+ <p>
21
+ <table class="documentation_table">
22
+ <tr>
23
+ <th style="width:150px;">
24
+ <%=tr("Name") %>
25
+ </th>
26
+ <th>
27
+ <%=tr("Description") %>
28
+ </th>
29
+ <th style="width:150px;">
30
+ <%=tr("Required") %>
31
+ </th>
32
+ </tr>
33
+ <tr>
34
+ <td>
35
+ client_id
36
+ </td>
37
+ <td>
38
+ <%=tr("Application key generated during the app registration.")%>
39
+ </td>
40
+ <td>
41
+ true
42
+ </td>
43
+ </tr>
44
+ <tr>
45
+ <td>
46
+ response_type
47
+ </td>
48
+ <td>
49
+ <%=tr("For the client side flow the response type must be set to \"token\".")%>
50
+ </td>
51
+ <td>
52
+ true
53
+ </td>
54
+ </tr>
55
+ <tr>
56
+ <td>
57
+ display
58
+ </td>
59
+ <td>
60
+ <%=tr("For a desktop application embedded browser, set the display value to \"desktop\".")%>
61
+ </td>
62
+ <td>
63
+ true
64
+ </td>
65
+ </tr>
66
+ <tr>
67
+ <td>
68
+ scope
69
+ </td>
70
+ <td>
71
+ <%=tr("A comma delimited list of permissions that the application needs.") %>
72
+ <%=tr("By default the scope is set to a full data access.") %>
73
+ <%=tr("This is subject to change in the upcoming releases.") %>
74
+ </td>
75
+ <td>
76
+ false
77
+ </td>
78
+ </tr>
79
+ </table>
80
+ </p>
81
+ <h3><%=tr("Example")%></h3>
82
+ <div class="code_snippet">
83
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/authorize?client_id=YOUR_APP_KEY&response_type=token&display=desktop
84
+ </div>
85
+ <p>
86
+ <%=tr("If the user is already logged in, we validate the login cookie that we have stored on the user's browser and authenticate the user.") %><%=tr("If the user is not logged in, they are prompted to enter their credentials:") %>
87
+ </p>
88
+ <center>
89
+ <%=image_tag("platform/help/login_desktop.png", :style=>"width:600px;", :class => "screenshot") %>
90
+ </center>
91
+ <p>
92
+ <%=tr("Once we have successfully authenticated the user, we will prompt the user to authorize your application:") %>
93
+ </p>
94
+ <center>
95
+ <%=image_tag("platform/help/auth_desktop.png", :style=>"width:600px;", :class => "screenshot") %>
96
+ </center>
97
+ <p>
98
+ <%=tr("If the user presses Don't Allow, your app is not authorized.") %>
99
+ <%=tr("The user will be redirected (via HTTP 302) to the special URL with the following error information:") %>
100
+ </p>
101
+ <h3><%=tr("Returned Fields") %></h3>
102
+ <p>
103
+ <table class="documentation_table">
104
+ <tr>
105
+ <th style="width:150px;">
106
+ <%=tr("Name") %>
107
+ </th>
108
+ <th style="width:150px;">
109
+ <%=tr("Type") %>
110
+ </th>
111
+ <th>
112
+ <%=tr("Description") %>
113
+ </th>
114
+ </tr>
115
+ <tr>
116
+ <td style="widtd:150px;">
117
+ status
118
+ </td>
119
+ <td style="widtd:150px;">
120
+ String
121
+ </td>
122
+ <td>
123
+ <%=tr("If user cancels the authorization flow, the status will be set to \"unauthorized\".") %>
124
+ </td>
125
+ </tr>
126
+ <tr>
127
+ <td style="widtd:150px;">
128
+ message
129
+ </td>
130
+ <td style="widtd:150px;">
131
+ String
132
+ </td>
133
+ <td>
134
+ <%=tr("Error message") %>
135
+ </td>
136
+ </tr>
137
+ </table>
138
+ </p>
139
+
140
+ <h3><%=tr("Example") %></h3>
141
+ <div class="code_snippet">
142
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/auth_failed#status=unauthorized&message=user+canceled
143
+ </div>
144
+ <p>
145
+ <%=tr("If the user presses Allow, your app is authorized.") %>
146
+ <%=tr("The user will be redirected (via HTTP 302) to the special URL with an authorization code:") %>
147
+ </p>
148
+ <h3><%=tr("Returned Fields") %></h3>
149
+ <p>
150
+ <table class="documentation_table">
151
+ <tr>
152
+ <th style="width:150px;">
153
+ <%=tr("Name") %>
154
+ </th>
155
+ <th style="width:150px;">
156
+ <%=tr("Type") %>
157
+ </th>
158
+ <th>
159
+ <%=tr("Description") %>
160
+ </th>
161
+ </tr>
162
+ <tr>
163
+ <td style="widtd:150px;">
164
+ access_token
165
+ </td>
166
+ <td style="widtd:150px;">
167
+ String
168
+ </td>
169
+ <td>
170
+ <%=tr("Access token to be used with every API request")%>
171
+ </td>
172
+ </tr>
173
+ <tr>
174
+ <td style="widtd:150px;">
175
+ expires_in
176
+ </td>
177
+ <td style="widtd:150px;">
178
+ Number
179
+ </td>
180
+ <td>
181
+ <%=tr("Seconds until the token will expire") %>
182
+ </td>
183
+ </tr>
184
+ </table>
185
+ </p>
186
+ <h3><%=tr("Example")%></h3>
187
+ <div class="code_snippet">
188
+ https://<%=Platform::Config.site_base_url %>/platform/oauth/auth_success#access_token=ACCESS_TOKEN_GENERATED_BY_SERVER &expires_in=SECONDS_UNTIL_IT_IS_EXPIRED
189
+ </div>
190
+ </div>
191
+ <%= render :partial => "footer" %>