Commit Graph

2074 Commits

Author SHA1 Message Date
Brion Vibber
a005210438 Initial README for yammer importer 2010-09-22 13:12:39 -07:00
Brion Vibber
12ec7efe90 Split Yammer importer files into subdirs before I get too lost adding UI 2010-09-22 12:52:34 -07:00
Evan Prodromou
b5cfcba471 Merge branch '0.9.x' into activityexport
Conflicts:
	plugins/OStatus/OStatusPlugin.php
2010-09-22 10:45:34 -04:00
Evan Prodromou
f0105893b0 Merge remote branch 'gitorious/0.9.x' into 0.9.x 2010-09-22 10:35:27 -04:00
Brion Vibber
acd7613933 Fixes for Yammer groups import: pulling explicit list, fixed avatar fetch 2010-09-21 23:19:36 -07:00
Brion Vibber
7a381f2533 Support non-image file uploads in Yammer import 2010-09-21 22:00:25 -07:00
Brion Vibber
0ed506ee93 Add group link on Yammer import (won't work until memberships are fixed) 2010-09-21 18:21:36 -07:00
Brion Vibber
da87d4334a Fetch more user data in Yammer imports, including the primary email address (preconfirmed, so we can do stuff like tell people to reset their passwords and log in!) and some bio info. 2010-09-21 18:15:32 -07:00
Brion Vibber
9652e77376 Yammer import: mark group posts with the proper group inbox (should we append a !foo or leave them as is, as current?) 2010-09-21 17:35:32 -07:00
Brion Vibber
db5a4ce70d Pull group descriptions in Yammer import 2010-09-21 17:25:02 -07:00
Brion Vibber
ed3d9a11bf Image file attachment support for Yammer import 2010-09-21 17:08:40 -07:00
Brion Vibber
47cf29b2a2 Copy favorites in Yammer importer 2010-09-21 16:27:26 -07:00
Brion Vibber
9be9d2f720 Full dump of input data in yamdump also for my reference... 2010-09-21 16:27:10 -07:00
Brion Vibber
0ff28ac8e0 Fix for replies in Yammer import 2010-09-21 16:19:02 -07:00
Brion Vibber
8091c4d291 Avatars for Yammer import 2010-09-21 16:10:44 -07:00
Brion Vibber
3e2cf3876d Initial semi-working yammer import :D
* no avatars
* no details of user accounts or their auth info
* no group memberships or subscriptions
* no attachments
* will probably esplode if >20 messages in your network *whistle innocently*
2010-09-21 15:54:39 -07:00
Brion Vibber
5b9efbb501 fix notices in SN_YammerClient 2010-09-21 15:29:04 -07:00
Brion Vibber
9b1b9b711b Poking around at import funcs... 2010-09-21 15:24:14 -07:00
Craig Andrews
2db8aa3ec3 Do not allow blank passwords when authenticating against LDAP. 2010-09-21 18:06:24 -04:00
Craig Andrews
8d019c03ee Do not allow blank passwords when authenticating against LDAP. 2010-09-21 18:05:18 -04:00
Brion Vibber
05af14e1ca YammerImport: initial processing code for users, groups, and messages 2010-09-21 14:56:20 -07:00
Brion Vibber
14a3697a61 Beginning stub of Yammer message->notice import 2010-09-21 13:56:30 -07:00
Brion Vibber
025184ce75 Split SN_YammerClient out to own class file 2010-09-21 13:29:44 -07:00
Brion Vibber
324fada5ea initial work on yammer importer code 2010-09-21 13:13:37 -07:00
Brion Vibber
42dd460d3b Merge branch 'master' into 0.9.x 2010-09-21 12:48:16 -07:00
Evan Prodromou
78ed0348b0 Merge remote branch 'gitorious/0.9.x' into 0.9.x 2010-09-21 14:07:48 -04:00
Evan Prodromou
f7ec40fa42 make some static functions public for OStatus_profile 2010-09-21 06:13:19 -04:00
Brion Vibber
f9e04993dd Bump up HTTP timeout for OStatus remote-tests.php to 60 seconds; when running without queues and with only bcmath, salmon key generation is absurdly slow. 2010-09-20 16:26:50 -07:00
Brion Vibber
64cdbe6c55 Ticket #2750: fixes to HTTP caching behavior across login/logout boundaries
* now ignoring if-modified-since if we failed an etag if-none-match comparison, per spec
* now including a hash of user id/nickname in most etags, so we'll update the view properly after login/logout

For API methods, checking the API-auth'ed user. (Many change results to include things like 'you're subscribed to this user' or 'this is one of your favorites', so user info is again needed)

