master
Corne Oppelaar 8 years ago
parent 6cf8f4c8ca
commit 81875e455e

1
.gitignore vendored

@ -3,3 +3,4 @@ vendor/*
storage/*
logs/*
.idea
.vagrant

23
Vagrantfile vendored

@ -0,0 +1,23 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.define "web" do |web|
web.vm.box = "ubuntu/wily64"
web.vm.network "private_network", ip: "192.168.50.4"
web.vm.provision :shell, inline: <<installphp
add-apt-repository -y ppa:ondrej/php >/dev/null
apt-get -qq update 2>/dev/null
apt-get -qq install php7.0-cli php7.0-sqlite3 2>/dev/null >/dev/null;
start-stop-daemon -bS --quiet --make-pidfile --pidfile /var/run/zerooo.pid --startas /bin/bash -- -c "exec php -S 0:8888 -t /vagrant/public/ /vagrant/public/index.php > /var/log/zerooo.log 2>&1";
installphp
web.vm.network "forwarded_port", guest: 8888, host: 8888
end
config.vm.define "vpn" do |vpn|
vpn.vm.box = "ubuntu/wily64"
vpn.vm.network "private_network", ip: "192.168.50.8"
vpn.vm.synced_folder "../zer.ooo-server", "/server"
end
end

@ -0,0 +1,2 @@
#!/usr/bin/env bash
openssl rsa -in $1 -pubin -pubout -outform DER 2>/dev/null | openssl md5 -c | awk '{print $2}'

@ -1,3 +1,4 @@
#!/usr/bin/env bash
DIR=$(dirname $(realpath $0));
cd $DIR/..;
openssl ca -config "$DIR/../etc/openssl.conf" -revoke "$1";

@ -3,4 +3,4 @@ DIR=$(dirname $(realpath $0));
CSR=$(realpath $1);
CRT=$(realpath $2);
cd $DIR/../;
openssl ca -in $CSR -out $CRT -config $DIR/../etc/openssl.conf -md sha256 -days 3650 -extensions server_ext;
openssl ca -in $CSR -out $CRT -config $DIR/../etc/openssl.conf -md sha256 -days 3650 -extensions server_ext -batch -notext;

@ -16,7 +16,8 @@
"twig/twig": "v1.24.0",
"hassankhan/config": "0.10.0",
"monolog/monolog": "1.18.1",
"aura/session": "2.0.1"
"aura/session": "2.0.1",
"guzzlehttp/guzzle": "^6.2"
},
"autoload": {
"psr-4": {

175
composer.lock generated

@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "90f9c8a046e4ae9bac938f1d6005bbce",
"content-hash": "950c616fbb471647626c3d42e91c7d20",
"hash": "95b6dc2302dd6086dbc2b7248a1f5768",
"content-hash": "61847eefe53610226629206b81b6f8b5",
"packages": [
{
"name": "aura/session",
@ -98,6 +98,177 @@
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
"time": "2014-12-30 15:22:37"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "d094e337976dff9d8e2424e8485872194e768662"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/d094e337976dff9d8e2424e8485872194e768662",
"reference": "d094e337976dff9d8e2424e8485872194e768662",
"shasum": ""
},
"require": {
"guzzlehttp/promises": "~1.0",
"guzzlehttp/psr7": "~1.1",
"php": ">=5.5.0"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "~4.0",
"psr/log": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.2-dev"
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2016-03-21 20:02:09"
},
{
"name": "guzzlehttp/promises",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "c10d860e2a9595f8883527fa0021c7da9e65f579"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579",
"reference": "c10d860e2a9595f8883527fa0021c7da9e65f579",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2016-05-18 16:56:05"
},
{
"name": "guzzlehttp/psr7",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "31382fef2889136415751badebbd1cb022a4ed72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72",
"reference": "31382fef2889136415751badebbd1cb022a4ed72",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "PSR-7 message implementation",
"keywords": [
"http",
"message",
"stream",
"uri"
],
"time": "2016-04-13 19:56:01"
},
{
"name": "hassankhan/config",
"version": "0.10.0",

@ -12,4 +12,5 @@ core:
session: Eater\Glim\Service\Session
twig: Eater\Glim\Service\Twig
twig-vars: Eater\Glim\Service\TwigVars
ca: Eater\Glim\Service\CA
ca: Eater\Glim\Service\CA
server: Eater\Glim\Service\Server

@ -8,10 +8,22 @@ routes:
get: Register\Show
post: Register\Action
/logout: Logout
/ca: CA
/panel:
get: Panel
/certificates:
/new:
get: Panel\Certificates\_New\Show
post: Panel\Certificates\_New\Action
/download/{name}: Panel\Certificates\Download
/download/{name}: Panel\Certificates\Download
/revoke:
post: Panel\Certificates\Revoke
/server:
/sign:
post: Panel\Servers\Sign
/{fingerprint}:
get: Panel\Servers\Edit\Show
post: Panel\Servers\Edit\Action
/server:
/register:
post: Server\Register

@ -20,6 +20,7 @@
<column name="user_id" type="integer" />
<column name="name" type="varchar" size="64" />
<column name="certificate" type="longvarchar" />
<column name="private_key" type="longvarchar" />
<column name="expires_on" type="timestamp" />
<column name="revoked" type="boolean" default="false" />
<column name="serial" type="varchar" size="64" />
@ -46,4 +47,34 @@
<column name="id" type="integer" primaryKey="true" autoIncrement="true" />
<column name="invite" type="varchar" size="64" />
</table>
<table name="Server">
<column name="id" type="integer" primaryKey="true" autoIncrement="true" />
<column name="fqdn" type="varchar" size="64" />
<column name="fingerprint" type="varchar" size="64"/>
<column name="public_key" type="longvarchar" />
<column name="certificate" type="longvarchar" />
<column name="location" type="varchar" size="64" default="Unknown" />
<column name="speed" type="integer" default="-1" />
<column name="external_ip" type="varchar" size="128" />
<column name="internal_ip" type="varchar" size="128" default="10.24.0.0" />
<column name="netmask" type="integer" size="4" default="16" />
<column name="first_dns" type="varchar" size="128" />
<column name="second_dns" type="varchar" size="128" />
<column name="port" type="integer" default="1194" />
<column name="protocol" type="enum" valueSet="udp,tcp" default="udp" />
<column name="status" type="enum" default="registered" valueSet="registered,signed,revoked" />
<index>
<index-column name="fqdn" />
</index>
<index>
<index-column name="status" />
</index>
<unique>
<unique-column name="fingerprint" />
</unique>
</table>
</database>

@ -1,4 +1,13 @@
body {
padding-top: 50px;
padding-bottom: 20px;
}
.modal-top-alert {
margin-top: -15px;
border-radius: 0;
margin-left: -15px;
margin-right: -15px;
border-left: 0;
border-right: 0;
}

@ -0,0 +1,42 @@
$(function () {
var error = $('<div class="alert alert-danger" role="alert"></div>');
$('.save').click(function () {
save(function(){});
});
$('.save-and-sign').click(function () {
save(function () {
sign();
})
});
function save(callback) {
var fingerprint = $('.server-form').data('fingerprint');
var data = $('.server-form input').serializeArray();
$.post('/panel/server/' + fingerprint, data, function (data) {
if (!data.success) {
$('h2').after(error.text(data.error));
}
callback();
});
}
function sign() {
var fingerprint = $('.server-form').data('fingerprint');
$.post(
'/panel/server/sign',
{
fingerprint: fingerprint
},
function (data) {
if (!data.success) {
$('h2').after(error.text(data.error));
}
}
);
}
});

@ -3,6 +3,17 @@ $(function () {
$('.magic-csr').click(function () {
var name = $('#name').val();
if (name.length === 0) {
$('h2').after(error.text("Name can't be empty"));
return;
}
if (!/^[A-Za-z0-9_-]+$/.test(name)) {
$('h2').after(error.text("Only alphanumeric, _ and - allowed in name"));
return;
}
var user = $('.user').text();
var keys = forge.pki.rsa.generateKeyPair(1024);
@ -15,19 +26,31 @@ $(function () {
value: commonName
}]);
csr.sign(keys.privateKey);
var pem = forge.pki.certificationRequestToPem(csr);
var csrPem = forge.pki.certificationRequestToPem(csr);
$.post('/panel/certificates/new', {
csr: pem,
var newCertParams = {
csr: csrPem,
name: name
}, function (data) {
};
var keyPem = "";
if ($('#wantsPassword').prop('checked')) {
keyPem = forge.pki.encryptRsaPrivateKey(keys.privateKey, $('#password').val());
newCertParams.key = keyPem;
} else {
keyPem = forge.pki.privateKeyToPem(keys.privateKey);
}
$.post('/panel/certificates/new', newCertParams, function (data) {
if (data.success) {
var zip = new JSZip();
zip.file(commonName + '.key', pem);
zip.file(commonName + '.key', keyPem);
for(var file in data.zip) {
zip.file(file, data.zip[file]);
}
var content = zip.generate({type:"blob"});
saveAs(content, commonName + '-vpn.zip');
location.href = '/panel';
@ -36,4 +59,8 @@ $(function () {
}
});
});
$("#wantsPassword").change(function () {
$('#password, #saveOnline').prop('disabled', !this.checked);
});
});

@ -0,0 +1,29 @@
$(function(){
var error = $('<div class="alert alert-danger" role="alert"></div>');
var success = $('<div class="alert alert-success alert-dismissable" role="alert"></div>');
var selected = false;
$('.revoke').click(function () {
selected = $(this).data('name');
$('.revoke-modal').modal('show');
});
$('.revoke-confirm').click(function () {
var selectedSnapshot = selected;
$.post('/panel/certificates/revoke', {
name: selectedSnapshot,
password: $('.revoke-password').val()
}, function(data) {
if (data.success) {
$('#certificates').after(success.text("Successfully revoked '" + selectedSnapshot + "'"));
$('.revoke-modal').modal('hide');
} else {
$('#revoke-put-error-after-me').after(error.text(data.error));
}
});
$('.revoke-password').val('');
});
});

@ -0,0 +1,14 @@
<?php
namespace Eater\Glim\Handler;
class CA extends Session
{
function handle()
{
return$this->getResponse()
->withHeader('Content-Type', 'plain/text')
->withHeader('Content-Disposition', 'attachment; filename="ca.crt"')
->write(file_get_contents($this->getCore()->getBaseDir() . '/storage/ca/ca.crt'));
}
}

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: eater
* Date: 3/30/16
* Time: 12:10 AM
*/
namespace Eater\Glim\Handler;

@ -9,12 +9,31 @@
namespace Eater\Glim\Handler;
use Eater\Glim\Model\Server;
use Eater\Glim\Model\ServerQuery;
class Panel extends Session
{
protected $shouldHaveUser = true;
public function handle()
{
return $this->render('panel.html.twig');
$superuser = $this->getUser()->getSuperuser();
$vars = [
'superuser' => $superuser,
'servers' => $this->fetchServers()
];
if ($superuser) {
$vars['registeredServers'] = $this->fetchServers('registered');
}
return $this->render('panel.html.twig', $vars);
}
public function fetchServers($status = "signed")
{
return ServerQuery::create()->filterByStatus($status)->find();
}
}

