From f4faa478c9ab3192b9560243cbefdfd0871b93c1 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 16 Jan 2013 13:56:56 +0100 Subject: [PATCH] Initial users administration. --- src/lib/Application.php | 29 ++++++++++++++++------- src/lib/DI.php | 10 ++------ src/templates/admin/_base.html | 2 +- src/templates/admin/users.html | 43 ++++++++++++++++++++++++++++++++-- src/www/getAll.php | 2 +- src/www/js/xo.js | 7 ++++++ src/www/users.php | 42 ++++++++++++++++++++++++++++++++- 7 files changed, 113 insertions(+), 22 deletions(-) diff --git a/src/lib/Application.php b/src/lib/Application.php index a21eb442b3..158d3d23ac 100644 --- a/src/lib/Application.php +++ b/src/lib/Application.php @@ -42,19 +42,24 @@ final class Application extends Base /** * */ - function getCurrentUser() + function __get($name) { - return isset($_SESSION['user']['name']) - ? $_SESSION['user']['name'] - : false; + if ($name === 'xo') + { + return $this->_di->get('xo'); + } + + parent::__get($name); } /** * */ - function getVms() + function getCurrentUser() { - return $this->_di->get('xo')->vm->getAll(); + return isset($_SESSION['user']['name']) + ? $_SESSION['user']['name'] + : false; } /** @@ -75,12 +80,18 @@ final class Application extends Base { $xo = $this->_di->get('xo'); - if (!$xo->session->logIn($name, $password)) + try + { + $xo->session->signInWithPassword($name, $password); + } + catch (XO_Exception $xo) { return false; } - $_SESSION['user']['name'] = $name; - $_SESSION['user']['password'] = $password; + + $user = $xo->session->getUser(); + $user['token'] = $xo->session->createToken(); + $_SESSION['user'] = $user; return true; } diff --git a/src/lib/DI.php b/src/lib/DI.php index 4b240d3f79..77967dcbfb 100644 --- a/src/lib/DI.php +++ b/src/lib/DI.php @@ -126,15 +126,9 @@ final class DI extends Base { $xo = new XO($this->get('config')->get('xo.url')); - if (isset( - $_SESSION['user']['name'], - $_SESSION['user']['password'] - )) + if (isset($_SESSION['user']['token'])) { - $xo->session->logIn( - $_SESSION['user']['name'], - $_SESSION['user']['password'] - ); + $xo->session->signInWithToken($_SESSION['user']['token']); } return $xo; diff --git a/src/templates/admin/_base.html b/src/templates/admin/_base.html index c3c2029f74..de7e327aee 100644 --- a/src/templates/admin/_base.html +++ b/src/templates/admin/_base.html @@ -32,7 +32,7 @@
  • Dashboard
  • -
  • Users
  • +
  • Users
  • Groups
  • Policies
  • diff --git a/src/templates/admin/users.html b/src/templates/admin/users.html index 08ddede8aa..6cd2985b88 100644 --- a/src/templates/admin/users.html +++ b/src/templates/admin/users.html @@ -25,8 +25,47 @@ {block content}
    -

    Users

    -

    Here admin of Users

    +

    Users

    + +

    Existing

    + + + + + + + + + + {foreach $users as $user_} + + + + + + {/foreach} + +
    NamePermissionDelete?
    {$user_.name}{$user_.permission} + + + +
    + +

    Create

    +
    +
    + + +
    +
    + + +
    + +
    +
    {/block content} diff --git a/src/www/getAll.php b/src/www/getAll.php index cb8c12d697..1ac6d8c5b1 100644 --- a/src/www/getAll.php +++ b/src/www/getAll.php @@ -23,7 +23,7 @@ */ $application = require(__DIR__.'/../bootstrap.php'); -$vms = $application->getVms(); +$vms = $application->xo->vm->getAll(); $keys = array( 'uuid', diff --git a/src/www/js/xo.js b/src/www/js/xo.js index c0c92148ea..4e77e14230 100644 --- a/src/www/js/xo.js +++ b/src/www/js/xo.js @@ -26,6 +26,13 @@ $('a:first-child').tooltip({placement:'bottom'}); $('a').tooltip(); + $('a[data-confirm]').click(function(e) { + if (!window.confirm($(this).attr('data-confirm'))) + { + e.preventDefault(); + } + }); + /** * Blink Bell * diff --git a/src/www/users.php b/src/www/users.php index 09b222786c..d77a2f6fe3 100644 --- a/src/www/users.php +++ b/src/www/users.php @@ -22,8 +22,48 @@ * @package Xen Orchestra Web */ $application = require(__DIR__.'/../bootstrap.php'); +$xo = $application->xo; + +$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false; + +if (isset($_GET['a'])) +{ + $action = $_GET['a']; + try + { + if ($action === 'delete') + { + $xo->user->delete($_GET['id']); + $application->redirect($referer ?: './'); + return; + } + if ($action === 'create') + { + $xo->user->create($_POST['name'], $_POST['password']); + $application->redirect($referer ?: './'); + return; + } + } + catch (XO_Exception $e) + { + $application->getTemplate('/_generic/error.html')->render(array( + 'error' => ucfirst($action).' failed', + 'message' => $e->getMessage(), + 'referer' => $referer, + )); + return; + } +} + + +$users = $xo->user->getAll(); +foreach ($users as &$user) +{ + $user = (object) $user; // Template system only handles objects. +} $application->getTemplate('/admin/users.html')->render(array( 'admin' => true, - 'users' => true, + 'menu_admin_users' => true, + 'users' => $users, ));