<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://code.secondbit.org/auth/</link>
    <language>en-us</language>

    <title>auth Changelog</title>
    <description>auth Changelog</description>
    <item>
    <title>[default] Update nsq import path.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/cd5f07f9811b</guid>
             <link>http://code.secondbit.org/auth/rev/cd5f07f9811b</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>cd5f07f9811b</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td>default</td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td>tip</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#105;&#109;&#112;&#114;&#97;&#99;&#116;&#105;&#99;&#97;&#108;&#46;&#99;&#111;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Update nsq import path.<br/>
<br/>
go-nsq has moved to nsqio/go-nsq, so we need to update the import path<br/>
appropriately.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>listeners/email_verification/listener.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#105;&#109;&#112;&#114;&#97;&#99;&#116;&#105;&#99;&#97;&#108;&#46;&#99;&#111;&#62;</author>
    <pubDate>Mon, 14 Dec 2015 04:36:28 -0800</pubDate>
</item>
<item>
    <title>Break out scopes and events.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/b7e685839a1b</guid>
             <link>http://code.secondbit.org/auth/rev/b7e685839a1b</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>b7e685839a1b</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#105;&#109;&#112;&#114;&#97;&#99;&#116;&#105;&#99;&#97;&#108;&#46;&#99;&#111;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Break out scopes and events.<br/>
<br/>
This repo has gotten unwieldy, and there are portions of it that need to be<br/>
imported by a large number of other packages.<br/>
<br/>
For example, scopes will be used in almost every API we write. Rather than<br/>
importing the entirety of this codebase into every API we write, I've opted to<br/>
move the scope logic out into a scopes package, with a subpackage for the<br/>
defined types, which is all most projects actually want to import.<br/>
<br/>
We also define some event type constants, and importing those shouldn't require<br/>
a project to import all our dependencies, either. So I made an events subpackage<br/>
that just holds those constants.<br/>
<br/>
This package has become a little bit of a red-headed stepchild and is do for a<br/>
refactor, but I'm trying to put that off as long as I can.<br/>
<br/>
The refactoring of our scopes stuff has left a bug wherein a token can be<br/>
granted for scopes that don't exist. I'm going to need to revisit that, and also<br/>
how to limit scopes to only be granted to the users that should be able to<br/>
request them. But that's a battle for another day.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>authcode.go<br />authcode_test.go<br />authd/server.go<br />client.go<br />client/login.go<br />config.go<br />context.go<br />events/profile.go<br />memstore.go<br />oauth2.go<br /><br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#105;&#109;&#112;&#114;&#97;&#99;&#116;&#105;&#99;&#97;&#108;&#46;&#99;&#111;&#62;</author>
    <pubDate>Mon, 14 Dec 2015 04:17:21 -0800</pubDate>
</item>
<item>
    <title>Update client to detect errors.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/4b68bac597b7</guid>
             <link>http://code.secondbit.org/auth/rev/4b68bac597b7</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>4b68bac597b7</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Update client to detect errors.<br/>
<br/>
The client doesn't treat non-200 responses as errors automatically, so we need<br/>
to detect when the response.Errors property is set, and use that to return an<br/>
error. To avoid the boilerplate and an extensive error system, I just wrapped<br/>
them in an httpErrors type that implements the error interface. That way the<br/>
errors can be returned, and callers can type-cast and interrogate them. I also<br/>
updated the GetLogin function to return an auth.ErrLoginNotFound error when the<br/>
httpErrors response indicates that's the reason the request failed.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>client/client.go<br />client/login.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Sat, 18 Jul 2015 03:38:27 -0400</pubDate>
</item>
<item>
    <title>Send events when logins are verified.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/7bba108d2d9a</guid>
             <link>http://code.secondbit.org/auth/rev/7bba108d2d9a</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>7bba108d2d9a</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Send events when logins are verified.<br/>
<br/>
Add an ActionLoginVerified constant to use as the action when a login has been<br/>
verified. On second thought, this should probably just be &quot;verified&quot;, huh? Then<br/>
we can reuse it across models. Oops.<br/>
<br/>
We also added a call to send a login verified event to NSQ when the login is<br/>
verified.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>profile.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Sat, 18 Jul 2015 03:36:13 -0400</pubDate>
</item>
<item>
    <title>Update to use a generic event emitter.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/0a2c3d677161</guid>
             <link>http://code.secondbit.org/auth/rev/0a2c3d677161</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>0a2c3d677161</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Update to use a generic event emitter.<br/>