There'll still be some last-modified stamps that aren't including user info properly, probably.
2010-09-20 13:42:58 -07:00
Siebrand Mazeland
10f6e14134 Merge branch '0.9.x' of git://gitorious.org/statusnet/mainline into 0.9.x 2010-09-20 21:12:56 +02:00
Siebrand Mazeland
bccbe8f519 * i18n/L10n update.
* superfluous whitespace removed.
2010-09-20 21:12:43 +02:00
Siebrand Mazeland
a58877a2f8 * i18n/L10n update.
* added onPluginVersion().
* superfluous whitespace removed.
2010-09-20 21:12:07 +02:00
Siebrand Mazeland
5cc08ccd07 Superfluous whitespace removed. 2010-09-20 21:11:05 +02:00
Brion Vibber
a3de417ca5 DirectionDetector plugin: tabs to spaces 2010-09-20 12:02:04 -07:00
Brion Vibber
d055b63187 DirectionDetector plugin: cleanup on reference usage & code comments.
Changed getClearText() to return its value instead of changing the input to keep things clearer to maintainers.
2010-09-20 12:00:39 -07:00
Siebrand Mazeland
500f8e5a87 * i18n/L10n updates.
* remove superfluous whitespace.
2010-09-20 20:54:30 +02:00
Brion Vibber
2475e25e78 Update DirectionDetector plugin to 0.2.0 from everplays 2010-09-20 11:49:39 -07:00
Siebrand Mazeland
e0952bf56b Superfluous whitespace removed. 2010-09-20 20:40:55 +02:00
Siebrand Mazeland
c0bc3b3042 Superfluous whitespace removed. 2010-09-20 20:39:28 +02:00
Siebrand Mazeland
b4887a0756 Add FIXME for bad message implementation. 2010-09-20 20:00:33 +02:00
Siebrand Mazeland
9679467201 Add onPluginVersion() 2010-09-20 19:59:13 +02:00
Siebrand Mazeland
dfa164069d Superfluous whitespace removed. 2010-09-20 19:46:01 +02:00
Siebrand Mazeland
f975c17329 Add onPluginVersion() 2010-09-20 19:45:43 +02:00
Siebrand Mazeland
3005f26aa2 Add onPluginVersion() 2010-09-20 19:42:56 +02:00
Siebrand Mazeland
2236e2eaf0 Remove superfluous whitespace. 2010-09-20 19:38:36 +02:00
Siebrand Mazeland
7f3731e2ba Add onPluginVersion() 2010-09-20 19:38:00 +02:00
Siebrand Mazeland
a4a39a2cc3 FIx inconsistencies in onPluginVersion() 2010-09-20 19:37:43 +02:00
Siebrand Mazeland
667cfcc84a * add onPluginVersion()
* remove superfluous whitespace.
2010-09-20 19:36:09 +02:00
Siebrand Mazeland
c932c0fdc1 Update pot files for plugins. 2010-09-19 17:44:29 +02:00
Siebrand Mazeland
74785c64f8 * L10n i18n update
* add translator hints
* update whitespace
* added a bunch of @todos.
2010-09-19 16:32:19 +02:00
Siebrand Mazeland
ecafae8472 * Remove trailing newline in e-mail message.
* Superfluous whitespace removed.
2010-09-19 15:52:53 +02:00
Siebrand Mazeland
5a6f616206 * i18n/L10n update
* translator comments added
* remove superfluous whitespace
2010-09-19 15:17:36 +02:00
Siebrand Mazeland
8dafb4c612 Add pot files. 2010-09-19 00:26:47 +02:00
Siebrand Mazeland
cf3f693687 Remove superfluous whitespace. 2010-09-19 00:25:52 +02:00
Siebrand Mazeland
8135f7d960 Update pot files for plugins. 2010-09-19 00:24:48 +02:00
Siebrand Mazeland
f1d78942b3 L10n updates. 2010-09-19 00:23:10 +02:00
Siebrand Mazeland
53cfa5349f * L10n update
* superfluous whitespace removed.
2010-09-19 00:20:16 +02:00
Siebrand Mazeland
1564b6aa49 * L10n update
* remove superfluous whitespace
2010-09-19 00:19:02 +02:00
Siebrand Mazeland
8b44063ca1 * L10n update
* superfluous whitespace removed
2010-09-19 00:17:24 +02:00
Siebrand Mazeland
159e3e7b71 Fix typo 2010-09-19 00:13:06 +02:00
Siebrand Mazeland
02299d5bd7 * i18n/L10n updates.
* add FIXMEs for bad i18n.
* add translator hints.
2010-09-19 00:06:21 +02:00
Siebrand Mazeland
16d234f9af Remove superfluous whitespace 2010-09-18 23:49:49 +02:00
Siebrand Mazeland
cc62afe5b9 * i18n/L10n updates
* translator hints added
* superfluous whitespace removed
2010-09-18 22:31:41 +02:00
Siebrand Mazeland
a7fca907dc DB -> database 2010-09-18 21:27:29 +02:00
Siebrand Mazeland
ba6538ed78 * i18n/L10n updates
* whitespace updates.
2010-09-18 17:45:18 +02:00
Siebrand Mazeland
1c5e00df30 Fix typo. 2010-09-18 17:16:48 +02:00
Siebrand Mazeland
cfe60815bc Remove superfluous whitespace. 2010-09-18 17:14:00 +02:00
Siebrand Mazeland
326e351d44 Fix typo. 2010-09-18 15:38:15 +02:00
Siebrand Mazeland
52ccc8e521 * update L10n
* remove superfluous whitespace
2010-09-18 15:26:48 +02:00
Siebrand Mazeland
edb411b4ae * L10n updates and translator documentation added.
* superfluous whitespace removed.
2010-09-18 15:23:17 +02:00
Siebrand Mazeland
34f95c26fd * FIXME/CHECKMEs added for (possible) bad i18n
* translator hints added
* superfluous whitespace removed
2010-09-18 15:10:49 +02:00
Siebrand Mazeland
977472bcf6 remove superfluous whitespace 2010-09-18 14:39:06 +02:00
Siebrand Mazeland
09c99461e5 * update L10n
* remove superfluous whitespace
2010-09-18 14:35:04 +02:00
Siebrand Mazeland
03e600b797 Update i18n/L10n 2010-09-18 14:31:03 +02:00
Siebrand Mazeland
f8e91ab33f Add translator hints. 2010-09-18 12:05:27 +02:00
Siebrand Mazeland
26a9963dad Update L10n. 2010-09-18 11:52:35 +02:00
Siebrand Mazeland
1ee1f6621f * update i18n/L10n
* remove superfluous whitespace
2010-09-18 11:50:27 +02:00
Siebrand Mazeland
f0716819ec * update i18n/L10n
* remove superfluous whitespace
2010-09-18 11:45:50 +02:00
Siebrand Mazeland
2d119df6d3 * update i18n/L10n
* remove superfluous whitespace
2010-09-18 11:43:17 +02:00
Siebrand Mazeland
b99b0555fd Update L10n. 2010-09-18 11:36:40 +02:00
Siebrand Mazeland
11a98ea41f * L10n update
* superfluous whitespace removed.
2010-09-18 11:27:37 +02:00
Siebrand Mazeland
eed0b24f23 * i18n/L10n updates
* superfluous whitespace removed
2010-09-18 11:25:11 +02:00
Siebrand Mazeland
596d2c212a Update i18n/L10n. 2010-09-18 10:41:13 +02:00
Siebrand Mazeland
90ce201684 Update L10n. 2010-09-18 10:32:54 +02:00
Siebrand Mazeland
14fa758983 Update L10n 2010-09-18 10:30:45 +02:00
Siebrand Mazeland
ca3d803f1d Update i18n/L10n. 2010-09-18 10:25:13 +02:00
Brion Vibber
89c561c9cf Ticket #2731: Fix for regression in posting to remote groups (regression in 2d4e0693c8)
Changes in 2d4e0693c8 changed Ostatus_profile::filterReplies() (which sorts out the local, remote, and group recipients on incoming remote messages) from checking for remote profiles with a safe call to Ostatus_profile::staticGet() to calls through Ostatus_profile::ensureProfileURL() and Ostatus_profile::ensureWebfinger(), which throw exceptions and thus abort processing.
Since this was done before checking for local groups, the filter would fail when the ensure* functions determined it was looking at a local group and rightfully refused to create a remote group profile for it.

