<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Flickr-Upload-FireEagle.patch</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -9,41 +9,112 @@
 
 use strict;
 
+
+
+#
+# Flickr
+#   TODO: Change to desktop-style authentication without the callback
+#
+
 use Digest::MD5 'md5_hex';
 use XML::Simple 'XMLin';
-use Net::Google::AuthSub;
 
 # Flickr API config
 my $API_KEY = '';
 my $SECRET = '';
 
 # Send the user to Flickr
-my $api_sig = md5_hex(&quot;${SECRET}api_key${API_KEY}permswrite&quot;);
+my $api_sig = md5_hex(&quot;${FLICKR_SECRET}api_key${FLICKR_API_KEY}permswrite&quot;);
 print &quot;\nFlickr\n&quot;;
-print &quot;Give this to your browser, bring back what it gives you.\n&quot;;
-print &quot;http://flickr.com/services/auth/?api_key=${API_KEY}&amp;perms=write&amp;api_sig=${api_sig}\n&quot;;
+print &quot;Give this to your browser, paste the URL you're bounced to below.\n&quot;;
+print &quot;http://flickr.com/services/auth/?api_key=${FLICKR_API_KEY}&amp;perms=write&amp;api_sig=${api_sig}\n&quot;;
 print &quot;Result: &quot;;
 my $flickr = &lt;STDIN&gt;;
 
 # Get a token for the Flickr API
-$flickr =~ m!^http://localhost:81/\?frob=(.+)$!;
+$flickr =~ m/^http:\/\/localhost:81\/\?frob=(.+)$/;
 my $frob = $1;
-$api_sig = md5_hex(&quot;${SECRET}api_key${API_KEY}frob${frob}methodflickr.auth.getToken&quot;);
-my $raw = `wget -q -O - 'http://flickr.com/services/rest/?api_key=${API_KEY}&amp;method=flickr.auth.getToken&amp;frob=${frob}&amp;api_sig=${api_sig}'`;
+$api_sig = md5_hex(&quot;${FLICKR_SECRET}api_key${FLICKR_API_KEY}frob${frob}methodflickr.auth.getToken&quot;);
+my $raw = `wget -q -O - 'http://flickr.com/services/rest/?api_key=${FLICKR_API_KEY}&amp;method=flickr.auth.getToken&amp;frob=${frob}&amp;api_sig=${api_sig}'`;
 my $xml = XMLin($raw);
 print &quot;\nFlickr API token: &quot;, $xml-&gt;{'auth'}-&gt;{'token'}, &quot;\n&quot;;
 