@ -21,9 +21,7 @@ class Download extends Session
$name = $this->attr('name');
$cert = CertificateQuery::create()
->filterByName($name)
->filterByUser($this->getUser())
->findOne();
->findOneByUserAndName($this->getUser(), $name);
if ($cert === null) {
return $this->getResponse()->withStatus(404)->write("Couldn't find your Certificate with the name '{$name}'");

@ -0,0 +1,69 @@
<?php
/**
* Created by PhpStorm.
* User: eater
* Date: 4/6/16
* Time: 11:30 PM
*/
namespace Eater\Glim\Handler\Panel\Certificates;
use Eater\Glim\Handler\Session;
use Eater\Glim\Model\CertificateQuery;
use Eater\Glim\Service\CA;
use Slim\Http\Response;
class Revoke extends Session
{
protected $shouldHaveUser = true;
/**
* @return Response
*/
public function handle()
{
$user = $this->getUser();
$name = $this->post('name');
$password = $this->post('password');
$cert = CertificateQuery::create()
->filterByName($name)
->filterByUser($user)
->findOne();
if ($cert === null) {
return $this->json([
"success" => false,
"error" => 'Certificate with the name "' . $name . '" doesn\'t exist'
]);
}
if (!password_verify($password, $user->getPassword())) {
return $this->json([
'success' => false,
'error' => 'Invalid password'
]);
}
/**
* @var CA $ca
*/
$ca = $this->get('ca');
try {
$ca->revoke($cert->getCertificate());
} catch (\Exception $e) {
return $this->json([
"success" => false,
"error" => $e->getMessage()
]);
}
$cert->setRevoked(true);
$cert->save();
return $this->json([
"success" => true
]);
}
}

@ -69,6 +69,11 @@ class Action extends Session
$certificate->setName($name);
$certificate->setCertificate($crt);
$certificate->setExpiresOn(new \DateTime('@' . $details['validTo_time_t']));
if (!empty($this->post('key'))) {
$certificate->setPrivateKey($this->post('key'));
}
$certificate->setSerial($details['serialNumber']);
$user->addCertificate($certificate);

@ -0,0 +1,35 @@
<?php
namespace Eater\Glim\Handler\Panel\Servers\Edit;
use Eater\Glim\Handler\Session;
use Eater\Glim\Model\ServerQuery;
class Action extends Session
{
protected $shouldHaveSuperuser = true;
public function handle()
{
$server = ServerQuery::create()->findOneByFingerprint($this->attr('fingerprint'));
$server->setFqdn($this->post('fqdn'));
$server->setExternalIp($this->post('external-ip'));
# Details
$server->setLocation($this->post('location'));
$server->setSpeed($this->post('speed'));
# Config
$server->setInternalIp($this->post('internal-ip'));
$server->setNetmask($this->post('netmask'));
$server->setPort($this->post('post'));
$server->setProtocol($this->post('protocol'));
$server->setFirstDns($this->post('first-dns'));
$server->setSecondDns($this->post('second-dns'));
$server->save();
$this->json([ 'success'=> true ]);
}
}

@ -0,0 +1,34 @@
<?php
/**
* Created by PhpStorm.
* User: eater
* Date: 4/10/16
* Time: 9:30 PM
*/
namespace Eater\Glim\Handler\Panel\Servers\Edit;
use Eater\Glim\Handler\Session;
use Eater\Glim\Model\ServerQuery;
class Show extends Session
{
protected $shouldHaveSuperuser = true;
public function handle()
{
$server = ServerQuery::create()->findOneByFingerprint($this->attr('fingerprint'));
if ($server === null) {
return $this->getResponse()->withStatus(404);
}
return $this->render(
"panel/servers/edit.html.twig",
[
'server' => $server
]
);
}
}

@ -0,0 +1,50 @@
<?php
namespace Eater\Glim\Handler\Panel\Servers;
use Eater\Glim\Handler\Session;
use Eater\Glim\Model\ServerQuery;
use Eater\Glim\Service\CA;
use Eater\Glim\Service\Server;
use Symfony\Component\Config\Definition\Exception\Exception;
class Sign extends Session
{
protected $shouldHaveSuperuser = true;
public function handle()
{
/** @var CA $ca */
$ca = $this->get('ca');
$server = ServerQuery::create()->findOneByFingerprint($this->post('fingerprint'));
$publicKey = $server->getPublicKey();
try {
$crt = $ca->signServerKey($publicKey, $server->getFqdn());
} catch (\Exception $e) {
return $this->json([
'success' => false,
'error' => $e->getMessage()
]);
}
$server->setCertificate($crt);
$server->save();
/** @var Server $serverManager */
$serverManager = $this->get('server');
try {
$serverManager->deliverSignedCertificate($server);
} catch (\Exception $e) {
return $this->json([
'success' => false,
'error' => 'Failed to deliver certificate to server: ' . $e->__toString()
]);
}
return $this->json([
'success' => true
]);
}
}

@ -0,0 +1,72 @@
<?php
namespace Eater\Glim\Handler\Server;
use Eater\Glim\Handler\Main;
use Eater\Glim\Model\Server;
use Eater\Glim\Model\ServerQuery;
use Eater\Glim\Service\CA;
class Register extends Main
{
public function handle()
{
/** @var CA $ca */
$ca = $this->get('ca');
$publicKey = $this->post('publicKey');
$hexSignature = $this->post('signature');
$fingerprint = $ca->getFingerprintFromPublicKey($publicKey);
if (empty($publicKey)) {
return $this->bash(false, "no PublicKey was provided\n" . var_export($_POST, true) . "\n" . var_export($_FILES, true));
}
if (empty($hexSignature)) {
return $this->bash(false, "no signature was provided\n" . var_export($_POST));
}
$serverQuery = ServerQuery::create();
$server = $serverQuery->findOneByFingerprint($fingerprint);
$signature = hex2bin($hexSignature);
if ($server !== null) {
return $this->bash(false, "Server with this fingerprint already exists, if you want to change IP please use /server/update-ip or regenerate your public key");
}
try {
$result = $ca->verify($fingerprint, $signature, $publicKey);
} catch (\Exception $e) {
return $this->bash(false, "Verifying went into error: " . $e->getMessage());
}
if ($result) {
return $this->bash(false, "Signature is erroneous\nSignature: {$hexSignature}\nFingerprint: {$fingerprint}\nOpenSSL: " . openssl_error_string());
}
$ip = $_SERVER['REMOTE_ADDR'];
$originalIp = $ip;
$fqdn = gethostbyaddr($ip);
$ipOfFqdn = gethostbyname($fqdn);
if ($ip === $ipOfFqdn) {
$ip = $fqdn;
}
$server = new Server();
$server->setFingerprint($fingerprint);
$server->setFqdn($ip);
$server->setExternalIp($originalIp);
$server->setPublicKey($publicKey);
$server->save();
return $this->bash(true, "Good job, skeleton");
}
public function bash($result, $message)
{
return $this->getResponse()->write(($result ? 0 : 1) . "\n" . $message);
}
}

@ -19,6 +19,11 @@ class Session extends Main
*/
protected $shouldHaveUser = false;
/**
* @var bool
*/
protected $shouldHaveSuperuser = false;
/**
* @var User
*/
@ -55,8 +60,10 @@ class Session extends Main
$this->setUser($user);
if ($user === null && $this->shouldHaveUser) {
if ($user === null && ($this->shouldHaveUser || $this->shouldHaveSuperuser)) {
return $this->redirect('/login');
} elseif ($this->shouldHaveSuperuser && !$user->getSuperuser()) {
return $this->redirect('/panel');
}
}
}

