aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-09-24 15:09:49 +0000
committermarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-09-24 15:09:49 +0000
commit0bf17c03c2de8423045bf59b83d1e6d12ed7ca42 (patch)
treec0e2b9a30e617d92392974139c605f5cde931fc6
parent745cdb1c22401bd62cf8e3d9754bcaceab2617f3 (diff)
downloadelgg-0bf17c03c2de8423045bf59b83d1e6d12ed7ca42.tar.gz
elgg-0bf17c03c2de8423045bf59b83d1e6d12ed7ca42.tar.bz2
Introducing API key administration panel
git-svn-id: https://code.elgg.org/elgg/trunk@2114 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--mod/apiadmin/actions/generate.php34
-rw-r--r--mod/apiadmin/actions/revokekey.php22
-rw-r--r--mod/apiadmin/index.php36
-rw-r--r--mod/apiadmin/languages/en.php38
-rw-r--r--mod/apiadmin/manifest.xml8
-rw-r--r--mod/apiadmin/start.php79
-rw-r--r--mod/apiadmin/views/default/apiadmin/forms/add_key.php13
-rw-r--r--mod/apiadmin/views/default/object/api_key.php31
8 files changed, 261 insertions, 0 deletions
diff --git a/mod/apiadmin/actions/generate.php b/mod/apiadmin/actions/generate.php
new file mode 100644
index 000000000..ca47deb3d
--- /dev/null
+++ b/mod/apiadmin/actions/generate.php
@@ -0,0 +1,34 @@
+<?php
+ global $CONFIG;
+
+ admin_gatekeeper();
+
+ $ref = get_input('ref');
+
+ if ($ref)
+ {
+ $keypair = create_api_user($CONFIG->site_id);
+
+ if ($keypair)
+ {
+
+ $newkey = new ElggObject();
+ $newkey->subtype = 'api_key';
+ $newkey->access_id = 2;
+ $newkey->title = $ref;
+ $newkey->public = $keypair->api_key;
+
+ if (!$newkey->save())
+ register_error(elgg_echo('apiadmin:generationfail'));
+ else
+ system_message(elgg_echo('apiadmin:generated'));
+ }
+ else
+ register_error(elgg_echo('apiadmin:generationfail'));
+ }
+ else
+ register_error(elgg_echo('apiadmin:noreference'));
+
+
+ forward($_SERVER['HTTP_REFERER']);
+?> \ No newline at end of file
diff --git a/mod/apiadmin/actions/revokekey.php b/mod/apiadmin/actions/revokekey.php
new file mode 100644
index 000000000..eeb5dd791
--- /dev/null
+++ b/mod/apiadmin/actions/revokekey.php
@@ -0,0 +1,22 @@
+<?php
+
+ global $CONFIG;
+
+ admin_gatekeeper();
+
+ $key = (int)get_input('keyid');
+
+ $obj = get_entity($key);
+
+ if (($obj) && ($obj instanceof ElggObject) && ($obj->subtype == get_subtype_id('object', 'api_key')))
+ {
+ if ($obj->delete())
+ system_message(elgg_echo('apiadmin:keyrevoked'));
+ else
+ register_error(elgg_echo('apiadmin:keynotrevoked'));
+ }
+ else
+ register_error(elgg_echo('apiadmin:keynotrevoked'));
+
+ forward($_SERVER['HTTP_REFERER']);
+?> \ No newline at end of file
diff --git a/mod/apiadmin/index.php b/mod/apiadmin/index.php
new file mode 100644
index 000000000..2908f212f
--- /dev/null
+++ b/mod/apiadmin/index.php
@@ -0,0 +1,36 @@
+<?php
+ /**
+ * Elgg API Admin
+ *
+ * @package ElggAPIAdmin
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.com/
+ */
+
+ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+ admin_gatekeeper();
+ set_context('admin');
+
+ $limit = get_input('limit', 10);
+ $offset = get_input('offset', 0);
+
+ // Set admin user for user block
+ set_page_owner($_SESSION['guid']);
+
+
+ $title = elgg_view_title(elgg_echo('apiadmin'));
+
+ // Display add form
+ $body .= elgg_view('apiadmin/forms/add_key');
+
+ // List entities
+ set_context('search');
+ $body .= list_entities('object', 'api_key');
+ set_context('admin');
+
+ // Display main admin menu
+ page_draw(elgg_echo('apitest'),elgg_view_layout("two_column_left_sidebar", '', $title . $body));
+?> \ No newline at end of file
diff --git a/mod/apiadmin/languages/en.php b/mod/apiadmin/languages/en.php
new file mode 100644
index 000000000..581b68552
--- /dev/null
+++ b/mod/apiadmin/languages/en.php
@@ -0,0 +1,38 @@
+<?php
+ /**
+ * API Admin language pack.
+ *
+ * @package ElggAPIAdmin
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.com/
+ */
+
+
+ $english = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'apiadmin' => 'API Administration',
+
+
+ 'apiadmin:keyrevoked' => 'API Key revoked',
+ 'apiadmin:keynotrevoked' => 'API Key could not be revoked',
+ 'apiadmin:generated' => 'API Key successfully generated',
+
+ 'apiadmin:yourref' => 'Your reference',
+ 'apiadmin:generate' => 'Generate a new keypair',
+
+ 'apiadmin:noreference' => 'You must provide a reference for your new key.',
+ 'apiadmin:generationfail' => 'There was a problem generating the new keypair',
+ 'apiadmin:generated' => 'New API keypair generated successfully',
+
+ 'apiadmin:revoke' => 'Revoke key',
+ 'apiadmin:public' => 'Public',
+ 'apiadmin:private' => 'Private',
+ );
+
+ add_translation("en",$english);
+?> \ No newline at end of file
diff --git a/mod/apiadmin/manifest.xml b/mod/apiadmin/manifest.xml
new file mode 100644
index 000000000..6dd935c7e
--- /dev/null
+++ b/mod/apiadmin/manifest.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+ <field key="author" value="Marcus Povey" />
+ <field key="version" value="1.0" />
+ <field key="description" value="API Admin" />
+ <field key="website" value="http://www.elgg.org/" />
+ <field key="copyright" value="(C) Curverider 2008" />
+</plugin_manifest> \ No newline at end of file
diff --git a/mod/apiadmin/start.php b/mod/apiadmin/start.php
new file mode 100644
index 000000000..496d8e461
--- /dev/null
+++ b/mod/apiadmin/start.php
@@ -0,0 +1,79 @@
+<?php
+ /**
+ * Elgg API Admin
+ *
+ * @package ElggAPIAdmin
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.com/
+ */
+
+ /**
+ * Initialise the API Admin tool
+ *
+ * @param unknown_type $event
+ * @param unknown_type $object_type
+ * @param unknown_type $object
+ */
+ function apiadmin_init($event, $object_type, $object = null) {
+
+ global $CONFIG;
+
+ // Register a page handler, so we can have nice URLs
+ register_page_handler('apiadmin','apiadmin_page_handler');
+
+ // Register some actions
+ register_action("apiadmin/revokekey",false, $CONFIG->pluginspath . "apiadmin/actions/revokekey.php", true);
+ register_action("apiadmin/generate",false, $CONFIG->pluginspath . "apiadmin/actions/generate.php", true);
+ }
+
+ /**
+ * Page setup. Adds admin controls to the admin panel.
+ *
+ */
+ function apiadmin_pagesetup()
+ {
+ if (get_context() == 'admin' && isadminloggedin()) {
+ global $CONFIG;
+ add_submenu_item(elgg_echo('apiadmin'), $CONFIG->wwwroot . 'pg/apiadmin/');
+ }
+ }
+
+
+ function apiadmin_page_handler($page)
+ {
+ global $CONFIG;
+
+ if ($page[0])
+ {
+ switch ($page[0])
+ {
+ default : include($CONFIG->pluginspath . "apiadmin/index.php");
+ }
+ }
+ else
+ include($CONFIG->pluginspath . "apiadmin/index.php");
+ }
+
+ function apiadmin_delete_key($event, $object_type, $object = null)
+ {
+ global $CONFIG;
+
+ if (($object) && ($object->subtype == get_subtype_id('object', 'api_key')))
+ {
+ // Delete
+ return remove_api_user($CONFIG->site_id, $object->public);
+ }
+
+ return true;
+ }
+
+
+ // Make sure test_init is called on initialisation
+ register_elgg_event_handler('init','system','apiadmin_init');
+ register_elgg_event_handler('pagesetup','system','apiadmin_pagesetup');
+
+ // Hook into delete to revoke secret keys
+ register_elgg_event_handler('delete','object','apiadmin_delete_key');
+?> \ No newline at end of file
diff --git a/mod/apiadmin/views/default/apiadmin/forms/add_key.php b/mod/apiadmin/views/default/apiadmin/forms/add_key.php
new file mode 100644
index 000000000..d45ab64c1
--- /dev/null
+++ b/mod/apiadmin/views/default/apiadmin/forms/add_key.php
@@ -0,0 +1,13 @@
+<?php
+ $ref_label = elgg_echo('apiadmin:yourref');
+ $ref_control = elgg_view('input/text', array('internalname' => 'ref'));
+ $gen_control = elgg_view('input/submit', array('value' => elgg_echo('apiadmin:generate')));
+
+ $form_body = <<< END
+ <div>
+ <p>$ref_label: $ref_control $gen_control</p>
+ </div>
+END;
+
+ echo elgg_view('input/form', array('action' => "{$vars['url']}actions/apiadmin/generate", "body" => $form_body));
+?> \ No newline at end of file
diff --git a/mod/apiadmin/views/default/object/api_key.php b/mod/apiadmin/views/default/object/api_key.php
new file mode 100644
index 000000000..fdfe9af54
--- /dev/null
+++ b/mod/apiadmin/views/default/object/api_key.php
@@ -0,0 +1,31 @@
+<?php
+ global $CONFIG;
+
+ $entity = $vars['entity'];
+
+ $icon = elgg_view(
+ 'graphics/icon', array(
+ 'entity' => $entity,
+ 'size' => 'small',
+ )
+ );
+
+
+ $public_label = elgg_echo('apiadmin:public');
+ $private_label = elgg_echo('apiadmin:private');
+ $revoke_label = elgg_echo('apiadmin:revoke');
+
+
+ $info = "<div><p><b>{$entity->title}</b> <a href=\"{$CONFIG->url}actions/apiadmin/revokekey?keyid={$entity->guid}\">$revoke_label</a></p></div>";
+ $info .= "<div><p><b>$public_label:</b> {$entity->public}<br />";
+ if (isadminloggedin()) {
+ // Only show secret portion to admins
+
+ // Fetch key
+ $keypair = get_api_user($CONFIG->site_id, $entity->public);
+
+ $info .= "<b>$private_label:</b> {$keypair->secret}</p></div>";
+ }
+
+ echo elgg_view_listing($icon, $info);
+?> \ No newline at end of file