<br/>
Rather can creating a purpose-built event emitter for each and every event we<br/>
need to emit (I'm looking at you, login verification event) which is _downright<br/>
silly_, we're now using a generic event publisher that's based on saying &quot;HEY A<br/>
MODEL UPDATED&quot;.<br/>
<br/>
This means we need to change all our setup code in authd to use<br/>
events.NewNSQPublisher or events.NewStdoutPublisher instead of our homegrown<br/>
solutions. Which also means updating our config to take an events.Publisher<br/>
instead of our LoginVerificationNotifier (blergh).<br/>
<br/>
Our Context also now uses an events.Publisher instead of a<br/>
LoginVerificationNotifier. Party all around! We also replaced our<br/>
SendLoginVerification helper method on Context with a SendModelEvent helper<br/>
method on Context, which is just a light wrapper around<br/>
events.PublishModelEvent.<br/>
<br/>
Of course, all this means we need to update our email_verification listener to<br/>
listen to the correct channel (based on the model we want updates about) and<br/>
filter down to a Created action or our new custom action for &quot;the customer wants<br/>
their verification resent&quot;, which I'm OK making a special case and not generic,<br/>
because c'mon. But we had a subtle change to all our constants, some of which<br/>
are unofficial constants now. I'm unsure how I feel about this.<br/>
<br/>
We also updated our email_verification listener so that we're unmarshalling to a<br/>
custom loginEvent, which is just an events.Event that overwrites the Data<br/>
property to be an auth.Login instance. This is to make sure we don't need to<br/>
wrangle a map[string]interface{}, which is no fun. I'm also OK with<br/>
special-casing like this, because it's 1) a tiny amount of code, 2) properly<br/>
utilising composition, and 3) the only way I can think of to cleanly accomplish<br/>
what I want.<br/>
<br/>
I also added a note about GetLogin's deficient handling of logins, namely that<br/>
it doesn't recognise admins and return Verification codes to them, which would<br/>
be a useful property for internal tools to take advantage of. Ah well.<br/>
<br/>
I updated the Profile and Login implementations so they're now event.Model<br/>
instances, mainly by just exporting some strings from them through getters that<br/>
will let us automatically build an Event from them. This lets us use the<br/>
PublishModelEvent helper.<br/>
<br/>
I updated our CreateProfileHandler to properly mangle the login Verification<br/>
property, and to fire off the ActionCreated events for the new Login and the new<br/>
Profile.<br/>
<br/>
I updated our GetLoginHandler and UpdateLoginHandler to properly mangle the<br/>
loginVerification property. God that's annoying. :-/<br/>
<br/>
You'll note I didn't start publishing the events.ActionUpdated or<br/>
events.ActionDeleted events for Profiles or Logins yet, and didn't bother<br/>
publishing any events for literally any other type. That's because I'm a lazy<br/>
piece of crap and will end up publishing them when I absolutely have to. Part of<br/>
that is because if a channel isn't created/being read for a topic, the messages<br/>
will just stack up in NSQ, and I don't want that. But mostly I'm lazy.<br/>
<br/>
Finally, I got to delete the entire profile_verification.go file, because we're<br/>
no longer special-casing that. Hooray!</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>authd/server.go<br />config.go<br />context.go<br />listeners/email_verification/listener.go<br />profile.go<br />profile_verification.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Wed, 15 Jul 2015 00:13:59 -0400</pubDate>
</item>
<item>
    <title>Add notes about model events.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/5d52b9d83184</guid>
             <link>http://code.secondbit.org/auth/rev/5d52b9d83184</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>5d52b9d83184</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Add notes about model events.<br/>
<br/>
We need to sensibly trigger events about models, so I left some basic notes<br/>
about triggering an event when a Profile is created.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>profile.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Mon, 13 Jul 2015 23:49:25 -0400</pubDate>
</item>
<item>
    <title>Add kubernetes definitions.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/fc68085eb40d</guid>
             <link>http://code.secondbit.org/auth/rev/fc68085eb40d</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>fc68085eb40d</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Add kubernetes definitions.<br/>
<br/>
Define a replication controller that will spin up authd servers (using Ducky<br/>
right now--other instances should rename the ducky parts appropriately).<br/>
<br/>
Also, my understanding of which labels go where may be shaky, which is probably<br/>
evidenced by the fact that all of these things share the same lables.<br/>
<br/>
_Whatever_.<br/>
<br/>
It also hooks the generated pods up to the JWT secret volume, so they can<br/>
properly read the JWT secret.<br/>
<br/>
Also, created a LoadBalancer Service that will route traffic to the pods created<br/>
by the Replication Controller.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>replication-controllers/authd.json<br />services/authd.json<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Mon, 29 Jun 2015 23:58:05 -0400</pubDate>
</item>
<item>
    <title>Create Docker image for authd.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/aa14e29b666f</guid>
             <link>http://code.secondbit.org/auth/rev/aa14e29b666f</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>aa14e29b666f</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Create Docker image for authd.<br/>