@ -87,6 +87,12 @@ abstract class Certificate implements ActiveRecordInterface
*/
protected $certificate;
/**
* The value for the private_key field.
* @var string
*/
protected $private_key;
/**
* The value for the expires_on field.
* @var \DateTime
@ -389,6 +395,16 @@ abstract class Certificate implements ActiveRecordInterface
return $this->certificate;
}
/**
* Get the [private_key] column value.
*
* @return string
*/
public function getPrivateKey()
{
return $this->private_key;
}
/**
* Get the [optionally formatted] temporal [expires_on] column value.
*
@ -523,6 +539,26 @@ abstract class Certificate implements ActiveRecordInterface
return $this;
} // setCertificate()
/**
* Set the value of [private_key] column.
*
* @param string $v new value
* @return $this|\Eater\Glim\Model\Certificate The current object (for fluent API support)
*/
public function setPrivateKey($v)
{
if ($v !== null) {
$v = (string) $v;
}
if ($this->private_key !== $v) {
$this->private_key = $v;
$this->modifiedColumns[CertificateTableMap::COL_PRIVATE_KEY] = true;
}
return $this;
} // setPrivateKey()
/**
* Sets the value of [expires_on] column to a normalized version of the date/time value specified.
*
@ -643,13 +679,16 @@ abstract class Certificate implements ActiveRecordInterface
$col = $row[TableMap::TYPE_NUM == $indexType ? 3 + $startcol : CertificateTableMap::translateFieldName('Certificate', TableMap::TYPE_PHPNAME, $indexType)];
$this->certificate = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 4 + $startcol : CertificateTableMap::translateFieldName('ExpiresOn', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 4 + $startcol : CertificateTableMap::translateFieldName('PrivateKey', TableMap::TYPE_PHPNAME, $indexType)];
$this->private_key = (null !== $col) ? (string) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : CertificateTableMap::translateFieldName('ExpiresOn', TableMap::TYPE_PHPNAME, $indexType)];
$this->expires_on = (null !== $col) ? PropelDateTime::newInstance($col, null, 'DateTime') : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : CertificateTableMap::translateFieldName('Revoked', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : CertificateTableMap::translateFieldName('Revoked', TableMap::TYPE_PHPNAME, $indexType)];
$this->revoked = (null !== $col) ? (boolean) $col : null;
$col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : CertificateTableMap::translateFieldName('Serial', TableMap::TYPE_PHPNAME, $indexType)];
$col = $row[TableMap::TYPE_NUM == $indexType ? 7 + $startcol : CertificateTableMap::translateFieldName('Serial', TableMap::TYPE_PHPNAME, $indexType)];
$this->serial = (null !== $col) ? (string) $col : null;
$this->resetModified();
@ -659,7 +698,7 @@ abstract class Certificate implements ActiveRecordInterface
$this->ensureConsistency();
}
return $startcol + 7; // 7 = CertificateTableMap::NUM_HYDRATE_COLUMNS.
return $startcol + 8; // 8 = CertificateTableMap::NUM_HYDRATE_COLUMNS.
} catch (Exception $e) {
throw new PropelException(sprintf('Error populating %s object', '\\Eater\\Glim\\Model\\Certificate'), 0, $e);
@ -884,6 +923,9 @@ abstract class Certificate implements ActiveRecordInterface
if ($this->isColumnModified(CertificateTableMap::COL_CERTIFICATE)) {
$modifiedColumns[':p' . $index++] = 'certificate';
}
if ($this->isColumnModified(CertificateTableMap::COL_PRIVATE_KEY)) {
$modifiedColumns[':p' . $index++] = 'private_key';
}
if ($this->isColumnModified(CertificateTableMap::COL_EXPIRES_ON)) {
$modifiedColumns[':p' . $index++] = 'expires_on';
}
@ -916,6 +958,9 @@ abstract class Certificate implements ActiveRecordInterface
case 'certificate':
$stmt->bindValue($identifier, $this->certificate, PDO::PARAM_STR);
break;
case 'private_key':
$stmt->bindValue($identifier, $this->private_key, PDO::PARAM_STR);
break;
case 'expires_on':
$stmt->bindValue($identifier, $this->expires_on ? $this->expires_on->format("Y-m-d H:i:s") : null, PDO::PARAM_STR);
break;
@ -1000,12 +1045,15 @@ abstract class Certificate implements ActiveRecordInterface
return $this->getCertificate();
break;
case 4:
return $this->getExpiresOn();
return $this->getPrivateKey();
break;
case 5:
return $this->getRevoked();
return $this->getExpiresOn();
break;
case 6:
return $this->getRevoked();
break;
case 7:
return $this->getSerial();
break;
default:
@ -1042,16 +1090,17 @@ abstract class Certificate implements ActiveRecordInterface
$keys[1] => $this->getUserId(),
$keys[2] => $this->getName(),
$keys[3] => $this->getCertificate(),
$keys[4] => $this->getExpiresOn(),
$keys[5] => $this->getRevoked(),
$keys[6] => $this->getSerial(),
$keys[4] => $this->getPrivateKey(),
$keys[5] => $this->getExpiresOn(),
$keys[6] => $this->getRevoked(),
$keys[7] => $this->getSerial(),
);
$utc = new \DateTimeZone('utc');
if ($result[$keys[4]] instanceof \DateTime) {
if ($result[$keys[5]] instanceof \DateTime) {
// When changing timezone we don't want to change existing instances
$dateTime = clone $result[$keys[4]];
$result[$keys[4]] = $dateTime->setTimezone($utc)->format('Y-m-d\TH:i:s\Z');
$dateTime = clone $result[$keys[5]];
$result[$keys[5]] = $dateTime->setTimezone($utc)->format('Y-m-d\TH:i:s\Z');
}
$virtualColumns = $this->virtualColumns;
@ -1122,12 +1171,15 @@ abstract class Certificate implements ActiveRecordInterface
$this->setCertificate($value);
break;
case 4:
$this->setExpiresOn($value);
$this->setPrivateKey($value);
break;
case 5:
$this->setRevoked($value);
$this->setExpiresOn($value);
break;
case 6:
$this->setRevoked($value);
break;
case 7:
$this->setSerial($value);
break;
} // switch()
@ -1169,13 +1221,16 @@ abstract class Certificate implements ActiveRecordInterface
$this->setCertificate($arr[$keys[3]]);
}
if (array_key_exists($keys[4], $arr)) {
$this->setExpiresOn($arr[$keys[4]]);
$this->setPrivateKey($arr[$keys[4]]);
}
if (array_key_exists($keys[5], $arr)) {
$this->setRevoked($arr[$keys[5]]);
$this->setExpiresOn($arr[$keys[5]]);
}
if (array_key_exists($keys[6], $arr)) {
$this->setSerial($arr[$keys[6]]);
$this->setRevoked($arr[$keys[6]]);
}
if (array_key_exists($keys[7], $arr)) {
$this->setSerial($arr[$keys[7]]);
}
}
@ -1230,6 +1285,9 @@ abstract class Certificate implements ActiveRecordInterface
if ($this->isColumnModified(CertificateTableMap::COL_CERTIFICATE)) {
$criteria->add(CertificateTableMap::COL_CERTIFICATE, $this->certificate);
}
if ($this->isColumnModified(CertificateTableMap::COL_PRIVATE_KEY)) {
$criteria->add(CertificateTableMap::COL_PRIVATE_KEY, $this->private_key);
}
if ($this->isColumnModified(CertificateTableMap::COL_EXPIRES_ON)) {
$criteria->add(CertificateTableMap::COL_EXPIRES_ON, $this->expires_on);
}
@ -1328,6 +1386,7 @@ abstract class Certificate implements ActiveRecordInterface
$copyObj->setUserId($this->getUserId());
$copyObj->setName($this->getName());
$copyObj->setCertificate($this->getCertificate());
$copyObj->setPrivateKey($this->getPrivateKey());
$copyObj->setExpiresOn($this->getExpiresOn());
$copyObj->setRevoked($this->getRevoked());
$copyObj->setSerial($this->getSerial());
@ -1424,6 +1483,7 @@ abstract class Certificate implements ActiveRecordInterface
$this->user_id = null;
$this->name = null;
$this->certificate = null;
$this->private_key = null;
$this->expires_on = null;
$this->revoked = null;
$this->serial = null;

@ -24,6 +24,7 @@ use Propel\Runtime\Exception\PropelException;
* @method ChildCertificateQuery orderByUserId($order = Criteria::ASC) Order by the user_id column
* @method ChildCertificateQuery orderByName($order = Criteria::ASC) Order by the name column
* @method ChildCertificateQuery orderByCertificate($order = Criteria::ASC) Order by the certificate column
* @method ChildCertificateQuery orderByPrivateKey($order = Criteria::ASC) Order by the private_key column
* @method ChildCertificateQuery orderByExpiresOn($order = Criteria::ASC) Order by the expires_on column
* @method ChildCertificateQuery orderByRevoked($order = Criteria::ASC) Order by the revoked column
* @method ChildCertificateQuery orderBySerial($order = Criteria::ASC) Order by the serial column
@ -32,6 +33,7 @@ use Propel\Runtime\Exception\PropelException;
* @method ChildCertificateQuery groupByUserId() Group by the user_id column
* @method ChildCertificateQuery groupByName() Group by the name column
* @method ChildCertificateQuery groupByCertificate() Group by the certificate column
* @method ChildCertificateQuery groupByPrivateKey() Group by the private_key column
* @method ChildCertificateQuery groupByExpiresOn() Group by the expires_on column
* @method ChildCertificateQuery groupByRevoked() Group by the revoked column
* @method ChildCertificateQuery groupBySerial() Group by the serial column
@ -53,6 +55,7 @@ use Propel\Runtime\Exception\PropelException;
* @method ChildCertificate findOneByUserId(int $user_id) Return the first ChildCertificate filtered by the user_id column
* @method ChildCertificate findOneByName(string $name) Return the first ChildCertificate filtered by the name column
* @method ChildCertificate findOneByCertificate(string $certificate) Return the first ChildCertificate filtered by the certificate column
* @method ChildCertificate findOneByPrivateKey(string $private_key) Return the first ChildCertificate filtered by the private_key column
* @method ChildCertificate findOneByExpiresOn(string $expires_on) Return the first ChildCertificate filtered by the expires_on column
* @method ChildCertificate findOneByRevoked(boolean $revoked) Return the first ChildCertificate filtered by the revoked column
* @method ChildCertificate findOneBySerial(string $serial) Return the first ChildCertificate filtered by the serial column *
@ -64,6 +67,7 @@ use Propel\Runtime\Exception\PropelException;
* @method ChildCertificate requireOneByUserId(int $user_id) Return the first ChildCertificate filtered by the user_id column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneByName(string $name) Return the first ChildCertificate filtered by the name column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneByCertificate(string $certificate) Return the first ChildCertificate filtered by the certificate column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneByPrivateKey(string $private_key) Return the first ChildCertificate filtered by the private_key column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneByExpiresOn(string $expires_on) Return the first ChildCertificate filtered by the expires_on column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneByRevoked(boolean $revoked) Return the first ChildCertificate filtered by the revoked column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildCertificate requireOneBySerial(string $serial) Return the first ChildCertificate filtered by the serial column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
@ -73,6 +77,7 @@ use Propel\Runtime\Exception\PropelException;
* @method ChildCertificate[]|ObjectCollection findByUserId(int $user_id) Return ChildCertificate objects filtered by the user_id column
* @method ChildCertificate[]|ObjectCollection findByName(string $name) Return ChildCertificate objects filtered by the name column
* @method ChildCertificate[]|ObjectCollection findByCertificate(string $certificate) Return ChildCertificate objects filtered by the certificate column
* @method ChildCertificate[]|ObjectCollection findByPrivateKey(string $private_key) Return ChildCertificate objects filtered by the private_key column
* @method ChildCertificate[]|ObjectCollection findByExpiresOn(string $expires_on) Return ChildCertificate objects filtered by the expires_on column
* @method ChildCertificate[]|ObjectCollection findByRevoked(boolean $revoked) Return ChildCertificate objects filtered by the revoked column
* @method ChildCertificate[]|ObjectCollection findBySerial(string $serial) Return ChildCertificate objects filtered by the serial column
@ -168,7 +173,7 @@ abstract class CertificateQuery extends ModelCriteria
*/
protected function findPkSimple($key, ConnectionInterface $con)
{
$sql = 'SELECT id, user_id, name, certificate, expires_on, revoked, serial FROM Certificate WHERE id = :p0';
$sql = 'SELECT id, user_id, name, certificate, private_key, expires_on, revoked, serial FROM Certificate WHERE id = :p0';
try {
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
@ -400,6 +405,35 @@ abstract class CertificateQuery extends ModelCriteria
return $this->addUsingAlias(CertificateTableMap::COL_CERTIFICATE, $certificate, $comparison);
}
/**
* Filter the query on the private_key column
*
* Example usage:
* <code>
* $query->filterByPrivateKey('fooValue'); // WHERE private_key = 'fooValue'
* $query->filterByPrivateKey('%fooValue%'); // WHERE private_key LIKE '%fooValue%'
* </code>
*
* @param string $privateKey The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildCertificateQuery The current query, for fluid interface
*/
public function filterByPrivateKey($privateKey = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($privateKey)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $privateKey)) {
$privateKey = str_replace('*', '%', $privateKey);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(CertificateTableMap::COL_PRIVATE_KEY, $privateKey, $comparison);
}
/**
* Filter the query on the expires_on column
*

File diff suppressed because it is too large Load Diff

@ -0,0 +1,862 @@
<?php
namespace Eater\Glim\Model\Base;
use \Exception;
use \PDO;
use Eater\Glim\Model\Server as ChildServer;
use Eater\Glim\Model\ServerQuery as ChildServerQuery;
use Eater\Glim\Model\Map\ServerTableMap;
use Propel\Runtime\Propel;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\ModelCriteria;
use Propel\Runtime\Collection\ObjectCollection;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Exception\PropelException;
/**
* Base class that represents a query for the 'Server' table.
*
*
*
* @method ChildServerQuery orderById($order = Criteria::ASC) Order by the id column
* @method ChildServerQuery orderByFqdn($order = Criteria::ASC) Order by the fqdn column
* @method ChildServerQuery orderByFingerprint($order = Criteria::ASC) Order by the fingerprint column
* @method ChildServerQuery orderByPublicKey($order = Criteria::ASC) Order by the public_key column
* @method ChildServerQuery orderByCertificate($order = Criteria::ASC) Order by the certificate column
* @method ChildServerQuery orderByLocation($order = Criteria::ASC) Order by the location column
* @method ChildServerQuery orderBySpeed($order = Criteria::ASC) Order by the speed column
* @method ChildServerQuery orderByExternalIp($order = Criteria::ASC) Order by the external_ip column
* @method ChildServerQuery orderByInternalIp($order = Criteria::ASC) Order by the internal_ip column
* @method ChildServerQuery orderByNetmask($order = Criteria::ASC) Order by the netmask column
* @method ChildServerQuery orderByFirstDns($order = Criteria::ASC) Order by the first_dns column
* @method ChildServerQuery orderBySecondDns($order = Criteria::ASC) Order by the second_dns column
* @method ChildServerQuery orderByPort($order = Criteria::ASC) Order by the port column
* @method ChildServerQuery orderByProtocol($order = Criteria::ASC) Order by the protocol column
* @method ChildServerQuery orderByStatus($order = Criteria::ASC) Order by the status column
*
* @method ChildServerQuery groupById() Group by the id column
* @method ChildServerQuery groupByFqdn() Group by the fqdn column
* @method ChildServerQuery groupByFingerprint() Group by the fingerprint column
* @method ChildServerQuery groupByPublicKey() Group by the public_key column
* @method ChildServerQuery groupByCertificate() Group by the certificate column
* @method ChildServerQuery groupByLocation() Group by the location column
* @method ChildServerQuery groupBySpeed() Group by the speed column
* @method ChildServerQuery groupByExternalIp() Group by the external_ip column
* @method ChildServerQuery groupByInternalIp() Group by the internal_ip column
* @method ChildServerQuery groupByNetmask() Group by the netmask column
* @method ChildServerQuery groupByFirstDns() Group by the first_dns column
* @method ChildServerQuery groupBySecondDns() Group by the second_dns column
* @method ChildServerQuery groupByPort() Group by the port column
* @method ChildServerQuery groupByProtocol() Group by the protocol column
* @method ChildServerQuery groupByStatus() Group by the status column
*
* @method ChildServerQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method ChildServerQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
* @method ChildServerQuery innerJoin($relation) Adds a INNER JOIN clause to the query
*
* @method ChildServer findOne(ConnectionInterface $con = null) Return the first ChildServer matching the query
* @method ChildServer findOneOrCreate(ConnectionInterface $con = null) Return the first ChildServer matching the query, or a new ChildServer object populated from the query conditions when no match is found
*
* @method ChildServer findOneById(int $id) Return the first ChildServer filtered by the id column
* @method ChildServer findOneByFqdn(string $fqdn) Return the first ChildServer filtered by the fqdn column
* @method ChildServer findOneByFingerprint(string $fingerprint) Return the first ChildServer filtered by the fingerprint column
* @method ChildServer findOneByPublicKey(string $public_key) Return the first ChildServer filtered by the public_key column
* @method ChildServer findOneByCertificate(string $certificate) Return the first ChildServer filtered by the certificate column
* @method ChildServer findOneByLocation(string $location) Return the first ChildServer filtered by the location column
* @method ChildServer findOneBySpeed(int $speed) Return the first ChildServer filtered by the speed column
* @method ChildServer findOneByExternalIp(string $external_ip) Return the first ChildServer filtered by the external_ip column
* @method ChildServer findOneByInternalIp(string $internal_ip) Return the first ChildServer filtered by the internal_ip column
* @method ChildServer findOneByNetmask(int $netmask) Return the first ChildServer filtered by the netmask column
* @method ChildServer findOneByFirstDns(string $first_dns) Return the first ChildServer filtered by the first_dns column
* @method ChildServer findOneBySecondDns(string $second_dns) Return the first ChildServer filtered by the second_dns column
* @method ChildServer findOneByPort(int $port) Return the first ChildServer filtered by the port column
* @method ChildServer findOneByProtocol(int $protocol) Return the first ChildServer filtered by the protocol column
* @method ChildServer findOneByStatus(int $status) Return the first ChildServer filtered by the status column *
* @method ChildServer requirePk($key, ConnectionInterface $con = null) Return the ChildServer by primary key and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOne(ConnectionInterface $con = null) Return the first ChildServer matching the query and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
*
* @method ChildServer requireOneById(int $id) Return the first ChildServer filtered by the id column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByFqdn(string $fqdn) Return the first ChildServer filtered by the fqdn column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByFingerprint(string $fingerprint) Return the first ChildServer filtered by the fingerprint column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByPublicKey(string $public_key) Return the first ChildServer filtered by the public_key column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByCertificate(string $certificate) Return the first ChildServer filtered by the certificate column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByLocation(string $location) Return the first ChildServer filtered by the location column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneBySpeed(int $speed) Return the first ChildServer filtered by the speed column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByExternalIp(string $external_ip) Return the first ChildServer filtered by the external_ip column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByInternalIp(string $internal_ip) Return the first ChildServer filtered by the internal_ip column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByNetmask(int $netmask) Return the first ChildServer filtered by the netmask column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByFirstDns(string $first_dns) Return the first ChildServer filtered by the first_dns column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneBySecondDns(string $second_dns) Return the first ChildServer filtered by the second_dns column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByPort(int $port) Return the first ChildServer filtered by the port column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByProtocol(int $protocol) Return the first ChildServer filtered by the protocol column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
* @method ChildServer requireOneByStatus(int $status) Return the first ChildServer filtered by the status column and throws \Propel\Runtime\Exception\EntityNotFoundException when not found
*
* @method ChildServer[]|ObjectCollection find(ConnectionInterface $con = null) Return ChildServer objects based on current ModelCriteria
* @method ChildServer[]|ObjectCollection findById(int $id) Return ChildServer objects filtered by the id column
* @method ChildServer[]|ObjectCollection findByFqdn(string $fqdn) Return ChildServer objects filtered by the fqdn column
* @method ChildServer[]|ObjectCollection findByFingerprint(string $fingerprint) Return ChildServer objects filtered by the fingerprint column
* @method ChildServer[]|ObjectCollection findByPublicKey(string $public_key) Return ChildServer objects filtered by the public_key column
* @method ChildServer[]|ObjectCollection findByCertificate(string $certificate) Return ChildServer objects filtered by the certificate column
* @method ChildServer[]|ObjectCollection findByLocation(string $location) Return ChildServer objects filtered by the location column
* @method ChildServer[]|ObjectCollection findBySpeed(int $speed) Return ChildServer objects filtered by the speed column
* @method ChildServer[]|ObjectCollection findByExternalIp(string $external_ip) Return ChildServer objects filtered by the external_ip column
* @method ChildServer[]|ObjectCollection findByInternalIp(string $internal_ip) Return ChildServer objects filtered by the internal_ip column
* @method ChildServer[]|ObjectCollection findByNetmask(int $netmask) Return ChildServer objects filtered by the netmask column
* @method ChildServer[]|ObjectCollection findByFirstDns(string $first_dns) Return ChildServer objects filtered by the first_dns column
* @method ChildServer[]|ObjectCollection findBySecondDns(string $second_dns) Return ChildServer objects filtered by the second_dns column
* @method ChildServer[]|ObjectCollection findByPort(int $port) Return ChildServer objects filtered by the port column
* @method ChildServer[]|ObjectCollection findByProtocol(int $protocol) Return ChildServer objects filtered by the protocol column
* @method ChildServer[]|ObjectCollection findByStatus(int $status) Return ChildServer objects filtered by the status column
* @method ChildServer[]|\Propel\Runtime\Util\PropelModelPager paginate($page = 1, $maxPerPage = 10, ConnectionInterface $con = null) Issue a SELECT query based on the current ModelCriteria and uses a page and a maximum number of results per page to compute an offset and a limit
*
*/
abstract class ServerQuery extends ModelCriteria
{
protected $entityNotFoundExceptionClass = '\\Propel\\Runtime\\Exception\\EntityNotFoundException';
/**
* Initializes internal state of \Eater\Glim\Model\Base\ServerQuery object.
*
* @param string $dbName The database name
* @param string $modelName The phpName of a model, e.g. 'Book'
* @param string $modelAlias The alias for the model in this query, e.g. 'b'
*/
public function __construct($dbName = 'default', $modelName = '\\Eater\\Glim\\Model\\Server', $modelAlias = null)
{
parent::__construct($dbName, $modelName, $modelAlias);
}
/**
* Returns a new ChildServerQuery object.
*
* @param string $modelAlias The alias of a model in the query
* @param Criteria $criteria Optional Criteria to build the query from
*
* @return ChildServerQuery
*/
public static function create($modelAlias = null, Criteria $criteria = null)
{
if ($criteria instanceof ChildServerQuery) {
return $criteria;
}
$query = new ChildServerQuery();
if (null !== $modelAlias) {
$query->setModelAlias($modelAlias);
}
if ($criteria instanceof Criteria) {
$query->mergeWith($criteria);
}
return $query;
}
/**
* Find object by primary key.
* Propel uses the instance pool to skip the database if the object exists.
* Go fast if the query is untouched.
*
* <code>
* $obj = $c->findPk(12, $con);
* </code>
*
* @param mixed $key Primary key to use for the query
* @param ConnectionInterface $con an optional connection object
*
* @return ChildServer|array|mixed the result, formatted by the current formatter
*/
public function findPk($key, ConnectionInterface $con = null)
{
if ($key === null) {
return null;
}
if ((null !== ($obj = ServerTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
// the object is already in the instance pool
return $obj;
}
if ($con === null) {
$con = Propel::getServiceContainer()->getReadConnection(ServerTableMap::DATABASE_NAME);
}
$this->basePreSelect($con);
if ($this->formatter || $this->modelAlias || $this->with || $this->select
|| $this->selectColumns || $this->asColumns || $this->selectModifiers
|| $this->map || $this->having || $this->joins) {
return $this->findPkComplex($key, $con);
} else {
return $this->findPkSimple($key, $con);
}
}
/**
* Find object by primary key using raw SQL to go fast.
* Bypass doSelect() and the object formatter by using generated code.
*
* @param mixed $key Primary key to use for the query
* @param ConnectionInterface $con A connection object
*
* @throws \Propel\Runtime\Exception\PropelException
*
* @return ChildServer A model object, or null if the key is not found
*/
protected function findPkSimple($key, ConnectionInterface $con)
{
$sql = 'SELECT id, fqdn, fingerprint, public_key, certificate, location, speed, external_ip, internal_ip, netmask, first_dns, second_dns, port, protocol, status FROM Server WHERE id = :p0';
try {
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
$stmt->execute();
} catch (Exception $e) {
Propel::log($e->getMessage(), Propel::LOG_ERR);
throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e);
}
$obj = null;
if ($row = $stmt->fetch(\PDO::FETCH_NUM)) {
/** @var ChildServer $obj */
$obj = new ChildServer();
$obj->hydrate($row);
ServerTableMap::addInstanceToPool($obj, (string) $key);
}
$stmt->closeCursor();
return $obj;
}
/**
* Find object by primary key.
*
* @param mixed $key Primary key to use for the query
* @param ConnectionInterface $con A connection object
*
* @return ChildServer|array|mixed the result, formatted by the current formatter
*/
protected function findPkComplex($key, ConnectionInterface $con)
{
// As the query uses a PK condition, no limit(1) is necessary.
$criteria = $this->isKeepQuery() ? clone $this : $this;
$dataFetcher = $criteria
->filterByPrimaryKey($key)
->doSelect($con);
return $criteria->getFormatter()->init($criteria)->formatOne($dataFetcher);
}
/**
* Find objects by primary key
* <code>
* $objs = $c->findPks(array(12, 56, 832), $con);
* </code>
* @param array $keys Primary keys to use for the query
* @param ConnectionInterface $con an optional connection object
*
* @return ObjectCollection|array|mixed the list of results, formatted by the current formatter
*/
public function findPks($keys, ConnectionInterface $con = null)
{
if (null === $con) {
$con = Propel::getServiceContainer()->getReadConnection($this->getDbName());
}
$this->basePreSelect($con);
$criteria = $this->isKeepQuery() ? clone $this : $this;
$dataFetcher = $criteria
->filterByPrimaryKeys($keys)
->doSelect($con);
return $criteria->getFormatter()->init($criteria)->format($dataFetcher);
}
/**
* Filter the query by primary key
*
* @param mixed $key Primary key to use for the query
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByPrimaryKey($key)
{
return $this->addUsingAlias(ServerTableMap::COL_ID, $key, Criteria::EQUAL);
}
/**
* Filter the query by a list of primary keys
*
* @param array $keys The list of primary key to use for the query
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByPrimaryKeys($keys)
{
return $this->addUsingAlias(ServerTableMap::COL_ID, $keys, Criteria::IN);
}
/**
* Filter the query on the id column
*
* Example usage:
* <code>
* $query->filterById(1234); // WHERE id = 1234
* $query->filterById(array(12, 34)); // WHERE id IN (12, 34)
* $query->filterById(array('min' => 12)); // WHERE id > 12
* </code>
*
* @param mixed $id The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterById($id = null, $comparison = null)
{
if (is_array($id)) {
$useMinMax = false;
if (isset($id['min'])) {
$this->addUsingAlias(ServerTableMap::COL_ID, $id['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($id['max'])) {
$this->addUsingAlias(ServerTableMap::COL_ID, $id['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_ID, $id, $comparison);
}
/**
* Filter the query on the fqdn column
*
* Example usage:
* <code>
* $query->filterByFqdn('fooValue'); // WHERE fqdn = 'fooValue'
* $query->filterByFqdn('%fooValue%'); // WHERE fqdn LIKE '%fooValue%'
* </code>
*
* @param string $fqdn The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByFqdn($fqdn = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($fqdn)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $fqdn)) {
$fqdn = str_replace('*', '%', $fqdn);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_FQDN, $fqdn, $comparison);
}
/**
* Filter the query on the fingerprint column
*
* Example usage:
* <code>
* $query->filterByFingerprint('fooValue'); // WHERE fingerprint = 'fooValue'
* $query->filterByFingerprint('%fooValue%'); // WHERE fingerprint LIKE '%fooValue%'
* </code>
*
* @param string $fingerprint The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByFingerprint($fingerprint = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($fingerprint)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $fingerprint)) {
$fingerprint = str_replace('*', '%', $fingerprint);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_FINGERPRINT, $fingerprint, $comparison);
}
/**
* Filter the query on the public_key column
*
* Example usage:
* <code>
* $query->filterByPublicKey('fooValue'); // WHERE public_key = 'fooValue'
* $query->filterByPublicKey('%fooValue%'); // WHERE public_key LIKE '%fooValue%'
* </code>
*
* @param string $publicKey The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByPublicKey($publicKey = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($publicKey)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $publicKey)) {
$publicKey = str_replace('*', '%', $publicKey);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_PUBLIC_KEY, $publicKey, $comparison);
}
/**
* Filter the query on the certificate column
*
* Example usage:
* <code>
* $query->filterByCertificate('fooValue'); // WHERE certificate = 'fooValue'
* $query->filterByCertificate('%fooValue%'); // WHERE certificate LIKE '%fooValue%'
* </code>
*
* @param string $certificate The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByCertificate($certificate = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($certificate)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $certificate)) {
$certificate = str_replace('*', '%', $certificate);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_CERTIFICATE, $certificate, $comparison);
}
/**
* Filter the query on the location column
*
* Example usage:
* <code>
* $query->filterByLocation('fooValue'); // WHERE location = 'fooValue'
* $query->filterByLocation('%fooValue%'); // WHERE location LIKE '%fooValue%'
* </code>
*
* @param string $location The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByLocation($location = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($location)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $location)) {
$location = str_replace('*', '%', $location);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_LOCATION, $location, $comparison);
}
/**
* Filter the query on the speed column
*
* Example usage:
* <code>
* $query->filterBySpeed(1234); // WHERE speed = 1234
* $query->filterBySpeed(array(12, 34)); // WHERE speed IN (12, 34)
* $query->filterBySpeed(array('min' => 12)); // WHERE speed > 12
* </code>
*
* @param mixed $speed The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterBySpeed($speed = null, $comparison = null)
{
if (is_array($speed)) {
$useMinMax = false;
if (isset($speed['min'])) {
$this->addUsingAlias(ServerTableMap::COL_SPEED, $speed['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($speed['max'])) {
$this->addUsingAlias(ServerTableMap::COL_SPEED, $speed['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_SPEED, $speed, $comparison);
}
/**
* Filter the query on the external_ip column
*
* Example usage:
* <code>
* $query->filterByExternalIp('fooValue'); // WHERE external_ip = 'fooValue'
* $query->filterByExternalIp('%fooValue%'); // WHERE external_ip LIKE '%fooValue%'
* </code>
*
* @param string $externalIp The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByExternalIp($externalIp = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($externalIp)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $externalIp)) {
$externalIp = str_replace('*', '%', $externalIp);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_EXTERNAL_IP, $externalIp, $comparison);
}
/**
* Filter the query on the internal_ip column
*
* Example usage:
* <code>
* $query->filterByInternalIp('fooValue'); // WHERE internal_ip = 'fooValue'
* $query->filterByInternalIp('%fooValue%'); // WHERE internal_ip LIKE '%fooValue%'
* </code>
*
* @param string $internalIp The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByInternalIp($internalIp = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($internalIp)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $internalIp)) {
$internalIp = str_replace('*', '%', $internalIp);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_INTERNAL_IP, $internalIp, $comparison);
}
/**
* Filter the query on the netmask column
*
* Example usage:
* <code>
* $query->filterByNetmask(1234); // WHERE netmask = 1234
* $query->filterByNetmask(array(12, 34)); // WHERE netmask IN (12, 34)
* $query->filterByNetmask(array('min' => 12)); // WHERE netmask > 12
* </code>
*
* @param mixed $netmask The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByNetmask($netmask = null, $comparison = null)
{
if (is_array($netmask)) {
$useMinMax = false;
if (isset($netmask['min'])) {
$this->addUsingAlias(ServerTableMap::COL_NETMASK, $netmask['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($netmask['max'])) {
$this->addUsingAlias(ServerTableMap::COL_NETMASK, $netmask['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_NETMASK, $netmask, $comparison);
}
/**
* Filter the query on the first_dns column
*
* Example usage:
* <code>
* $query->filterByFirstDns('fooValue'); // WHERE first_dns = 'fooValue'
* $query->filterByFirstDns('%fooValue%'); // WHERE first_dns LIKE '%fooValue%'
* </code>
*
* @param string $firstDns The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByFirstDns($firstDns = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($firstDns)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $firstDns)) {
$firstDns = str_replace('*', '%', $firstDns);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_FIRST_DNS, $firstDns, $comparison);
}
/**
* Filter the query on the second_dns column
*
* Example usage:
* <code>
* $query->filterBySecondDns('fooValue'); // WHERE second_dns = 'fooValue'
* $query->filterBySecondDns('%fooValue%'); // WHERE second_dns LIKE '%fooValue%'
* </code>
*
* @param string $secondDns The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterBySecondDns($secondDns = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($secondDns)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $secondDns)) {
$secondDns = str_replace('*', '%', $secondDns);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ServerTableMap::COL_SECOND_DNS, $secondDns, $comparison);
}
/**
* Filter the query on the port column
*
* Example usage:
* <code>
* $query->filterByPort(1234); // WHERE port = 1234
* $query->filterByPort(array(12, 34)); // WHERE port IN (12, 34)
* $query->filterByPort(array('min' => 12)); // WHERE port > 12
* </code>
*
* @param mixed $port The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByPort($port = null, $comparison = null)
{
if (is_array($port)) {
$useMinMax = false;
if (isset($port['min'])) {
$this->addUsingAlias(ServerTableMap::COL_PORT, $port['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($port['max'])) {
$this->addUsingAlias(ServerTableMap::COL_PORT, $port['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_PORT, $port, $comparison);
}
/**
* Filter the query on the protocol column
*
* @param mixed $protocol The value to use as filter
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByProtocol($protocol = null, $comparison = null)
{
$valueSet = ServerTableMap::getValueSet(ServerTableMap::COL_PROTOCOL);
if (is_scalar($protocol)) {
if (!in_array($protocol, $valueSet)) {
throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $protocol));
}
$protocol = array_search($protocol, $valueSet);
} elseif (is_array($protocol)) {
$convertedValues = array();
foreach ($protocol as $value) {
if (!in_array($value, $valueSet)) {
throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $value));
}
$convertedValues []= array_search($value, $valueSet);
}
$protocol = $convertedValues;
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_PROTOCOL, $protocol, $comparison);
}
/**
* Filter the query on the status column
*
* @param mixed $status The value to use as filter
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function filterByStatus($status = null, $comparison = null)
{
$valueSet = ServerTableMap::getValueSet(ServerTableMap::COL_STATUS);
if (is_scalar($status)) {
if (!in_array($status, $valueSet)) {
throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $status));
}
$status = array_search($status, $valueSet);
} elseif (is_array($status)) {
$convertedValues = array();
foreach ($status as $value) {
if (!in_array($value, $valueSet)) {
throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $value));
}
$convertedValues []= array_search($value, $valueSet);
}
$status = $convertedValues;
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ServerTableMap::COL_STATUS, $status, $comparison);
}
/**
* Exclude object from result
*
* @param ChildServer $server Object to remove from the list of results
*
* @return $this|ChildServerQuery The current query, for fluid interface
*/
public function prune($server = null)
{
if ($server) {
$this->addUsingAlias(ServerTableMap::COL_ID, $server->getId(), Criteria::NOT_EQUAL);
}
return $this;
}
/**
* Deletes all rows from the Server table.
*
* @param ConnectionInterface $con the connection to use
* @return int The number of affected rows (if supported by underlying database driver).
*/
public function doDeleteAll(ConnectionInterface $con = null)
{
if (null === $con) {
$con = Propel::getServiceContainer()->getWriteConnection(ServerTableMap::DATABASE_NAME);
}
// use transaction because $criteria could contain info
// for more than one table or we could emulating ON DELETE CASCADE, etc.
return $con->transaction(function () use ($con) {
$affectedRows = 0; // initialize var to track total num of affected rows
$affectedRows += parent::doDeleteAll($con);
// Because this db requires some delete cascade/set null emulation, we have to
// clear the cached instance *after* the emulation has happened (since
// instances get re-added by the select statement contained therein).
ServerTableMap::clearInstancePool();
ServerTableMap::clearRelatedInstancePool();
return $affectedRows;
});
}
/**
* Performs a DELETE on the database based on the current ModelCriteria
*
* @param ConnectionInterface $con the connection to use
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
* if supported by native driver or if emulated using Propel.
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public function delete(ConnectionInterface $con = null)
{
if (null === $con) {
$con = Propel::getServiceContainer()->getWriteConnection(ServerTableMap::DATABASE_NAME);
}
$criteria = $this;
// Set the correct dbName
$criteria->setDbName(ServerTableMap::DATABASE_NAME);
// use transaction because $criteria could contain info
// for more than one table or we could emulating ON DELETE CASCADE, etc.
return $con->transaction(function () use ($con, $criteria) {
$affectedRows = 0; // initialize var to track total num of affected rows
ServerTableMap::removeInstanceFromPool($criteria);
$affectedRows += ModelCriteria::delete($con);
ServerTableMap::clearRelatedInstancePool();
return $affectedRows;
});
}
} // ServerQuery

@ -16,5 +16,5 @@ use Eater\Glim\Model\Base\Certificate as BaseCertificate;
*/
class Certificate extends BaseCertificate
{
}

@ -16,5 +16,16 @@ use Eater\Glim\Model\Base\CertificateQuery as BaseCertificateQuery;
*/
class CertificateQuery extends BaseCertificateQuery
{
/**
* @param User $user
* @param string $name
* @throws \Propel\Runtime\Exception\PropelException
* @return Certificate
*/
public function findOneByUserAndName($user, $name)
{
return $this->filterByName($name)
->filterByUser($user)
->findOne();
}
}

@ -59,7 +59,7 @@ class CertificateTableMap extends TableMap
/**
* The total number of columns
*/
const NUM_COLUMNS = 7;
const NUM_COLUMNS = 8;
/**
* The number of lazy-loaded columns
@ -69,7 +69,7 @@ class CertificateTableMap extends TableMap
/**
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
*/
const NUM_HYDRATE_COLUMNS = 7;
const NUM_HYDRATE_COLUMNS = 8;
/**
* the column name for the id field
@ -91,6 +91,11 @@ class CertificateTableMap extends TableMap
*/
const COL_CERTIFICATE = 'Certificate.certificate';
/**
* the column name for the private_key field
*/
const COL_PRIVATE_KEY = 'Certificate.private_key';
/**
* the column name for the expires_on field
*/
@ -118,11 +123,11 @@ class CertificateTableMap extends TableMap
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
protected static $fieldNames = array (
self::TYPE_PHPNAME => array('Id', 'UserId', 'Name', 'Certificate', 'ExpiresOn', 'Revoked', 'Serial', ),
self::TYPE_CAMELNAME => array('id', 'userId', 'name', 'certificate', 'expiresOn', 'revoked', 'serial', ),
self::TYPE_COLNAME => array(CertificateTableMap::COL_ID, CertificateTableMap::COL_USER_ID, CertificateTableMap::COL_NAME, CertificateTableMap::COL_CERTIFICATE, CertificateTableMap::COL_EXPIRES_ON, CertificateTableMap::COL_REVOKED, CertificateTableMap::COL_SERIAL, ),
self::TYPE_FIELDNAME => array('id', 'user_id', 'name', 'certificate', 'expires_on', 'revoked', 'serial', ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, )
self::TYPE_PHPNAME => array('Id', 'UserId', 'Name', 'Certificate', 'PrivateKey', 'ExpiresOn', 'Revoked', 'Serial', ),
self::TYPE_CAMELNAME => array('id', 'userId', 'name', 'certificate', 'privateKey', 'expiresOn', 'revoked', 'serial', ),
self::TYPE_COLNAME => array(CertificateTableMap::COL_ID, CertificateTableMap::COL_USER_ID, CertificateTableMap::COL_NAME, CertificateTableMap::COL_CERTIFICATE, CertificateTableMap::COL_PRIVATE_KEY, CertificateTableMap::COL_EXPIRES_ON, CertificateTableMap::COL_REVOKED, CertificateTableMap::COL_SERIAL, ),
self::TYPE_FIELDNAME => array('id', 'user_id', 'name', 'certificate', 'private_key', 'expires_on', 'revoked', 'serial', ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, )
);
/**
@ -132,11 +137,11 @@ class CertificateTableMap extends TableMap
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
*/
protected static $fieldKeys = array (
self::TYPE_PHPNAME => array('Id' => 0, 'UserId' => 1, 'Name' => 2, 'Certificate' => 3, 'ExpiresOn' => 4, 'Revoked' => 5, 'Serial' => 6, ),
self::TYPE_CAMELNAME => array('id' => 0, 'userId' => 1, 'name' => 2, 'certificate' => 3, 'expiresOn' => 4, 'revoked' => 5, 'serial' => 6, ),
self::TYPE_COLNAME => array(CertificateTableMap::COL_ID => 0, CertificateTableMap::COL_USER_ID => 1, CertificateTableMap::COL_NAME => 2, CertificateTableMap::COL_CERTIFICATE => 3, CertificateTableMap::COL_EXPIRES_ON => 4, CertificateTableMap::COL_REVOKED => 5, CertificateTableMap::COL_SERIAL => 6, ),
self::TYPE_FIELDNAME => array('id' => 0, 'user_id' => 1, 'name' => 2, 'certificate' => 3, 'expires_on' => 4, 'revoked' => 5, 'serial' => 6, ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, )
self::TYPE_PHPNAME => array('Id' => 0, 'UserId' => 1, 'Name' => 2, 'Certificate' => 3, 'PrivateKey' => 4, 'ExpiresOn' => 5, 'Revoked' => 6, 'Serial' => 7, ),
self::TYPE_CAMELNAME => array('id' => 0, 'userId' => 1, 'name' => 2, 'certificate' => 3, 'privateKey' => 4, 'expiresOn' => 5, 'revoked' => 6, 'serial' => 7, ),
self::TYPE_COLNAME => array(CertificateTableMap::COL_ID => 0, CertificateTableMap::COL_USER_ID => 1, CertificateTableMap::COL_NAME => 2, CertificateTableMap::COL_CERTIFICATE => 3, CertificateTableMap::COL_PRIVATE_KEY => 4, CertificateTableMap::COL_EXPIRES_ON => 5, CertificateTableMap::COL_REVOKED => 6, CertificateTableMap::COL_SERIAL => 7, ),
self::TYPE_FIELDNAME => array('id' => 0, 'user_id' => 1, 'name' => 2, 'certificate' => 3, 'private_key' => 4, 'expires_on' => 5, 'revoked' => 6, 'serial' => 7, ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, )
);
/**
@ -160,6 +165,7 @@ class CertificateTableMap extends TableMap
$this->addForeignKey('user_id', 'UserId', 'INTEGER', 'User', 'id', false, null, null);
$this->addColumn('name', 'Name', 'VARCHAR', false, 64, null);
$this->addColumn('certificate', 'Certificate', 'LONGVARCHAR', false, null, null);
$this->addColumn('private_key', 'PrivateKey', 'LONGVARCHAR', false, null, null);
$this->addColumn('expires_on', 'ExpiresOn', 'TIMESTAMP', false, null, null);
$this->addColumn('revoked', 'Revoked', 'BOOLEAN', false, null, false);
$this->addColumn('serial', 'Serial', 'VARCHAR', false, 64, null);
@ -324,6 +330,7 @@ class CertificateTableMap extends TableMap
$criteria->addSelectColumn(CertificateTableMap::COL_USER_ID);
$criteria->addSelectColumn(CertificateTableMap::COL_NAME);
$criteria->addSelectColumn(CertificateTableMap::COL_CERTIFICATE);
$criteria->addSelectColumn(CertificateTableMap::COL_PRIVATE_KEY);
$criteria->addSelectColumn(CertificateTableMap::COL_EXPIRES_ON);
$criteria->addSelectColumn(CertificateTableMap::COL_REVOKED);
$criteria->addSelectColumn(CertificateTableMap::COL_SERIAL);
@ -332,6 +339,7 @@ class CertificateTableMap extends TableMap
$criteria->addSelectColumn($alias . '.user_id');
$criteria->addSelectColumn($alias . '.name');
$criteria->addSelectColumn($alias . '.certificate');
$criteria->addSelectColumn($alias . '.private_key');
$criteria->addSelectColumn($alias . '.expires_on');
$criteria->addSelectColumn($alias . '.revoked');
$criteria->addSelectColumn($alias . '.serial');

@ -0,0 +1,564 @@
<?php
namespace Eater\Glim\Model\Map;
use Eater\Glim\Model\Server;
use Eater\Glim\Model\ServerQuery;
use Propel\Runtime\Propel;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\InstancePoolTrait;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\DataFetcher\DataFetcherInterface;
use Propel\Runtime\Exception\PropelException;
use Propel\Runtime\Map\RelationMap;
use Propel\Runtime\Map\TableMap;
use Propel\Runtime\Map\TableMapTrait;
/**
* This class defines the structure of the 'Server' table.
*
*
*
* This map class is used by Propel to do runtime db structure discovery.
* For example, the createSelectSql() method checks the type of a given column used in an
* ORDER BY clause to know whether it needs to apply SQL to make the ORDER BY case-insensitive
* (i.e. if it's a text column type).
*
*/
class ServerTableMap extends TableMap
{
use InstancePoolTrait;
use TableMapTrait;
/**
* The (dot-path) name of this class
*/
const CLASS_NAME = '.Map.ServerTableMap';
/**
* The default database name for this class
*/
const DATABASE_NAME = 'default';
/**
* The table name for this class
*/
const TABLE_NAME = 'Server';
/**
* The related Propel class for this table
*/
const OM_CLASS = '\\Eater\\Glim\\Model\\Server';
/**
* A class that can be returned by this tableMap
*/
const CLASS_DEFAULT = 'Server';
/**
* The total number of columns
*/
const NUM_COLUMNS = 15;
/**
* The number of lazy-loaded columns
*/
const NUM_LAZY_LOAD_COLUMNS = 0;
/**
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
*/
const NUM_HYDRATE_COLUMNS = 15;
/**
* the column name for the id field
*/
const COL_ID = 'Server.id';
/**
* the column name for the fqdn field
*/
const COL_FQDN = 'Server.fqdn';
/**
* the column name for the fingerprint field
*/
const COL_FINGERPRINT = 'Server.fingerprint';
/**
* the column name for the public_key field
*/
const COL_PUBLIC_KEY = 'Server.public_key';
/**
* the column name for the certificate field
*/
const COL_CERTIFICATE = 'Server.certificate';
/**
* the column name for the location field
*/
const COL_LOCATION = 'Server.location';
/**
* the column name for the speed field
*/
const COL_SPEED = 'Server.speed';
/**
* the column name for the external_ip field
*/
const COL_EXTERNAL_IP = 'Server.external_ip';
/**
* the column name for the internal_ip field
*/
const COL_INTERNAL_IP = 'Server.internal_ip';
/**
* the column name for the netmask field
*/
const COL_NETMASK = 'Server.netmask';
/**
* the column name for the first_dns field
*/
const COL_FIRST_DNS = 'Server.first_dns';
/**
* the column name for the second_dns field
*/
const COL_SECOND_DNS = 'Server.second_dns';
/**
* the column name for the port field
*/
const COL_PORT = 'Server.port';
/**
* the column name for the protocol field
*/
const COL_PROTOCOL = 'Server.protocol';
/**
* the column name for the status field
*/
const COL_STATUS = 'Server.status';
/**
* The default string format for model objects of the related table
*/
const DEFAULT_STRING_FORMAT = 'YAML';
/** The enumerated values for the protocol field */
const COL_PROTOCOL_UDP = 'udp';
const COL_PROTOCOL_TCP = 'tcp';
/** The enumerated values for the status field */
const COL_STATUS_REGISTERED = 'registered';
const COL_STATUS_SIGNED = 'signed';
const COL_STATUS_REVOKED = 'revoked';
/**
* holds an array of fieldnames
*
* first dimension keys are the type constants
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
protected static $fieldNames = array (
self::TYPE_PHPNAME => array('Id', 'Fqdn', 'Fingerprint', 'PublicKey', 'Certificate', 'Location', 'Speed', 'ExternalIp', 'InternalIp', 'Netmask', 'FirstDns', 'SecondDns', 'Port', 'Protocol', 'Status', ),
self::TYPE_CAMELNAME => array('id', 'fqdn', 'fingerprint', 'publicKey', 'certificate', 'location', 'speed', 'externalIp', 'internalIp', 'netmask', 'firstDns', 'secondDns', 'port', 'protocol', 'status', ),
self::TYPE_COLNAME => array(ServerTableMap::COL_ID, ServerTableMap::COL_FQDN, ServerTableMap::COL_FINGERPRINT, ServerTableMap::COL_PUBLIC_KEY, ServerTableMap::COL_CERTIFICATE, ServerTableMap::COL_LOCATION, ServerTableMap::COL_SPEED, ServerTableMap::COL_EXTERNAL_IP, ServerTableMap::COL_INTERNAL_IP, ServerTableMap::COL_NETMASK, ServerTableMap::COL_FIRST_DNS, ServerTableMap::COL_SECOND_DNS, ServerTableMap::COL_PORT, ServerTableMap::COL_PROTOCOL, ServerTableMap::COL_STATUS, ),
self::TYPE_FIELDNAME => array('id', 'fqdn', 'fingerprint', 'public_key', 'certificate', 'location', 'speed', 'external_ip', 'internal_ip', 'netmask', 'first_dns', 'second_dns', 'port', 'protocol', 'status', ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, )
);
/**
* holds an array of keys for quick access to the fieldnames array
*
* first dimension keys are the type constants
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
*/
protected static $fieldKeys = array (
self::TYPE_PHPNAME => array('Id' => 0, 'Fqdn' => 1, 'Fingerprint' => 2, 'PublicKey' => 3, 'Certificate' => 4, 'Location' => 5, 'Speed' => 6, 'ExternalIp' => 7, 'InternalIp' => 8, 'Netmask' => 9, 'FirstDns' => 10, 'SecondDns' => 11, 'Port' => 12, 'Protocol' => 13, 'Status' => 14, ),
self::TYPE_CAMELNAME => array('id' => 0, 'fqdn' => 1, 'fingerprint' => 2, 'publicKey' => 3, 'certificate' => 4, 'location' => 5, 'speed' => 6, 'externalIp' => 7, 'internalIp' => 8, 'netmask' => 9, 'firstDns' => 10, 'secondDns' => 11, 'port' => 12, 'protocol' => 13, 'status' => 14, ),
self::TYPE_COLNAME => array(ServerTableMap::COL_ID => 0, ServerTableMap::COL_FQDN => 1, ServerTableMap::COL_FINGERPRINT => 2, ServerTableMap::COL_PUBLIC_KEY => 3, ServerTableMap::COL_CERTIFICATE => 4, ServerTableMap::COL_LOCATION => 5, ServerTableMap::COL_SPEED => 6, ServerTableMap::COL_EXTERNAL_IP => 7, ServerTableMap::COL_INTERNAL_IP => 8, ServerTableMap::COL_NETMASK => 9, ServerTableMap::COL_FIRST_DNS => 10, ServerTableMap::COL_SECOND_DNS => 11, ServerTableMap::COL_PORT => 12, ServerTableMap::COL_PROTOCOL => 13, ServerTableMap::COL_STATUS => 14, ),
self::TYPE_FIELDNAME => array('id' => 0, 'fqdn' => 1, 'fingerprint' => 2, 'public_key' => 3, 'certificate' => 4, 'location' => 5, 'speed' => 6, 'external_ip' => 7, 'internal_ip' => 8, 'netmask' => 9, 'first_dns' => 10, 'second_dns' => 11, 'port' => 12, 'protocol' => 13, 'status' => 14, ),
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, )
);
/** The enumerated values for this table */
protected static $enumValueSets = array(
ServerTableMap::COL_PROTOCOL => array(
self::COL_PROTOCOL_UDP,
self::COL_PROTOCOL_TCP,
),
ServerTableMap::COL_STATUS => array(
self::COL_STATUS_REGISTERED,
self::COL_STATUS_SIGNED,
self::COL_STATUS_REVOKED,
),
);
/**
* Gets the list of values for all ENUM columns
* @return array
*/
public static function getValueSets()
{
return static::$enumValueSets;
}
/**
* Gets the list of values for an ENUM column
* @param string $colname
* @return array list of possible values for the column
*/
public static function getValueSet($colname)
{
$valueSets = self::getValueSets();
return $valueSets[$colname];
}
/**
* Initialize the table attributes and columns
* Relations are not initialized by this method since they are lazy loaded
*
* @return void
* @throws PropelException
*/
public function initialize()
{
// attributes
$this->setName('Server');
$this->setPhpName('Server');
$this->setIdentifierQuoting(false);
$this->setClassName('\\Eater\\Glim\\Model\\Server');
$this->setPackage('');
$this->setUseIdGenerator(true);
// columns
$this->addPrimaryKey('id', 'Id', 'INTEGER', true, null, null);
$this->addColumn('fqdn', 'Fqdn', 'VARCHAR', false, 64, null);
$this->addColumn('fingerprint', 'Fingerprint', 'VARCHAR', false, 64, null);
$this->addColumn('public_key', 'PublicKey', 'LONGVARCHAR', false, null, null);
$this->addColumn('certificate', 'Certificate', 'LONGVARCHAR', false, null, null);
$this->addColumn('location', 'Location', 'VARCHAR', false, 64, 'Unknown');
$this->addColumn('speed', 'Speed', 'INTEGER', false, null, -1);
$this->addColumn('external_ip', 'ExternalIp', 'VARCHAR', false, 128, null);
$this->addColumn('internal_ip', 'InternalIp', 'VARCHAR', false, 128, '10.24.0.0');
$this->addColumn('netmask', 'Netmask', 'INTEGER', false, 4, 16);
$this->addColumn('first_dns', 'FirstDns', 'VARCHAR', false, 128, null);
$this->addColumn('second_dns', 'SecondDns', 'VARCHAR', false, 128, null);
$this->addColumn('port', 'Port', 'INTEGER', false, null, 1194);
$this->addColumn('protocol', 'Protocol', 'ENUM', false, null, 'udp');
$this->getColumn('protocol')->setValueSet(array (
0 => 'udp',
1 => 'tcp',
));
$this->addColumn('status', 'Status', 'ENUM', false, null, 'registered');
$this->getColumn('status')->setValueSet(array (
0 => 'registered',
1 => 'signed',
2 => 'revoked',
));
} // initialize()
/**
* Build the RelationMap objects for this table relationships
*/
public function buildRelations()
{
} // buildRelations()
/**
* Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table.
*
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
* a multi-column primary key, a serialize()d version of the primary key will be returned.
*
* @param array $row resultset row.
* @param int $offset The 0-based offset for reading from the resultset row.
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
*
* @return string The primary key hash of the row
*/
public static function getPrimaryKeyHashFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
{
// If the PK cannot be derived from the row, return NULL.
if ($row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)] === null) {
return null;
}
return (string) $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)];
}
/**
* Retrieves the primary key from the DB resultset row
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
* a multi-column primary key, an array of the primary key columns will be returned.
*
* @param array $row resultset row.
* @param int $offset The 0-based offset for reading from the resultset row.
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
*
* @return mixed The primary key of the row
*/
public static function getPrimaryKeyFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
{
return (int) $row[
$indexType == TableMap::TYPE_NUM
? 0 + $offset
: self::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)
];
}
/**
* The class that the tableMap will make instances of.
*
* If $withPrefix is true, the returned path
* uses a dot-path notation which is translated into a path
* relative to a location on the PHP include_path.
* (e.g. path.to.MyClass -> 'path/to/MyClass.php')
*
* @param boolean $withPrefix Whether or not to return the path with the class name
* @return string path.to.ClassName
*/
public static function getOMClass($withPrefix = true)
{
return $withPrefix ? ServerTableMap::CLASS_DEFAULT : ServerTableMap::OM_CLASS;
}
/**
* Populates an object of the default type or an object that inherit from the default.
*
* @param array $row row returned by DataFetcher->fetch().
* @param int $offset The 0-based offset for reading from the resultset row.
* @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType().
One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
*
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
* @return array (Server object, last column rank)
*/
public static function populateObject($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
{
$key = ServerTableMap::getPrimaryKeyHashFromRow($row, $offset, $indexType);
if (null !== ($obj = ServerTableMap::getInstanceFromPool($key))) {
// We no longer rehydrate the object, since this can cause data loss.
// See http://www.propelorm.org/ticket/509
// $obj->hydrate($row, $offset, true); // rehydrate
$col = $offset + ServerTableMap::NUM_HYDRATE_COLUMNS;
} else {
$cls = ServerTableMap::OM_CLASS;
/** @var Server $obj */
$obj = new $cls();
$col = $obj->hydrate($row, $offset, false, $indexType);
ServerTableMap::addInstanceToPool($obj, $key);
}
return array($obj, $col);
}
/**
* The returned array will contain objects of the default type or
* objects that inherit from the default.
*
* @param DataFetcherInterface $dataFetcher
* @return array
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function populateObjects(DataFetcherInterface $dataFetcher)
{
$results = array();
// set the class once to avoid overhead in the loop
$cls = static::getOMClass(false);
// populate the object(s)
while ($row = $dataFetcher->fetch()) {
$key = ServerTableMap::getPrimaryKeyHashFromRow($row, 0, $dataFetcher->getIndexType());
if (null !== ($obj = ServerTableMap::getInstanceFromPool($key))) {
// We no longer rehydrate the object, since this can cause data loss.
// See http://www.propelorm.org/ticket/509
// $obj->hydrate($row, 0, true); // rehydrate
$results[] = $obj;
} else {
/** @var Server $obj */
$obj = new $cls();
$obj->hydrate($row);
$results[] = $obj;
ServerTableMap::addInstanceToPool($obj, $key);
} // if key exists
}
return $results;
}
/**
* Add all the columns needed to create a new object.
*
* Note: any columns that were marked with lazyLoad="true" in the
* XML schema will not be added to the select list and only loaded
* on demand.
*
* @param Criteria $criteria object containing the columns to add.
* @param string $alias optional table alias
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function addSelectColumns(Criteria $criteria, $alias = null)
{
if (null === $alias) {
$criteria->addSelectColumn(ServerTableMap::COL_ID);
$criteria->addSelectColumn(ServerTableMap::COL_FQDN);
$criteria->addSelectColumn(ServerTableMap::COL_FINGERPRINT);
$criteria->addSelectColumn(ServerTableMap::COL_PUBLIC_KEY);
$criteria->addSelectColumn(ServerTableMap::COL_CERTIFICATE);
$criteria->addSelectColumn(ServerTableMap::COL_LOCATION);
$criteria->addSelectColumn(ServerTableMap::COL_SPEED);
$criteria->addSelectColumn(ServerTableMap::COL_EXTERNAL_IP);
$criteria->addSelectColumn(ServerTableMap::COL_INTERNAL_IP);
$criteria->addSelectColumn(ServerTableMap::COL_NETMASK);
$criteria->addSelectColumn(ServerTableMap::COL_FIRST_DNS);
$criteria->addSelectColumn(ServerTableMap::COL_SECOND_DNS);
$criteria->addSelectColumn(ServerTableMap::COL_PORT);
$criteria->addSelectColumn(ServerTableMap::COL_PROTOCOL);
$criteria->addSelectColumn(ServerTableMap::COL_STATUS);
} else {
$criteria->addSelectColumn($alias . '.id');
$criteria->addSelectColumn($alias . '.fqdn');
$criteria->addSelectColumn($alias . '.fingerprint');
$criteria->addSelectColumn($alias . '.public_key');
$criteria->addSelectColumn($alias . '.certificate');
$criteria->addSelectColumn($alias . '.location');
$criteria->addSelectColumn($alias . '.speed');
$criteria->addSelectColumn($alias . '.external_ip');
$criteria->addSelectColumn($alias . '.internal_ip');
$criteria->addSelectColumn($alias . '.netmask');
$criteria->addSelectColumn($alias . '.first_dns');
$criteria->addSelectColumn($alias . '.second_dns');
$criteria->addSelectColumn($alias . '.port');
$criteria->addSelectColumn($alias . '.protocol');
$criteria->addSelectColumn($alias . '.status');
}
}
/**
* Returns the TableMap related to this object.
* This method is not needed for general use but a specific application could have a need.
* @return TableMap
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function getTableMap()
{
return Propel::getServiceContainer()->getDatabaseMap(ServerTableMap::DATABASE_NAME)->getTable(ServerTableMap::TABLE_NAME);
}
/**
* Add a TableMap instance to the database for this tableMap class.
*/
public static function buildTableMap()
{
$dbMap = Propel::getServiceContainer()->getDatabaseMap(ServerTableMap::DATABASE_NAME);
if (!$dbMap->hasTable(ServerTableMap::TABLE_NAME)) {
$dbMap->addTableObject(new ServerTableMap());
}
}
/**
* Performs a DELETE on the database, given a Server or Criteria object OR a primary key value.
*
* @param mixed $values Criteria or Server object or primary key or array of primary keys
* which is used to create the DELETE statement
* @param ConnectionInterface $con the connection to use
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
* if supported by native driver or if emulated using Propel.
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function doDelete($values, ConnectionInterface $con = null)
{
if (null === $con) {
$con = Propel::getServiceContainer()->getWriteConnection(ServerTableMap::DATABASE_NAME);
}
if ($values instanceof Criteria) {
// rename for clarity
$criteria = $values;
} elseif ($values instanceof \Eater\Glim\Model\Server) { // it's a model object
// create criteria based on pk values
$criteria = $values->buildPkeyCriteria();
} else { // it's a primary key, or an array of pks
$criteria = new Criteria(ServerTableMap::DATABASE_NAME);
$criteria->add(ServerTableMap::COL_ID, (array) $values, Criteria::IN);
}
$query = ServerQuery::create()->mergeWith($criteria);
if ($values instanceof Criteria) {
ServerTableMap::clearInstancePool();
} elseif (!is_object($values)) { // it's a primary key, or an array of pks
foreach ((array) $values as $singleval) {
ServerTableMap::removeInstanceFromPool($singleval);
}
}
return $query->delete($con);
}
/**
* Deletes all rows from the Server table.
*
* @param ConnectionInterface $con the connection to use
* @return int The number of affected rows (if supported by underlying database driver).
*/
public static function doDeleteAll(ConnectionInterface $con = null)
{
return ServerQuery::create()->doDeleteAll($con);
}
/**
* Performs an INSERT on the database, given a Server or Criteria object.
*
* @param mixed $criteria Criteria or Server object containing data that is used to create the INSERT statement.
* @param ConnectionInterface $con the ConnectionInterface connection to use
* @return mixed The new primary key.
* @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException.
*/
public static function doInsert($criteria, ConnectionInterface $con = null)
{
if (null === $con) {
$con = Propel::getServiceContainer()->getWriteConnection(ServerTableMap::DATABASE_NAME);
}
if ($criteria instanceof Criteria) {
$criteria = clone $criteria; // rename for clarity
} else {
$criteria = $criteria->buildCriteria(); // build Criteria from Server object
}
if ($criteria->containsKey(ServerTableMap::COL_ID) && $criteria->keyContainsValue(ServerTableMap::COL_ID) ) {
throw new PropelException('Cannot insert a value for auto-increment primary key ('.ServerTableMap::COL_ID.')');
}
// Set the correct dbName
$query = ServerQuery::create()->mergeWith($criteria);
// use transaction because $criteria could contain info
// for more than one table (I guess, conceivably)
return $con->transaction(function () use ($con, $query) {
return $query->doInsert($con);
});
}
} // ServerTableMap
// This is the static code needed to register the TableMap for this table with the main Propel class.
//
ServerTableMap::buildTableMap();

