<!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 &hellip;
    <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">&#182;</a>
        </div>
        
      </td>
      <td class=code>
        <div class='highlight'><pre><span class="nb">require</span> <span class="s1">&#39;omniauth-oauth2&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;faraday&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;net/https&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;pp&#39;</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">&#182;</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">&lt;</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">&#182;</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">=&gt;</span> <span class="s2">&quot;https://www.dailycred.com&quot;</span><span class="p">,</span>
        <span class="ss">:authorize_url</span> <span class="o">=&gt;</span> <span class="s1">&#39;/oauth/authorize&#39;</span><span class="p">,</span>
        <span class="ss">:token_url</span> <span class="o">=&gt;</span> <span class="s1">&#39;/oauth/access_token&#39;</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">&#182;</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">&quot;email&quot;</span><span class="p">,</span> <span class="s2">&quot;username&quot;</span><span class="p">,</span> <span class="s2">&quot;created&quot;</span><span class="p">,</span> <span class="s2">&quot;verified&quot;</span><span class="p">,</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span> <span class="s2">&quot;referred_by&quot;</span><span class="p">,</span> <span class="s2">&quot;tags&quot;</span><span class="p">,</span> <span class="s2">&quot;referred&quot;</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">&#182;</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">&quot;action&quot;</span><span class="p">,</span><span class="s2">&quot;identity_provider&quot;</span><span class="p">,</span><span class="s2">&quot;referrer&quot;</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">&#39;id&#39;</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">&#182;</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">&#39;omniauth.state&#39;</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">&#39;omniauth.params&#39;</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">&amp;&amp;</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">=&gt;</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">&#182;</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">=&gt;</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">&quot;/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">&quot;</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">&#182;</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">&#39;token&#39;</span> <span class="o">=&gt;</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">&#39;provider&#39;</span><span class="o">]</span> <span class="o">=</span> <span class="s1">&#39;dailycred&#39;</span>
        <span class="vi">@duser</span><span class="o">[</span><span class="s1">&#39;uid&#39;</span><span class="o">]</span> <span class="o">=</span>  <span class="n">json</span><span class="o">[</span><span class="s1">&#39;id&#39;</span><span class="o">]</span> <span class="o">||</span> <span class="n">json</span><span class="o">[</span><span class="s1">&#39;user_id&#39;</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">&quot;identities&quot;</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">&quot;access_tokens&quot;</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">&quot;identities&quot;</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">&#182;</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>