-# Send the user to Dopplr
-print &quot;\nDopplr\n&quot;;
-print &quot;Give this to your browser, bring back what it gives you.\n&quot;;
-print &quot;https://www.dopplr.com/api/AuthSubRequest?scope=http://www.dopplr.com/&amp;next=http://localhost:81/&amp;session=1\n&quot;;
-print &quot;Result: &quot;;
-my $dopplr = &lt;STDIN&gt;;
-
-# Get a token for the Dopplr API
-$dopplr =~ m!^http://localhost:81/\?token=(.+)$!;
-my $token = $1;
-my $auth = Net::Google::AuthSub-&gt;new('url' =&gt; 'https://www.dopplr.com/api');
-$auth-&gt;auth('null', $token);
-my $sess = $auth-&gt;session_token();
-print &quot;\nDopplr API token: $sess\n\n&quot;;
+
+
+#
+# Fire Bagel!
+#   OAuth walkthrough - https://fireeagle.yahooapis.com/developer/code/perl
+#
+
+use Net::OAuth::Request;
+use Net::OAuth::RequestTokenRequest;
+use Net::OAuth::AccessTokenRequest;
+use Net::OAuth::ProtectedResourceRequest;
+use Data::Dumper;
+use LWP;
+use CGI;
+
+# Fire Bagel!
+my $FIREEAGLE_CONSUMER_KEY = 'RQ5acpOuZ89F';
+my $FIREEAGLE_CONSUMER_SECRET = 'kDBhk939dJWklEHhPbN6AOVy3fGe5GiG';
+
+my $REQUEST_TOKEN_URL = 'http://fireeagle.yahooapis.com/oauth/request_token';
+my $AUTHORIZATION_URL = 'http://fireeagle.yahoo.net/oauth/authorize';
+my $ACCESS_TOKEN_URL = 'http://fireeagle.yahooapis.com/oauth/access_token';
+my $QUERY_API_URL = 'http://fireeagle.yahooapis.com/api/0.1/user';
+my $UPDATE_API_URL = 'http://fireeagle.yahooapis.com/api/0.1/update';
+
+print &quot;\nFire Bagel!\n&quot;;
+my $request_token_request = Net::OAuth::RequestTokenRequest-&gt;new(
+	consumer_key =&gt; $FIREEAGLE_CONSUMER_KEY,
+	consumer_secret =&gt; $FIREEAGLE_CONSUMER_SECRET,
+	request_url =&gt; $REQUEST_TOKEN_URL,
+	request_method =&gt; 'GET',
+	signature_method =&gt; 'HMAC-SHA1',
+	timestamp =&gt; time,
+	nonce =&gt; int(rand(2 ** 32)),
+);
+$request_token_request-&gt;sign;
+die &quot;COULDN'T VERIFY! Check OAuth parameters.\n&quot; unless $request_token_request-&gt;verify;
+my $request_token_request_url = $REQUEST_TOKEN_URL . '?' . $request_token_request-&gt;to_post_body;
+my $browser = LWP::UserAgent-&gt;new;
+my $request_token_response = $browser-&gt;get( $request_token_request_url );
+die $request_token_response-&gt;status_line unless ($request_token_response-&gt;is_success);
+my $request_token_response_query = new CGI($request_token_response-&gt;content);
+my $oauth_token = $request_token_response_query-&gt;param('oauth_token');
+my $oauth_token_secret = $request_token_response_query-&gt;param('oauth_token_secret');
+if ( ! ( $oauth_token &amp;&amp; $oauth_token_secret ) ) {
+	die &quot;ERROR : FireEagle did not reply with an oauth_token and oauth_token_secret&quot;;
+}
+my $authorization_url = $AUTHORIZATION_URL . '?oauth_token=' . $oauth_token;
+print &quot;Give this to your browser, press &lt;ENTER&gt; after you're done there.\n&quot;;
+print &quot;$authorization_url\n&quot;;
+my $enter = &lt;STDIN&gt;;
+my $access_token_request = Net::OAuth::AccessTokenRequest-&gt;new(
+	consumer_key =&gt; $FIREEAGLE_CONSUMER_KEY,
+	consumer_secret =&gt; $FIREEAGLE_CONSUMER_SECRET,
+	request_url =&gt; $ACCESS_TOKEN_URL,
+	request_method =&gt; 'GET',
+	signature_method =&gt; 'HMAC-SHA1',
+	timestamp =&gt; time,
+	nonce =&gt; int(rand(2 ** 32)),
+	token =&gt; $oauth_token,
+	token_secret =&gt; $oauth_token_secret,
+);
+$access_token_request-&gt;sign;
+die &quot;COULDN'T VERIFY! Check OAuth parameters.\n&quot; unless $access_token_request-&gt;verify;
+my $access_token_request_url = $ACCESS_TOKEN_URL . '?' . $access_token_request-&gt;to_post_body;
+my $access_token_response = $browser-&gt;get( $access_token_request_url );
+if ( ! ($access_token_response-&gt;is_success) ) { 
+	die $access_token_response-&gt;status_line; 
+}
+my $access_token_response_query = new CGI($access_token_response-&gt;content);
+my $oauth_access_token = $access_token_response_query-&gt;param('oauth_token');
+my $oauth_access_token_secret = $access_token_response_query-&gt;param('oauth_token_secret');
+if ( ! ( $oauth_token &amp;&amp; $oauth_token_secret ) ) {
+	die &quot;ERROR : FireEagle did not reply with an oauth_token and oauth_token_secret&quot;;
+}
+print &quot;Request token: $oauth_token\n&quot;;
+print &quot;Request secret: $oauth_token_secret\n&quot;;
+print &quot;Access token: $oauth_access_token\n&quot;;
+print &quot;Access secret: $oauth_access_token_secret\n&quot;;</diff>
      <filename>curvrconf</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,15 @@
 # Richard Crowley &lt;r@rcrowley.org&gt;
 #
 