@ -0,0 +1,20 @@
<?php
namespace Eater\Glim\Model;
use Eater\Glim\Model\Base\Server as BaseServer;
/**
* Skeleton subclass for representing a row from the 'Server' table.
*
*
*
* You should add additional methods to this class to meet the
* application requirements. This class will only be generated as
* long as it does not already exist in the output directory.
*
*/
class Server extends BaseServer
{
}

@ -0,0 +1,20 @@
<?php
namespace Eater\Glim\Model;
use Eater\Glim\Model\Base\ServerQuery as BaseServerQuery;
/**
* Skeleton subclass for performing query and update operations on the 'Server' table.
*
*
*
* You should add additional methods to this class to meet the
* application requirements. This class will only be generated as
* long as it does not already exist in the output directory.
*
*/
class ServerQuery extends BaseServerQuery
{
}

@ -30,6 +30,7 @@ class CA extends Main
* Signs a client certificate and returns the signed certificate
* @param string $csr
* @return string
* @throws \Exception
*/
public function signClientCsr($csr)
{
@ -55,6 +56,69 @@ class CA extends Main
return $crt;
}
/**
* @param string $publicKey
* @param string $fqdn
* @return string
* @throws \Exception
*/
public function createCSRForKeyAndFqdn($publicKey, $fqdn)
{
/** @var Core $core */
$core = $this->get('core');
$csrPath = tempnam(sys_get_temp_dir(), '0.');
$pubPath = tempnam(sys_get_temp_dir(), '0.');
file_put_contents($pubPath, $publicKey);
exec(escapeshellcmd($core->getBaseDir() . '/bin/create-csr') . ' ' . escapeshellarg($fqdn) . ' ' . escapeshellarg($csrPath) . ' ' . escapeshellarg($pubPath) . ' 2>&1', $output, $exitCode);
if ($exitCode !== 0) {
throw new \Exception("Failed creating CSR: " . implode("\n", $output));
}
$csr = file_get_contents($csrPath);
unlink($pubPath);
unlink($csrPath);
return $csr;
}
/**
* Signs a client certificate and returns the signed certificate
* @param string $publicKey
* @param string $fqdn
* @return string
* @throws \Exception
*/
public function signServerKey($publicKey, $fqdn)
{
$csr = $this->createCSRForKeyAndFqdn($publicKey, $fqdn);
/** @var Core $core */
$core = $this->get('core');
$csrPath = tempnam(sys_get_temp_dir(), '0.');
$crtPath = tempnam(sys_get_temp_dir(), '0.');
file_put_contents($csrPath, $csr);
exec(escapeshellcmd($core->getBaseDir() . '/bin/sign-server-csr') . ' ' . escapeshellarg($csrPath) . ' ' . escapeshellarg($crtPath) . ' 2>&1', $output, $exitCode);
if ($exitCode !== 0) {
throw new \Exception("Failed signing CSR: " . implode("\n", $output));
}
$crt = file_get_contents($crtPath);
unlink($crtPath);
unlink($csrPath);
return $crt;
}
/**
* @param string $csr
* @throws \Exception
@ -70,4 +134,81 @@ class CA extends Main
return $subject["CN"];
}
/**
* @param string $certificate
* @throws \Exception
*/
public function revoke($certificate)
{
/** @var Core $core */
$core = $this->get('core');
$crtPath = tempnam(sys_get_temp_dir(), '0.');
file_put_contents($crtPath, $certificate);
exec(escapeshellcmd($core->getBaseDir() . '/bin/revoke-cert') . ' ' . escapeshellarg($crtPath) . ' 2>&1', $output, $exitCode);
if ($exitCode !== 0) {
throw new \Exception("Failed signing CSR: " . implode("\n", $output));
}
unlink($crtPath);
}
/**
* @param string $pubKey
* @return string
* @throws \Exception
*/
public function getFingerprintFromPublicKey($pubKey)
{
/** @var Core $core */
$core = $this->get('core');
$pubPath = tempnam(sys_get_temp_dir(), '0.');
file_put_contents($pubPath, $pubKey);
exec(escapeshellcmd($core->getBaseDir() . '/bin/get-fingerprint') . ' ' . escapeshellarg($pubPath) . ' 2>&1', $output, $exitCode);
if ($exitCode !== 0) {
throw new \Exception("Failed getting fingerprint from public key: " . implode("\n", $output));
}
unlink($pubPath);
return $output[0];
}
public function verify($data, $signature, $publicKey)
{
$publicKeyResource = openssl_pkey_get_public($publicKey);
$result = openssl_verify($data, $signature, $publicKeyResource);
if ($result === 1) {
return true;
} else if ($result === 0) {
return false;
}
throw new \Exception("Verify failed: " . $this->getOpenSslError());
}
public function signWithCA($data) {
/** @var Core $core */
$core = $this->get('core');
$privateKeyPlain = file_get_contents($core->getBaseDir() . '/storage/ca/ca.key');
$privateKey = openssl_get_privatekey($privateKeyPlain);
$result = openssl_sign($data, $signature, $privateKey);
if ($result) {
return $signature;
}
throw new \Exception("Signing failed: " . $this->getOpenSslError());
}
}

