Track and log failures

pull/1/head
Victor Dubiniuk 11 years ago committed by Tobias Hintze
parent 32b08e7040
commit 2635421222

@ -16,10 +16,10 @@ class Controller {
/**
* Process partial/complete file download
* @param type $args - array containing session id as anelement with a key es_id
* @param array $args - array containing session id as anelement with a key es_id
*/
public static function serve($args){
\OCP\JSON::checkLoggedIn();
self::preDispatch(false);
$session = Session::getSession(@$args['es_id']);
$filename = isset($session['genesis_url']) ? $session['genesis_url'] : '';
@ -27,55 +27,65 @@ class Controller {
$download = new Download($officeView, $filename);
$download->sendResponse();
}
public static function startSession($args){
$uid = self::getUser();
$fileId = @$_POST['fileid'];
$officeView = View::initOfficeView($uid);
$genesisPath = View::storeDocument($uid, $fileId);
$uid = self::preDispatch();
try{
$fileId = @$_POST['fileid'];
if (!$fileId){
throw new \Exception('No fileId has been passed');
}
$officeView = View::initOfficeView($uid);
$genesisPath = View::storeDocument($uid, $fileId);
if (!$genesisPath){
throw new \Exception('Unable to copy document. Check permissions and make sure you have enought free space.');
}
if ($genesisPath){
$session = Session::getSessionByFileId($fileId);
try {
if (!$session){
$hash = View::getHashByGenesis($uid, $genesisPath);
$session = Session::add($genesisPath, $hash, $fileId);
}
$session['member_id'] = (string) Member::add($session['es_id'], \OCP\User::getUser(), self::getRandomColor());
\OCP\JSON::success($session);
exit();
} catch (\Exception $e){
//TODO: Log
throw $e; //Debug
if (!$session || empty($session)){
$hash = View::getHashByGenesis($uid, $genesisPath);
$session = Session::add($genesisPath, $hash, $fileId);
}
$session['member_id'] = (string) Member::add($session['es_id'], $uid, Helper::getRandomColor());
\OCP\JSON::success($session);
exit();
} catch (\Exception $e){
Helper::warnLog('Starting a session failed. Reason:') . $e->getMessage();
\OCP\JSON::error();
exit();
}
\OCP\JSON::error();
exit();
}
public static function joinSession($args){
$esId = @$args['es_id'];
\OCP\JSON::checkLoggedIn();
try {
if ($esId){
$session = Session::getSession($esId);
$uid = self::preDispatch();
try{
if (!$esId){
throw new \Exception('Session id is empty');
}
$session['member_id'] = (string) Member::add($session['es_id'], \OCP\User::getUser(), self::getRandomColor());
\OCP\JSON::success($session);
exit();
$session = Session::getSession($esId);
if (!$session || empty($session)){
throw new \Exception('Session doesn\'t exist');
}
throw new \Exception();
$session['member_id'] = (string) Member::add($session['es_id'], $uid, Helper::getRandomColor());
\OCP\JSON::success($session);
exit();
} catch (\Exception $e){
//TODO: Log
Helper::warnLog('Joining a session failed. Reason:') . $e->getMessage();
\OCP\JSON::error();
exit();
}
\OCP\JSON::error();
}
/**
* Store the document content to its origin
*/
public static function save(){
$uid = self::getUser();
$uid = self::preDispatch();
$esId = @$_POST['es_id'];
$memberId = @$_POST['member_id'];
$content = @$_POST['content'];
@ -84,37 +94,38 @@ class Controller {
$fileInfo = \OC\Files\Cache\Cache::getById($session['file_id']);
$path = $fileInfo[1];
$view = new \OC\Files\View('/' . $session['owner']);
$canWrite = ($view->file_exists($path) && $view->isUpdatable($path)) || $view->isCreatable($path);
if ($canWrite){
$view->file_put_contents($path, $content);
} else {
// TODO: report an error
// TODO: report an error, broke a plate, burn a house, conquer the galaxy
}
}
}
public static function listSessions(){
self::getUser();
self::preDispatch();
$sessions = Session::getAll();
if (!is_array($sessions)){
$sessions = array();
}
$preparedSessions = array_map(
function($x){return ($x['es_id']);},
$sessions
function($x){
return ($x['es_id']);
}, $sessions
);
\OCP\JSON::success(array(
"session_list" => $preparedSessions
));
}
public static function sessionInfo(){
self::getUser();
self::preDispatch();
$items = @$_POST['items'];
$info = array();
if (is_array($items)){
$info = Session::getInfoByFileid($items);
}
@ -123,39 +134,42 @@ class Controller {
"info" => $info
));
}
public static function listSessionsHtml(){
self::getUser();
self::preDispatch();
$sessions = Session::getAll();
if (!is_array($sessions)){
$sessions = array();
}
$preparedSessions = array_map(
function($x){return ($x['es_id']);},
$sessions
function($x){
return ($x['es_id']);
}, $sessions
);
$invites = Invite::getAllInvites();
if (!is_array($invites)){
$invites = array();
}
$tmpl = new \OCP\Template('office', 'part.sessions', '');
$tmpl = new \OCP\Template('office', 'part.sessions', '');
$tmpl->assign('invites', $invites);
$tmpl->assign('sessions', $sessions);
echo $tmpl->fetchPage();
}
protected static function getRandomColor(){
$str = dechex(floor(rand(0, 16777215)));
$str = str_pad($str, 6, "0", STR_PAD_LEFT);
return '#' . $str;
}
protected static function getUser(){
/**
* Do security precheck
* @param bool callcheck - whether security token check is needed
* @return string userId of the currently logged in user
*/
protected static function preDispatch($callcheck = true){
if ($callcheck){
\OCP\JSON::callCheck();
}
\OCP\JSON::checkLoggedIn();
return \OCP\User::getUser();
}
}
}

@ -18,7 +18,7 @@ class UserController {
* Search users according to the pattern
*/
public static function search(){
$uid = self::getUser();
$uid = self::preDispatch();
if (@$_GET['search']){
$found = array();
$users = array();
@ -45,7 +45,7 @@ class UserController {
* Invite users to the editing session
*/
public static function invite(){
self::getUser();
self::preDispatch();
$invitees = @$_POST['users'];
if (is_array($invitees)){
@ -67,7 +67,7 @@ class UserController {
* Stub - sends a generic avatar
*/
public static function sendAvatar(){
$uid = self::getUser();
$uid = self::preDispatch(false);
$image = new \OC_Image('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');
\OC_Util::obEnd();
@ -75,10 +75,14 @@ class UserController {
}
/**
* Checks if the user is logged in
* @return string userid of the current user
* Do security precheck
* @param bool callcheck - whether security token check is needed
* @return string userId of the currently logged in user
*/
protected static function getUser(){
protected static function preDispatch($callcheck = true){
if ($callcheck){
\OCP\JSON::callCheck();
}
\OCP\JSON::checkLoggedIn();
return \OCP\User::getUser();
}

@ -0,0 +1,35 @@
<?php
/**
* ownCloud - Office App
*
* @author Victor Dubiniuk
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
*
* This file is licensed under the Affero General Public License version 3 or
* later.
*/
namespace OCA\Office;
class Helper{
const APP_ID = 'office';
public static function getRandomColor(){
$str = dechex(floor(rand(0, 16777215)));
$str = str_pad($str, 6, "0", STR_PAD_LEFT);
return '#' . $str;
}
public static function debugLog($message){
self::log($message, \OCP\Util::DEBUG);
}
public static function warnLog($message){
self::log($message, \OCP\Util::WARN);
}
public static function log($message, $level){
\OCP\Util::writeLog(self::APP_ID, $message, $level);
}
}
Loading…
Cancel
Save