- $feed = $this->argUrl('hub.topic');
- $callback = $this->argUrl('hub.callback');
- $sub = $this->getSub($feed, $callback);
-
- if ($sub) {
- $token = $this->arg('hub.verify_token', null);
- if ($sub->verify('unsubscribe', $token)) {
- $sub->delete();
- common_log(LOG_INFO, "PuSH unsubscribed $feed for $callback");
- } else {
- throw new ServerException("Failed PuSH unsubscription: verification failed! $feed for $callback");
+ $matches = array();
+ if (preg_match('!/(\d+)\.atom$!', $feed, $matches)) {
+ $id = $matches[1];
+ $params = array('id' => $id, 'format' => 'atom');
+ $userFeed = common_local_url('ApiTimelineUser', $params);
+ $groupFeed = common_local_url('ApiTimelineGroup', $params);
+
+ if ($feed == $userFeed) {
+ $user = User::staticGet('id', $id);
+ if (!$user) {
+ // TRANS: Client exception.
+ throw new ClientException(sprintt(_m('Invalid hub.topic "%s". User doesn\'t exist.'),$feed));
+ } else {
+ return true;
+ }