@ -0,0 +1,66 @@
<?php
namespace Eater\Glim\Service;
use Eater\Glim\Model\Server as ServerModel;
use GuzzleHttp\Client as HttpClient;
use Eater\Glim\Core;
class Server extends Main
{
const MANAGEMENT_PORT = 7864;
private $httpClient = null;
private function getHttpClient() {
if ($this->httpClient === null) {
$this->httpClient = new HttpClient();
}
return $this->httpClient;
}
/**
* @param ServerModel $server
* @throws \Exception
*/
public function deliverSignedCertificate(ServerModel $server) {
$response = $this->doSignedRequest($server, '/deliver-crt', [
'certficate' => $server->getCertificate()
]);
if ($response->getStatusCode() !== 200) {
throw new \Exception('Delivering signed certificate failed (' . $response->getStatusCode() . '): ' . $response->getBody()->getContents());
}
}
/**
* @param ServerModel $server
* @param string $path
* @param string $data
* @return \Psr\Http\Message\ResponseInterface
* @throws \Exception
*/
public function doSignedRequest(ServerModel $server, $path, $data) {
$client = $this->getHttpClient();
/** @var CA $ca */
$ca = $this->get('ca');
$data['signature'] = $ca->signWithCA($server->getFingerprint());
$json = json_encode($data);
$pubKey = openssl_get_publickey($server->getPublicKey());
$success = openssl_public_encrypt($json, $crypted, $pubKey, OPENSSL_NO_PADDING);
if (!$success) {
throw new \Exception('Encrypting data failed: ' . openssl_error_string() . openssl_error_string());
}
return $client->post('http://' . $server->getExternalIp() . ':' . static::MANAGEMENT_PORT . $path, [
'body' => $crypted
]);
}
}