Changing the calls to the ensure* functions was done so we can record remote reply recipients for future reply-to-reply processing (the staticGet() call was a cheaper way to do a lookup when we knew we only actually had to process groups that somebody signed up to); most important fix is simply to actually check for the exception! :)

Here I'm changing the order of processing so we do the local group lookup first -- where it's nice and safe -- and then when we do the remote checks, we'll go ahead and gracefully skip that entry if the full remote lookup fails, so we'll still process any following recipients.
2010-09-16 14:50:23 -07:00
Brion Vibber
097d0bd2fa Ticket #2731: Fix for regression in posting to remote groups (regression in 2d4e0693c8)
Changes in 2d4e0693c8 changed Ostatus_profile::filterReplies() (which sorts out the local, remote, and group recipients on incoming remote messages) from checking for remote profiles with a safe call to Ostatus_profile::staticGet() to calls through Ostatus_profile::ensureProfileURL() and Ostatus_profile::ensureWebfinger(), which throw exceptions and thus abort processing.
Since this was done before checking for local groups, the filter would fail when the ensure* functions determined it was looking at a local group and rightfully refused to create a remote group profile for it.

Changing the calls to the ensure* functions was done so we can record remote reply recipients for future reply-to-reply processing (the staticGet() call was a cheaper way to do a lookup when we knew we only actually had to process groups that somebody signed up to); most important fix is simply to actually check for the exception! :)