-# This works with my Nokia N73.  I don't care if it works on your phone.
+# This works with my Nokia N82.  I don't care if it works on your phone.
 # Tread lightly.
 
 use strict;
 
 use MIME::Base64;
-#use Flickr::Upload::Dopplr;
-use Flickr::Upload;
+use Flickr::Upload::FireEagle;
+
+
 
 # Flickr API goodness
 my $FLICKR_API_KEY = '';
@@ -22,9 +23,9 @@ my $FLICKR_TOKEN = '';
 # Dopplr API token
 my $DOPPLR_TOKEN = '';
 
-my $CURVR_BIN = '/home/rcrowley/bin/curvr';
+my $CURVR_BIN = 'curvr';
 my $CURVR_PROCESS = 'curve';
-my $CURVR_VERSION = '0.2';
+my $CURVR_VERSION = '0.2.1';
 
 # Tags to add to every photo
 my $TAGS = &quot;curvr curvr:process=$CURVR_PROCESS curvr:version=$CURVR_VERSION&quot;;
@@ -114,18 +115,20 @@ $tags =~ s/^\s+//;
 $tags =~ s/\s+$//;
 $tags .= &quot; $TAGS&quot;;
 
-# Upload with the Dopplr
-#my %dopplr = (
-#	'auth_token' =&gt; $DOPPLR_TOKEN,
-#	'tagify' =&gt; 'delicious'
-#);
+# Upload with Fire Bagel
+my %fireeagle = (
+	'consumer_key' =&gt; $FIREEAGLE_CONSUMER_KEY,
+	'consumer_secret' =&gt; $FIREEAGLE_CONSUMER_SECRET,
+	'access_token' =&gt; $FIREEAGLE_ACCESS_TOKEN,
+	'access_token_secret' =&gt; $FIREEAGLE_ACCESS_SECRET,
+	'tagify' =&gt; 'delicious'
+);
 my %flickr = (
 	'key' =&gt; $FLICKR_API_KEY,
 	'secret' =&gt; $FLICKR_SECRET,
-#	'dopplr' =&gt; \%dopplr
+	'fireeagle' =&gt; \%fireeagle
 );
-#my $uploadr = Flickr::Upload::Dopplr-&gt;new(\%flickr);
-my $uploadr = Flickr::Upload-&gt;new(\%flickr);
+my $uploadr = Flickr::Upload::FireEagle-&gt;new(\%flickr);
 my $photo_id = $uploadr-&gt;upload(
 	'photo' =&gt; $out,
 	'auth_token' =&gt; $FLICKR_TOKEN,</diff>
      <filename>curvrmail</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c353009077ac005f4b8e494809321fa676c95ea7</id>
    </parent>
  </parents>
  <author>
    <name>Richard Crowley</name>
    <email>r@rcrowley.org</email>
  </author>
  <url>http://github.com/rcrowley/curvr/commit/d5d97739fa3cb640214f83b3f1198105a8f064f0</url>
  <id>d5d97739fa3cb640214f83b3f1198105a8f064f0</id>
  <committed-date>2008-05-24T00:16:17-07:00</committed-date>
  <authored-date>2008-05-24T00:16:17-07:00</authored-date>
  <message>Holy crap this is awesome.  Changes integrated FireEagle at the expense of Dopplr.  One more commit coming to resolve the don't-commit-secrets-to-version-control problem</message>
  <tree>e05ec8dcfb7d22f28868365b6d495624317880ca</tree>
  <committer>
    <name>Richard Crowley</name>
    <email>r@rcrowley.org</email>
  </committer>
</commit>
