<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>dailycred.rb</title> <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css"> </head> <body> <div id='container'> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="../../dailycred.html">dailycred.rb</a> <a class="source" href="../../dailycred/acts_as_dailycred.html">acts_as_dailycred.rb</a> <a class="source" href="../../dailycred/client.html">client.rb</a> <a class="source" href="../../dailycred/engine.html">engine.rb</a> <a class="source" href="../../dailycred/helper.html">helper.rb</a> <a class="source" href="../../dailycred/middleware.html">middleware.rb</a> <a class="source" href="../../dailycred/tests_helper.html">tests_helper.rb</a> <a class="source" href="../../dailycred/user.html">user.rb</a> <a class="source" href="../../generators/dailycred_generator.html">dailycred_generator.rb</a> <a class="source" href="../../generators/templates/migration_create_user.html">migration_create_user.rb</a> <a class="source" href="../../generators/templates/omniauth.html">omniauth.rb</a> <a class="source" href="../../generators/templates/sessions_controller.html">sessions_controller.rb</a> <a class="source" href="../../generators/templates/user.html">user.rb</a> <a class="source" href="dailycred.html">dailycred.rb</a> </div> </div> </div> <table cellspacing=0 cellpadding=0> <thead> <tr> <th class=docs><h1>dailycred.rb</h1></th> <th class=code></th> </tr> </thead> <tbody> <tr id='section-1'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class=code> <div class='highlight'><pre><span class="nb">require</span> <span class="s1">'omniauth-oauth2'</span> <span class="nb">require</span> <span class="s1">'faraday'</span> <span class="nb">require</span> <span class="s1">'net/https'</span> <span class="nb">require</span> <span class="s1">'json'</span> <span class="nb">require</span> <span class="s1">'pp'</span></pre></div> </td> </tr> <tr id='section-The_Dailycred_Omniauth_Strategy'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-The_Dailycred_Omniauth_Strategy">¶</a> </div> <h1>The Dailycred Omniauth Strategy</h1> </td> <td class=code> <div class='highlight'><pre><span class="k">module</span> <span class="nn">OmniAuth</span> <span class="k">module</span> <span class="nn">Strategies</span> <span class="k">class</span> <span class="nc">Dailycred</span> <span class="o"><</span> <span class="no">OmniAuth</span><span class="o">::</span><span class="no">Strategies</span><span class="o">::</span><span class="no">OAuth2</span></pre></div> </td> </tr> <tr id='section-3'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>default options</p> </td> <td class=code> <div class='highlight'><pre> <span class="n">option</span> <span class="ss">:client_options</span><span class="p">,</span> <span class="p">{</span> <span class="ss">:site</span> <span class="o">=></span> <span class="s2">"https://www.dailycred.com"</span><span class="p">,</span> <span class="ss">:authorize_url</span> <span class="o">=></span> <span class="s1">'/oauth/authorize'</span><span class="p">,</span> <span class="ss">:token_url</span> <span class="o">=></span> <span class="s1">'/oauth/access_token'</span> <span class="p">}</span></pre></div> </td> </tr> <tr id='section-4'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>parameters to expect and return from dailycred responses</p> </td> <td class=code> <div class='highlight'><pre> <span class="no">ATTRIBUTES</span> <span class="o">=</span> <span class="o">[</span><span class="s2">"email"</span><span class="p">,</span> <span class="s2">"username"</span><span class="p">,</span> <span class="s2">"created"</span><span class="p">,</span> <span class="s2">"verified"</span><span class="p">,</span> <span class="s2">"admin"</span><span class="p">,</span> <span class="s2">"referred_by"</span><span class="p">,</span> <span class="s2">"tags"</span><span class="p">,</span> <span class="s2">"referred"</span><span class="o">]</span></pre></div> </td> </tr> <tr id='section-5'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>allows parameters to be passed through</p> </td> <td class=code> <div class='highlight'><pre> <span class="no">AUTH_PARAMS</span> <span class="o">=</span> <span class="o">[</span><span class="s2">"action"</span><span class="p">,</span><span class="s2">"identity_provider"</span><span class="p">,</span><span class="s2">"referrer"</span><span class="o">]</span> <span class="n">option</span> <span class="ss">:authorize_options</span><span class="p">,</span> <span class="no">OmniAuth</span><span class="o">::</span><span class="no">Strategies</span><span class="o">::</span><span class="no">Dailycred</span><span class="o">::</span><span class="no">AUTH_PARAMS</span> <span class="n">uid</span> <span class="p">{</span> <span class="n">user</span><span class="o">[</span><span class="s1">'id'</span><span class="o">]</span> <span class="p">}</span> <span class="n">info</span> <span class="k">do</span> <span class="n">user</span> <span class="k">end</span> <span class="k">alias</span> <span class="ss">:old_request_phase</span> <span class="ss">:request_phase</span> <span class="k">def</span> <span class="nf">authorize_params</span> <span class="k">super</span><span class="o">.</span><span class="n">tap</span> <span class="k">do</span> <span class="o">|</span><span class="n">params</span><span class="o">|</span> <span class="n">params</span><span class="o">[</span><span class="ss">:state</span><span class="o">]</span> <span class="o">||=</span> <span class="p">{}</span> <span class="k">end</span> <span class="k">end</span></pre></div> </td> </tr> <tr id='section-6'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>this step allows auth_params to be added to the url</p> </td> <td class=code> <div class='highlight'><pre> <span class="k">def</span> <span class="nf">request_phase</span> <span class="nb">p</span> <span class="n">session</span><span class="o">[</span><span class="s1">'omniauth.state'</span><span class="o">]</span> <span class="no">OmniAuth</span><span class="o">::</span><span class="no">Strategies</span><span class="o">::</span><span class="no">Dailycred</span><span class="o">::</span><span class="no">AUTH_PARAMS</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">param</span><span class="o">|</span> <span class="n">val</span> <span class="o">=</span> <span class="n">session</span><span class="o">[</span><span class="s1">'omniauth.params'</span><span class="o">][</span><span class="n">param</span><span class="o">]</span> <span class="k">if</span> <span class="n">val</span> <span class="o">&&</span> <span class="o">!</span><span class="n">val</span><span class="o">.</span><span class="n">empty?</span> <span class="n">options</span><span class="o">[</span><span class="ss">:authorize_params</span><span class="o">]</span> <span class="o">||=</span> <span class="p">{}</span> <span class="n">options</span><span class="o">[</span><span class="ss">:authorize_params</span><span class="o">].</span><span class="n">merge!</span><span class="p">(</span><span class="n">param</span> <span class="o">=></span> <span class="n">val</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="n">old_request_phase</span> <span class="k">end</span> <span class="kp">private</span></pre></div> </td> </tr> <tr id='section-7'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>This is the phase where the gem calls me.json, which returns information about the user</p> </td> <td class=code> <div class='highlight'><pre> <span class="k">def</span> <span class="nf">user</span> <span class="k">return</span> <span class="vi">@duser</span> <span class="k">if</span> <span class="o">!</span><span class="vi">@duser</span><span class="o">.</span><span class="n">nil?</span> <span class="n">connection</span> <span class="o">=</span> <span class="no">Faraday</span><span class="o">::</span><span class="no">Connection</span><span class="o">.</span><span class="n">new</span> <span class="n">options</span><span class="o">.</span><span class="n">client_options</span><span class="o">[</span><span class="ss">:site</span><span class="o">]</span><span class="p">,</span> <span class="ss">:ssl</span> <span class="o">=></span> <span class="n">options</span><span class="o">.</span><span class="n">client_options</span><span class="o">[</span><span class="ss">:ssl</span><span class="o">]</span> <span class="n">response</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/graph/me.json?access_token=</span><span class="si">#{</span><span class="n">access_token</span><span class="o">.</span><span class="n">token</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="n">json</span> <span class="o">=</span> <span class="no">JSON</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">body</span><span class="p">)</span></pre></div> </td> </tr> <tr id='section-8'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>pp json</p> </td> <td class=code> <div class='highlight'><pre> <span class="vi">@duser</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'token'</span> <span class="o">=></span> <span class="n">access_token</span><span class="o">.</span><span class="n">token</span><span class="p">}</span> <span class="vi">@duser</span><span class="o">[</span><span class="s1">'provider'</span><span class="o">]</span> <span class="o">=</span> <span class="s1">'dailycred'</span> <span class="vi">@duser</span><span class="o">[</span><span class="s1">'uid'</span><span class="o">]</span> <span class="o">=</span> <span class="n">json</span><span class="o">[</span><span class="s1">'id'</span><span class="o">]</span> <span class="o">||</span> <span class="n">json</span><span class="o">[</span><span class="s1">'user_id'</span><span class="o">]</span> <span class="no">OmniAuth</span><span class="o">::</span><span class="no">Strategies</span><span class="o">::</span><span class="no">Dailycred</span><span class="o">::</span><span class="no">ATTRIBUTES</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="kp">attr</span><span class="o">|</span> <span class="vi">@duser</span><span class="o">[</span><span class="kp">attr</span><span class="o">]</span> <span class="o">=</span> <span class="n">json</span><span class="o">[</span><span class="kp">attr</span><span class="o">]</span> <span class="k">end</span> <span class="n">json</span><span class="o">[</span><span class="s2">"identities"</span><span class="o">].</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="o">|</span> <span class="vi">@duser</span><span class="o">[</span><span class="n">k</span><span class="o">]</span> <span class="o">=</span> <span class="n">v</span> <span class="vi">@duser</span><span class="o">[</span><span class="n">k</span><span class="o">][</span><span class="ss">:access_token</span><span class="o">]</span> <span class="o">=</span> <span class="n">json</span><span class="o">[</span><span class="s2">"access_tokens"</span><span class="o">][</span><span class="n">k</span><span class="o">]</span> <span class="k">end</span> <span class="k">if</span> <span class="o">!</span><span class="n">json</span><span class="o">[</span><span class="s2">"identities"</span><span class="o">].</span><span class="n">nil?</span></pre></div> </td> </tr> <tr id='section-9'> <td class=docs> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>pp @duser</p> </td> <td class=code> <div class='highlight'><pre> <span class="vi">@duser</span> <span class="k">end</span> <span class="k">end</span> <span class="k">end</span> <span class="k">end</span></pre></div> </td> </tr> </table> </div> </body>