@ -10,6 +10,7 @@
{% block head %}
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.js"></script>
{% endblock %}
</head>
<body>

@ -1,48 +1,159 @@
{% extends "base.html.twig" %}
{% block head %}
{{ parent() }}
<script src="/js/panel.js"></script>
{% endblock %}
{% block content %}
<div class="container">
<h2>Certificates</h2>
<h2 id="certificates">Certificates</h2>
<div class="row">
<table class="table">
<thead>
<tr>
<th>Serial</th>
<th>Name</th>
<th>Expires on</th>
<th>
<a href="/panel/certificates/new" class="btn btn-default pull-right">Create new certificate</a>
</th>
</tr>
</thead>
<tbody>
{% for certificate in user.getCertificates() if certificate.getRevoked() == 0 %}
<tr>
<th>Serial</th>
<th>Name</th>
<th>Expires on</th>
<th>
<a href="/panel/certificates/new" class="button">Create new certificate</a>
</th>
<td>
{{ certificate.getSerial() }}
</td>
<td>
{{ certificate.getName() }}
</td>
<td>
{{ certificate.getExpiresOn().format('Y-m-d H:i:s') }}
</td>
<td>
<div class="pull-right">
<button data-name="{{ certificate.getName() }}" class="revoke btn btn-warning">Revoke
</button>
<a target="_blank" href="/panel/certificates/download/{{ certificate.getName() }}"
class="download btn btn-default">Download certificate</a>
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="4">
You don't seem to have any certificates yet, <a href="/panel/certificates/new">want to
create one?</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<h2>Servers</h2>
<table class="table">
<thead>
<tr>
<th>Hostname</th>
<th>Fingerprint</th>
<th>Location</th>
<th>Speed</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for server in servers %}\
<tr>
<td>
{{ server.getFqdn() }}
</td>
<td>
{{ server.getFingerprint() }}
</td>
<td>
{{ server.getLocation() }}
</td>
<td>
{{ server.getSpeed() }} MB/s
</td>
<td>
<div class="pull-right">
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="5">
There don't seem to be any servers yet :(
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if user.getSuperuser() %}
<h2>Registered servers</h2>
<table class="table">
<thead>
<tr>
<th>Hostname</th>
<th>Fingerprint</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for certificate in user.getCertificates() %}
<tr>
<td>
{{ certificate.getSerial() }}
</td>
<td>
{{ certificate.getName() }}
</td>
<td>
{{ certificate.getExpiresOn().format('Y-m-d H:i:s') }}
</td>
<td>
<div class="div pull-right">
<button class="revoke btn btn-warning">Revoke</button>
<a target="_blank" href="/panel/certificates/download/{{ certificate.getName() }}" class="download btn btn-default">Download certificate</a>
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="4">
You don't seem to have any certificates yet, <a href="/panel/certificates/new">want to create one?</a>
</td>
</tr>
{% endfor %}
{% for server in registeredServers %}
<tr>
<td>
{{ server.getFqdn() }}
</td>
<td>
{{ server.getFingerprint() }}
</td>
<td>
<div class="pull-right">
<a href="/panel/server/{{ server.getFingerprint() }}" class="btn btn-default">Details</a>
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="5">
There don't seem to be any servers yet :(
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
<div class="modal fade in revoke-modal" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Are you sure?</h4>
</div>
<div class="modal-body">
<div id="revoke-put-error-after-me" class="alert alert-danger modal-top-alert">
<h4>This may not be what you want!</h4>
<p>Revoking the certificate means that you <b>can't use</b> the VPN anymore with that
certificate</p>
</div>
<p>If you're really sure that you want to do this please enter your <b>password</b></p>
<div>
<input type="password" class="revoke-password form-control">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-warning revoke-confirm">Revoke</button>
</div>
</div>
</div>
</div>
{% endblock %}