<br/>
Create a Dockerfile for authd, which will wrap the compiled Go binary up into a<br/>
tiny little Docker image.<br/>
<br/>
Create an authd/build-docker.sh script that will build the statically-linked<br/>
binary in a Docker container, so the authd Docker image can use it.<br/>
<br/>
We had to include ca-certificates.crt in the Dockerfile, as well, so we could<br/>
communicate over SSL with things.<br/>
<br/>
A wrapper.sh file is included that will pull the JWT_SECRET environment variable<br/>
out of a kubernetes secrets file, which is a handy wrapper to have.<br/>
<br/>
Finally, we added the authd/docker-authd binary to the .hgignore.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>.hgignore<br />authd/Dockerfile<br />authd/build-docker.sh<br />authd/ca-certificates.crt<br />authd/wrapper.sh<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Mon, 29 Jun 2015 23:50:15 -0400</pubDate>
</item>
<item>
    <title>Use an environment variable to set the JWT secret.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/9e3ceddf29ad</guid>
             <link>http://code.secondbit.org/auth/rev/9e3ceddf29ad</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>9e3ceddf29ad</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Use an environment variable to set the JWT secret.<br/>
<br/>
When setting up the authd server, populate the JWT secret using a JWT_SECRET<br/>
environment variable.<br/>
<br/>
Incidentally, we also included the subscriptions scope, for testing purposes<br/>
while creating code.secondbit.org/ducky/subscriptions.<br/>
<br/>
We now also log the port we're listening on, listen on all interfaces (instead<br/>
of just 127.0.0.1), and changed the port to 9000 instead of 8080.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>authd/server.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Mon, 29 Jun 2015 23:30:29 -0400</pubDate>
</item>
<item>
    <title>Make client use our auth(n/z) scheme.</title>
    <guid isPermaLink="true">http://code.secondbit.org/auth/rev/b0d1b3e39fc8</guid>
             <link>http://code.secondbit.org/auth/rev/b0d1b3e39fc8</link>
    <description>
              <![CDATA[
	<table>
	<tr>
		<th style="text-align:left;">changeset</th>
		<td>b0d1b3e39fc8</td>
              </tr>
              <tr>
                              <th style="text-align:left;">branch</th>
                              <td></td>
              </tr>
              <tr>
                              <th style="text-align:left;">bookmark</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;">tag</th>
		<td></td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">user</th>
		<td>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">description</th>
		<td>Make client use our auth(n/z) scheme.<br/>
<br/>
Our auth(n/z) scheme can be loosely defined as &quot;encrypted tokens that nginx<br/>
transforms into headers&quot; and &quot;scopes for bypassing ACL&quot;. Our Go client, which is<br/>
what we'll be using to have services communicate with each other, follows this<br/>
paradigm now by auto-injecting the headers we'll need to identify ourselves.<br/>
This will work behind our firewall, but will be useless for the rest of the<br/>
world, which will need to go through the nginx bastion that can strip the<br/>
headers and replace them with the headers appropriate to the token attached to<br/>
the request.<br/>
<br/>
This did involve setting a static client ID as the client for our<br/>
email_verification listener. Ideally, this would cause Client registration<br/>
(using that ID) when the listener starts up, ignoring ErrClientAlreadyExists. I<br/>
don't want to have to write the code that will allow us to bypass the Client ACL<br/>
properly right now, though, so we're just going to have to remember to manually<br/>
create that Client. Or not. I don't think it will do any harm (outside the OAuth<br/>
flow) to be using a Client ID that doesn't actually point to a Client. I just<br/>
think it'd be good for record-keeping purposes.</td>
	</tr>
	<tr>
		<th style="text-align:left;vertical-align:top;">files</th>
		<td>authd/server.go<br />client/client.go<br />client/login.go<br />listeners/email_verification/listener.go<br />profile.go<br /></td>
	</tr>
	</table>
	]]></description>
    <author>&#80;&#97;&#100;&#100;&#121;&#32;&#60;&#112;&#97;&#100;&#100;&#121;&#64;&#115;&#101;&#99;&#111;&#110;&#100;&#98;&#105;&#116;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Sun, 17 May 2015 03:21:17 -0400</pubDate>
</item>

  </channel>
</rss>