aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-09-24 19:26:40 +0200
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-09-24 19:26:40 +0200
commitd6b4186040011aad16a173a1ceaa5a5084025470 (patch)
treee4abd284c75fb9442f2b3b2be0764c5467901bda
parentf1f8ea2da3a9334d20d54c083735855c90a21d9e (diff)
API implement delete feed + refactor move feed
-rwxr-xr-xapp/Controllers/feedController.php45
-rw-r--r--app/Models/FeedDAO.php13
-rw-r--r--p/api/greader.php46
3 files changed, 54 insertions, 50 deletions
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php
index c64b67a80..0ff27e0da 100755
--- a/app/Controllers/feedController.php
+++ b/app/Controllers/feedController.php
@@ -492,6 +492,23 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
return $updated_feeds;
}
+ public static function moveFeed($feed_id, $cat_id) {
+ if ($feed_id <= 0) {
+ return false;
+ }
+ if ($cat_id <= 0) {
+ // If category was not given get the default one.
+ $catDAO = new FreshRSS_CategoryDAO();
+ $catDAO->checkDefault();
+ $def_cat = $catDAO->getDefault();
+ $cat_id = $def_cat->id();
+ }
+ $feedDAO = FreshRSS_Factory::createFeedDao();
+ $feed = $feedDAO->searchById($feed_id);
+ return $feed && ($feed->category() == $cat_id ||
+ $feedDAO->updateFeed($feed_id, array('category' => $cat_id)));
+ }
+
/**
* This action changes the category of a feed.
*
@@ -511,9 +528,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$feed_id = Minz_Request::param('f_id');
$cat_id = Minz_Request::param('c_id');
- $feedDAO = FreshRSS_Factory::createFeedDao();
- if ($feedDAO->moveFeed($feed_id, $cat_id)) {
+ if (self::moveFeed($feed_id, $cat_id)) {
// TODO: return something useful
} else {
Minz_Log::warning('Cannot move feed `' . $feed_id . '` ' .
@@ -522,6 +538,21 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
}
}
+ public static function deleteFeed($feed_id) {
+ $feedDAO = FreshRSS_Factory::createFeedDao();
+ if ($feedDAO->deleteFeed($feed_id)) {
+ // TODO: Delete old favicon
+
+ // Remove related queries
+ FreshRSS_Context::$user_conf->queries = remove_query_by_get(
+ 'f_' . $feed_id, FreshRSS_Context::$user_conf->queries);
+ FreshRSS_Context::$user_conf->save();
+
+ return true;
+ }
+ return false;
+ }
+
/**
* This action deletes a feed.
*
@@ -540,21 +571,13 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
if (!$redirect_url) {
$redirect_url = array('c' => 'subscription', 'a' => 'index');
}
-
if (!Minz_Request::isPost()) {
Minz_Request::forward($redirect_url, true);
}
$id = Minz_Request::param('id');
- $feedDAO = FreshRSS_Factory::createFeedDao();
- if ($feedDAO->deleteFeed($id)) {
- // TODO: Delete old favicon
-
- // Remove related queries
- FreshRSS_Context::$user_conf->queries = remove_query_by_get(
- 'f_' . $id, FreshRSS_Context::$user_conf->queries);
- FreshRSS_Context::$user_conf->save();
+ if (self::deleteFeed($id)) {
Minz_Request::good(_t('feedback.sub.feed.deleted'), $redirect_url);
} else {
Minz_Request::bad(_t('feedback.sub.feed.error'), $redirect_url);
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index 2fd2c6194..475d39286 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -136,19 +136,6 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
}
- public function moveFeed($feed_id, $cat_id) {
- if ($cat_id <= 0) {
- // If category was not given get the default one.
- $catDAO = new FreshRSS_CategoryDAO();
- $catDAO->checkDefault();
- $def_cat = $catDAO->getDefault();
- $cat_id = $def_cat->id();
- }
- $feed = $this->searchById($feed_id);
- return $feed && ($feed->category() == $cat_id ||
- $this->updateFeed($feed_id, array('category' => $cat_id)));
- }
-
public function deleteFeed($id) {
$sql = 'DELETE FROM `' . $this->prefix . 'feed` WHERE id=?';
$stm = $this->bd->prepare($sql);
diff --git a/p/api/greader.php b/p/api/greader.php
index 7094fb381..9b07e0729 100644
--- a/p/api/greader.php
+++ b/p/api/greader.php
@@ -153,13 +153,12 @@ function authorizationToUser() {
if (count($headerAuthX) === 2) {
$user = $headerAuthX[0];
if (ctype_alnum($user)) {
- $conf = get_user_configuration($user);
- if (is_null($conf)) {
+ FreshRSS_Context::$user_conf = get_user_configuration($user);
+ if (FreshRSS_Context::$user_conf == null) {
Minz_Log::warning('Invalid API user ' . $user . ': configuration cannot be found.');
unauthorized();
}
- global $system_conf;
- if ($headerAuthX[1] === sha1($system_conf->salt . $user . $conf->apiPasswordHash)) {
+ if ($headerAuthX[1] === sha1(FreshRSS_Context::$system_conf->salt . $user . FreshRSS_Context::$user_conf->apiPasswordHash)) {
return $user;
} else {
logMe('Invalid API authorisation for user ' . $user . ': ' . $headerAuthX[1]);
@@ -181,16 +180,15 @@ function clientLogin($email, $pass) { //http://web.archive.org/web/2013060409104
include_once(LIB_PATH . '/password_compat.php');
}
- $conf = get_user_configuration($email);
- if (is_null($conf)) {
+ FreshRSS_Context::$user_conf = get_user_configuration($email);
+ if (FreshRSS_Context::$user_conf == null) {
Minz_Log::warning('Invalid API user ' . $email . ': configuration cannot be found.');
unauthorized();
}
- if ($conf->apiPasswordHash != '' && password_verify($pass, $conf->apiPasswordHash)) {
+ if (FreshRSS_Context::$user_conf->apiPasswordHash != '' && password_verify($pass, FreshRSS_Context::$user_conf->apiPasswordHash)) {
header('Content-Type: text/plain; charset=UTF-8');
- global $system_conf;
- $auth = $email . '/' . sha1($system_conf->salt . $email . $conf->apiPasswordHash);
+ $auth = $email . '/' . sha1(FreshRSS_Context::$system_conf->salt . $email . FreshRSS_Context::$user_conf->apiPasswordHash);
echo 'SID=', $auth, "\n",
'Auth=', $auth, "\n";
exit();
@@ -209,8 +207,7 @@ function token($conf) {
//https://github.com/ericmann/gReader-Library/blob/master/greader.class.php
$user = Minz_Session::param('currentUser', '_');
//logMe('token('. $user . ")"); //TODO: Implement real token that expires
- global $system_conf;
- $token = str_pad(sha1($system_conf->salt . $user . $conf->apiPasswordHash), 57, 'Z'); //Must have 57 characters
+ $token = str_pad(sha1(FreshRSS_Context::$system_conf->salt . $user . $conf->apiPasswordHash), 57, 'Z'); //Must have 57 characters
echo $token, "\n";
exit();
}
@@ -219,8 +216,7 @@ function checkToken($conf, $token) {
//http://code.google.com/p/google-reader-api/wiki/ActionToken
$user = Minz_Session::param('currentUser', '_');
//logMe('checkToken(' . $token . ")");
- global $system_conf;
- if ($token === str_pad(sha1($system_conf->salt . $user . $conf->apiPasswordHash), 57, 'Z')) {
+ if ($token === str_pad(sha1(FreshRSS_Context::$system_conf->salt . $user . $conf->apiPasswordHash), 57, 'Z')) {
return true;
}
unauthorized();
@@ -261,8 +257,7 @@ function subscriptionList() {
$stm->execute();
$res = $stm->fetchAll(PDO::FETCH_ASSOC);
- global $system_conf;
- $salt = $system_conf->salt;
+ $salt = FreshRSS_Context::$system_conf->salt;
$subscriptions = array();
foreach ($res as $line) {
@@ -296,7 +291,6 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
case 'edit':
break;
default:
- logMe("Bad action: $action");
badRequest();
}
$addCatId = 0;
@@ -336,14 +330,14 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
}
break;
case 'unsubscribe':
- if ($feedId > 0) {
- //TODO
+ if ($feedId > 0 && FreshRSS_feed_Controller::deleteFeed($feedId)) {
+ exit('OK');
} else {
badRequest();
}
break;
case 'edit':
- if ($feedId > 0 && $feedDAO->moveFeed($feedId, $addCatId)) {
+ if ($feedId > 0 && FreshRSS_feed_Controller::moveFeed($feedId, $addCatId)) {
exit('OK');
}
badRequest();
@@ -620,17 +614,17 @@ $pathInfos = explode('/', $pathInfo);
Minz_Configuration::register('system',
DATA_PATH . '/config.php',
DATA_PATH . '/config.default.php');
-$system_conf = Minz_Configuration::get('system');
-if (!$system_conf->api_enabled) {
+FreshRSS_Context::$system_conf = Minz_Configuration::get('system');
+if (!FreshRSS_Context::$system_conf->api_enabled) {
serviceUnavailable();
}
Minz_Session::init('FreshRSS');
$user = authorizationToUser();
-$conf = null;
+FreshRSS_Context::$user_conf = null;
if ($user !== '') {
- $conf = get_user_configuration($user);
+ FreshRSS_Context::$user_conf = get_user_configuration($user);
}
//logMe('User => ' . $user);
@@ -722,7 +716,7 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
break;
case 'edit-tag': //http://blog.martindoms.com/2010/01/20/using-the-google-reader-api-part-3/
$token = isset($_POST['T']) ? trim($_POST['T']) : '';
- checkToken($conf, $token);
+ checkToken(FreshRSS_Context::$user_conf, $token);
$a = isset($_POST['a']) ? $_POST['a'] : ''; //Add: user/-/state/com.google/read user/-/state/com.google/starred
$r = isset($_POST['r']) ? $_POST['r'] : ''; //Remove: user/-/state/com.google/read user/-/state/com.google/starred
$e_ids = multiplePosts('i'); //item IDs
@@ -730,7 +724,7 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
break;
case 'mark-all-as-read':
$token = isset($_POST['T']) ? trim($_POST['T']) : '';
- checkToken($conf, $token);
+ checkToken(FreshRSS_Context::$user_conf, $token);
$streamId = $_POST['s']; //StreamId
$ts = isset($_POST['ts']) ? $_POST['ts'] : '0'; //Older than timestamp in nanoseconds
if (!ctype_digit($ts)) {
@@ -739,7 +733,7 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
markAllAsRead($streamId, $ts);
break;
case 'token':
- token($conf);
+ token(FreshRSS_Context::$user_conf);
break;
}
} elseif ($pathInfos[1] === 'check' && $pathInfos[2] === 'compatibility') {