]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/scripts/update_ostatus_profiles.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / OStatus / scripts / update_ostatus_profiles.php
old mode 100644 (file)
new mode 100755 (executable)
index bca136b..1f70bac
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 
-$shortoptions = 'u:a';
-$longoptions = array('uri=', 'all');
+$shortoptions = 'u:af';
+$longoptions = array('uri=', 'all', 'force');
 
 $helptext = <<<UPDATE_OSTATUS_PROFILES
 update_ostatus_profiles.php [options]
@@ -32,10 +32,11 @@ you have no backup.
     -u --uri OStatus profile URI to update
     -a --all update all
 
+    -f --force  Force update (despite identical avatar URLs etc.)
 
 UPDATE_OSTATUS_PROFILES;
 
-require_once INSTALLDIR . '/scripts/commandline.inc';
+require_once INSTALLDIR . '/scripts/commandline.inc.php';
 
 /*
  * Hacky class to remove some checks and get public access to
@@ -43,71 +44,6 @@ require_once INSTALLDIR . '/scripts/commandline.inc';
  */
 class LooseOstatusProfile extends Ostatus_profile
 {
-    /**
-     * Download and update given avatar image
-     *
-     * @param string $url
-     * @throws Exception in various failure cases
-     */
-    public function updateAvatar($url)
-    {
-        if (!common_valid_http_url($url)) {
-            // TRANS: Server exception. %s is a URL.
-            throw new ServerException(sprintf(_m('Invalid avatar URL %s.'), $url));
-        }
-
-        if ($this->isGroup()) {
-            $self = $this->localGroup();
-        } else {
-            $self = $this->localProfile();
-        }
-        if (!$self) {
-            throw new ServerException(sprintf(
-                // TRANS: Server exception. %s is a URI.
-                _m('Tried to update avatar for unsaved remote profile %s.'),
-                $this->uri));
-        }
-
-        // @fixme this should be better encapsulated
-        // ripped from oauthstore.php (for old OMB client)
-        $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
-        try {
-            if (!copy($url, $temp_filename)) {
-                // TRANS: Server exception. %s is a URL.
-                throw new ServerException(sprintf(_m('Unable to fetch avatar from %s.'), $url));
-            }
-
-            if ($this->isGroup()) {
-                $id = $this->group_id;
-            } else {
-                $id = $this->profile_id;
-            }
-            // @fixme should we be using different ids?
-            $imagefile = new ImageFile($id, $temp_filename);
-            $filename = Avatar::filename($id,
-                                         image_type_to_extension($imagefile->type),
-                                         null,
-                                         common_timestamp());
-            rename($temp_filename, Avatar::path($filename));
-        } catch (Exception $e) {
-            unlink($temp_filename);
-            throw $e;
-        }
-        // @fixme hardcoded chmod is lame, but seems to be necessary to
-        // keep from accidentally saving images from command-line (queues)
-        // that can't be read from web server, which causes hard-to-notice
-        // problems later on:
-        //
-        // http://status.net/open-source/issues/2663
-        chmod(Avatar::path($filename), 0644);
-
-        $self->setOriginal($filename);
-
-        $orig = clone($this);
-        $this->avatar = $url;
-        $this->update($orig);
-    }
-
     /**
      * Look up and if necessary create an Ostatus_profile for the remote entity
      * with the given profile page URL. This should never return null -- you
@@ -118,7 +54,7 @@ class LooseOstatusProfile extends Ostatus_profile
      * @throws Exception on various error conditions
      * @throws OStatusShadowException if this reference would obscure a local user/group
      */
-    public static function updateProfileURL($profile_url, $hints=array())
+    public static function updateProfileURL($profile_url, array $hints=array())
     {
         $oprofile = null;
 
@@ -157,13 +93,13 @@ class LooseOstatusProfile extends Ostatus_profile
         // Check if they've got an LRDD header
 
         $lrdd = LinkHeader::getLink($response, 'lrdd', 'application/xrd+xml');
-
-        if (!empty($lrdd)) {
-
-            $xrd = Discovery::fetchXrd($lrdd);
+        try {
+            $xrd = new XML_XRD();
+            $xrd->loadFile($lrdd);
             $xrdHints = DiscoveryHints::fromXRD($xrd);
-
             $hints = array_merge($hints, $xrdHints);
+        } catch (Exception $e) {
+            // No hints available from XRD
         }
 
         // If discovery found a feedurl (probably from LRDD), use it.
@@ -214,9 +150,12 @@ class LooseOstatusProfile extends Ostatus_profile
 
         $hints = array('webfinger' => $addr);
 
-        $dhints = DiscoveryHints::fromXRD($xrd);
-
-        $hints = array_merge($hints, $dhints);
+        try {
+            $dHints = DiscoveryHints::fromXRD($xrd);
+            $hints = array_merge($hints, $xrdHints);
+        } catch (Exception $e) {
+            // No hints available from XRD
+        }
 
         // If there's an Hcard, let's grab its info
         if (array_key_exists('hcard', $hints)) {
@@ -268,10 +207,11 @@ class LooseOstatusProfile extends Ostatus_profile
 function pullOstatusProfile($uri) {
 
     $oprofile = null;
+    $validate = new Validate();
 
-    if (Validate::email($uri)) {
+    if ($validate->email($uri)) {
         $oprofile = LooseOstatusProfile::updateWebfinger($uri);
-    } else if (Validate::uri($uri)) {
+    } else if ($validate->uri($uri)) {
         $oprofile = LooseOstatusProfile::updateProfileURL($uri);
     } else {
         print "Sorry, we could not reach the address: $uri\n";
@@ -292,6 +232,8 @@ if (have_option('u', 'uri')) {
     exit(1);
 }
 
+$forceUpdates = have_option('f', 'force');
+
 $cnt = $lop->find();
 
 if (!empty($cnt)) {
@@ -314,12 +256,12 @@ while($lop->fetch()) {
             $orig = clone($lop);
             $lop->avatar = $oprofile->avatar;
             $lop->update($orig);
-            $lop->updateAvatar($oprofile->avatar);
+            $lop->updateAvatar($oprofile->avatar, $forceUpdates);
             if (!$quiet) { print "Done.\n"; }
         }
     } catch (Exception $e) {
         if (!$quiet) { print $e->getMessage() . "\n"; }
-        common_log(LOG_WARN, $e->getMessage(), __FILE__);
+        common_log(LOG_WARNING, $e->getMessage(), __FILE__);
         // continue on error
     }
 }