Here I'm changing the order of processing so we do the local group lookup first -- where it's nice and safe -- and then when we do the remote checks, we'll go ahead and gracefully skip that entry if the full remote lookup fails, so we'll still process any following recipients.
2010-09-16 14:43:27 -07:00
Evan Prodromou
670ad53215 Merge branch '0.9.x' into activityexport 2010-09-15 23:31:20 -04:00
Brion Vibber
95b534c5ce Move standalone plugin files into subdirectories so they can have locale data, etc added to them at leisure. 2010-09-15 14:10:18 -07:00
Evan Prodromou
b2abae433d Merge remote branch 'gitorious/0.9.x' into 0.9.x 2010-09-15 15:57:41 -04:00
Siebrand Mazeland
db1d348135 Update/add pot files for plugins. 2010-09-15 01:16:45 +02:00
Siebrand Mazeland
987651c8a4 * i18n/L10n updates
* superfluous whitespace removed
2010-09-14 21:45:13 +02:00
Siebrand Mazeland
04b7af4620 * i18n/L10n updates
* superfluous whitespace removed
2010-09-14 21:33:57 +02:00
Evan Prodromou
a881ce23e7 note on why we don't use Group_member::asActivity() in OStatusPlugin 2010-09-14 11:02:54 -04:00
Evan Prodromou
00c4662ee4 add a link to cometd.org in Comet plugin README 2010-09-14 10:41:35 -04:00
Brion Vibber
0021c16bd1 Declare public options on DisqusPlugin to avoid notice warnings on access if not set. 2010-09-13 12:06:10 -07:00
Evan Prodromou
d9b959fc64 move code for making activities from OStatus plugin to Subscription and Fave classes 2010-09-13 11:44:20 -04:00
Evan Prodromou
9aadd3cb42 Merge remote branch 'gitorious/0.9.x' into 0.9.x 2010-09-13 09:29:32 -04:00
Siebrand Mazeland
a9fad9a7ac Add translator hint. 2010-09-12 17:08:49 +02:00
Brion Vibber
f17512cfe6 Catch exceptions during SubMirror mirror attempt; log & skip that one if found.
Should avoid things like RequireValidatedEmailPlugin causing infinite retry loops if the mirror-er isn't validated yet.
2010-09-10 11:50:19 -07:00
Evan Prodromou
cfcb860317 use capturing parens for matching at-mentions in twitterstatusfetcher 2010-09-10 09:32:56 -04:00
Evan Prodromou
262eb7120f make our own twitter links if Twitter doesn't give us entities 2010-09-10 09:32:39 -04:00
Evan Prodromou
398df867de use capturing parens for matching at-mentions in twitterstatusfetcher 2010-09-10 09:21:01 -04:00
Evan Prodromou
deb8f2a38b make our own twitter links if Twitter doesn't give us entities 2010-09-10 09:10:53 -04:00
Evan Prodromou
4419e43f7f Merge branch '0.9.x' into 1.0.x
Conflicts:
	EVENTS.txt
	plugins/TwitterBridge/daemons/twitterstatusfetcher.php
	plugins/TwitterBridge/twitterbasicauthclient.php
