Example #1
0
File: index.php Project: r67/cose
            }
        }
    }
    return ArrestDB::Reply($result);
});
ArrestDB::Serve('PUT', '/(#any)/(#num)', function ($table, $id) {
    if (empty($GLOBALS['_PUT']) === true) {
        $result = ArrestDB::$HTTP[204];
    } else {
        if (is_array($GLOBALS['_PUT']) === true) {
            $data = [];
            foreach ($GLOBALS['_PUT'] as $key => $value) {
                $data[$key] = sprintf('"%s" = ?', $key);
            }
            $query = array(sprintf('UPDATE "%s" SET %s WHERE "%s" = ?', $table, implode(', ', $data), 'id'));
            $query = sprintf('%s;', implode(' ', $query));
            $result = ArrestDB::Query($query, $GLOBALS['_PUT'], $id);
            if ($result === false) {
                $result = ArrestDB::$HTTP[409];
            } else {
                $result = ArrestDB::$HTTP[200];
            }
        }
    }
    return ArrestDB::Reply($result);
});
exit(ArrestDB::Reply(ArrestDB::$HTTP[400]));
class ArrestDB
{
    public static $HTTP = [200 => ['success' => ['code' => 200, 'status' => 'OK']], 201 => ['success' => ['code' => 201, 'status' => 'Created']], 204 => ['error' => ['code' => 204, 'status' => 'No Content']], 400 => ['error' => ['code' => 400, 'status' => 'Bad Request']], 403 => ['error' => ['code' => 403, 'status' => 'Forbidden']], 404 => ['error' => ['code' => 404, 'status' => 'Not Found']], 409 => ['error' => ['code' => 409, 'status' => 'Conflict']], 503 => ['error' => ['code' => 503, 'status' => 'Service Unavailable']]];
    public static function Query($query = null)
Example #2
0
        }
        if ($rowCount != $result['result']->rowCount()) {
            syslog(LOG_ERR, sprintf('Archived unloaded %d rows but delete removed %d rows - rolling back.', $rowCount, $result['result']->rowCount()));
            $result = ArrestDB::Query('ROLLBACK');
            if ($result === false) {
                http_response_code(400);
                exit('Unable to ROLLBACK transaction!! Oh noes...');
            }
        }
        $result = ArrestDB::Query('COMMIT');
        if ($result === false) {
            http_response_code(400);
            exit('Unable to COMMIT transaction');
        }
    } catch (Exception $e) {
        $result = ArrestDB::Query('ROLLBACK');
        if ($result === false) {
            http_response_code(400);
            exit('Unable to ROLLBACK transaction!! Oh noes...');
        }
    }
    http_response_code(201);
    header(sprintf('Location: %s/%s', $ARCHIVE_URI_PREFIX, basename($archive)));
    return ArrestDB::Reply(['count' => $rowCount]);
});
ArrestDB::Serve('DELETE', '/(#any)', function () {
    http_response_code(400);
    exit('Not yet implemented');
});
http_response_code(400);
exit('Request failed to match');
Example #3
0
ArrestDB::Serve('PUT', '/(#any)/(#num)', function ($table, $id) {
    if (function_exists("ArrestDB_auth") && !ArrestDB_auth("PUT", $table, $id)) {
        exit(ArrestDB::Reply(ArrestDB::$HTTP[403]));
    }
    if (preg_match("/(?P<table>[^\\(]+)\\((?P<id>[^\\)]+)\\)/", $table, $matches)) {
        $table = $matches["table"];
        $id = $matches["id"];
    }
    if (function_exists("ArrestDB_obfuscate_id")) {
        if ($id != null && $id != "") {
            $id = ArrestDB_obfuscate_id($table, $id, true);
        }
    }
    if (function_exists("ArrestDB_allow")) {
        if (!ArrestDB_allow("PUT", $table, $id)) {
            $result = ArrestDB::$HTTP[403];
            return ArrestDB::Reply($result);
        }
    }
    if (function_exists("ArrestDB_tableAlias")) {
        $table = ArrestDB_tableAlias($table);
    }
    if (empty($GLOBALS['_PUT']) === true) {
        $result = ArrestDB::$HTTP[204];
    } else {
        if (is_array($GLOBALS['_PUT']) === true) {
            $query = [];
            $query["TABLE"] = $table;
            $query["VALUES"] = [];
            foreach ($GLOBALS["_PUT"] as $key => $value) {
                $query["VALUES"][$key] = $value;
            }
            if (function_exists("ArrestDB_modify_query")) {
                $query = ArrestDB_modify_query("PUT", $table, $id, $query);
            }
            $data = [];
            foreach ($query['VALUES'] as $key => $value) {
                $data[$key] = sprintf('"%s" = ?', $key);
            }
            $query2 = array(sprintf('UPDATE "%s" SET %s WHERE "%s" = ?', $query["TABLE"], implode(', ', $data), ArrestDB::TableKeyName($query["TABLE"])));
            $query2 = sprintf('%s;', implode(' ', $query2));
            $result = ArrestDB::Query($query2, $query['VALUES'], $id);
            if ($result === false) {
                $result = ArrestDB::$HTTP[409];
            } else {
                $result = ArrestDB::$HTTP[200];
                if (function_exists(ArrestDB_postProcess)) {
                    ArrestDB_postProcess("PUT", $table, $id);
                }
            }
        }
    }
    return ArrestDB::Reply($result);
});
Example #4
0
ArrestDB::Serve('POST', '/(#any)', function ($table) {
    if (empty($_POST) === true) {
        $result = ArrestDB::$HTTP[204];
    } else {
        if (is_array($_POST) === true) {
            $queries = [];
            if (count($_POST) == count($_POST, COUNT_RECURSIVE)) {
                $_POST = [$_POST];
            }
            foreach ($_POST as $row) {
                $data = [];
                foreach ($row as $key => $value) {
                    $data[sprintf('"%s"', $key)] = $value;
                }
                $query = array(sprintf('INSERT INTO "%s" (%s) VALUES (%s)', $table, implode(', ', array_keys($data)), implode(', ', array_fill(0, count($data), '?'))));
                $queries[] = array(sprintf('%s;', implode(' ', $query)), $data);
            }
            if (count($queries) > 1) {
                ArrestDB::Query()->beginTransaction();
                while (is_null($query = array_shift($queries)) !== true) {
                    if (($result = ArrestDB::Query($query[0], $query[1])) === false) {
                        ArrestDB::Query()->rollBack();
                        break;
                    }
                }
                if ($result !== false && ArrestDB::Query()->inTransaction() === true) {
                    $result = ArrestDB::Query()->commit();
                }
            } else {
                if (is_null($query = array_shift($queries)) !== true) {
                    $result = ArrestDB::Query($query[0], $query[1]);
                }
            }
            if ($result === false) {
                $result = ArrestDB::$HTTP[409];
            } else {
                $result = ArrestDB::$HTTP[201];
            }
        }
    }
    return ArrestDB::Reply($result);
});