@ -2,10 +2,11 @@
{% block head %}
{{ parent() }}
<script src="/js/forge.min.js"></script>
<script src="/js/jszip.min.js"></script>
<script src="/js/FileSaver.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/new_certificate.js"></script>
{% endblock %}
{% block content %}
@ -15,19 +16,40 @@
<div class="row">
<h2>New Certificate</h2>
</div>
<form class="form-horizontal" action="/panel/certificates/new">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-md-2" for="name">Name</label>
<div class="col-md-10">
<label class="control-label col-md-4" for="name">Name</label>
<div class="col-md-8">
<input name="name" id="name" type="text" class="form-control">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4">Private Key password</label>
<div class="col-md-8">
<div class="input-group">
<div class="input-group-addon">
<input id="wantsPassword" type="checkbox" />
</div>
<input type="password" disabled class="form-control" id="password" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4">Save private key online</label>
<div class="col-md-8">
<div class="checkbox">
<label>
<input type="checkbox" id="saveOnline" disabled /> This may be a security risk.
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12">
<button type="button" class="magic-csr btn btn-primary pull-right">Create certificate</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>

@ -0,0 +1,94 @@
{% extends "base.html.twig" %}
{% block head %}
{{ parent() }}
<script src="/js/edit_server.js"></script>
{% endblock %}
{% block content %}
<div class="container">
<div data-fingerprint="{{ server.getFingerprint() }}" class="row server-form">
<div class="col-md-6 col-md-offset-3">
<div class="row">
<h2>Editing server '{{ server.getFqdn() }}'</h2>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-md-4" for="fqdn">Hostname</label>
<div class="col-md-8">
<input name="fqdn" id="fqdn" type="text" class="form-control" value="{{ server.getFqdn() }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="external-ip">External IP</label>
<div class="col-md-8">
<input name="external-ip" id="external-ip" type="text" min="-1" class="form-control" value="{{ server.getExternalIp() }}">
</div>
</div>
<h3>Details</h3>
<div class="form-group">
<label class="control-label col-md-4" for="location">Location</label>
<div class="col-md-8">
<input name="location" id="location" type="text" class="form-control" value="{{ server.getLocation() }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="speed">Speed</label>
<div class="col-md-8">
<input name="speed" id="speed" type="number" min="-1" class="form-control" value="{{ server.getSpeed() }}">
</div>
</div>
<h3>Config</h3>
<div class="form-group">
<label class="control-label col-md-4" for="internal-ip">Internal IP</label>
<div class="col-md-8">
<input name="internal-ip" id="internal-ip" type="text" min="-1" class="form-control" value="{{ server.getInternalIp() ?: '10.24.0.0' }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="speed">Netmask</label>
<div class="col-md-8">
<input name="netmask" id="netmask" type="number" min="8" max="24" class="form-control" value="{{ server.getNetmask() ?: 16 }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="port">Port</label>
<div class="col-md-8">
<input name="port" id="port" type="number" class="form-control" value="{{ server.getPort() ?: 1194 }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="protocol">Protocol</label>
<div class="col-md-8">
<select name="protocol" id="protocol" class="form-control">
<option value="udp" {{ server.getProtocol() == 'udp' ? 'selected' }}>UDP</option>
<option value="tcp" {{ server.getProtocol() == 'tcp' ? 'selected' }}>TCP</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="first-dns">First DNS</label>
<div class="col-md-8">
<input name="first-dns" id="first-dns" type="text" class="form-control" value="{{ server.getFirstDns() ?: '8.8.8.8' }}">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="second-dns">second DNS</label>
<div class="col-md-8">
<input name="second-dns" id="first-dns" type="text" class="form-control" value="{{ server.getSecondDns() ?: '8.8.4.4' }}">
</div>
</div>
<div class="form-group">
<div class="col-md-12">
<div class="pull-right">
<button type="button" class="btn save">Save</button>
<button type="button" class="btn btn-primary save-and-sign">Sign and save</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Loading…
Cancel
Save