r4091 l2addressForDatabase(): signal error with exception, not NULL
[racktables] / process.php
CommitLineData
b325120a 1<?php
90a3d6d8
DY
2ob_start();
3try {
7e87a291 4// Include init after ophandlers/snmp, not before, so local.php can redefine things.
b6a7d936 5require 'inc/ophandlers.php';
7e87a291
DO
6// snmp.php is an exception, it is treated by a special hack
7if (isset ($_REQUEST['op']) and $_REQUEST['op'] == 'querySNMPData')
8 include 'inc/snmp.php';
e673ee24 9require 'inc/init.php';
0cc24e9a 10assertStringArg ('op');
067d799f 11$op = $_REQUEST['op'];
329ec966 12prepareNavigation();
e1ae3fb4 13// FIXME: find a better way to handle this error
e8900a2b 14if ($op == 'addFile' && !isset($_FILES['file']['error']))
3a089a44 15 throw new RackTablesError ('File upload error, check upload_max_filesize in php.ini', RackTablesError::MISCONFIGURED);
da958e52 16fixContext();
e673ee24 17
cde28cf0
DO
18if
19(
20 !isset ($ophandler[$pageno][$tabno][$op]) or
21 (!is_array ($ophandler[$pageno][$tabno][$op]) and !function_exists ($ophandler[$pageno][$tabno][$op]))
22)
3a089a44 23 throw new RackTablesError ("Invalid navigation data for '${pageno}-${tabno}-${op}'", RackTablesError::INTERNAL);
15c65ce4 24
e673ee24 25// We have a chance to handle an error before starting HTTP header.
46f92ff7 26if (!isset ($delayauth[$pageno][$tabno][$op]) and !permitted())
db55cf54 27 $location = buildWideRedirectURL (oneLiner (157)); // operation not permitted
46f92ff7 28else
7056988c 29{
1d356026
DO
30 // Call below does the job of bypass argument assertion, if such is required,
31 // so the ophandler function doesn't have to re-assert this portion of its
32 // arguments. And it would be even better to pass returned value to ophandler,
33 // so it is not necessary to remember the name of bypass in it.
34 getBypassValue();
cde28cf0
DO
35 if (!is_array ($ophandler[$pageno][$tabno][$op]))
36 $location = call_user_func ($ophandler[$pageno][$tabno][$op]);
37 else
ba6b426c 38 $location = tableHandler ($ophandler[$pageno][$tabno][$op]);
59a83bd8 39 if (!strlen ($location))
3a089a44 40 throw new RackTablesError ('Operation handler failed to return its status', RackTablesError::INTERNAL);
7056988c 41}
e673ee24 42header ("Location: " . $location);
90a3d6d8
DY
43ob_end_flush();
44}
3a089a44
DO
45// "soft" failures only require a short error message
46catch (InvalidRequestArgException $e)
47{
48 ob_end_clean();
49 header ('Location: ' . buildWideRedirectURL (oneLiner (107, array ($e->getMessage()))));
50}
ec523868 51catch (RTDatabaseError $e)
3a089a44
DO
52{
53 ob_end_clean();
54 header ('Location: ' . buildWideRedirectURL (oneLiner (108, array ($e->getMessage()))));
55}
56// the rest ends up in a dedicated page
90a3d6d8
DY
57catch (Exception $e)
58{
59 ob_end_clean();
3a089a44 60 printException ($e);
90a3d6d8 61}
e673ee24
DO
62
63?>