aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.htaccess4
-rw-r--r--include/api.php20
-rw-r--r--mod/item.php2
-rw-r--r--view/api_status_xml.tpl46
4 files changed, 67 insertions, 5 deletions
diff --git a/.htaccess b/.htaccess
index fe09fc522..9cd6fa34c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -9,13 +9,15 @@ Deny from all
<IfModule mod_rewrite.c>
RewriteEngine on
+# RewriteRule api.* - [E=REMOTE_USER:%{HTTP:Authorization},L]
+
# Protect repo directory from browsing
RewriteRule "(^|/)\.git" - [F]
# Rewrite current-style URLs of the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
+ RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
</IfModule>
diff --git a/include/api.php b/include/api.php
index ef41c411c..d1f0f9330 100644
--- a/include/api.php
+++ b/include/api.php
@@ -27,10 +27,21 @@
* Simple HTTP Login
*/
function api_login(&$a){
+ // workaround for HTTP-auth in CGI mode
+ if(x($_SERVER,'REDIRECT_REMOTE_USER')) {
+ $userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"],6)) ;
+ if(strlen($userpass)) {
+ list($name, $password) = explode(':', $userpass);
+ $_SERVER['PHP_AUTH_USER'] = $name;
+ $_SERVER['PHP_AUTH_PW'] = $password;
+ }
+ }
+
if (!isset($_SERVER['PHP_AUTH_USER'])) {
+ logger('API_login: ' . print_r($_SERVER,true), LOGGER_DEBUG);
header('WWW-Authenticate: Basic realm="Friendika"');
header('HTTP/1.0 401 Unauthorized');
- die('This api require login');
+ die('This api requires login');
}
$user = $_SERVER['PHP_AUTH_USER'];
@@ -52,9 +63,10 @@
if(count($r)){
$record = $r[0];
} else {
+ logger('API_login failure: ' . print_r($_SERVER,true), LOGGER_DEBUG);
header('WWW-Authenticate: Basic realm="Friendika"');
header('HTTP/1.0 401 Unauthorized');
- die('This api require login');
+ die('This api requires login');
}
$_SESSION['uid'] = $record['uid'];
$_SESSION['theme'] = $record['theme'];
@@ -303,7 +315,7 @@
// TODO - media uploads and alternate 'source'
- function api_post_message(&$a, $type) {
+ function api_statuses_update(&$a, $type) {
if (local_user()===false) return false;
$user_info = api_get_user($a);
@@ -329,7 +341,7 @@
item_post($a);
// this should output the last post (the one we just posted).
- return api_users_show();
+ return api_users_show($a,$type);
}
api_register_func('api/statuses/update','api_statuses_update', true);
diff --git a/mod/item.php b/mod/item.php
index 98f4ff90c..e8714f955 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -722,6 +722,8 @@ function item_post(&$a) {
logger('return: ' . $_POST['return']);
goaway($a->get_baseurl() . "/" . $_POST['return'] );
}
+ if($_POST['api_source'])
+ return;
$json = array('success' => 1);
if(x($_POST,'jsreload') && strlen($_POST['jsreload']))
$json['reload'] = $a->get_baseurl() . '/' . $_POST['jsreload'];
diff --git a/view/api_status_xml.tpl b/view/api_status_xml.tpl
new file mode 100644
index 000000000..f6cd9c2c0
--- /dev/null
+++ b/view/api_status_xml.tpl
@@ -0,0 +1,46 @@
+<status>{{ if $status }}
+ <created_at>$status.created_at</created_at>
+ <id>$status.id</id>
+ <text>$status.text</text>
+ <source>$status.source</source>
+ <truncated>$status.truncated</truncated>
+ <in_reply_to_status_id>$status.in_reply_to_status_id</in_reply_to_status_id>
+ <in_reply_to_user_id>$status.in_reply_to_user_id</in_reply_to_user_id>
+ <favorited>$status.favorited</favorited>
+ <in_reply_to_screen_name>$status.in_reply_to_screen_name</in_reply_to_screen_name>
+ <geo>$status.geo</geo>
+ <coordinates>$status.coordinates</coordinates>
+ <place>$status.place</place>
+ <contributors>$status.contributors</contributors>
+ <user>
+ <id>$status.user.id</id>
+ <name>$status.user.name</name>
+ <screen_name>$status.user.screen_name</screen_name>
+ <location>$status.user.location</location>
+ <description>$status.user.description</description>
+ <profile_image_url>$status.user.profile_image_url</profile_image_url>
+ <url>$status.user.url</url>
+ <protected>$status.user.protected</protected>
+ <followers_count>$status.user.followers</followers_count>
+ <profile_background_color>$status.user.profile_background_color</profile_background_color>
+ <profile_text_color>$status.user.profile_text_color</profile_text_color>
+ <profile_link_color>$status.user.profile_link_color</profile_link_color>
+ <profile_sidebar_fill_color>$status.user.profile_sidebar_fill_color</profile_sidebar_fill_color>
+ <profile_sidebar_border_color>$status.user.profile_sidebar_border_color</profile_sidebar_border_color>
+ <friends_count>$status.user.friends_count</friends_count>
+ <created_at>$status.user.created_at</created_at>
+ <favourites_count>$status.user.favourites_count</favourites_count>
+ <utc_offset>$status.user.utc_offset</utc_offset>
+ <time_zone>$status.user.time_zone</time_zone>
+ <profile_background_image_url>$status.user.profile_background_image_url</profile_background_image_url>
+ <profile_background_tile>$status.user.profile_background_tile</profile_background_tile>
+ <profile_use_background_image>$status.user.profile_use_background_image</profile_use_background_image>
+ <notifications></notifications>
+ <geo_enabled>$status.user.geo_enabled</geo_enabled>
+ <verified>$status.user.verified</verified>
+ <following></following>
+ <statuses_count>$status.user.statuses_count</statuses_count>
+ <lang>$status.user.lang</lang>
+ <contributors_enabled>$status.user.contributors_enabled</contributors_enabled>
+ </user>
+{{ endif }}</status>