2010-09-09 15:01:03 -04:00
Evan Prodromou
42f1ec85ea change the event we use for deleting a linked status on Twitter 2010-09-08 16:40:37 -04:00
Evan Prodromou
e40ed1fd56 move notice_to_status initialization code to run-once script 2010-09-08 16:10:07 -04:00
Brion Vibber
c758b2b000 Merge branch 'testing' into 0.9.x 2010-09-08 11:48:09 -07:00
Brion Vibber
7407754c27 Merge branch 'master' into testing 2010-09-08 11:47:44 -07:00
Brion Vibber
f2574fdd01 Fix for #2663: fix for original/96px-size avatars getting saved with bad permissions, causing failure to see images if background queues are different user from web server.
The original-size file is now forced to 0644 (all-readable), which should help. Not sure this is 100% ideal, but it's better than 0600!
(The other sizes were being created in other code and had sane read perms already.)

Watch out for similar issues in Twitter bridge etc; avatar import code should get cleaned up and consolidated.
2010-09-07 16:52:02 -07:00
Brion Vibber
d470c007fc Quick fix for #2659: unable to login with Livejournal OpenID
The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body).
Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;)

GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page.

Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET.

Tested against providers:
* LiveJournal
* Google
* LaunchPad
* identi.ca
2010-09-07 16:22:51 -07:00
Brion Vibber
51b272d078 Merge branch 'openid-fix' into 0.9.x 2010-09-07 16:20:27 -07:00
Brion Vibber
961aba68fc Quick fix for #2659: unable to login with Livejournal OpenID
The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body).
Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;)

GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page.

Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET.

