Initial commit
6
.htaccess
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<FilesMatch "\.bin$">
|
||||||
|
Order Allow,Deny
|
||||||
|
Deny from all
|
||||||
|
</FilesMatch>
|
||||||
|
RedirectMatch 404 /\.git
|
||||||
|
RedirectMatch 404 /keys
|
18
README.md
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# StudentCard
|
||||||
|
|
||||||
|
PHP application to create and verify a student card.
|
||||||
|
|
||||||
|
## Install:
|
||||||
|
|
||||||
|
git clone https://git.codeberg.org/digitalsouveraeneschule/studentcard.git
|
||||||
|
|
||||||
|
## Create keys
|
||||||
|
|
||||||
|
php genkey.php
|
||||||
|
|
||||||
|
## Configure
|
||||||
|
|
||||||
|
cd config
|
||||||
|
cp config.php.sample config.php
|
||||||
|
|
||||||
|
edit config.php
|
30
callback.php
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
require __DIR__ . '/config/config.php';
|
||||||
|
|
||||||
|
use Jumbojett\OpenIDConnectClient;
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
// keycloak configuration
|
||||||
|
$oidc = new OpenIDConnectClient($CONFIG['oidc']['url'],
|
||||||
|
$CONFIG['oidc']['clientid'],
|
||||||
|
$CONFIG['oidc']['secret']);
|
||||||
|
$oidc->setRedirectURL($CONFIG['baseurl'] . 'callback.php');
|
||||||
|
|
||||||
|
// get token
|
||||||
|
$oidc->authenticate();
|
||||||
|
|
||||||
|
// store user data in session
|
||||||
|
$_SESSION['id_token'] = $oidc->getIdToken();
|
||||||
|
foreach ($CONFIG['oidc']['mappings'] as $key => $value) {
|
||||||
|
$_SESSION[$key] = $oidc->requestUserInfo($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $_SESSION['doe'] ) {
|
||||||
|
$_SESSION['doe'] = $CONFIG['default_doe'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// redirect to home
|
||||||
|
header('Location: card.php');
|
||||||
|
?>
|
91
card.php
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/* This file is part of studidcard.
|
||||||
|
|
||||||
|
studidcard is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
studidcard is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
require __DIR__ . '/config/config.php';
|
||||||
|
|
||||||
|
use Spipu\Html2Pdf\Html2Pdf;
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if (!isset($_SESSION['id_token'])) {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// load keys
|
||||||
|
$private_key = file_get_contents('keys/private_key.bin');
|
||||||
|
$public_key = file_get_contents('keys/public_key.bin');
|
||||||
|
|
||||||
|
// create data_json
|
||||||
|
foreach ($CONFIG['oidc']['mappings'] as $key => $value) {
|
||||||
|
$data[$key] = $_SESSION[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($CONFIG['version'] === '0.1') {
|
||||||
|
$data_json = json_encode($data);
|
||||||
|
$data_crypt = sodium_crypto_box_seal($data_json, sodium_crypto_sign_ed25519_pk_to_curve25519($public_key));
|
||||||
|
$message['verify'] = 'ausweis.steinbeis.schule';
|
||||||
|
$message['data'] = sodium_bin2base64($data_crypt, SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
$message['signature'] = sodium_bin2base64(sodium_crypto_sign_detached($message['verify'] . $message['data'], $private_key), SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
$message_encoded = urlencode(json_encode($message));
|
||||||
|
} elseif ($CONFIG['version'] === '0.2') {
|
||||||
|
$data_json = json_encode($data);
|
||||||
|
$data_crypt = sodium_crypto_box_seal($data_json, sodium_crypto_sign_ed25519_pk_to_curve25519($public_key));
|
||||||
|
$message_encoded = sodium_bin2base64(sodium_crypto_sign($data_crypt, $private_key), SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
} elseif ($CONFIG['version'] === '0.3') {
|
||||||
|
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
|
||||||
|
$keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
|
||||||
|
sodium_crypto_sign_ed25519_sk_to_curve25519($private_key),
|
||||||
|
sodium_crypto_sign_ed25519_pk_to_curve25519($public_key));
|
||||||
|
$data_json = json_encode($data);
|
||||||
|
$data_crypt = sodium_crypto_box($data_json, $nonce, $keypair);
|
||||||
|
$data_crypt = sodium_crypto_box_seal($data_json, sodium_crypto_sign_ed25519_pk_to_curve25519($public_key));
|
||||||
|
$message_encoded = sodium_bin2base64(sodium_crypto_sign($data_crypt, $private_key), SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//echo $message_encoded . "\n Length:" . strlen($message_encoded);
|
||||||
|
//$message_encoded = urlencode(gzcompress(json_encode($message),9));
|
||||||
|
|
||||||
|
//echo "data_json: " . $data_json . "\n";
|
||||||
|
//echo "data_crypt: " . $data_crypt . "\n";
|
||||||
|
//echo "message: ";
|
||||||
|
//var_dump($message);
|
||||||
|
//echo "\n";
|
||||||
|
/////// sodium_crypto_sign_ed25519_sk_to_curve25519($private_key)
|
||||||
|
//echo "Message: ".$message_encoded;
|
||||||
|
|
||||||
|
$url = $CONFIG['baseurl'] . 'verify.php?v=' . $CONFIG['version'] . '&d=' . $message_encoded;
|
||||||
|
|
||||||
|
// url is needed by qrcode.php
|
||||||
|
$_SESSION['url'] = $url;
|
||||||
|
|
||||||
|
$verified = true;
|
||||||
|
|
||||||
|
if (isset($_GET['pdf'])) {
|
||||||
|
$pdf=true;
|
||||||
|
ob_start();
|
||||||
|
include('idcard-print.php');
|
||||||
|
$out = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
$html2pdf = new Html2Pdf(orientation:'L', format:Array(96,65), margins:Array(5,5,5,0));
|
||||||
|
//$html2pdf = new Html2Pdf(orientation:'L', format:'BUSINESS_CARD',margins:Array(0,0,0,0));
|
||||||
|
$html2pdf->writeHTML($out);
|
||||||
|
$html2pdf->output('schuelerausweis.pdf','D');
|
||||||
|
} else {
|
||||||
|
include('idcard.php');
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
7
composer.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"require": {
|
||||||
|
"jumbojett/openid-connect-php": "^1.0",
|
||||||
|
"endroid/qr-code": "^6.0",
|
||||||
|
"spipu/html2pdf": "^5.3"
|
||||||
|
}
|
||||||
|
}
|
30
config/config.php.sample
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$CONFIG = array(
|
||||||
|
'version' => '0.2',
|
||||||
|
'default_doe' => '31.07.2025',
|
||||||
|
'baseurl' => 'https://ausweis.example.com/',
|
||||||
|
'oidc' => array(
|
||||||
|
'url' => 'https://idam.example.com/realms/schoolrealm/',
|
||||||
|
'clientid' => 'ausweis',
|
||||||
|
'secret' => 'secret',
|
||||||
|
'mappings' => array(
|
||||||
|
'firstname' => 'given_name',
|
||||||
|
'lastname' => 'family_name',
|
||||||
|
'birthdate' => 'birthdate',
|
||||||
|
'id' => 'sophomorixUnid',
|
||||||
|
'role' => 'sophomorixRole',
|
||||||
|
'doe' => 'doe'
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'ldap' => array(
|
||||||
|
'bind_user' => 'cn=global-binduser,OU=Management,OU=GLOBAL,DC=linuxmuster,DC=lan',
|
||||||
|
'bind_passwd' => 'secret',
|
||||||
|
'base_dn' => 'OU=default-school,OU=SCHOOLS,DC=linuxmuster,DC=lan',
|
||||||
|
'url' => 'ldaps://server.example.com:636',
|
||||||
|
'filter_id' => '(&(obdjectclass=person)(sophomorixUnid=%s)(!(sophomorixAdminClass=attic)))',
|
||||||
|
'filter_name' => '(&(objectclass=person)(givenName=%s)(sn=%s)(sophomorixBirthdate=%s)(!(sophomorixAdminClass=attic)))'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
?>
|
10
genkey.php
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
// Generate keypair
|
||||||
|
$keyPair = sodium_crypto_sign_keypair();
|
||||||
|
$privateKey = sodium_crypto_sign_secretkey($keyPair);
|
||||||
|
$publicKey = sodium_crypto_sign_publickey($keyPair);
|
||||||
|
|
||||||
|
// Write keys to file
|
||||||
|
file_put_contents('keys/private_key.bin', $privateKey);
|
||||||
|
file_put_contents('keys/public_key.bin', $publicKey);
|
||||||
|
?>
|
199
idcard-print.php
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Schülerausweis</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #ffffff;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
width: 86mm;
|
||||||
|
height: 54mm;
|
||||||
|
/*width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
width: 600px;
|
||||||
|
height: 350px;*/
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 10px;
|
||||||
|
/* padding: 20px;*/
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background: url(img/fvs-background-print.<?php echo (isset($pdf) ? 'png' : 'svg') ?>) bottom left no-repeat;
|
||||||
|
color-adjust: exact !important; /* Firefox 48 – 96 */
|
||||||
|
print-color-adjust: exact !important;
|
||||||
|
/*background: url('img/fvs-background.<?php echo (isset($pdf) ? 'png' : 'svg') ?>') bottom left no-repeat;*/
|
||||||
|
/*background-size: 60%;
|
||||||
|
background-size: contain;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-section {
|
||||||
|
/* display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;*/
|
||||||
|
position: absolute; top: 25mm; left: 2mm; width: 45mm; height: 35mm;
|
||||||
|
/*border: 1px solid;*/
|
||||||
|
/* background-image: url('logo-fvs-kuppel.svg');
|
||||||
|
background-size: 120%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: right;
|
||||||
|
background-color:rgba(255, 255, 255, 5);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-section {
|
||||||
|
text-align: left;
|
||||||
|
position: absolute; top: 20mm; left: 54mm; width: 27mm; height: 33mm;
|
||||||
|
/*border: 1px solid;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
position: absolute; top: 7mm; left: 36mm; width: 46mm; height: 12mm;
|
||||||
|
/*border: 1px solid;*/
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
position: absolute; top: 11mm; left: 2mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
font-size: 8px;
|
||||||
|
color: #666666;
|
||||||
|
position: absolute; top: 15mm; left: 2mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
margin-bottom: 4mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal {
|
||||||
|
font-size: 8px;
|
||||||
|
color: #666666;
|
||||||
|
position: absolute; top: 27mm; left: 0mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info strong {
|
||||||
|
display: block;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info span {
|
||||||
|
font-size: 6px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo img {
|
||||||
|
width: 46mm;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact {
|
||||||
|
font-size: 8px;
|
||||||
|
color: #333333;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact a {
|
||||||
|
color: #333333;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-code {
|
||||||
|
/* margin-top: 10px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-code img {
|
||||||
|
width: 22mm;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timestamp {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
rotate: 90;
|
||||||
|
font-size: 6px;
|
||||||
|
color: #666666;
|
||||||
|
/*margin-top: 10px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.curve {
|
||||||
|
position: absolute;
|
||||||
|
width: 400px;
|
||||||
|
height: 200px;
|
||||||
|
background: #e5f2f8;
|
||||||
|
border-radius: 200px / 100px;
|
||||||
|
transform: rotate(20deg);
|
||||||
|
top: 50px;
|
||||||
|
left: -100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="card">
|
||||||
|
<div class="title"><?php if ($data['role']==='teacher') { echo 'Lehrerausweis'; } else { echo 'Schülerausweis'; } ?></div>
|
||||||
|
<div class="subtitle"><?php if ($data['role']==='teacher') { echo 'Teacher'; } else { echo 'Student'; } ?> Identity Card</div>
|
||||||
|
<div class="logo">
|
||||||
|
<img src="img/logo-fvs.<?php echo (isset($pdf) ? 'png' : 'svg') ?>" alt="Logo Steinbeis-Schule Reutlingen" >
|
||||||
|
</div>
|
||||||
|
<div class="left-section">
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['firstname']; ?> <?php echo $data['lastname']; ?></strong><span><br>
|
||||||
|
Name</span>
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['birthdate']; ?></strong><span><br>
|
||||||
|
Date of Birth</span>
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['doe']; ?></strong><span><br>
|
||||||
|
Date of Expiry</span>
|
||||||
|
</div>
|
||||||
|
<div class="legal">Nur gültig mit amtlichen Lichtbildausweis<br>Only valid with official photo Identity Card</div>
|
||||||
|
</div>
|
||||||
|
<div class="right-section">
|
||||||
|
<div class="contact">
|
||||||
|
Gewerbliche Schule I<br>
|
||||||
|
Karlstraße 40<br>
|
||||||
|
D-72764 Reutlingen<br>
|
||||||
|
<a href="http://www.steinbeis.schule">www.steinbeis.schule</a><br>
|
||||||
|
info@steinbeis.schule<br>
|
||||||
|
+49 7121 485 111
|
||||||
|
</div>
|
||||||
|
<table style="width:100%">
|
||||||
|
<tr>
|
||||||
|
<td style="width:90%">
|
||||||
|
<div class="qr-code">
|
||||||
|
<?php if (isset($valid) && $valid) { echo '<img src="checked.svg" alt="gültig">'; } ?>
|
||||||
|
<?php if (!isset($valid) && isset($pdf)) { echo '<qrcode value="' . $url .'" ec="M" style="width: 22mm; background-color: white; color: black; border: none;"></qrcode>'; } ?>
|
||||||
|
<?php if (!isset($valid) && !isset($pdf)) { echo '<img src="qrcode.php" alt="QR Code">'; } ?>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td style="width:10%" valign=bottom>
|
||||||
|
<div style="align-content:end">
|
||||||
|
<!-- <div>
|
||||||
|
<?php if (isset($valid) && $valid) { echo 'valid'; } ?>
|
||||||
|
<?php if (isset($valid) && !$valid) { echo 'expired'; } ?>
|
||||||
|
<?php if (!isset($valid)) { echo '<A href="' . $url . '">verify</A>'; } ?>
|
||||||
|
</div>-->
|
||||||
|
<div class="timestamp">
|
||||||
|
<?php echo date('d.m.Y') . " - " . date('H:i:s'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
192
idcard.php
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Schülerausweis</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #ffffff;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
width: 600px;
|
||||||
|
height: 350px;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background: url('img/fvs-background.<?php echo (isset($pdf) ? 'png' : 'svg') ?>') bottom left no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-section {
|
||||||
|
margin-top: 5%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-section {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: 14%;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666666;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info strong {
|
||||||
|
display: block;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info span {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333333;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact a {
|
||||||
|
color: #333333;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-code {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-code img {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timestamp {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #666666;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.curve {
|
||||||
|
position: absolute;
|
||||||
|
width: 400px;
|
||||||
|
height: 200px;
|
||||||
|
background: #e5f2f8;
|
||||||
|
border-radius: 200px / 100px;
|
||||||
|
transform: rotate(20deg);
|
||||||
|
top: 50px;
|
||||||
|
left: -100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="card">
|
||||||
|
<div style="display: grid; grid-template-columns: 45% 55%;">
|
||||||
|
<div style="align-self: flex-end">
|
||||||
|
<div class="title"><?php if ($data['role']==='teacher') { echo 'Lehrerausweis'; } else { echo 'Schülerausweis'; } ?></div>
|
||||||
|
<div class="subtitle"><?php if ($data['role']==='teacher') { echo 'Teacher'; } else { echo 'Student'; } ?> Identity Card</div>
|
||||||
|
</div>
|
||||||
|
<div class="logo">
|
||||||
|
<img src="img/logo-fvs.<?php echo (isset($pdf) ? 'png' : 'svg') ?>" alt="Logo Steinbeis-Schule Reutlingen">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: grid; grid-template-columns: 66% 34%;">
|
||||||
|
<div class="left-section">
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['firstname']; ?> <?php echo $data['lastname']; ?></strong>
|
||||||
|
<span>Name</span>
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['birthdate']; ?></strong>
|
||||||
|
<span>Date of Birth</span>
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<strong><?php echo $data['doe']; ?></strong>
|
||||||
|
<span>Date of Expiry</span>
|
||||||
|
</div>
|
||||||
|
<div class="subtitle" style="margin-bottom: 0px">Nur gültig mit amtlichem Lichtbildausweis<br>Only valid with official photo Identity Card</div>
|
||||||
|
</div>
|
||||||
|
<div class="right-section">
|
||||||
|
<div class="contact">
|
||||||
|
Gewerbliche Schule I<br>
|
||||||
|
Karlstraße 40<br>
|
||||||
|
D-72764 Reutlingen<br>
|
||||||
|
<a href="http://www.steinbeis.schule">www.<strong>steinbeis</strong>.schule</a><br>
|
||||||
|
<a href="mailto:info@steinbeis.schule">info@steinbeis.schule</a><br>
|
||||||
|
<a href="tel:+497121485111">+49 7121 485 111</a>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid; grid-template-columns: 2fr 1fr;">
|
||||||
|
<div class="qr-code">
|
||||||
|
<?php if ($verified) {
|
||||||
|
if (isset($valid) && $valid) {
|
||||||
|
echo '<img src="img/checked.svg" alt="gültig">';
|
||||||
|
} elseif (isset($valid) && !$valid) {
|
||||||
|
echo '<img src="img/expired.svg" alt="ungültig">';
|
||||||
|
} elseif (isset($pdf)) {
|
||||||
|
echo '<qrcode value="' . $url .'" style="width: 50mm; background-color: white; color: black;"></qrcode>';
|
||||||
|
} else {
|
||||||
|
echo '<img src="qrcode.php" alt="QR Code">';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo '<img src="img/signature_invalid.svg" alt="Signatur ist ungültig">';
|
||||||
|
} ?>
|
||||||
|
</div>
|
||||||
|
<div style="align-content:end">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php if ($verified) {
|
||||||
|
if (isset($valid) && $valid) {
|
||||||
|
echo 'valid';
|
||||||
|
} elseif (isset($valid) && !$valid) {
|
||||||
|
echo 'expired';
|
||||||
|
} elseif (!isset($pdf)) {
|
||||||
|
echo '<A href="card.php?pdf=1"><img src="img/pdf.svg" width="40px"></A><br>';
|
||||||
|
echo '<A href="' . $url . '">verify</A>';
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo 'Die Signatur ist ungültig';
|
||||||
|
} ?>
|
||||||
|
</div>
|
||||||
|
<div class="timestamp">
|
||||||
|
<?php echo date('d.m.Y') . "<br>" . date('H:i:s'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
333
img/checked.svg
Normal file
|
@ -0,0 +1,333 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="2384.2" height="3042" version="1.1" viewBox="0 0 2384.2 3042" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip-0">
|
||||||
|
<path d="m1331 979h2338v2325h-2338z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-1">
|
||||||
|
<path d="m2500 3129.4c-545.63 0-987.94-442.33-987.94-987.96s442.31-987.94 987.94-987.94c545.64 0 987.96 442.31 987.96 987.94s-442.32 987.96-987.96 987.96zm361.28 123.84 70.379-142.14 139.62 38.941 13.199 3.6875 39.23-153.71 158.32 9.9609 4.6094-111.49v-0.039l1.9492-46.992 156.99-23-19.961-118.11-6.461-38.352 148.8-55.07-58.508-147.47 134-85.008-88.043-131.98 113.34-111.03-113.34-111.03 88.043-131.98-134-84.988 58.508-147.48-148.8-55.078 26.422-156.46-156.99-23-6.5586-158.51-158.32 9.9609-39.23-153.72-152.82 42.629-70.379-142.14-140.52 73.672-98.621-124.28-122.14 101.29-122.11-101.29-98.629 124.28-140.52-73.672-70.371 142.14-152.83-42.629-39.23 153.72-158.32-9.9609-6.5703 158.51-156.98 23 26.422 156.46-148.8 55.078 58.52 147.48-134 84.988 88.031 131.98-113.29 111.03 113.29 111.03-88.031 131.98 134 85.008-58.52 147.47 148.8 55.07-6.7735 40.133-19.648 116.33 156.98 23 2 47.961 4.5703 110.56 158.32-9.9609 39.23 153.71 13.648-3.8281 139.18-38.801 70.371 142.14 31.398-16.48 109.12-57.191 98.629 124.28 122.11-101.29 122.14 101.29 98.621-124.28 109.13 57.191z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-2">
|
||||||
|
<path d="m2500 3129.4c-545.63 0-987.94-442.33-987.94-987.96s442.31-987.94 987.94-987.94c545.64 0 987.96 442.31 987.96 987.94s-442.32 987.96-987.96 987.96zm361.28 123.84 70.379-142.14 139.62 38.941 13.199 3.6875 39.23-153.71 158.32 9.9609 4.6094-111.49v-0.039l1.9492-46.992 156.99-23-19.961-118.11-6.461-38.352 148.8-55.07-58.508-147.47 134-85.008-88.043-131.98 113.34-111.03-113.34-111.03 88.043-131.98-134-84.988 58.508-147.48-148.8-55.078 26.422-156.46-156.99-23-6.5586-158.51-158.32 9.9609-39.23-153.72-152.82 42.629-70.379-142.14-140.52 73.672-98.621-124.28-122.14 101.29-122.11-101.29-98.629 124.28-140.52-73.672-70.371 142.14-152.83-42.629-39.23 153.72-158.32-9.9609-6.5703 158.51-156.98 23 26.422 156.46-148.8 55.078 58.52 147.48-134 84.988 88.031 131.98-113.29 111.03 113.29 111.03-88.031 131.98 134 85.008-58.52 147.47 148.8 55.07-6.7735 40.133-19.648 116.33 156.98 23 2 47.961 4.5703 110.56 158.32-9.9609 39.23 153.71 13.648-3.8281 139.18-38.801 70.371 142.14 31.398-16.48 109.12-57.191 98.629 124.28 122.11-101.29 122.14 101.29 98.621-124.28 109.13 57.191 31.391 16.48"/>
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient id="linear-pattern-0" x1="2.22e-16" x2="1" gradientTransform="matrix(2337.4 0 0 2337.4 1331.3 2141.4)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#00dc7f" offset="0"/>
|
||||||
|
<stop stop-color="#00dc7f" offset=".015625"/>
|
||||||
|
<stop stop-color="#00db7f" offset=".03125"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".046875"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".0625"/>
|
||||||
|
<stop stop-color="#00d97d" offset=".078125"/>
|
||||||
|
<stop stop-color="#00d87d" offset=".09375"/>
|
||||||
|
<stop stop-color="#00d77c" offset=".10938"/>
|
||||||
|
<stop stop-color="#00d67c" offset=".125"/>
|
||||||
|
<stop stop-color="#00d57b" offset=".14062"/>
|
||||||
|
<stop stop-color="#00d47b" offset=".15625"/>
|
||||||
|
<stop stop-color="#00d37a" offset=".17188"/>
|
||||||
|
<stop stop-color="#00d27a" offset=".1875"/>
|
||||||
|
<stop stop-color="#00d179" offset=".20312"/>
|
||||||
|
<stop stop-color="#00d079" offset=".21875"/>
|
||||||
|
<stop stop-color="#00cf78" offset=".23438"/>
|
||||||
|
<stop stop-color="#00ce78" offset=".25"/>
|
||||||
|
<stop stop-color="#00ce77" offset=".26562"/>
|
||||||
|
<stop stop-color="#00cd76" offset=".28125"/>
|
||||||
|
<stop stop-color="#00cc76" offset=".29688"/>
|
||||||
|
<stop stop-color="#00cb75" offset=".3125"/>
|
||||||
|
<stop stop-color="#00ca75" offset=".32812"/>
|
||||||
|
<stop stop-color="#00c974" offset=".34375"/>
|
||||||
|
<stop stop-color="#00c874" offset=".35938"/>
|
||||||
|
<stop stop-color="#00c773" offset=".375"/>
|
||||||
|
<stop stop-color="#00c673" offset=".39062"/>
|
||||||
|
<stop stop-color="#00c672" offset=".40625"/>
|
||||||
|
<stop stop-color="#00c572" offset=".42188"/>
|
||||||
|
<stop stop-color="#00c472" offset=".4375"/>
|
||||||
|
<stop stop-color="#00c371" offset=".45312"/>
|
||||||
|
<stop stop-color="#00c271" offset=".46875"/>
|
||||||
|
<stop stop-color="#00c170" offset=".48438"/>
|
||||||
|
<stop stop-color="#00c070" offset=".5"/>
|
||||||
|
<stop stop-color="#00c06f" offset=".51562"/>
|
||||||
|
<stop stop-color="#00bf6f" offset=".53125"/>
|
||||||
|
<stop stop-color="#00be6e" offset=".54688"/>
|
||||||
|
<stop stop-color="#00bd6e" offset=".5625"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".57812"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".59375"/>
|
||||||
|
<stop stop-color="#00bb6c" offset=".60938"/>
|
||||||
|
<stop stop-color="#00ba6c" offset=".625"/>
|
||||||
|
<stop stop-color="#00b96b" offset=".64062"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".65625"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".67188"/>
|
||||||
|
<stop stop-color="#00b76a" offset=".6875"/>
|
||||||
|
<stop stop-color="#00b66a" offset=".70312"/>
|
||||||
|
<stop stop-color="#00b569" offset=".71875"/>
|
||||||
|
<stop stop-color="#00b569" offset=".73438"/>
|
||||||
|
<stop stop-color="#00b468" offset=".75"/>
|
||||||
|
<stop stop-color="#00b368" offset=".76562"/>
|
||||||
|
<stop stop-color="#00b268" offset=".78125"/>
|
||||||
|
<stop stop-color="#00b267" offset=".79688"/>
|
||||||
|
<stop stop-color="#00b167" offset=".8125"/>
|
||||||
|
<stop stop-color="#00b066" offset=".82812"/>
|
||||||
|
<stop stop-color="#00b066" offset=".84375"/>
|
||||||
|
<stop stop-color="#00af66" offset=".85938"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".875"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".89062"/>
|
||||||
|
<stop stop-color="#00ad64" offset=".90625"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".92188"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".9375"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".95312"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".96875"/>
|
||||||
|
<stop stop-color="#00aa63" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<clipPath id="clip-3">
|
||||||
|
<path d="m1582 1223h1836v1836h-1836z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-4">
|
||||||
|
<path d="m3081.1 1829.6-518.98 563.98-120.93 120.86c-0.2305 0.2305-0.461 0.461-0.6914 0.6797-33.309 32.832-87.438 31.18-120.51-1.8906l-321.38-321.39c-49.988-50-49.988-130.99 0-180.92 24.953-24.961 57.711-37.441 90.402-37.441 32.738 0 65.488 12.48 90.449 37.441l201.73 201.73 518.98-563.96c49.988-49.93 130.93-49.93 180.93 0 49.918 49.992 49.918 131 0 180.91zm-581.15-605.65c-506.7 0-917.44 410.75-917.44 917.45 0 506.7 410.74 917.46 917.44 917.46 506.7 0 917.47-410.76 917.47-917.46 0-506.7-410.77-917.45-917.47-917.45z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-5">
|
||||||
|
<path d="m3081.1 1829.6-518.98 563.98-120.93 120.86c-0.2305 0.2305-0.461 0.461-0.6914 0.6797-33.309 32.832-87.438 31.18-120.51-1.8906l-321.38-321.39c-49.988-50-49.988-130.99 0-180.92 24.953-24.961 57.711-37.441 90.402-37.441 32.738 0 65.488 12.48 90.449 37.441l201.73 201.73 518.98-563.96c49.988-49.93 130.93-49.93 180.93 0 49.918 49.992 49.918 131 0 180.91zm-581.15-605.65c-506.7 0-917.44 410.75-917.44 917.45 0 506.7 410.74 917.46 917.44 917.46 506.7 0 917.47-410.76 917.47-917.46 0-506.7-410.77-917.45-917.47-917.45"/>
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient id="linear-pattern-1" x1="1.11e-16" x2="1" gradientTransform="matrix(1834.9 0 0 1834.9 1582.6 2141.4)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#00dc7f" offset="0"/>
|
||||||
|
<stop stop-color="#00dc7f" offset=".015625"/>
|
||||||
|
<stop stop-color="#00db7f" offset=".03125"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".046875"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".0625"/>
|
||||||
|
<stop stop-color="#00d97d" offset=".078125"/>
|
||||||
|
<stop stop-color="#00d87d" offset=".09375"/>
|
||||||
|
<stop stop-color="#00d77c" offset=".10938"/>
|
||||||
|
<stop stop-color="#00d67c" offset=".125"/>
|
||||||
|
<stop stop-color="#00d57b" offset=".14062"/>
|
||||||
|
<stop stop-color="#00d47b" offset=".15625"/>
|
||||||
|
<stop stop-color="#00d37a" offset=".17188"/>
|
||||||
|
<stop stop-color="#00d27a" offset=".1875"/>
|
||||||
|
<stop stop-color="#00d179" offset=".20312"/>
|
||||||
|
<stop stop-color="#00d079" offset=".21875"/>
|
||||||
|
<stop stop-color="#00cf78" offset=".23438"/>
|
||||||
|
<stop stop-color="#00ce78" offset=".25"/>
|
||||||
|
<stop stop-color="#00ce77" offset=".26562"/>
|
||||||
|
<stop stop-color="#00cd76" offset=".28125"/>
|
||||||
|
<stop stop-color="#00cc76" offset=".29688"/>
|
||||||
|
<stop stop-color="#00cb75" offset=".3125"/>
|
||||||
|
<stop stop-color="#00ca75" offset=".32812"/>
|
||||||
|
<stop stop-color="#00c974" offset=".34375"/>
|
||||||
|
<stop stop-color="#00c874" offset=".35938"/>
|
||||||
|
<stop stop-color="#00c773" offset=".375"/>
|
||||||
|
<stop stop-color="#00c673" offset=".39062"/>
|
||||||
|
<stop stop-color="#00c672" offset=".40625"/>
|
||||||
|
<stop stop-color="#00c572" offset=".42188"/>
|
||||||
|
<stop stop-color="#00c472" offset=".4375"/>
|
||||||
|
<stop stop-color="#00c371" offset=".45312"/>
|
||||||
|
<stop stop-color="#00c271" offset=".46875"/>
|
||||||
|
<stop stop-color="#00c170" offset=".48438"/>
|
||||||
|
<stop stop-color="#00c070" offset=".5"/>
|
||||||
|
<stop stop-color="#00c06f" offset=".51562"/>
|
||||||
|
<stop stop-color="#00bf6f" offset=".53125"/>
|
||||||
|
<stop stop-color="#00be6e" offset=".54688"/>
|
||||||
|
<stop stop-color="#00bd6e" offset=".5625"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".57812"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".59375"/>
|
||||||
|
<stop stop-color="#00bb6c" offset=".60938"/>
|
||||||
|
<stop stop-color="#00ba6c" offset=".625"/>
|
||||||
|
<stop stop-color="#00b96b" offset=".64062"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".65625"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".67188"/>
|
||||||
|
<stop stop-color="#00b76a" offset=".6875"/>
|
||||||
|
<stop stop-color="#00b66a" offset=".70312"/>
|
||||||
|
<stop stop-color="#00b569" offset=".71875"/>
|
||||||
|
<stop stop-color="#00b569" offset=".73438"/>
|
||||||
|
<stop stop-color="#00b468" offset=".75"/>
|
||||||
|
<stop stop-color="#00b368" offset=".76562"/>
|
||||||
|
<stop stop-color="#00b268" offset=".78125"/>
|
||||||
|
<stop stop-color="#00b267" offset=".79688"/>
|
||||||
|
<stop stop-color="#00b167" offset=".8125"/>
|
||||||
|
<stop stop-color="#00b066" offset=".82812"/>
|
||||||
|
<stop stop-color="#00b066" offset=".84375"/>
|
||||||
|
<stop stop-color="#00af66" offset=".85938"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".875"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".89062"/>
|
||||||
|
<stop stop-color="#00ad64" offset=".90625"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".92188"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".9375"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".95312"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".96875"/>
|
||||||
|
<stop stop-color="#00aa63" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<clipPath id="clip-6">
|
||||||
|
<path d="m1307 2977h869v1044h-869z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-7">
|
||||||
|
<path d="m2047.6 3157.6-121.53 33.84-38.648 10.84-41.148-161.11-165.87 10.387-3.0391-73.957-369.45 801.64 383.28-141.05 142.23 382.79 342.34-742.88-54.348 28.5z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-8">
|
||||||
|
<path d="m2047.6 3157.6-121.53 33.84-38.648 10.84-41.148-161.11-165.87 10.387-3.0391-73.957-369.45 801.64 383.28-141.05 142.23 382.79 342.34-742.88-54.348 28.5-73.812-149"/>
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient id="linear-pattern-2" x2="1" gradientTransform="matrix(867.85 0 0 867.85 1307.9 3499.3)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#00dc7f" offset="0"/>
|
||||||
|
<stop stop-color="#00dc7f" offset=".015625"/>
|
||||||
|
<stop stop-color="#00db7f" offset=".03125"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".046875"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".0625"/>
|
||||||
|
<stop stop-color="#00d97d" offset=".078125"/>
|
||||||
|
<stop stop-color="#00d87d" offset=".09375"/>
|
||||||
|
<stop stop-color="#00d77c" offset=".10938"/>
|
||||||
|
<stop stop-color="#00d67c" offset=".125"/>
|
||||||
|
<stop stop-color="#00d57b" offset=".14062"/>
|
||||||
|
<stop stop-color="#00d47b" offset=".15625"/>
|
||||||
|
<stop stop-color="#00d37a" offset=".17188"/>
|
||||||
|
<stop stop-color="#00d27a" offset=".1875"/>
|
||||||
|
<stop stop-color="#00d179" offset=".20312"/>
|
||||||
|
<stop stop-color="#00d079" offset=".21875"/>
|
||||||
|
<stop stop-color="#00cf78" offset=".23438"/>
|
||||||
|
<stop stop-color="#00ce78" offset=".25"/>
|
||||||
|
<stop stop-color="#00ce77" offset=".26562"/>
|
||||||
|
<stop stop-color="#00cd76" offset=".28125"/>
|
||||||
|
<stop stop-color="#00cc76" offset=".29688"/>
|
||||||
|
<stop stop-color="#00cb75" offset=".3125"/>
|
||||||
|
<stop stop-color="#00ca75" offset=".32812"/>
|
||||||
|
<stop stop-color="#00c974" offset=".34375"/>
|
||||||
|
<stop stop-color="#00c874" offset=".35938"/>
|
||||||
|
<stop stop-color="#00c773" offset=".375"/>
|
||||||
|
<stop stop-color="#00c673" offset=".39062"/>
|
||||||
|
<stop stop-color="#00c672" offset=".40625"/>
|
||||||
|
<stop stop-color="#00c572" offset=".42188"/>
|
||||||
|
<stop stop-color="#00c472" offset=".4375"/>
|
||||||
|
<stop stop-color="#00c371" offset=".45312"/>
|
||||||
|
<stop stop-color="#00c271" offset=".46875"/>
|
||||||
|
<stop stop-color="#00c170" offset=".48438"/>
|
||||||
|
<stop stop-color="#00c070" offset=".5"/>
|
||||||
|
<stop stop-color="#00c06f" offset=".51562"/>
|
||||||
|
<stop stop-color="#00bf6f" offset=".53125"/>
|
||||||
|
<stop stop-color="#00be6e" offset=".54688"/>
|
||||||
|
<stop stop-color="#00bd6e" offset=".5625"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".57812"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".59375"/>
|
||||||
|
<stop stop-color="#00bb6c" offset=".60938"/>
|
||||||
|
<stop stop-color="#00ba6c" offset=".625"/>
|
||||||
|
<stop stop-color="#00b96b" offset=".64062"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".65625"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".67188"/>
|
||||||
|
<stop stop-color="#00b76a" offset=".6875"/>
|
||||||
|
<stop stop-color="#00b66a" offset=".70312"/>
|
||||||
|
<stop stop-color="#00b569" offset=".71875"/>
|
||||||
|
<stop stop-color="#00b569" offset=".73438"/>
|
||||||
|
<stop stop-color="#00b468" offset=".75"/>
|
||||||
|
<stop stop-color="#00b368" offset=".76562"/>
|
||||||
|
<stop stop-color="#00b268" offset=".78125"/>
|
||||||
|
<stop stop-color="#00b267" offset=".79688"/>
|
||||||
|
<stop stop-color="#00b167" offset=".8125"/>
|
||||||
|
<stop stop-color="#00b066" offset=".82812"/>
|
||||||
|
<stop stop-color="#00b066" offset=".84375"/>
|
||||||
|
<stop stop-color="#00af66" offset=".85938"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".875"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".89062"/>
|
||||||
|
<stop stop-color="#00ad64" offset=".90625"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".92188"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".9375"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".95312"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".96875"/>
|
||||||
|
<stop stop-color="#00aa63" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<clipPath id="clip-9">
|
||||||
|
<path d="m2824 2976h869v1045h-869z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-10">
|
||||||
|
<path d="m3322.7 2976.7-3.0899 74.84-165.87-10.387-41.148 161.11-160.18-44.68-73.812 149-53.859-28.25 341.85 742.63 142.23-382.79 383.28 141.05z"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-11">
|
||||||
|
<path d="m3322.7 2976.7-3.0899 74.84-165.87-10.387-41.148 161.11-160.18-44.68-73.812 149-53.859-28.25 341.85 742.63 142.23-382.79 383.28 141.05-369.4-802.52"/>
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient id="linear-pattern-3" x1="4.44e-16" x2="1" gradientTransform="matrix(867.36 0 0 867.36 2824.7 3498.9)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#00dc7f" offset="0"/>
|
||||||
|
<stop stop-color="#00dc7f" offset=".015625"/>
|
||||||
|
<stop stop-color="#00db7f" offset=".03125"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".046875"/>
|
||||||
|
<stop stop-color="#00da7e" offset=".0625"/>
|
||||||
|
<stop stop-color="#00d97d" offset=".078125"/>
|
||||||
|
<stop stop-color="#00d87d" offset=".09375"/>
|
||||||
|
<stop stop-color="#00d77c" offset=".10938"/>
|
||||||
|
<stop stop-color="#00d67c" offset=".125"/>
|
||||||
|
<stop stop-color="#00d57b" offset=".14062"/>
|
||||||
|
<stop stop-color="#00d47b" offset=".15625"/>
|
||||||
|
<stop stop-color="#00d37a" offset=".17188"/>
|
||||||
|
<stop stop-color="#00d27a" offset=".1875"/>
|
||||||
|
<stop stop-color="#00d179" offset=".20312"/>
|
||||||
|
<stop stop-color="#00d079" offset=".21875"/>
|
||||||
|
<stop stop-color="#00cf78" offset=".23438"/>
|
||||||
|
<stop stop-color="#00ce78" offset=".25"/>
|
||||||
|
<stop stop-color="#00ce77" offset=".26562"/>
|
||||||
|
<stop stop-color="#00cd76" offset=".28125"/>
|
||||||
|
<stop stop-color="#00cc76" offset=".29688"/>
|
||||||
|
<stop stop-color="#00cb75" offset=".3125"/>
|
||||||
|
<stop stop-color="#00ca75" offset=".32812"/>
|
||||||
|
<stop stop-color="#00c974" offset=".34375"/>
|
||||||
|
<stop stop-color="#00c874" offset=".35938"/>
|
||||||
|
<stop stop-color="#00c773" offset=".375"/>
|
||||||
|
<stop stop-color="#00c673" offset=".39062"/>
|
||||||
|
<stop stop-color="#00c672" offset=".40625"/>
|
||||||
|
<stop stop-color="#00c572" offset=".42188"/>
|
||||||
|
<stop stop-color="#00c472" offset=".4375"/>
|
||||||
|
<stop stop-color="#00c371" offset=".45312"/>
|
||||||
|
<stop stop-color="#00c271" offset=".46875"/>
|
||||||
|
<stop stop-color="#00c170" offset=".48438"/>
|
||||||
|
<stop stop-color="#00c070" offset=".5"/>
|
||||||
|
<stop stop-color="#00c06f" offset=".51562"/>
|
||||||
|
<stop stop-color="#00bf6f" offset=".53125"/>
|
||||||
|
<stop stop-color="#00be6e" offset=".54688"/>
|
||||||
|
<stop stop-color="#00bd6e" offset=".5625"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".57812"/>
|
||||||
|
<stop stop-color="#00bc6d" offset=".59375"/>
|
||||||
|
<stop stop-color="#00bb6c" offset=".60938"/>
|
||||||
|
<stop stop-color="#00ba6c" offset=".625"/>
|
||||||
|
<stop stop-color="#00b96b" offset=".64062"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".65625"/>
|
||||||
|
<stop stop-color="#00b86b" offset=".67188"/>
|
||||||
|
<stop stop-color="#00b76a" offset=".6875"/>
|
||||||
|
<stop stop-color="#00b66a" offset=".70312"/>
|
||||||
|
<stop stop-color="#00b569" offset=".71875"/>
|
||||||
|
<stop stop-color="#00b569" offset=".73438"/>
|
||||||
|
<stop stop-color="#00b468" offset=".75"/>
|
||||||
|
<stop stop-color="#00b368" offset=".76562"/>
|
||||||
|
<stop stop-color="#00b268" offset=".78125"/>
|
||||||
|
<stop stop-color="#00b267" offset=".79688"/>
|
||||||
|
<stop stop-color="#00b167" offset=".8125"/>
|
||||||
|
<stop stop-color="#00b066" offset=".82812"/>
|
||||||
|
<stop stop-color="#00b066" offset=".84375"/>
|
||||||
|
<stop stop-color="#00af66" offset=".85938"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".875"/>
|
||||||
|
<stop stop-color="#00ae65" offset=".89062"/>
|
||||||
|
<stop stop-color="#00ad64" offset=".90625"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".92188"/>
|
||||||
|
<stop stop-color="#00ac64" offset=".9375"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".95312"/>
|
||||||
|
<stop stop-color="#00ab63" offset=".96875"/>
|
||||||
|
<stop stop-color="#00aa63" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(-1307.9 -979)" clip-path="url(#clip-0)">
|
||||||
|
<g clip-path="url(#clip-1)">
|
||||||
|
<g clip-path="url(#clip-2)">
|
||||||
|
<path d="m1331.3 979v2324.8h2337.4v-2324.8z" fill="url(#linear-pattern-0)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-1307.9 -979)" clip-path="url(#clip-3)">
|
||||||
|
<g clip-path="url(#clip-4)">
|
||||||
|
<g clip-path="url(#clip-5)">
|
||||||
|
<path d="m1582.6 1224v1834.9h1834.9v-1834.9z" fill="url(#linear-pattern-1)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-1307.9 -979)" clip-path="url(#clip-6)">
|
||||||
|
<g clip-path="url(#clip-7)">
|
||||||
|
<g clip-path="url(#clip-8)">
|
||||||
|
<path d="m1307.9 2977.6v1043.4h867.85v-1043.4z" fill="url(#linear-pattern-2)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-1307.9 -979)" clip-path="url(#clip-9)">
|
||||||
|
<g clip-path="url(#clip-10)">
|
||||||
|
<g clip-path="url(#clip-11)">
|
||||||
|
<path d="m2824.7 2976.7v1044.3h867.36v-1044.3z" fill="url(#linear-pattern-3)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 18 KiB |
10
img/expired.svg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg width="57.841mm" height="38.756mm" version="1.1" viewBox="0 0 57.841 38.756" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g transform="translate(-24.853 -58.124)">
|
||||||
|
<g transform="rotate(-24.597 53.773 77.502)" stroke-linejoin="bevel">
|
||||||
|
<text x="33.416759" y="81.154991" fill="#ff0000" font-family="'Latin Modern Sans'" font-size="9.8778px" stroke="#ff0000" stroke-width=".265" xml:space="preserve"><tspan x="33.416759" y="81.154991" font-size="9.8778px" stroke-width=".265">EXPIRED</tspan></text>
|
||||||
|
<rect x="26.563" y="69.646" width="54.421" height="15.711" fill="none" stroke="#f00" stroke-width="2"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 722 B |
BIN
img/fvs-background-print.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
img/fvs-background.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
92
img/fvs-background.svg
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg id="Logo" version="1.1" viewBox="0 0 242.65 153.01" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<style>.cls-1 {
|
||||||
|
letter-spacing: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-2 {
|
||||||
|
letter-spacing: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3 {
|
||||||
|
fill: #004899;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-4 {
|
||||||
|
opacity: .25;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-5 {
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-6 {
|
||||||
|
font-size: 8.6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-6, .cls-7, .cls-8, .cls-9 {
|
||||||
|
fill: #1d1d1b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-6, .cls-10, .cls-11, .cls-9 {
|
||||||
|
font-family: FrutigerLTPro-Light, 'Frutiger LT Pro';
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-12 {
|
||||||
|
clip-path: url(#clippath-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-7, .cls-9 {
|
||||||
|
font-size: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-13 {
|
||||||
|
font-size: 6.87px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-13, .cls-11 {
|
||||||
|
fill: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-8 {
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-14 {
|
||||||
|
font-family: FrutigerLTPro-Bold, 'Frutiger LT Pro';
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-11 {
|
||||||
|
font-size: 7.52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-15 {
|
||||||
|
letter-spacing: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-16 {
|
||||||
|
clip-path: url(#clippath);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-17 {
|
||||||
|
fill: #0074b6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-18 {
|
||||||
|
font-family: FrutigerLTPro-Roman, 'Frutiger LT Pro';
|
||||||
|
}</style>
|
||||||
|
<clipPath id="clippath">
|
||||||
|
<rect class="cls-5" x="118.08" y="4.65" width="121.88" height="42.66"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clippath-1">
|
||||||
|
<rect class="cls-5" x="118.08" y="4.65" width="121.88" height="42.66"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g class="cls-4">
|
||||||
|
<path class="cls-17" d="m145.7 130.48c-0.39-45.04-37.02-81.44-82.16-81.44-18.82 0-36.16 6.33-50.02 16.98 12.37-7.71 26.98-12.18 42.63-12.18 43.2 0 78.47 33.96 80.58 76.63v23.04h8.96v-23.04z"/>
|
||||||
|
<path class="cls-3" d="m54.773 59.359c-1.0697 0.004924-2.1552 0.024922-3.2539 0.060547-20.315 0.65415-38.623 9.2092-51.52 22.76v12.477c12.426-18.743 33.705-31.105 57.881-31.105 13.46 0 26.089 1.1899 36.029 8.8398-10.284-9.6375-23.091-13.105-39.137-13.031z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2 KiB |
BIN
img/logo-fvs.png
Normal file
After Width: | Height: | Size: 40 KiB |
359
img/logo-fvs.svg
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
width="584.53998"
|
||||||
|
height="145.48615"
|
||||||
|
viewBox="0 0 584.53998 145.48614"
|
||||||
|
sodipodi:docname="fvs-logo_vektorisiert_logo.pdf"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs6">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath18">
|
||||||
|
<path
|
||||||
|
d="M 0,198.425 H 566.93 V 0 H 0 Z"
|
||||||
|
id="path16" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview4"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
showgrid="false" />
|
||||||
|
<g
|
||||||
|
id="g10"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Page 1"
|
||||||
|
transform="matrix(1.3333333,0,0,-1.3333333,-79.033195,209.196)">
|
||||||
|
<g
|
||||||
|
id="g12"
|
||||||
|
inkscape:export-filename="logo-fvs.svg"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96">
|
||||||
|
<g
|
||||||
|
id="g14"
|
||||||
|
clip-path="url(#clipPath18)">
|
||||||
|
<g
|
||||||
|
id="g20"
|
||||||
|
transform="translate(226.4463,93.2373)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 1.64,-1.04 3.559,-1.64 6.159,-1.64 3.439,0 6.279,1.76 6.279,5.719 0,5.479 -12.798,6.159 -12.798,13.478 0,4.479 3.919,7.278 8.839,7.278 1.359,0 3.559,-0.199 5.479,-0.919 l -0.44,-2.52 c -1.24,0.68 -3.2,1.04 -5.08,1.04 -2.879,0 -6.039,-1.2 -6.039,-4.799 0,-5.599 12.798,-5.639 12.798,-13.798 0,-5.639 -4.839,-7.878 -9.158,-7.878 -2.72,0 -4.839,0.56 -6.319,1.199 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path22" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g24"
|
||||||
|
transform="translate(255.7246,107.9146)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 h -4.639 v -13.198 c 0,-1.84 0.68,-3.359 2.719,-3.359 0.96,0 1.6,0.2 2.32,0.479 l 0.16,-2.079 c -0.6,-0.24 -1.84,-0.559 -3.08,-0.559 -4.479,0 -4.639,3.079 -4.639,6.799 V 0 h -3.999 v 2.16 h 3.999 v 4.919 l 2.52,0.88 V 2.16 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path26" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g28"
|
||||||
|
transform="translate(272.6836,101.3154)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,3.56 -1.439,7.079 -5.199,7.079 -8.918,7.079 -11.198,3.36 -11.198,0 Z m 1.24,-10.998 c -1.76,-0.72 -4.039,-1.119 -5.919,-1.119 -6.759,0 -9.279,4.558 -9.279,10.678 0,6.238 3.44,10.678 8.599,10.678 C 0.4,9.239 2.76,4.6 2.76,-0.88 v -1.279 h -13.958 c 0,-4.32 2.32,-7.799 6.719,-7.799 1.84,0 4.519,0.76 5.719,1.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path30" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 280.246,110.074 h 2.52 V 89.678 h -2.52 z m 2.52,5.439 h -2.52 v 3.36 h 2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path32" />
|
||||||
|
<g
|
||||||
|
id="g34"
|
||||||
|
transform="translate(289.125,105.2749)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.56 0,3.16 -0.16,4.799 H 2.28 V 1.16 H 2.36 C 3.2,3 4.72,5.279 8.959,5.279 c 5.039,0 6.959,-3.359 6.959,-7.839 v -13.037 h -2.52 V -3.2 c 0,3.84 -1.36,6.32 -4.839,6.32 C 3.96,3.12 2.52,-0.919 2.52,-4.319 V -15.597 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path36" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g38"
|
||||||
|
transform="translate(319.6846,108.3945)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c -4.6,0 -6.039,-4.799 -6.039,-8.519 0,-3.719 1.56,-8.518 6.039,-8.518 4.799,0 6.038,4.559 6.038,8.518 C 6.038,-4.559 4.799,0 0,0 m -8.559,11.278 h 2.52 V -1.76 h 0.08 c 0.359,1 2.359,3.92 6.358,3.92 5.999,0 8.399,-4.479 8.399,-10.679 0,-6.039 -2.799,-10.677 -8.399,-10.677 -2.92,0 -4.999,1.119 -6.358,3.718 h -0.08 v -3.239 h -2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path40" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g42"
|
||||||
|
transform="translate(346.043,101.3154)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,3.56 -1.44,7.079 -5.199,7.079 -3.72,0 -5.999,-3.719 -5.999,-7.079 z m 1.239,-10.998 c -1.76,-0.72 -4.039,-1.119 -5.919,-1.119 -6.758,0 -9.278,4.558 -9.278,10.678 0,6.238 3.439,10.678 8.599,10.678 5.758,0 8.118,-4.639 8.118,-10.119 v -1.279 h -13.957 c 0,-4.32 2.319,-7.799 6.719,-7.799 1.839,0 4.519,0.76 5.718,1.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path44" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 353.604,110.074 h 2.52 V 89.678 h -2.52 z m 2.52,5.439 h -2.52 v 3.36 h 2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path46" />
|
||||||
|
<g
|
||||||
|
id="g48"
|
||||||
|
transform="translate(360.9248,92.6377)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 1.52,-0.761 3.359,-1.28 5.319,-1.28 2.4,0 4.52,1.319 4.52,3.639 0,4.839 -9.799,4.079 -9.799,9.998 0,4.04 3.279,5.56 6.639,5.56 1.08,0 3.24,-0.24 5.039,-0.92 l -0.239,-2.2 c -1.321,0.6 -3.121,0.96 -4.52,0.96 -2.6,0 -4.399,-0.8 -4.399,-3.4 0,-3.798 10.038,-3.319 10.038,-9.998 0,-4.319 -4.039,-5.798 -7.119,-5.798 -1.959,0 -3.919,0.239 -5.719,0.959 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path50" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 376.524,101.836 h 10.038 v -2.76 h -10.038 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path52" />
|
||||||
|
<g
|
||||||
|
id="g54"
|
||||||
|
transform="translate(390.8838,93.2373)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 1.64,-1.04 3.56,-1.64 6.159,-1.64 3.44,0 6.279,1.76 6.279,5.719 0,5.479 -12.798,6.159 -12.798,13.478 0,4.479 3.92,7.278 8.839,7.278 1.359,0 3.559,-0.199 5.479,-0.919 l -0.44,-2.52 c -1.241,0.68 -3.2,1.04 -5.08,1.04 -2.879,0 -6.039,-1.2 -6.039,-4.799 0,-5.599 12.798,-5.639 12.798,-13.798 0,-5.639 -4.839,-7.878 -9.158,-7.878 -2.72,0 -4.84,0.56 -6.319,1.199 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path56" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g58"
|
||||||
|
transform="translate(424.6416,107.355)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c -1.36,0.6 -3,1.04 -4.359,1.04 -4.919,0 -7.679,-3.56 -7.679,-8.519 0,-4.64 2.8,-8.519 7.398,-8.519 1.6,0 3.08,0.361 4.6,0.92 l 0.24,-2.359 c -1.72,-0.601 -3.32,-0.72 -5.239,-0.72 -6.56,0 -9.759,4.999 -9.759,10.678 0,6.279 4.039,10.678 10.078,10.678 2.44,0 4.199,-0.56 4.92,-0.8 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path60" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g62"
|
||||||
|
transform="translate(429.123,119.6729)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 H 2.52 V -13.038 H 2.6 c 1.08,2.24 3.359,3.919 6.359,3.919 5.479,0 6.959,-3.639 6.959,-8.678 v -12.198 h -2.52 v 12.158 c 0,3.519 -0.68,6.559 -4.839,6.559 -4.479,0 -6.039,-4.24 -6.039,-7.799 V -29.995 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path64" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g66"
|
||||||
|
transform="translate(467.2812,94.4766)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,-1.56 0,-3.159 0.159,-4.799 H -2.28 v 3.64 h -0.08 c -0.84,-1.84 -2.36,-4.119 -6.599,-4.119 -5.039,0 -6.959,3.359 -6.959,7.838 v 13.038 h 2.52 V 3.2 c 0,-3.84 1.36,-6.319 4.839,-6.319 4.599,0 6.039,4.039 6.039,7.438 V 15.598 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path68" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 473.603,119.673 h 2.52 V 89.678 h -2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path70" />
|
||||||
|
<g
|
||||||
|
id="g72"
|
||||||
|
transform="translate(494.9209,101.3154)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,3.56 -1.44,7.079 -5.199,7.079 -3.72,0 -5.999,-3.719 -5.999,-7.079 z m 1.239,-10.998 c -1.76,-0.72 -4.039,-1.119 -5.919,-1.119 -6.758,0 -9.278,4.558 -9.278,10.678 0,6.238 3.439,10.678 8.599,10.678 5.758,0 8.118,-4.639 8.118,-10.119 v -1.279 h -13.957 c 0,-4.32 2.319,-7.799 6.719,-7.799 1.839,0 4.519,0.76 5.718,1.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path74" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g76"
|
||||||
|
transform="translate(227.0962,154.8179)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 H 13.278 V -2.4 H 2.759 v -9.958 h 10.039 v -2.4 H 2.759 V -27.916 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path78" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g80"
|
||||||
|
transform="translate(257.4131,138.54)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,3.56 -1.439,7.079 -5.199,7.079 -8.918,7.079 -11.198,3.36 -11.198,0 Z m 1.24,-10.998 c -1.76,-0.72 -4.039,-1.119 -5.919,-1.119 -6.759,0 -9.279,4.558 -9.279,10.678 0,6.238 3.44,10.678 8.599,10.678 C 0.4,9.239 2.76,4.6 2.76,-0.88 v -1.279 h -13.958 c 0,-4.32 2.32,-7.799 6.719,-7.799 1.84,0 4.519,0.76 5.719,1.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path82" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g84"
|
||||||
|
transform="translate(265.0156,142.7397)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,2.24 0,3.08 -0.16,4.559 H 2.359 V 0.64 h 0.08 c 0.92,2.279 2.64,4.399 5.24,4.399 0.599,0 1.319,-0.12 1.759,-0.24 V 2.16 c -0.52,0.159 -1.2,0.239 -1.839,0.239 -4,0 -5.079,-4.479 -5.079,-8.158 V -15.837 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path86" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g88"
|
||||||
|
transform="translate(285.9736,128.582)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 4.479,0 6.039,4.799 6.039,8.519 0,3.719 -1.56,8.518 -6.039,8.518 -4.799,0 -6.039,-4.559 -6.039,-8.518 C -6.039,4.56 -4.799,0 0,0 M 8.559,-1.68 H 6.039 V 1.56 H 5.959 C 4.6,-1.04 2.52,-2.159 -0.399,-2.159 c -5.6,0 -8.399,4.638 -8.399,10.678 0,6.199 2.4,10.678 8.399,10.678 3.999,0 5.999,-2.92 6.358,-3.92 h 0.08 v 13.038 h 2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path90" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 300.655,147.299 h 2.52 v -20.396 h -2.52 z m 2.52,5.439 h -2.52 v 3.36 h 2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path92" />
|
||||||
|
<g
|
||||||
|
id="g94"
|
||||||
|
transform="translate(309.5742,142.4995)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.56 0,3.16 -0.16,4.799 H 2.28 V 1.16 H 2.36 C 3.2,3 4.72,5.279 8.959,5.279 c 5.039,0 6.959,-3.359 6.959,-7.839 v -13.037 h -2.52 V -3.2 c 0,3.84 -1.36,6.32 -4.839,6.32 C 3.96,3.12 2.52,-0.919 2.52,-4.319 V -15.597 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path96" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g98"
|
||||||
|
transform="translate(343.333,137.1807)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 h -0.72 c -4.359,0 -9.558,-0.44 -9.558,-4.919 0,-2.68 1.92,-3.68 4.239,-3.68 5.919,0 6.039,5.16 6.039,7.359 z M 0.24,-6.999 H 0.16 c -1.12,-2.439 -3.96,-3.759 -6.479,-3.759 -5.799,0 -6.719,3.919 -6.719,5.759 0,6.839 7.279,7.158 12.558,7.158 H 0 v 1.04 c 0,3.48 -1.24,5.239 -4.64,5.239 -2.119,0 -4.119,-0.48 -5.999,-1.679 v 2.439 c 1.56,0.76 4.2,1.4 5.999,1.4 5.039,0 7.16,-2.28 7.16,-7.598 v -8.999 c 0,-1.64 0,-2.88 0.2,-4.279 H 0.24 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path100" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g102"
|
||||||
|
transform="translate(351.8945,142.4995)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.56 0,3.16 -0.16,4.799 H 2.28 V 1.16 H 2.36 C 3.2,3 4.72,5.279 8.959,5.279 c 5.039,0 6.959,-3.359 6.959,-7.839 v -13.037 h -2.52 V -3.2 c 0,3.84 -1.36,6.32 -4.839,6.32 C 3.96,3.12 2.52,-0.919 2.52,-4.319 V -15.597 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path104" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g106"
|
||||||
|
transform="translate(381.7725,128.582)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 4.479,0 6.039,4.799 6.039,8.519 0,3.719 -1.56,8.518 -6.039,8.518 -4.799,0 -6.039,-4.559 -6.039,-8.518 C -6.039,4.56 -4.799,0 0,0 M 8.559,-1.68 H 6.039 V 1.56 H 5.959 C 4.6,-1.04 2.52,-2.159 -0.399,-2.159 c -5.6,0 -8.399,4.638 -8.399,10.678 0,6.199 2.4,10.678 8.399,10.678 3.999,0 5.999,-2.92 6.358,-3.92 h 0.08 v 13.038 h 2.52 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path108" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 394.935,139.061 h 10.038 v -2.76 h -10.038 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path110" />
|
||||||
|
<g
|
||||||
|
id="g112"
|
||||||
|
transform="translate(416.8926,126.9023)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 h -2.96 l -6.918,20.396 h 2.759 L -1.479,2.76 h 0.08 L 4.52,20.396 h 2.639 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path114" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g116"
|
||||||
|
transform="translate(435.5723,128.582)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 4.399,0 6.759,3.8 6.759,8.519 0,4.719 -2.36,8.518 -6.759,8.518 -4.399,0 -6.759,-3.799 -6.759,-8.518 C -6.759,3.8 -4.399,0 0,0 m 0,19.197 c 6.599,0 9.519,-5.119 9.519,-10.678 C 9.519,2.96 6.599,-2.159 0,-2.159 c -6.599,0 -9.519,5.119 -9.519,10.678 0,5.559 2.92,10.678 9.519,10.678"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path118" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g120"
|
||||||
|
transform="translate(449.8936,142.4995)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.56 0,3.16 -0.16,4.799 H 2.28 V 1.16 H 2.36 C 3.2,3 4.72,5.279 8.959,5.279 c 5.039,0 6.959,-3.359 6.959,-7.839 v -13.037 h -2.52 V -3.2 c 0,3.84 -1.36,6.32 -4.839,6.32 C 3.96,3.12 2.52,-0.919 2.52,-4.319 V -15.597 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path122" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 470.653,139.061 h 10.038 v -2.76 h -10.038 z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path124" />
|
||||||
|
<g
|
||||||
|
id="g126"
|
||||||
|
transform="translate(229.6782,68.959)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 h 2.555 c 2.836,0 6.091,1.085 6.091,4.48 0,3.991 -2.835,4.236 -6.161,4.236 L 0,8.716 Z m -2.416,10.816 h 6.301 c 4.341,0 7.176,-1.855 7.176,-6.336 0,-3.15 -2.415,-5.25 -5.425,-5.635 v -0.07 c 1.96,-0.245 2.38,-1.296 3.15,-2.94 l 4.165,-9.451 h -2.66 L 6.756,-5.355 C 5.355,-2.205 4.305,-2.1 1.995,-2.1 H 0 v -11.516 h -2.416 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path128" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g130"
|
||||||
|
transform="translate(255.6768,65.5293)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,3.115 -1.26,6.195 -4.55,6.195 -7.806,6.195 -9.801,2.939 -9.801,0 Z m 1.085,-9.626 c -1.54,-0.631 -3.535,-0.98 -5.18,-0.98 -5.916,0 -8.121,3.99 -8.121,9.345 0,5.461 3.01,9.346 7.526,9.346 5.04,0 7.106,-4.06 7.106,-8.856 v -1.12 H -9.801 c 0,-3.78 2.03,-6.826 5.881,-6.826 1.61,0 3.955,0.665 5.005,1.331 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path132" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g134"
|
||||||
|
transform="translate(275.2871,59.543)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,-1.365 0,-2.765 0.14,-4.2 h -2.135 v 3.185 h -0.07 C -2.8,-2.625 -4.13,-4.62 -7.841,-4.62 c -4.41,0 -6.091,2.94 -6.091,6.86 v 11.411 h 2.206 V 2.801 c 0,-3.361 1.19,-5.531 4.235,-5.531 4.026,0 5.286,3.536 5.286,6.51 v 9.871 H 0 Z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path136" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g138"
|
||||||
|
transform="translate(288.5166,71.3047)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 h -4.061 v -11.552 c 0,-1.609 0.595,-2.94 2.38,-2.94 0.841,0 1.401,0.176 2.031,0.421 l 0.14,-1.821 c -0.525,-0.21 -1.61,-0.49 -2.695,-0.49 -3.921,0 -4.061,2.695 -4.061,5.95 V 0 h -3.5 v 1.89 h 3.5 v 4.305 l 2.205,0.771 V 1.89 H 0 Z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path140" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 292.471,81.596 h 2.205 V 55.343 h -2.205 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path142" />
|
||||||
|
<path
|
||||||
|
d="m 300.24,73.194 h 2.205 V 55.342 h -2.205 z m 2.205,4.761 h -2.205 v 2.94 h 2.205 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path144" />
|
||||||
|
<g
|
||||||
|
id="g146"
|
||||||
|
transform="translate(307.3584,68.9941)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.365 0,2.766 -0.141,4.2 H 1.995 V 1.016 H 2.064 C 2.8,2.625 4.13,4.62 7.841,4.62 c 4.41,0 6.09,-2.939 6.09,-6.86 V -13.651 H 11.726 V -2.8 c 0,3.361 -1.19,5.53 -4.236,5.53 -4.025,0 -5.285,-3.535 -5.285,-6.51 v -9.871 H 0 Z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path148" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g150"
|
||||||
|
transform="translate(332.0215,57.2334)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 3.99,0 5.425,3.78 5.425,7.035 0,4.306 -1.26,7.456 -5.285,7.456 -4.201,0 -5.286,-3.99 -5.286,-7.456 C -5.146,3.535 -3.746,0 0,0 m 7.631,-0.421 c 0,-4.97 -2.24,-9.03 -8.366,-9.03 -2.346,0 -4.481,0.665 -5.391,0.945 l 0.175,2.205 c 1.365,-0.7 3.325,-1.261 5.251,-1.261 5.67,0 6.16,4.131 6.16,9.171 H 5.391 c -1.191,-2.589 -3.151,-3.5 -5.426,-3.5 -5.706,0 -7.527,4.971 -7.527,8.926 0,5.426 2.101,9.346 7.352,9.346 2.38,0 3.92,-0.315 5.565,-2.45 h 0.07 v 2.03 h 2.206 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path152" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g154"
|
||||||
|
transform="translate(355.8564,65.5293)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c 0,3.115 -1.26,6.195 -4.551,6.195 -3.255,0 -5.25,-3.256 -5.25,-6.195 z m 1.085,-9.626 c -1.54,-0.631 -3.535,-0.98 -5.181,-0.98 -5.915,0 -8.12,3.99 -8.12,9.345 0,5.461 3.01,9.346 7.526,9.346 5.041,0 7.105,-4.06 7.105,-8.856 v -1.12 H -9.801 c 0,-3.78 2.03,-6.826 5.881,-6.826 1.609,0 3.955,0.665 5.005,1.331 z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path156" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g158"
|
||||||
|
transform="translate(362.4707,68.9941)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0,1.365 0,2.766 -0.141,4.2 H 1.995 V 1.016 H 2.064 C 2.8,2.625 4.13,4.62 7.841,4.62 c 4.41,0 6.09,-2.939 6.09,-6.86 V -13.651 H 11.726 V -2.8 c 0,3.361 -1.19,5.53 -4.236,5.53 -4.025,0 -5.285,-3.535 -5.285,-6.51 v -9.871 H 0 Z"
|
||||||
|
style="fill:#7b7979;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path160" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g162"
|
||||||
|
transform="translate(215.5942,77.291)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c -0.373,42.708 -35.103,77.213 -77.896,77.213 -17.846,0 -34.288,-6.005 -47.424,-16.099 11.73,7.314 25.579,11.545 40.42,11.545 40.96,0 74.399,-32.194 76.398,-72.659 h 0.003 v -21.842 h 8.496 V 0 Z"
|
||||||
|
style="fill:#1e76bd;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path164" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g166"
|
||||||
|
transform="translate(215.5942,77.291)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 c -0.373,42.708 -35.103,77.213 -77.896,77.213 -17.846,0 -34.288,-6.005 -47.424,-16.099 11.73,7.314 25.579,11.545 40.42,11.545 40.96,0 74.399,-32.194 76.398,-72.659 h 0.003 v -21.842 h 8.496 V 0 Z"
|
||||||
|
style="fill:#1e76bd;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path168" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g170"
|
||||||
|
transform="translate(59.2749,78.2412)">
|
||||||
|
<path
|
||||||
|
d="M 0,0 C 0.321,36.744 30.221,65.239 67.019,66.431 83.69,66.971 96.809,63.877 107.208,54.13 97.779,61.379 85.813,62.513 73.044,62.513 37.804,62.513 9.035,34.814 7.315,0 H 7.312 V -22.792 H 0.002 V 0 Z"
|
||||||
|
style="fill:#2350a9;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path172" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 20 KiB |
21
img/pdf.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg width="20.797mm" height="26.283mm" version="1.1" viewBox="0 0 20.797 26.283" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g transform="translate(-63.038 -58.201)">
|
||||||
|
<g stroke="#000" stroke-linejoin="bevel">
|
||||||
|
<g transform="scale(.26458)" stroke-width="1.1339" style="shape-inside:url(#rect1153);white-space:pre" aria-label="PDF">
|
||||||
|
<path d="m265.46 264.51q0 2.8646-1.8763 4.5547-1.862 1.6901-5.0703 1.6901h-5.9297v7.8633h-2.7357v-20.181h8.4935q3.3945 0 5.2565 1.5898 1.862 1.5898 1.862 4.4831zm-2.75 0.0286q0-3.9102-4.6979-3.9102h-5.4284v7.9635h5.543q4.5833 0 4.5833-4.0534z"/>
|
||||||
|
<path d="m286.79 268.32q0 3.1224-1.2174 5.4714-1.2174 2.3346-3.4518 3.5807-2.2344 1.2461-5.1562 1.2461h-7.5482v-20.181h6.6745q5.1276 0 7.9062 2.5781 2.793 2.5638 2.793 7.3047zm-2.75 0q0-3.7526-2.0625-5.7148-2.0482-1.9766-5.944-1.9766h-3.8815v15.798h4.4974q2.22 0 3.8958-0.97396 1.6901-0.97396 2.5924-2.8073 0.90234-1.8333 0.90234-4.3255z"/>
|
||||||
|
<path d="m293.33 260.67v7.5052h11.258v2.263h-11.258v8.1784h-2.7357v-20.181h14.337v2.2344z"/>
|
||||||
|
</g>
|
||||||
|
<g fill="none">
|
||||||
|
<path d="m63.173 58.336h15.276l0.06465 4.7379 5.1867 0.01478v21.26h-20.527z" stroke-width=".27044"/>
|
||||||
|
<g>
|
||||||
|
<path d="m78.401 58.352 5.3203 4.8185" stroke-width=".30481"/>
|
||||||
|
<path d="m78.455 75.585c0 6.7506 0.05315 6.8569 0.05315 6.8569l1.4883-1.7541" stroke-width=".3"/>
|
||||||
|
<path d="m78.573 82.446-1.5107-1.7317" stroke-width=".31226"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
124
img/signature_invalid.svg
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="96.13533mm"
|
||||||
|
height="94.877541mm"
|
||||||
|
viewBox="0 0 96.13533 94.877541"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7665"
|
||||||
|
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||||
|
sodipodi:docname="signature_invalid.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7667"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.77593294"
|
||||||
|
inkscape:cx="54.772775"
|
||||||
|
inkscape:cy="384.05381"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1007"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs7662" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-17.060923,-47.014737)">
|
||||||
|
<path
|
||||||
|
id="path3711"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:1.3;stroke-linejoin:bevel"
|
||||||
|
d="M 103.88364,81.737777 C 101.70703,117.23919 86.668467,131.53336 67.113368,141.3109 56.158263,134.0075 42.683138,124.18407 35.3831,104.88466 c 0,0 20.560162,-10.183303 31.730269,-11.198763 14.552088,-1.32292 36.770271,-11.94812 36.770271,-11.94812 z"
|
||||||
|
sodipodi:nodetypes="cccsc" />
|
||||||
|
<path
|
||||||
|
id="path2727"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:1.3;stroke-linejoin:bevel;stroke-opacity:1"
|
||||||
|
d="m 35.402832,95.775157 c -3.278408,-8.66727 -5.311399,-19.24574 -5.311399,-32.36542 15.874985,0 37.041667,-15.875 37.041667,-15.875 0,0 21.166687,15.875 37.04167,15.875 0,3.2231 -0.092,6.29284 -0.2714,9.21854 0,0 -18.249433,9.30229 -36.770272,11.94812 -11.103441,1.58621 -31.730266,11.19876 -31.730266,11.19876 z"
|
||||||
|
sodipodi:nodetypes="cccccsc" />
|
||||||
|
<g
|
||||||
|
aria-label="signature invalid "
|
||||||
|
transform="matrix(0.25062977,-0.08478829,0.08478829,0.25062977,-78.594817,-91.949623)"
|
||||||
|
id="text3804"
|
||||||
|
style="font-size:85.3333px;font-family:'Latin Modern Sans';-inkscape-font-specification:'Latin Modern Sans';white-space:pre;shape-inside:url(#rect3806);display:inline;stroke-width:4.91339;stroke-linejoin:bevel">
|
||||||
|
<path
|
||||||
|
d="m 162.10423,786.27864 q 0,6.54166 -5.375,10.29166 -5.33333,3.70833 -14.79166,3.70833 -9.29166,0 -14.24999,-2.91666 -4.91667,-2.95833 -6.54167,-9.16667 l 10.29166,-1.54166 q 0.875,3.20833 3,4.54166 2.16667,1.33334 7.5,1.33334 4.91666,0 7.16666,-1.25 2.25,-1.25 2.25,-3.91667 0,-2.16666 -1.83333,-3.41666 -1.79167,-1.29167 -6.125,-2.16667 -9.91666,-1.95833 -13.37499,-3.625 -3.45833,-1.70833 -5.29167,-4.375 -1.79166,-2.70833 -1.79166,-6.62499 0,-6.45833 4.95833,-10.04167 5,-3.62499 14.12499,-3.62499 8.04167,0 12.91666,3.12499 4.91667,3.125 6.125,9.04167 l -10.37499,1.08333 q -0.5,-2.75 -2.45834,-4.08333 -1.95833,-1.375 -6.20833,-1.375 -4.16666,0 -6.24999,1.08333 -2.08334,1.04167 -2.08334,3.54167 0,1.95833 1.58334,3.125 1.625,1.125 5.41666,1.875 5.29167,1.08333 9.375,2.24999 4.125,1.125 6.58333,2.70834 2.5,1.58333 3.95833,4.08333 1.5,2.45833 1.5,6.33333 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7579" />
|
||||||
|
<path
|
||||||
|
d="m 171.56256,746.23699 v -8.625 h 11.70833 v 8.625 z m 0,53.20831 v -45.08331 h 11.70833 v 45.08331 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7581" />
|
||||||
|
<path
|
||||||
|
d="m 214.14587,817.52863 q -8.25,0 -13.29166,-3.16667 -5,-3.125 -6.16667,-8.95833 l 11.70833,-1.375 q 0.625,2.70833 2.66667,4.25 2.08333,1.54167 5.41666,1.54167 4.875,0 7.125,-3 2.25,-3 2.25,-8.91667 v -2.37499 l 0.0833,-4.45834 h -0.0833 q -3.875,8.29167 -14.49999,8.29167 -7.875,0 -12.20833,-5.91667 -4.33333,-5.91666 -4.33333,-16.91666 0,-11.04166 4.45833,-17.04166 4.45833,-5.99999 12.95833,-5.99999 9.83332,0 13.62499,8.12499 h 0.20833 q 0,-1.45833 0.16667,-3.95833 0.20833,-2.5 0.41667,-3.29166 h 11.08332 q -0.25,4.49999 -0.25,10.41666 v 33.29165 q 0,9.625 -5.45833,14.54166 -5.45833,4.91667 -15.87499,4.91667 z m 9.79166,-41.24999 q 0,-6.95833 -2.5,-10.83333 -2.45833,-3.91666 -7.04166,-3.91666 -9.375,0 -9.375,14.99999 0,14.70833 9.29167,14.70833 4.66666,0 7.12499,-3.875 2.5,-3.91666 2.5,-11.08333 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7583" />
|
||||||
|
<path
|
||||||
|
d="m 276.60418,799.4453 v -25.29166 q 0,-11.87499 -8.04167,-11.87499 -4.25,0 -6.87499,3.66666 -2.58334,3.625 -2.58334,9.33333 v 24.16666 h -11.70832 v -34.99999 q 0,-3.62499 -0.125,-5.91666 -0.0833,-2.33333 -0.20834,-4.16666 h 11.16666 q 0.125,0.79166 0.33334,4.24999 0.20833,3.41667 0.20833,4.70834 h 0.16667 q 2.375,-5.16667 5.95833,-7.5 3.58333,-2.33333 8.54166,-2.33333 7.16666,0 11,4.41666 3.83333,4.41667 3.83333,12.91666 v 28.62499 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7585" />
|
||||||
|
<path
|
||||||
|
d="m 309.9375,800.27863 q -6.54166,0 -10.20833,-3.54166 -3.66666,-3.58333 -3.66666,-10.04166 0,-7 4.54166,-10.66667 4.58333,-3.66666 13.25,-3.75 l 9.70833,-0.16666 v -2.29167 q 0,-4.41666 -1.54167,-6.54166 -1.54167,-2.16667 -5.04166,-2.16667 -3.25,0 -4.79167,1.5 -1.5,1.45833 -1.875,4.875 l -12.20833,-0.58333 q 1.125,-6.58333 6,-9.95833 4.91667,-3.41667 13.375,-3.41667 8.54166,0 13.16666,4.20833 4.62499,4.20834 4.62499,11.95833 v 16.41666 q 0,3.79167 0.83334,5.25 0.875,1.41667 2.875,1.41667 1.33333,0 2.58333,-0.25 v 6.33333 q -1.04167,0.25 -1.875,0.45833 -0.83333,0.20833 -1.66667,0.33333 -0.83333,0.125 -1.79166,0.20834 -0.91667,0.0833 -2.16667,0.0833 -4.41666,0 -6.54166,-2.16667 -2.08333,-2.16666 -2.5,-6.37499 h -0.25 q -4.91667,8.87499 -14.83333,8.87499 z m 13.625,-21.70832 -6,0.0833 q -4.08333,0.16667 -5.79167,0.91667 -1.70833,0.70833 -2.62499,2.20833 -0.875,1.5 -0.875,4 0,3.20833 1.45833,4.79166 1.5,1.54167 3.95833,1.54167 2.75,0 5,-1.5 2.29166,-1.5 3.58333,-4.125 1.29167,-2.66666 1.29167,-5.625 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7587" />
|
||||||
|
<path
|
||||||
|
d="m 358.52081,800.1953 q -5.16666,0 -7.95833,-2.79167 -2.79166,-2.83333 -2.79166,-8.54166 v -26.58332 h -5.70833 v -7.91666 h 6.29166 l 3.66667,-10.58333 h 7.33333 v 10.58333 h 8.54166 v 7.91666 h -8.54166 v 23.41666 q 0,3.29166 1.25,4.87499 1.25,1.54167 3.875,1.54167 1.37499,0 3.91666,-0.58333 v 7.24999 q -4.33333,1.41667 -9.875,1.41667 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7589" />
|
||||||
|
<path
|
||||||
|
d="m 386.43747,754.36199 v 25.29165 q 0,11.875 8,11.875 4.25,0 6.83333,-3.625 2.625,-3.66667 2.625,-9.375 v -24.16665 h 11.70833 v 34.99998 q 0,5.75 0.33333,10.08333 H 404.7708 q -0.5,-6 -0.5,-8.95833 h -0.20834 q -2.33333,5.125 -5.95833,7.45833 -3.58333,2.33333 -8.54166,2.33333 -7.16666,0 -11,-4.375 -3.83333,-4.41666 -3.83333,-12.91666 v -28.62498 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7591" />
|
||||||
|
<path
|
||||||
|
d="m 427.52078,799.4453 v -34.49999 q 0,-3.70833 -0.125,-6.16666 -0.0833,-2.5 -0.20833,-4.41666 h 11.16666 q 0.125,0.75 0.33333,4.58333 0.20833,3.79166 0.20833,5.04166 h 0.16667 q 1.70833,-4.75 3.04167,-6.66666 1.33333,-1.95833 3.16666,-2.875 1.83333,-0.95833 4.58333,-0.95833 2.25,0 3.625,0.625 v 9.79166 q -2.83333,-0.625 -5,-0.625 -4.37499,0 -6.83333,3.54166 -2.41666,3.54167 -2.41666,10.5 v 22.12499 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7593" />
|
||||||
|
<path
|
||||||
|
d="m 479.18742,800.27863 q -10.16667,0 -15.625,-5.99999 -5.45833,-6.04167 -5.45833,-17.58333 0,-11.16666 5.54167,-17.16666 5.54166,-6 15.70832,-6 9.70833,0 14.83333,6.45833 5.125,6.41667 5.125,18.83333 v 0.33333 h -28.91666 q 0,6.58333 2.41667,9.95833 2.45833,3.33333 6.95833,3.33333 6.20833,0 7.83333,-5.37499 l 11.04166,0.95833 q -4.79166,12.24999 -19.45832,12.24999 z m 0,-39.37498 q -4.125,0 -6.375,2.875 -2.20833,2.875 -2.33333,8.04166 h 17.49999 q -0.33333,-5.45833 -2.625,-8.16666 -2.29166,-2.75 -6.16666,-2.75 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7595" />
|
||||||
|
<path
|
||||||
|
d="m 169.14589,855.48455 v -8.625 h 11.70833 v 8.625 z m 0,53.20831 v -45.08332 h 11.70833 v 45.08332 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7597" />
|
||||||
|
<path
|
||||||
|
d="M 222.06254,908.69286 V 883.4012 q 0,-11.87499 -8.04167,-11.87499 -4.25,0 -6.87499,3.66666 -2.58334,3.625 -2.58334,9.33333 v 24.16666 h -11.70833 v -34.99999 q 0,-3.625 -0.125,-5.91666 -0.0833,-2.33333 -0.20833,-4.16667 h 11.16666 q 0.125,0.79167 0.33334,4.25 0.20833,3.41667 0.20833,4.70833 h 0.16667 q 2.375,-5.16666 5.95833,-7.49999 3.58333,-2.33334 8.54166,-2.33334 7.16666,0 11,4.41667 3.83333,4.41666 3.83333,12.91666 v 28.62499 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7599" />
|
||||||
|
<path
|
||||||
|
d="m 269.47918,908.69286 h -13.99999 l -16.125,-45.08332 h 12.375 l 7.87499,25.20833 q 0.625,2.08333 2.95834,10.41666 0.41666,-1.70833 1.70833,-6 1.29166,-4.29166 9.58333,-29.62499 h 12.24999 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7601" />
|
||||||
|
<path
|
||||||
|
d="m 302.85417,909.52619 q -6.54167,0 -10.20833,-3.54166 -3.66667,-3.58334 -3.66667,-10.04167 0,-6.99999 4.54167,-10.66666 4.58333,-3.66666 13.24999,-3.75 l 9.70833,-0.16666 v -2.29167 q 0,-4.41666 -1.54167,-6.54166 -1.54166,-2.16667 -5.04166,-2.16667 -3.25,0 -4.79167,1.5 -1.5,1.45833 -1.87499,4.875 l -12.20833,-0.58333 q 1.125,-6.58333 5.99999,-9.95833 4.91667,-3.41667 13.375,-3.41667 8.54166,0 13.16666,4.20833 4.625,4.20833 4.625,11.95833 v 16.41666 q 0,3.79167 0.83333,5.25 0.875,1.41666 2.875,1.41666 1.33333,0 2.58333,-0.25 v 6.33334 q -1.04166,0.25 -1.875,0.45833 -0.83333,0.20833 -1.66666,0.33333 -0.83334,0.125 -1.79167,0.20834 -0.91667,0.0833 -2.16666,0.0833 -4.41667,0 -6.54167,-2.16667 -2.08333,-2.16666 -2.5,-6.37499 h -0.25 q -4.91666,8.87499 -14.83332,8.87499 z m 13.62499,-21.70832 -6,0.0833 q -4.08333,0.16667 -5.79166,0.91667 -1.70833,0.70833 -2.625,2.20833 -0.875,1.5 -0.875,4 0,3.20833 1.45833,4.79166 1.5,1.54167 3.95833,1.54167 2.75,0 5,-1.5 2.29167,-1.5 3.58333,-4.125 1.29167,-2.66666 1.29167,-5.625 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7603" />
|
||||||
|
<path
|
||||||
|
d="m 339.89582,908.69286 v -61.83331 h 11.70832 v 61.83331 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7605" />
|
||||||
|
<path
|
||||||
|
d="m 363.60414,855.48455 v -8.625 h 11.70833 v 8.625 z m 0,53.20831 v -45.08332 h 11.70833 v 45.08332 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7607" />
|
||||||
|
<path
|
||||||
|
d="m 416.52078,908.69286 q -0.16667,-0.625 -0.41667,-3.125 -0.20833,-2.54167 -0.20833,-4.20833 h -0.16667 q -3.79166,8.16666 -14.41666,8.16666 -7.875,0 -12.16666,-6.125 -4.29167,-6.16666 -4.29167,-17.20832 0,-11.20833 4.5,-17.29166 4.54167,-6.125 12.83333,-6.125 4.79167,0 8.25,2 3.5,2 5.375,5.95833 h 0.0833 l -0.0833,-7.41666 v -16.45833 h 11.70832 v 51.99998 q 0,4.16666 0.33334,9.83333 z m -0.54167,-22.79166 q 0,-7.29166 -2.45833,-11.20833 -2.41667,-3.95833 -7.16666,-3.95833 -4.70834,0 -7,3.83333 -2.29167,3.79167 -2.29167,11.625 0,15.33333 9.20833,15.33333 4.625,0 7.16667,-4.04167 2.54166,-4.08333 2.54166,-11.58333 z"
|
||||||
|
style="font-weight:bold;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="path7609" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
27
index.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
require __DIR__ . '/config/config.php';
|
||||||
|
|
||||||
|
use Jumbojett\OpenIDConnectClient;
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
$oidc = new OpenIDConnectClient($CONFIG['oidc']['url'],
|
||||||
|
$CONFIG['oidc']['clientid'],
|
||||||
|
$CONFIG['oidc']['secret']);
|
||||||
|
$oidc->setRedirectURL($CONFIG['baseurl'] . 'callback.php');
|
||||||
|
|
||||||
|
// check if user is logged in
|
||||||
|
if (isset($_SESSION['id_token'])) {
|
||||||
|
header('Location: card.php');
|
||||||
|
/*echo "Willkommen,";
|
||||||
|
echo '<br><a href="card.php">Ausweis anzeigen</a>';
|
||||||
|
echo '<br><a href="card.php?pdf=true" download="schuelerausweis.pdf">Ausweis download (pdf)</a>';
|
||||||
|
echo '<br><a href="logout.php">Abmelden</a>';*/
|
||||||
|
} else {
|
||||||
|
// redirect to keycloak login
|
||||||
|
$oidc->authenticate();
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
6
logout.php
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
session_destroy();
|
||||||
|
header('Location: index.php');
|
||||||
|
exit();
|
||||||
|
?>
|
51
qrcode.php
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
|
||||||
|
use Endroid\QrCode\QrCode;
|
||||||
|
use Endroid\QrCode\Writer\PngWriter;
|
||||||
|
|
||||||
|
use Endroid\QrCode\Color\Color;
|
||||||
|
use Endroid\QrCode\Encoding\Encoding;
|
||||||
|
use Endroid\QrCode\ErrorCorrectionLevel;
|
||||||
|
use Endroid\QrCode\Label\Label;
|
||||||
|
use Endroid\QrCode\Logo\Logo;
|
||||||
|
use Endroid\QrCode\RoundBlockSizeMode;
|
||||||
|
use Endroid\QrCode\Writer\ValidationException;
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if (isset($_SESSION['id_token'])) {
|
||||||
|
$url = $_SESSION['url'];
|
||||||
|
} elseif (isset($_GET['url'])) {
|
||||||
|
$url = $_GET['url'];
|
||||||
|
} else {
|
||||||
|
header('Location: index.php');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// create QR-Code
|
||||||
|
//$qrCode = new QrCode($url);
|
||||||
|
$qrCode = new QrCode(
|
||||||
|
data: $url,
|
||||||
|
// encoding: new Encoding('UTF-8'),
|
||||||
|
// errorCorrectionLevel: ErrorCorrectionLevel::Low,
|
||||||
|
// size: 300,
|
||||||
|
margin: 0,
|
||||||
|
roundBlockSizeMode: RoundBlockSizeMode::Enlarge,
|
||||||
|
// foregroundColor: new Color(0, 0, 0),
|
||||||
|
// backgroundColor: new Color(255, 255, 255)
|
||||||
|
);
|
||||||
|
//$qrCode->setSize(300); // Größe des QR-Codes
|
||||||
|
//$qrCode->setMargin(0); // Rand um den QR-Code
|
||||||
|
|
||||||
|
// generate QR-Code as png
|
||||||
|
$writer = new PngWriter();
|
||||||
|
$result = $writer->write($qrCode);
|
||||||
|
|
||||||
|
// set header
|
||||||
|
header('Content-Type: '.$result->getMimeType());
|
||||||
|
header('Content-Disposition: inline; filename="qrcode.png"');
|
||||||
|
|
||||||
|
// output QR-Code
|
||||||
|
echo $result->getString();
|
||||||
|
?>
|
81
verify.php
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/config/config.php';
|
||||||
|
|
||||||
|
function print_error_and_exit($error) {
|
||||||
|
// delete data content
|
||||||
|
$data = array();
|
||||||
|
include('idcard.php');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// load keys
|
||||||
|
$private_key = file_get_contents('keys/private_key.bin');
|
||||||
|
$public_key = file_get_contents('keys/public_key.bin');
|
||||||
|
$keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
|
||||||
|
sodium_crypto_sign_ed25519_sk_to_curve25519($private_key),
|
||||||
|
sodium_crypto_sign_ed25519_pk_to_curve25519($public_key));
|
||||||
|
|
||||||
|
if ( !isset($_GET['v']) || $_GET['v'] === '0.1') {
|
||||||
|
$message_json = $_GET['d'];
|
||||||
|
$message = json_decode($message_json, true);
|
||||||
|
$message['signature'] = sodium_base642bin($message['signature'], SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
if (! sodium_crypto_sign_verify_detached($message['signature'], $message['verify'] . $message['data'], $public_key )) {
|
||||||
|
$verified = false;
|
||||||
|
print_error_and_exit('signature invalid');
|
||||||
|
}
|
||||||
|
if (! $message['data'] = sodium_crypto_box_seal_open(sodium_base642bin($message['data'], SODIUM_BASE64_VARIANT_URLSAFE), $keypair)) {
|
||||||
|
$error = true;
|
||||||
|
print_error_and_exit('unable to decrypt');
|
||||||
|
};
|
||||||
|
$data = json_decode($message['data'],true);
|
||||||
|
} elseif ($_GET['v'] === '0.2') {
|
||||||
|
$message_encoded = $_GET['d'];
|
||||||
|
try {
|
||||||
|
$message_signed = sodium_base642bin($message_encoded, SODIUM_BASE64_VARIANT_URLSAFE);
|
||||||
|
} catch (Exception) {
|
||||||
|
$error = false;
|
||||||
|
print_error_and_exit('encoding invalid');
|
||||||
|
}
|
||||||
|
if (! $message_encrypted = sodium_crypto_sign_open($message_signed, $public_key )) {
|
||||||
|
$verified = false;
|
||||||
|
print_error_and_exit('signature invalid');
|
||||||
|
}
|
||||||
|
if (! $message = sodium_crypto_box_seal_open($message_encrypted, $keypair)) {
|
||||||
|
$error = true;
|
||||||
|
print_error_and_exit('unable to decrypt');
|
||||||
|
};
|
||||||
|
$data = json_decode($message,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$verified = true;
|
||||||
|
$ldap_conn = ldap_connect($CONFIG['ldap']['url']);
|
||||||
|
if (!$ldap_conn) {
|
||||||
|
die('Could not conntect to ldap server');
|
||||||
|
}
|
||||||
|
if (!ldap_bind($ldap_conn, $CONFIG['ldap']['bind_user'], $CONFIG['ldap']['bind_passwd'])) {
|
||||||
|
die("Could not bind to LDAP server.");
|
||||||
|
}
|
||||||
|
if ($data['id'] && $data['id'] != '---') {
|
||||||
|
$filter = sprintf($CONFIG['ldap']['filter_id'], ldap_escape($data['id'],null, LDAP_ESCAPE_FILTER));
|
||||||
|
} else {
|
||||||
|
$filter = sprintf($CONFIG['ldap']['filter_name'],
|
||||||
|
ldap_escape($data['firstname'],null, LDAP_ESCAPE_FILTER),
|
||||||
|
ldap_escape($data['lastname'],null, LDAP_ESCAPE_FILTER),
|
||||||
|
ldap_escape($data['birthdate'],null, LDAP_ESCAPE_FILTER));
|
||||||
|
}
|
||||||
|
$search_result = ldap_search($ldap_conn, $CONFIG['ldap']['base_dn'], $filter);
|
||||||
|
if (!$search_result) {
|
||||||
|
die("LDAP search failed.");
|
||||||
|
}
|
||||||
|
$entries = ldap_get_entries($ldap_conn, $search_result);
|
||||||
|
if ($entries['count']) {
|
||||||
|
$valid = true;
|
||||||
|
} else {
|
||||||
|
$valid = false;
|
||||||
|
// delete data content
|
||||||
|
$data = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
include('idcard.php');
|
||||||
|
?>
|