Tested against providers:
* LiveJournal
* Google
* LaunchPad
* identi.ca
2010-09-07 16:15:32 -07:00
Evan Prodromou
5c98dfd58c text substitution is Unicode-aware for twitterstatusfetcher 2010-09-07 15:54:06 -04:00
Evan Prodromou
2d18963b4c Fix pkeyget call
Fix the pkeyget call in Twitter_synch_Status
2010-09-07 15:34:10 -04:00
Evan Prodromou
b6440a206d staticGet -> pkeyGet in Twitter_synch_status 2010-09-07 15:29:36 -04:00
Craig Andrews
6f95ccd37d Create Account Manager plugin implementing the Account Management specification
Add Account Manager support to the OpenID plugin
2010-09-07 13:45:52 -04:00
Craig Andrews
8d54809c35 move xrd and hostmeta out of the OStatus plugin and into core
add event for setting up hostmeta, and use them in the OStatus plugin
2010-09-07 13:45:52 -04:00
Craig Andrews
3dd734b2c3 Remove CSRF protection from username/password login and from OpenID login. 2010-09-07 13:45:52 -04:00
Evan Prodromou
d37f0da077 debug statements for setting/getting last id 2010-09-07 11:53:26 -04:00
Evan Prodromou
9793e4ceb4 Store foreign ID for synch info, not user ID 2010-09-07 10:53:11 -04:00
Evan Prodromou
21bea14140 remove data dump of retrieved statuses 2010-09-07 04:42:23 -04:00
Evan Prodromou
8facfdcfee Correct DB_DataObject constant in Twitter_synch_status 2010-09-07 04:35:14 -04:00
Evan Prodromou
98e9fa19c8 Missing comma in column list in Twitter_synch_status 2010-09-07 04:33:28 -04:00
Evan Prodromou
49af35b44d add modified column to twitter_synch_status 2010-09-07 04:32:01 -04:00
Evan Prodromou
e53e152d6f use and save since_id parameter for home_timeline 2010-09-07 04:22:55 -04:00
Evan Prodromou
86b6d7b722 save synch status for different timelines 2010-09-07 04:17:36 -04:00
Evan Prodromou
a46ba0b548 save Twitter mentions as StatusNet replies 2010-09-07 04:00:59 -04:00
Evan Prodromou
c2c6acbfd2 add back in # and @ for links 2010-09-07 04:00:59 -04:00
Evan Prodromou
2de6d0b03d add Twitter-approved links to Twitter statuses 2010-09-07 04:00:59 -04:00
Evan Prodromou
28fecf70b9 better handling of params in oauthget 2010-09-07 04:00:59 -04:00
Evan Prodromou
a844aaaea6 better param handling in hometimeline 2010-09-07 04:00:59 -04:00
Evan Prodromou
86d37ba59c include entities in the results of home_timeline 2010-09-07 04:00:59 -04:00
Evan Prodromou
b059a19e0f delete Twitter notice if it was posted from here 2010-09-07 04:00:59 -04:00
Evan Prodromou
ba8a24073f Notify Twitter when StatusNet user faves/disfaves a Twitter notice 2010-09-07 04:00:59 -04:00
Evan Prodromou
5944fe57e6 using null variable in twitter_status_id() 2010-09-07 04:00:59 -04:00
Evan Prodromou
a5554bc11e check status_id before trying to retweet it 2010-09-07 04:00:59 -04:00
Evan Prodromou
702d36257c truncate retweeted stuff if it's too long 2010-09-07 04:00:58 -04:00
Evan Prodromou
9847bffe99 correctly mark repeats from Twitter as non-local 2010-09-07 04:00:58 -04:00
Evan Prodromou
e20dc9fec3 correctly check for local notice to status mappings when notice originated here 2010-09-07 04:00:58 -04:00
Evan Prodromou
df88624d49 use bigint for status_ids 2010-09-07 04:00:58 -04:00
Evan Prodromou
a9bb1c7528 debug output when saving new mapping 2010-09-07 04:00:58 -04:00
Evan Prodromou
d986537c43 do a uniqueness check before saving new notice-to-status mapping 2010-09-07 04:00:58 -04:00
Evan Prodromou
299da9e462 SQL syntax error when initializing notice_to_status table 2010-09-07 04:00:58 -04:00
Evan Prodromou
6c7262c8ca Delete Notice_to_status when a notice is deleted 2010-09-07 04:00:58 -04:00
Evan Prodromou
e9e06879bb use Notice_to_status to check for duplicates 2010-09-07 04:00:58 -04:00
Evan Prodromou
a1981770ce Save notice-to-status mapping in its own table
Introduce a table mapping notices to Twitter statuses. Initialize
this table at checkSchema() time. Save the mapping when we push
or pull statuses. Use the table to determine if a notice has a
Twitter equivalent.
2010-09-07 04:00:58 -04:00
Evan Prodromou
17a16026ff add in_reply_to_status_id if notice is from twitter 2010-09-07 04:00:58 -04:00
Evan Prodromou
928239ecf8 do our own repeating so we can pass in a uri 2010-09-07 04:00:58 -04:00