NEW FEATURE: added webhooks

This commit is contained in:
Jeroen De Meerleer 2023-01-16 12:45:27 +01:00
parent 12205ad18e
commit 2a7c2a5ca3
Signed by: JeroenED
GPG Key ID: 28CCCB8F62BFADD6
12 changed files with 881 additions and 1966 deletions

View File

@ -8,7 +8,7 @@ framework:
crowdin:
dsn: '%env(CROWDIN_DSN)%'
domains: ['messages']
locales: ['en', 'nl', 'leet', 'lol']
locales: ['en', 'nl', 'leet']
# loco:
# dsn: '%env(LOCO_DSN)%'
# lokalise:

View File

@ -34,6 +34,13 @@ login:
path: '/{_locale}/login'
controller: App\Controller\UserController::loginAction
webhook:
path: '/hook/{id}/{token}'
controller: App\Controller\JobController::hookAction
requirements:
id: \d+
token: '[A-Za-z0-9]+'
job_index:
path: '/{_locale}/job'
controller: App\Controller\JobController::defaultAction

View File

@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use App\Entity\Job;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpKernel\KernelInterface;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version1003 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
$allJobs = $this->connection->executeQuery('SELECT * FROM job')->fetchAllAssociative();
foreach($allJobs as $job) {
$data = json_decode($job['data'], true);
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
$length = 32;
for ($i = 0; $i < $length; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$data['hooktoken'] = $randomString;
$this->addSql('UPDATE job SET data = "' . addSlashes(json_encode($data)) . '" WHERE id = ' . $job['id']);
}
}
public function down(Schema $schema): void
{
$allJobs = $this->connection->executeQuery('SELECT * FROM job')->fetchAllAssociative();
foreach($allJobs as $job) {
$data = json_decode($job['data'], true);
unset($data['hooktoken']);
$this->addSql('UPDATE job SET data = "' . addSlashes(json_encode($data)) . '" WHERE id = ' . $job['id']);
}
}
}

View File

@ -111,4 +111,15 @@ class JobController extends AbstractController
}
return new JsonResponse(['success'=>false, 'message' => 'Your request is invalid'], Response::HTTP_BAD_REQUEST);
}
public function hookAction(Request $request, ManagerRegistry $doctrine, int $id, string $token)
{
$jobRepo = $doctrine->getRepository(Job::class);
$job = $jobRepo->find($id);
if(!empty($job->getToken()) && $job->getToken() == $token && $job->getRunning() != 1) {
return new JsonResponse($jobRepo->run($job, false, time()));
}
return new JsonResponse(['success'=>false, 'message' => 'Your request is invalid'], Response::HTTP_BAD_REQUEST);
}
}

View File

@ -259,4 +259,29 @@ class Job
return $this;
}
public function getToken(): string
{
return $this->getData('hooktoken') ?? '';
}
public function deleteToken(): Job
{
$this->removeData('hooktoken');
return $this;
}
public function addToken(): Job
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
$length = 32;
for ($i = 0; $i < $length; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$this->setData('hooktoken', $randomString);
return $this;
}
}

View File

@ -2,252 +2,252 @@
{% block title %}{{ "job.add.title" | trans }}{% endblock %}
{% block content %}
<h2>{{ "job.add.header" | trans }}</h2>
<form method="post" class="form-horizontal" enctype="multipart/form-data" action="{{ path('job_add') }}">
<form method="post" class="form-horizontal" enctype="multipart/form-data" action="{{ path('job_add') }}">
<h3>{{ "job.addedit.generalinfo.header" | trans }}</h3>
<h3>{{ "job.addedit.generalinfo.header" | trans }}</h3>
<div class="mb-3">
<label for="name">{{ "job.addedit.generalinfo.name.label" | trans }}</label>
<input type="text" name="name" class="form-control" id="name" placeholder="{{ "job.addedit.generalinfo.name.placeholder" | trans }}">
<small id="name-help" class="form-text text-muted">{{ "job.addedit.generalinfo.name.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="name">{{ "job.addedit.generalinfo.interval.label" | trans }}</label>
<div class="input-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="intervalButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.generalinfo.interval.patterns.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="intervalButton">
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="60">{{ "job.addedit.generalinfo.interval.patterns.minute" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="3600">{{ "job.addedit.generalinfo.interval.patterns.hour" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="86400">{{ "job.addedit.generalinfo.interval.patterns.day" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="604800">{{ "job.addedit.generalinfo.interval.patterns.week" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="2419200">{{ "job.addedit.generalinfo.interval.patterns.4week" | trans }}</a></li>
</ul>
<input type="number" class="form-control" id="interval" name="interval">
</div>
</div>
<div class="mb-3">
<label for="nextrun">{{ "job.addedit.generalinfo.nextrun.label" | trans }}</label>
<input type="text" autocomplete="off" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" placeholder="{{ date() | date("d/m/Y H:i:s")}}" step="1" id="nextrunselector" class="form-control datetimepicker-input" data-target="#nextrunselector" data-bs-toggle="datetimepicker" name="nextrun">
</div>
<div class="mb-3">
<label for="lastrun">{{ "job.addedit.generalinfo.lastrun.label" | trans }}</label>
<div class="input-group">
<div class="input-group-text border-end-0">
<input type="checkbox" name="lastrun-eternal" class="lastrun-eternal" placeholder="value" value="true">
</div>
<span class="input-group-text border-start-0">{{ "job.addedit.generalinfo.lastrun.eternal.label" | trans }}</span>
<input type="text" autocomplete="off" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" placeholder="{{ date() | date("d/m/Y H:i:s")}}" data-placeholder="{{ date() | date("d/m/Y H:i:s")}}" id="lastrunselector" class="form-control datetimepicker-input" data-target="#lastrunselector" data-bs-toggle="datetimepicker" name="lastrun">
</div>
</div>
<div class="mb-3">
<label for="retention">{{ "job.addedit.generalinfo.retention.label" | trans }}</label>
<input type="number" name="retention" class="form-control" id="retention" placeholder="{{ "job.addedit.generalinfo.retention.placeholder" | trans }}">
<small id="retention-help" class="form-text text-muted">{{ "job.addedit.generalinfo.retention.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="fail-pct">{{ "job.addedit.generalinfo.failpercentage.label" | trans }}</label>
<div class="input-group d-flex">
<div class="range-value range-value-fail-pct pe-1">50%</div>
<div class="range-input ps-1 flex-grow-1">
<input type="range" name="fail-pct" class="form-range range-input-fail-pct" id="fail-pct" max="100" step="5" value="50">
</div>
</div>
</div>
<div class="mb-3">
<label for="fail-days">{{ "job.addedit.generalinfo.faildays.label" | trans }}</label>
<input type="number" name="fail-days" class="form-control" id="fail-days" placeholder="{{ "job.addedit.generalinfo.faildays.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="retention">{{ "job.addedit.generalinfo.hostlabel.label" | trans }}</label>
<input type="text" name="hostlabel" class="form-control" id="hostlabel" placeholder="{{ "job.addedit.generalinfo.hostlabel.placeholder" | trans }}">
<small id="hostlabel-help" class="form-text text-muted">{{ "job.addedit.generalinfo.hostlabel.helptext" | trans }}</small>
</div>
<h3>{{ "job.addedit.jobdetails.header" | trans }}</h3>
<div class="mb-3 btn-group croncategory-selector">
<div class="dropdown croncategory-group crontype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="crontypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.crontype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="crontypeButton">
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="command">{{ "job.addedit.crontype.command.label" | trans }}</a></li>
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="reboot">{{ "job.addedit.crontype.reboot.label" | trans }}</a></li>
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="http">{{ "job.addedit.crontype.http.label" | trans }}</a></li>
</ul>
</div>
<div class="dropdown croncategory-group d-none hosttype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="hosttypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.hosttype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="hosttypeButton">
<li><a class="dropdown-item hosttype-item" href="javascript:void(0);" data-type="local">{{ "job.addedit.hosttype.local.label" | trans }}</a></li>
<li><a class="dropdown-item hosttype-item" href="javascript:void(0);" data-type="ssh">{{ "job.addedit.hosttype.ssh.label" | trans }}</a></li>
</ul>
</div>
<div class="dropdown croncategory-group d-none containertype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="containertypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.containertype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="containertypeButton">
<li><a class="dropdown-item containertype-item" href="javascript:void(0);" data-type="none">{{ "job.addedit.containertype.none.label" | trans }}</a></li>
<li><a class="dropdown-item containertype-item" href="javascript:void(0);" data-type="docker">{{ "job.addedit.containertype.docker.label" | trans }}</a></li>
</ul>
</div>
</div>
<div class="crontype-command crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.command.label" | trans }}</h4>
<div class="mb-3">
<label for="command">{{ "job.addedit.crontype.command.command.label" | trans }}</label>
<input type="text" name="command" class="form-control" id="command" placeholder="{{ "job.addedit.crontype.command.command.placeholder" | trans }}">
<label for="name">{{ "job.addedit.generalinfo.name.label" | trans }}</label>
<input type="text" name="name" class="form-control" id="name" placeholder="{{ "job.addedit.generalinfo.name.placeholder" | trans }}">
<small id="name-help" class="form-text text-muted">{{ "job.addedit.generalinfo.name.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="response">{{ "job.addedit.crontype.command.response.label" | trans }}</label>
<input type="text" name="response" class="form-control" id="response" placeholder="{{ "job.addedit.crontype.command.response.placeholder" | trans }}">
</div>
</div>
<div class="crontype-reboot crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.reboot.header" | trans }}</h4>
<div class="mb-3">
<label for="reboot-command">{{ "job.addedit.crontype.reboot.reboot.command.label" | trans }}</label>
<input type="text" name="reboot-command" class="form-control" id="reboot-command" placeholder="{{ "job.addedit.crontype.reboot.reboot.command.placeholder" | trans }}">
<small id="reboot-command-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.command.placeholder" | trans }}</small>
</div>
<div class="mb-3">
<label for="getservices-command">{{ "job.addedit.crontype.reboot.getservices.command.label" | trans }}</label>
<input type="text" name="getservices-command" class="form-control" id="getservices-command" placeholder="{{ "job.addedit.crontype.reboot.getservices.command.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="getservices-response">{{ "job.addedit.crontype.reboot.getservices.response.label" | trans }}</label>
<input type="text" name="getservices-response" class="form-control" id="getservices-response" placeholder="{{ "job.addedit.crontype.reboot.getservices.response.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="reboot-delay">{{ "job.addedit.crontype.reboot.reboot.delay.label" | trans }}</label>
<input type="number" name="reboot-delay" class="form-control" placeholder="{{ "job.addedit.crontype.reboot.reboot.delay.placeholder" | trans }}">
<small id="reboot-delay-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.delay.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="reboot-duration">{{ "job.addedit.crontype.reboot.reboot.duration.label" | trans }}</label>
<input type="number" name="reboot-duration" class="form-control" placeholder="{{ "job.addedit.crontype.reboot.reboot.duration.placeholder" | trans }}">
<small id="reboot-duration-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.duration.helptext" | trans }}</small>
</div>
</div>
<div class="crontype-http crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.http.header" | trans }}</h4>
<div class="mb-3">
<label for="url">{{ "job.addedit.crontype.http.url.label" | trans }}</label>
<input type="text" name="url" class="form-control" id="url" placeholder="{{ "job.addedit.crontype.http.url.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="basicauth-username">{{ "job.addedit.crontype.http.basic-auth.username.label" | trans }}</label>
<input type="text" name="basicauth-username" class="form-control" id="basicauth-username" placeholder="{{ "job.addedit.crontype.http.basic-auth.username.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="basicauth-password">{{ "job.addedit.crontype.http.basic-auth.password.label" | trans }}</label>
<input type="password" name="basicauth-password" class="form-control" placeholder="{{ "job.addedit.crontype.http.basic-auth.password.placeholder" | trans }}">
<small id="basicauth-password-help" class="form-text text-muted">{{ "job.addedit.crontype.http.basic-auth.password.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="http-status">{{ "job.addedit.crontype.http.response.label" | trans }}</label>
<input type="text" name="http-status" class="form-control" id="http-status" placeholder="{{ "job.addedit.crontype.http.response.placeholder" | trans }}">
</div>
</div>
<div class="hosttype-local hosttype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.hosttype.local.header" | trans }}</h4>
<h5>{{ "job.addedit.hosttype.local.nodetails" | trans }}</h5>
</div>
<div class="hosttype-ssh hosttype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.hosttype.ssh.header" | trans }}</h4>
<div class="mb-3">
<label for="host">{{ "job.addedit.hosttype.ssh.hostname.label" | trans }}</label>
<input type="text" name="host" class="form-control" id="host" placeholder="{{ "job.addedit.hosttype.ssh.hostname.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="user">{{ "job.addedit.hosttype.ssh.username.label" | trans }}</label>
<input type="text" name="user" class="form-control" id="user" placeholder="{{ "job.addedit.hosttype.ssh.username.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="privkey">{{ "job.addedit.hosttype.ssh.privatekey.label" | trans }}</label>
<label for="name">{{ "job.addedit.generalinfo.interval.label" | trans }}</label>
<div class="input-group">
<input type="file" class="form-control" id="privkey" class="form-control" name="privkey">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="intervalButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.generalinfo.interval.patterns.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="intervalButton">
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="60">{{ "job.addedit.generalinfo.interval.patterns.minute" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="3600">{{ "job.addedit.generalinfo.interval.patterns.hour" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="86400">{{ "job.addedit.generalinfo.interval.patterns.day" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="604800">{{ "job.addedit.generalinfo.interval.patterns.week" | trans }}</a></li>
<li><a class="dropdown-item intervalpattern-item" href="javascript:void(0);" data-time="2419200">{{ "job.addedit.generalinfo.interval.patterns.4week" | trans }}</a></li>
</ul>
<input type="number" class="form-control" id="interval" name="interval">
</div>
<small id="custom-file-help" class="form-text text-muted">{{ "job.addedit.hosttype.ssh.privatekey.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="privkey-password">{{ "job.addedit.hosttype.ssh.passphrase.label" | trans }}</label>
<input type="password" name="privkey-password" class="form-control" placeholder="{{ "job.addedit.hosttype.ssh.passphrase.placeholder" | trans }}">
<small id="privkey-password-help" class="form-text text-muted">{{ "job.addedit.hosttype.ssh.passphrase.helptext" | trans }}</small>
</div>
</div>
<div class="containertype-none containertype-inputs croncategory-inputs d-none">
</div>
<div class="containertype-docker containertype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.containertype.docker.header" | trans }}</h4>
<div class="mb-3">
<label for="service">{{ "job.addedit.containertype.docker.service.label" | trans }}</label>
<input type="text" name="service" class="form-control" id="service" placeholder="{{ "job.addedit.containertype.docker.service.placeholder" | trans }}">
<label for="nextrun">{{ "job.addedit.generalinfo.nextrun.label" | trans }}</label>
<input type="text" autocomplete="off" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" placeholder="{{ date() | date("d/m/Y H:i:s")}}" step="1" id="nextrunselector" class="form-control datetimepicker-input" data-target="#nextrunselector" data-bs-toggle="datetimepicker" name="nextrun">
</div>
<div class="mb-3">
<label for="user">{{ "job.addedit.containertype.docker.username.label" | trans }}</label>
<input type="text" name="container-user" class="form-control" id="container-user" placeholder="{{ "job.addedit.containertype.docker.username.placeholder" | trans }}">
<label for="lastrun">{{ "job.addedit.generalinfo.lastrun.label" | trans }}</label>
<div class="input-group">
<div class="input-group-text border-end-0">
<input type="checkbox" name="lastrun-eternal" class="lastrun-eternal" placeholder="value" value="true">
</div>
<span class="input-group-text border-start-0">{{ "job.addedit.generalinfo.lastrun.eternal.label" | trans }}</span>
<input type="text" autocomplete="off" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" placeholder="{{ date() | date("d/m/Y H:i:s")}}" data-placeholder="{{ date() | date("d/m/Y H:i:s")}}" id="lastrunselector" class="form-control datetimepicker-input" data-target="#lastrunselector" data-bs-toggle="datetimepicker" name="lastrun">
</div>
</div>
</div>
<h3>{{ "job.addedit.variables.header" | trans }}</h3>
<div class="vars mb-3">
<div class="input-group var-group d-none">
<span class="input-group-text border-end-0">
<input type="checkbox" name="var-issecret[0]" class="var-issecret" placeholder="value" value="true">
</span>
<span class="input-group-text border-start-0">{{ "job.addedit.variables.secret.label" | trans }}</span>
<input type="text" name="var-id[0]" class="form-control var-id" placeholder="{{ "job.addedit.variables.name.placeholder" | trans }}">
<input type="text" name="var-value[0]" class="form-control var-value" placeholder="{{ "job.addedit.variables.value.placeholder" | trans }}">
<div class="mb-3">
<label for="retention">{{ "job.addedit.generalinfo.retention.label" | trans }}</label>
<input type="number" name="retention" class="form-control" id="retention" placeholder="{{ "job.addedit.generalinfo.retention.placeholder" | trans }}">
<small id="retention-help" class="form-text text-muted">{{ "job.addedit.generalinfo.retention.helptext" | trans }}</small>
</div>
</div>
<div class="vars-description mb-3 d-none">
<p>
{{ "job.addedit.variables.helptext" | trans }}
</p>
</div>
<div class="mb-3">
<a href="javascript:void(0);" class="btn btn-outline-primary addvar-btn">{{ "job.addedit.variables.add.label" | trans }}</a>
</div>
<div class="mb-3">
<label for="fail-pct">{{ "job.addedit.generalinfo.failpercentage.label" | trans }}</label>
<div class="input-group d-flex">
<div class="range-value range-value-fail-pct pe-1">50%</div>
<div class="range-input ps-1 flex-grow-1">
<input type="range" name="fail-pct" class="form-range range-input-fail-pct" id="fail-pct" max="100" step="5" value="50">
</div>
</div>
</div>
<input type="hidden" name="crontype" class="crontype" value="">
<input type="hidden" name="hosttype" class="hosttype" value="">
<input type="hidden" name="containertype" class="containertype" value="">
<button type="submit" class="btn btn-outline-primary">{{ "job.addedit.submit.label" | trans }}</button>
</form>
<div class="mb-3">
<label for="fail-days">{{ "job.addedit.generalinfo.faildays.label" | trans }}</label>
<input type="number" name="fail-days" class="form-control" id="fail-days" placeholder="{{ "job.addedit.generalinfo.faildays.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="retention">{{ "job.addedit.generalinfo.hostlabel.label" | trans }}</label>
<input type="text" name="hostlabel" class="form-control" id="hostlabel" placeholder="{{ "job.addedit.generalinfo.hostlabel.placeholder" | trans }}">
<small id="hostlabel-help" class="form-text text-muted">{{ "job.addedit.generalinfo.hostlabel.helptext" | trans }}</small>
</div>
<h3>{{ "job.addedit.jobdetails.header" | trans }}</h3>
<div class="mb-3 btn-group croncategory-selector">
<div class="dropdown croncategory-group crontype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="crontypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.crontype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="crontypeButton">
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="command">{{ "job.addedit.crontype.command.label" | trans }}</a></li>
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="reboot">{{ "job.addedit.crontype.reboot.label" | trans }}</a></li>
<li><a class="dropdown-item crontype-item" href="javascript:void(0);" data-type="http">{{ "job.addedit.crontype.http.label" | trans }}</a></li>
</ul>
</div>
<div class="dropdown croncategory-group d-none hosttype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="hosttypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.hosttype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="hosttypeButton">
<li><a class="dropdown-item hosttype-item" href="javascript:void(0);" data-type="local">{{ "job.addedit.hosttype.local.label" | trans }}</a></li>
<li><a class="dropdown-item hosttype-item" href="javascript:void(0);" data-type="ssh">{{ "job.addedit.hosttype.ssh.label" | trans }}</a></li>
</ul>
</div>
<div class="dropdown croncategory-group d-none containertype-group">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="containertypeButton" data-default-text="" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ "job.addedit.containertype.label" | trans }}
</button>
<ul class="dropdown-menu" aria-labelledby="containertypeButton">
<li><a class="dropdown-item containertype-item" href="javascript:void(0);" data-type="none">{{ "job.addedit.containertype.none.label" | trans }}</a></li>
<li><a class="dropdown-item containertype-item" href="javascript:void(0);" data-type="docker">{{ "job.addedit.containertype.docker.label" | trans }}</a></li>
</ul>
</div>
</div>
<div class="crontype-command crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.command.label" | trans }}</h4>
<div class="mb-3">
<label for="command">{{ "job.addedit.crontype.command.command.label" | trans }}</label>
<input type="text" name="command" class="form-control" id="command" placeholder="{{ "job.addedit.crontype.command.command.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="response">{{ "job.addedit.crontype.command.response.label" | trans }}</label>
<input type="text" name="response" class="form-control" id="response" placeholder="{{ "job.addedit.crontype.command.response.placeholder" | trans }}">
</div>
</div>
<div class="crontype-reboot crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.reboot.header" | trans }}</h4>
<div class="mb-3">
<label for="reboot-command">{{ "job.addedit.crontype.reboot.reboot.command.label" | trans }}</label>
<input type="text" name="reboot-command" class="form-control" id="reboot-command" placeholder="{{ "job.addedit.crontype.reboot.reboot.command.placeholder" | trans }}">
<small id="reboot-command-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.command.placeholder" | trans }}</small>
</div>
<div class="mb-3">
<label for="getservices-command">{{ "job.addedit.crontype.reboot.getservices.command.label" | trans }}</label>
<input type="text" name="getservices-command" class="form-control" id="getservices-command" placeholder="{{ "job.addedit.crontype.reboot.getservices.command.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="getservices-response">{{ "job.addedit.crontype.reboot.getservices.response.label" | trans }}</label>
<input type="text" name="getservices-response" class="form-control" id="getservices-response" placeholder="{{ "job.addedit.crontype.reboot.getservices.response.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="reboot-delay">{{ "job.addedit.crontype.reboot.reboot.delay.label" | trans }}</label>
<input type="number" name="reboot-delay" class="form-control" placeholder="{{ "job.addedit.crontype.reboot.reboot.delay.placeholder" | trans }}">
<small id="reboot-delay-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.delay.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="reboot-duration">{{ "job.addedit.crontype.reboot.reboot.duration.label" | trans }}</label>
<input type="number" name="reboot-duration" class="form-control" placeholder="{{ "job.addedit.crontype.reboot.reboot.duration.placeholder" | trans }}">
<small id="reboot-duration-help" class="form-text text-muted">{{ "job.addedit.crontype.reboot.reboot.duration.helptext" | trans }}</small>
</div>
</div>
<div class="crontype-http crontype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.crontype.http.header" | trans }}</h4>
<div class="mb-3">
<label for="url">{{ "job.addedit.crontype.http.url.label" | trans }}</label>
<input type="text" name="url" class="form-control" id="url" placeholder="{{ "job.addedit.crontype.http.url.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="basicauth-username">{{ "job.addedit.crontype.http.basic-auth.username.label" | trans }}</label>
<input type="text" name="basicauth-username" class="form-control" id="basicauth-username" placeholder="{{ "job.addedit.crontype.http.basic-auth.username.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="basicauth-password">{{ "job.addedit.crontype.http.basic-auth.password.label" | trans }}</label>
<input type="password" name="basicauth-password" class="form-control" placeholder="{{ "job.addedit.crontype.http.basic-auth.password.placeholder" | trans }}">
<small id="basicauth-password-help" class="form-text text-muted">{{ "job.addedit.crontype.http.basic-auth.password.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="http-status">{{ "job.addedit.crontype.http.response.label" | trans }}</label>
<input type="text" name="http-status" class="form-control" id="http-status" placeholder="{{ "job.addedit.crontype.http.response.placeholder" | trans }}">
</div>
</div>
<div class="hosttype-local hosttype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.hosttype.local.header" | trans }}</h4>
<h5>{{ "job.addedit.hosttype.local.nodetails" | trans }}</h5>
</div>
<div class="hosttype-ssh hosttype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.hosttype.ssh.header" | trans }}</h4>
<div class="mb-3">
<label for="host">{{ "job.addedit.hosttype.ssh.hostname.label" | trans }}</label>
<input type="text" name="host" class="form-control" id="host" placeholder="{{ "job.addedit.hosttype.ssh.hostname.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="user">{{ "job.addedit.hosttype.ssh.username.label" | trans }}</label>
<input type="text" name="user" class="form-control" id="user" placeholder="{{ "job.addedit.hosttype.ssh.username.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="privkey">{{ "job.addedit.hosttype.ssh.privatekey.label" | trans }}</label>
<div class="input-group">
<input type="file" class="form-control" id="privkey" class="form-control" name="privkey">
</div>
<small id="custom-file-help" class="form-text text-muted">{{ "job.addedit.hosttype.ssh.privatekey.helptext" | trans }}</small>
</div>
<div class="mb-3">
<label for="privkey-password">{{ "job.addedit.hosttype.ssh.passphrase.label" | trans }}</label>
<input type="password" name="privkey-password" class="form-control" placeholder="{{ "job.addedit.hosttype.ssh.passphrase.placeholder" | trans }}">
<small id="privkey-password-help" class="form-text text-muted">{{ "job.addedit.hosttype.ssh.passphrase.helptext" | trans }}</small>
</div>
</div>
<div class="containertype-none containertype-inputs croncategory-inputs d-none">
</div>
<div class="containertype-docker containertype-inputs croncategory-inputs d-none">
<h4>{{ "job.addedit.containertype.docker.header" | trans }}</h4>
<div class="mb-3">
<label for="service">{{ "job.addedit.containertype.docker.service.label" | trans }}</label>
<input type="text" name="service" class="form-control" id="service" placeholder="{{ "job.addedit.containertype.docker.service.placeholder" | trans }}">
</div>
<div class="mb-3">
<label for="user">{{ "job.addedit.containertype.docker.username.label" | trans }}</label>
<input type="text" name="container-user" class="form-control" id="container-user" placeholder="{{ "job.addedit.containertype.docker.username.placeholder" | trans }}">
</div>
</div>
<h3>{{ "job.addedit.variables.header" | trans }}</h3>
<div class="vars mb-3">
<div class="input-group var-group d-none">
<span class="input-group-text border-end-0">
<input type="checkbox" name="var-issecret[0]" class="var-issecret" placeholder="value" value="true">
</span>
<span class="input-group-text border-start-0">{{ "job.addedit.variables.secret.label" | trans }}</span>
<input type="text" name="var-id[0]" class="form-control var-id" placeholder="{{ "job.addedit.variables.name.placeholder" | trans }}">
<input type="text" name="var-value[0]" class="form-control var-value" placeholder="{{ "job.addedit.variables.value.placeholder" | trans }}">
</div>
</div>
<div class="vars-description mb-3 d-none">
<p>
{{ "job.addedit.variables.helptext" | trans }}
</p>
</div>
<div class="mb-3">
<a href="javascript:void(0);" class="btn btn-outline-primary addvar-btn">{{ "job.addedit.variables.add.label" | trans }}</a>
</div>
<input type="hidden" name="crontype" class="crontype" value="">
<input type="hidden" name="hosttype" class="hosttype" value="">
<input type="hidden" name="containertype" class="containertype" value="">
<button type="submit" class="btn btn-outline-primary">{{ "job.addedit.submit.label" | trans }}</button>
</form>
{% endblock %}

View File

@ -2,6 +2,7 @@
{% block title %}{{ 'job.view.title' | trans({ '_jobname_': job.name }) }}{% endblock %}
{% block content %}
<h2>{{ 'job.view.header' | trans({ '_jobname_': (job.name | parsetags) }) | raw }}</h2>
<p class="text-muted small">{{ 'job.view.webhookurl' | trans }}: {{ url('webhook', {id: job.id, token: job.data('hooktoken') }) }}</p>
<p>
<a href="{{ path('job_edit', { id: job.id }) }}">{{ 'job.view.edit' | trans }}</a>
{% if allruns %} | <a href="{{ path('job_view', { id: job.id })}}">{{ 'job.view.show.onlyfailed' | trans }}</a>

View File

@ -633,6 +633,10 @@
<source>job.index.run.ran.message</source>
<target>Cronjob ran in _runtime_ seconds with exit code _exitcode_</target>
</trans-unit>
<trans-unit id="2mVlLNJ" resname="job.view.webhookurl">
<source>job.view.webhookurl</source>
<target>Webhook URL</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -1,606 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
<header>
<tool tool-id="symfony" tool-name="Symfony"/>
</header>
<body>
<trans-unit id="qvIyBkY" resname="title">
<source>title</source>
<target state="final">Webcron management</target>
</trans-unit>
<trans-unit id="HgWEol2" resname="header">
<source>header</source>
<target state="final">Webcron management</target>
</trans-unit>
<trans-unit id="Q54TzT5" resname="demomode.flashnotice">
<source>demomode.flashnotice</source>
<target state="final">Cette application est en mode démo. Les modifications sont maintenues dans la base de données, mais les tâches ne sont pas exécutées</target>
</trans-unit>
<trans-unit id="rpq61qN" resname="demomode.credentials.header">
<source>demomode.credentials.header</source>
<target state="final">Connexion en mode démo</target>
</trans-unit>
<trans-unit id="jUz9fVE" resname="demomode.credentials.username">
<source>demomode.credentials.username</source>
<target state="final">Utilisateur</target>
</trans-unit>
<trans-unit id="QNu97w_" resname="demomode.credentials.password">
<source>demomode.credentials.password</source>
<target state="final">Mot de passe</target>
</trans-unit>
<trans-unit id="U8IBiON" resname="menu.overview">
<source>menu.overview</source>
<target state="final">Aperçu </target>
</trans-unit>
<trans-unit id="iGC7eCk" resname="menu.add">
<source>menu.add</source>
<target state="final">Ajouter une nouvelle tâche</target>
</trans-unit>
<trans-unit id="4UTsL.X" resname="menu.settings">
<source>menu.settings</source>
<target state="final">Paramètres</target>
</trans-unit>
<trans-unit id="wBTFKFR" resname="menu.logout">
<source>menu.logout</source>
<target state="final">Déconnexion</target>
</trans-unit>
<trans-unit id="4cxyGOO" resname="security.login.username.label">
<source>security.login.username.label</source>
<target state="final">Utilisateur</target>
</trans-unit>
<trans-unit id="u2tKtI1" resname="security.login.username.placeholder">
<source>security.login.username.placeholder</source>
<target state="final">jean@exemple.fr</target>
</trans-unit>
<trans-unit id="Niy_SZ2" resname="security.login.password.label">
<source>security.login.password.label</source>
<target state="final">Mot de passe</target>
</trans-unit>
<trans-unit id="3rU2_6v" resname="security.login.password.placeholder">
<source>security.login.password.placeholder</source>
<target state="final">Paris75000</target>
</trans-unit>
<trans-unit id="0MGdvgf" resname="security.login.remember.label">
<source>security.login.remember.label</source>
<target state="final">Rappele-moi</target>
</trans-unit>
<trans-unit id="4GvZndQ" resname="security.login.submit-btn.label">
<source>security.login.submit-btn.label</source>
<target state="final">Connecter</target>
</trans-unit>
<trans-unit id="W.225Bj" resname="settings.title">
<source>settings.title</source>
<target state="final">Paramètres</target>
</trans-unit>
<trans-unit id="a1bm5YC" resname="settings.header">
<source>settings.header</source>
<target state="final">Paramètres</target>
</trans-unit>
<trans-unit id="aAt4FLV" resname="settings.password.header">
<source>settings.password.header</source>
<target state="final">Mot de passe</target>
</trans-unit>
<trans-unit id="qqAzx9b" resname="settings.password.current.label">
<source>settings.password.current.label</source>
<target state="final">Mot de passe actuel</target>
</trans-unit>
<trans-unit id="rr8bU5t" resname="settings.password.current.placeholder">
<source>settings.password.current.placeholder</source>
<target state="final">Paris75000</target>
</trans-unit>
<trans-unit id="YVhGwqr" resname="settings.password.password.label">
<source>settings.password.password.label</source>
<target state="final">Nouveau mot de passe</target>
</trans-unit>
<trans-unit id="OZpjE9T" resname="settings.password.password.placeholder">
<source>settings.password.password.placeholder</source>
<target state="final">Nice06000</target>
</trans-unit>
<trans-unit id="TNBtpD_" resname="settings.password.repeat.label">
<source>settings.password.repeat.label</source>
<target state="final">Confirmer mot de passe</target>
</trans-unit>
<trans-unit id="bYb7Tz." resname="settings.password.repeat.placeholder">
<source>settings.password.repeat.placeholder</source>
<target state="final">Nice06000</target>
</trans-unit>
<trans-unit id="QH_iTBI" resname="job.index.run.deferred.title">
<source>job.index.run.deferred.title</source>
<target>__job.index.run.deferred.title</target>
</trans-unit>
<trans-unit id="QqC.rDo" resname="job.index.run.deferred.message">
<source>job.index.run.deferred.message</source>
<target>__job.index.run.deferred.message</target>
</trans-unit>
<trans-unit id="0DypXnU" resname="job.index.run.ran.title.success">
<source>job.index.run.ran.title.success</source>
<target>__job.index.run.ran.title.success</target>
</trans-unit>
<trans-unit id="7wkhcjy" resname="job.index.run.ran.title.failed">
<source>job.index.run.ran.title.failed</source>
<target>__job.index.run.ran.title.failed</target>
</trans-unit>
<trans-unit id="W_dAs4D" resname="job.index.run.ran.message">
<source>job.index.run.ran.message</source>
<target>__job.index.run.ran.message</target>
</trans-unit>
<trans-unit id="g7pEpsB" resname="footer.title">
<source>footer.title</source>
<target>__footer.title</target>
</trans-unit>
<trans-unit id="Lz7YjVX" resname="footer.source">
<source>footer.source</source>
<target>__footer.source</target>
</trans-unit>
<trans-unit id="0eRDYaC" resname="job.index.title">
<source>job.index.title</source>
<target>__job.index.title</target>
</trans-unit>
<trans-unit id="J.7dT3_" resname="job.index.header">
<source>job.index.header</source>
<target>__job.index.header</target>
</trans-unit>
<trans-unit id="T0URP45" resname="job.index.table.headers.name">
<source>job.index.table.headers.name</source>
<target>__job.index.table.headers.name</target>
</trans-unit>
<trans-unit id="vNWgxUJ" resname="job.index.table.headers.host">
<source>job.index.table.headers.host</source>
<target>__job.index.table.headers.host</target>
</trans-unit>
<trans-unit id="1YQJCGW" resname="job.index.table.headers.interval">
<source>job.index.table.headers.interval</source>
<target>__job.index.table.headers.interval</target>
</trans-unit>
<trans-unit id="mZ.gLJq" resname="job.index.table.headers.nextrun">
<source>job.index.table.headers.nextrun</source>
<target>__job.index.table.headers.nextrun</target>
</trans-unit>
<trans-unit id="X.uZ4TL" resname="job.index.run.selecttime.header">
<source>job.index.run.selecttime.header</source>
<target>__job.index.run.selecttime.header</target>
</trans-unit>
<trans-unit id="i4An5BC" resname="job.index.run.selecttime.description">
<source>job.index.run.selecttime.description</source>
<target>__job.index.run.selecttime.description</target>
</trans-unit>
<trans-unit id="tav8v0S" resname="job.index.run.selecttime.btnschedule.label">
<source>job.index.run.selecttime.btnschedule.label</source>
<target>__job.index.run.selecttime.btnschedule.label</target>
</trans-unit>
<trans-unit id="St.ceTi" resname="job.index.run.selecttime.btnrunnow.label">
<source>job.index.run.selecttime.btnrunnow.label</source>
<target>__job.index.run.selecttime.btnrunnow.label</target>
</trans-unit>
<trans-unit id="XAxpenS" resname="job.index.run.ran.btnclose.label">
<source>job.index.run.ran.btnclose.label</source>
<target>__job.index.run.ran.btnclose.label</target>
</trans-unit>
<trans-unit id="CPdXoro" resname="job.add.title">
<source>job.add.title</source>
<target>__job.add.title</target>
</trans-unit>
<trans-unit id=".pKQkI0" resname="job.add.header">
<source>job.add.header</source>
<target>__job.add.header</target>
</trans-unit>
<trans-unit id="h9UI9nK" resname="job.addedit.generalinfo.header">
<source>job.addedit.generalinfo.header</source>
<target>__job.addedit.generalinfo.header</target>
</trans-unit>
<trans-unit id="2.rDz7o" resname="job.addedit.generalinfo.name.label">
<source>job.addedit.generalinfo.name.label</source>
<target>__job.addedit.generalinfo.name.label</target>
</trans-unit>
<trans-unit id="3FV9jvC" resname="job.addedit.generalinfo.name.placeholder">
<source>job.addedit.generalinfo.name.placeholder</source>
<target>__job.addedit.generalinfo.name.placeholder</target>
</trans-unit>
<trans-unit id="j9FTkRt" resname="job.addedit.generalinfo.name.helptext">
<source>job.addedit.generalinfo.name.helptext</source>
<target>__job.addedit.generalinfo.name.helptext</target>
</trans-unit>
<trans-unit id="CL7GVb3" resname="job.addedit.generalinfo.interval.label">
<source>job.addedit.generalinfo.interval.label</source>
<target>__job.addedit.generalinfo.interval.label</target>
</trans-unit>
<trans-unit id="OTx9beS" resname="job.addedit.generalinfo.interval.patterns.label">
<source>job.addedit.generalinfo.interval.patterns.label</source>
<target>__job.addedit.generalinfo.interval.patterns.label</target>
</trans-unit>
<trans-unit id="0ATgoBe" resname="job.addedit.generalinfo.interval.patterns.minute">
<source>job.addedit.generalinfo.interval.patterns.minute</source>
<target>__job.addedit.generalinfo.interval.patterns.minute</target>
</trans-unit>
<trans-unit id="f0o1GlZ" resname="job.addedit.generalinfo.interval.patterns.hour">
<source>job.addedit.generalinfo.interval.patterns.hour</source>
<target>__job.addedit.generalinfo.interval.patterns.hour</target>
</trans-unit>
<trans-unit id="hCmc8AA" resname="job.addedit.generalinfo.interval.patterns.day">
<source>job.addedit.generalinfo.interval.patterns.day</source>
<target>__job.addedit.generalinfo.interval.patterns.day</target>
</trans-unit>
<trans-unit id="zmUXvRU" resname="job.addedit.generalinfo.interval.patterns.week">
<source>job.addedit.generalinfo.interval.patterns.week</source>
<target>__job.addedit.generalinfo.interval.patterns.week</target>
</trans-unit>
<trans-unit id="ISEzS__" resname="job.addedit.generalinfo.interval.patterns.4week">
<source>job.addedit.generalinfo.interval.patterns.4week</source>
<target>__job.addedit.generalinfo.interval.patterns.4week</target>
</trans-unit>
<trans-unit id="HWDmm9f" resname="job.addedit.generalinfo.nextrun.label">
<source>job.addedit.generalinfo.nextrun.label</source>
<target>__job.addedit.generalinfo.nextrun.label</target>
</trans-unit>
<trans-unit id="e1RkhOF" resname="job.addedit.generalinfo.lastrun.label">
<source>job.addedit.generalinfo.lastrun.label</source>
<target>__job.addedit.generalinfo.lastrun.label</target>
</trans-unit>
<trans-unit id="kw_hgon" resname="job.addedit.generalinfo.lastrun.eternal.label">
<source>job.addedit.generalinfo.lastrun.eternal.label</source>
<target>__job.addedit.generalinfo.lastrun.eternal.label</target>
</trans-unit>
<trans-unit id="sdUg23G" resname="job.addedit.generalinfo.retention.label">
<source>job.addedit.generalinfo.retention.label</source>
<target>__job.addedit.generalinfo.retention.label</target>
</trans-unit>
<trans-unit id="nWofDbf" resname="job.addedit.generalinfo.retention.placeholder">
<source>job.addedit.generalinfo.retention.placeholder</source>
<target>__job.addedit.generalinfo.retention.placeholder</target>
</trans-unit>
<trans-unit id="eHfLjBO" resname="job.addedit.generalinfo.retention.helptext">
<source>job.addedit.generalinfo.retention.helptext</source>
<target>__job.addedit.generalinfo.retention.helptext</target>
</trans-unit>
<trans-unit id="kfQDfoB" resname="job.addedit.generalinfo.failpercentage.label">
<source>job.addedit.generalinfo.failpercentage.label</source>
<target>__job.addedit.generalinfo.failpercentage.label</target>
</trans-unit>
<trans-unit id="Ytyhy77" resname="job.addedit.generalinfo.faildays.label">
<source>job.addedit.generalinfo.faildays.label</source>
<target>__job.addedit.generalinfo.faildays.label</target>
</trans-unit>
<trans-unit id="2O_wFoD" resname="job.addedit.generalinfo.faildays.placeholder">
<source>job.addedit.generalinfo.faildays.placeholder</source>
<target>__job.addedit.generalinfo.faildays.placeholder</target>
</trans-unit>
<trans-unit id="UvMb6oM" resname="job.addedit.generalinfo.hostlabel.label">
<source>job.addedit.generalinfo.hostlabel.label</source>
<target>__job.addedit.generalinfo.hostlabel.label</target>
</trans-unit>
<trans-unit id="GjPGKoQ" resname="job.addedit.generalinfo.hostlabel.placeholder">
<source>job.addedit.generalinfo.hostlabel.placeholder</source>
<target>__job.addedit.generalinfo.hostlabel.placeholder</target>
</trans-unit>
<trans-unit id="moGlM4y" resname="job.addedit.generalinfo.hostlabel.helptext">
<source>job.addedit.generalinfo.hostlabel.helptext</source>
<target>__job.addedit.generalinfo.hostlabel.helptext</target>
</trans-unit>
<trans-unit id="VEORPjf" resname="job.addedit.jobdetails.header">
<source>job.addedit.jobdetails.header</source>
<target>__job.addedit.jobdetails.header</target>
</trans-unit>
<trans-unit id="7haVx1t" resname="job.addedit.crontype.label">
<source>job.addedit.crontype.label</source>
<target>__job.addedit.crontype.label</target>
</trans-unit>
<trans-unit id="kw_PINJ" resname="job.addedit.crontype.command.label">
<source>job.addedit.crontype.command.label</source>
<target>__job.addedit.crontype.command.label</target>
</trans-unit>
<trans-unit id="A66vsIi" resname="job.addedit.crontype.reboot.label">
<source>job.addedit.crontype.reboot.label</source>
<target>__job.addedit.crontype.reboot.label</target>
</trans-unit>
<trans-unit id="ze4mr8D" resname="job.addedit.crontype.http.label">
<source>job.addedit.crontype.http.label</source>
<target>__job.addedit.crontype.http.label</target>
</trans-unit>
<trans-unit id="oV9GuKJ" resname="job.addedit.hosttype.label">
<source>job.addedit.hosttype.label</source>
<target>__job.addedit.hosttype.label</target>
</trans-unit>
<trans-unit id="eBXA85X" resname="job.addedit.hosttype.local.label">
<source>job.addedit.hosttype.local.label</source>
<target>__job.addedit.hosttype.local.label</target>
</trans-unit>
<trans-unit id="oUUVCNC" resname="job.addedit.hosttype.ssh.label">
<source>job.addedit.hosttype.ssh.label</source>
<target>__job.addedit.hosttype.ssh.label</target>
</trans-unit>
<trans-unit id="8q0z3bf" resname="job.addedit.containertype.label">
<source>job.addedit.containertype.label</source>
<target>__job.addedit.containertype.label</target>
</trans-unit>
<trans-unit id="ZPis4Xx" resname="job.addedit.containertype.none.label">
<source>job.addedit.containertype.none.label</source>
<target>__job.addedit.containertype.none.label</target>
</trans-unit>
<trans-unit id="AGADEB_" resname="job.addedit.containertype.docker.label">
<source>job.addedit.containertype.docker.label</source>
<target>__job.addedit.containertype.docker.label</target>
</trans-unit>
<trans-unit id="ZNQUrj7" resname="job.addedit.crontype.command.command.label">
<source>job.addedit.crontype.command.command.label</source>
<target>__job.addedit.crontype.command.command.label</target>
</trans-unit>
<trans-unit id="aWesJsc" resname="job.addedit.crontype.command.command.placeholder">
<source>job.addedit.crontype.command.command.placeholder</source>
<target>__job.addedit.crontype.command.command.placeholder</target>
</trans-unit>
<trans-unit id="os3VpHs" resname="job.addedit.crontype.command.response.label">
<source>job.addedit.crontype.command.response.label</source>
<target>__job.addedit.crontype.command.response.label</target>
</trans-unit>
<trans-unit id="RIWj._C" resname="job.addedit.crontype.command.response.placeholder">
<source>job.addedit.crontype.command.response.placeholder</source>
<target>__job.addedit.crontype.command.response.placeholder</target>
</trans-unit>
<trans-unit id="Kv8GihO" resname="job.addedit.crontype.reboot.header">
<source>job.addedit.crontype.reboot.header</source>
<target>__job.addedit.crontype.reboot.header</target>
</trans-unit>
<trans-unit id="hy8z.7x" resname="job.addedit.crontype.reboot.reboot.command.label">
<source>job.addedit.crontype.reboot.reboot.command.label</source>
<target>__job.addedit.crontype.reboot.reboot.command.label</target>
</trans-unit>
<trans-unit id="tw3YvLz" resname="job.addedit.crontype.reboot.reboot.command.placeholder">
<source>job.addedit.crontype.reboot.reboot.command.placeholder</source>
<target>__job.addedit.crontype.reboot.reboot.command.placeholder</target>
</trans-unit>
<trans-unit id="ENLtpfK" resname="job.addedit.crontype.reboot.getservices.command.label">
<source>job.addedit.crontype.reboot.getservices.command.label</source>
<target>__job.addedit.crontype.reboot.getservices.command.label</target>
</trans-unit>
<trans-unit id="yxIObGq" resname="job.addedit.crontype.reboot.getservices.command.placeholder">
<source>job.addedit.crontype.reboot.getservices.command.placeholder</source>
<target>__job.addedit.crontype.reboot.getservices.command.placeholder</target>
</trans-unit>
<trans-unit id="aurJI0X" resname="job.addedit.crontype.reboot.getservices.response.label">
<source>job.addedit.crontype.reboot.getservices.response.label</source>
<target>__job.addedit.crontype.reboot.getservices.response.label</target>
</trans-unit>
<trans-unit id="xMbagrx" resname="job.addedit.crontype.reboot.getservices.response.placeholder">
<source>job.addedit.crontype.reboot.getservices.response.placeholder</source>
<target>__job.addedit.crontype.reboot.getservices.response.placeholder</target>
</trans-unit>
<trans-unit id="bEPANkU" resname="job.addedit.crontype.reboot.reboot.delay.label">
<source>job.addedit.crontype.reboot.reboot.delay.label</source>
<target>__job.addedit.crontype.reboot.reboot.delay.label</target>
</trans-unit>
<trans-unit id="f38i.f6" resname="job.addedit.crontype.reboot.reboot.delay.placeholder">
<source>job.addedit.crontype.reboot.reboot.delay.placeholder</source>
<target>__job.addedit.crontype.reboot.reboot.delay.placeholder</target>
</trans-unit>
<trans-unit id="T55_j9D" resname="job.addedit.crontype.reboot.reboot.delay.helptext">
<source>job.addedit.crontype.reboot.reboot.delay.helptext</source>
<target>__job.addedit.crontype.reboot.reboot.delay.helptext</target>
</trans-unit>
<trans-unit id="EbgF04P" resname="job.addedit.crontype.reboot.reboot.duration.label">
<source>job.addedit.crontype.reboot.reboot.duration.label</source>
<target>__job.addedit.crontype.reboot.reboot.duration.label</target>
</trans-unit>
<trans-unit id="1FVsnYa" resname="job.addedit.crontype.reboot.reboot.duration.placeholder">
<source>job.addedit.crontype.reboot.reboot.duration.placeholder</source>
<target>__job.addedit.crontype.reboot.reboot.duration.placeholder</target>
</trans-unit>
<trans-unit id="VWOhJBY" resname="job.addedit.crontype.reboot.reboot.duration.helptext">
<source>job.addedit.crontype.reboot.reboot.duration.helptext</source>
<target>__job.addedit.crontype.reboot.reboot.duration.helptext</target>
</trans-unit>
<trans-unit id="oJn3xvZ" resname="job.addedit.crontype.http.header">
<source>job.addedit.crontype.http.header</source>
<target>__job.addedit.crontype.http.header</target>
</trans-unit>
<trans-unit id="hwhqEtB" resname="job.addedit.crontype.http.url.label">
<source>job.addedit.crontype.http.url.label</source>
<target>__job.addedit.crontype.http.url.label</target>
</trans-unit>
<trans-unit id="31CZuNl" resname="job.addedit.crontype.http.url.placeholder">
<source>job.addedit.crontype.http.url.placeholder</source>
<target>__job.addedit.crontype.http.url.placeholder</target>
</trans-unit>
<trans-unit id="gGpY1Gz" resname="job.addedit.crontype.http.basic-auth.username.label">
<source>job.addedit.crontype.http.basic-auth.username.label</source>
<target>__job.addedit.crontype.http.basic-auth.username.label</target>
</trans-unit>
<trans-unit id="9d3Trxr" resname="job.addedit.crontype.http.basic-auth.username.placeholder">
<source>job.addedit.crontype.http.basic-auth.username.placeholder</source>
<target>__job.addedit.crontype.http.basic-auth.username.placeholder</target>
</trans-unit>
<trans-unit id="27zbUzr" resname="job.addedit.crontype.http.basic-auth.password.label">
<source>job.addedit.crontype.http.basic-auth.password.label</source>
<target>__job.addedit.crontype.http.basic-auth.password.label</target>
</trans-unit>
<trans-unit id="ROX9KeU" resname="job.addedit.crontype.http.basic-auth.password.placeholder">
<source>job.addedit.crontype.http.basic-auth.password.placeholder</source>
<target>__job.addedit.crontype.http.basic-auth.password.placeholder</target>
</trans-unit>
<trans-unit id="pRPdCPd" resname="job.addedit.crontype.http.basic-auth.password.helptext">
<source>job.addedit.crontype.http.basic-auth.password.helptext</source>
<target>__job.addedit.crontype.http.basic-auth.password.helptext</target>
</trans-unit>
<trans-unit id="SnZXqhK" resname="job.addedit.crontype.http.response.label">
<source>job.addedit.crontype.http.response.label</source>
<target>__job.addedit.crontype.http.response.label</target>
</trans-unit>
<trans-unit id="aLSDlKd" resname="job.addedit.crontype.http.response.placeholder">
<source>job.addedit.crontype.http.response.placeholder</source>
<target>__job.addedit.crontype.http.response.placeholder</target>
</trans-unit>
<trans-unit id="ZeflLHK" resname="job.addedit.hosttype.local.header">
<source>job.addedit.hosttype.local.header</source>
<target>__job.addedit.hosttype.local.header</target>
</trans-unit>
<trans-unit id="1atQ8Ot" resname="job.addedit.hosttype.local.nodetails">
<source>job.addedit.hosttype.local.nodetails</source>
<target>__job.addedit.hosttype.local.nodetails</target>
</trans-unit>
<trans-unit id="HIND6DD" resname="job.addedit.hosttype.ssh.header">
<source>job.addedit.hosttype.ssh.header</source>
<target>__job.addedit.hosttype.ssh.header</target>
</trans-unit>
<trans-unit id="n_JNj3z" resname="job.addedit.hosttype.ssh.hostname.label">
<source>job.addedit.hosttype.ssh.hostname.label</source>
<target>__job.addedit.hosttype.ssh.hostname.label</target>
</trans-unit>
<trans-unit id="4ZEnTLC" resname="job.addedit.hosttype.ssh.hostname.placeholder">
<source>job.addedit.hosttype.ssh.hostname.placeholder</source>
<target>__job.addedit.hosttype.ssh.hostname.placeholder</target>
</trans-unit>
<trans-unit id="08j0NEG" resname="job.addedit.hosttype.ssh.username.label">
<source>job.addedit.hosttype.ssh.username.label</source>
<target>__job.addedit.hosttype.ssh.username.label</target>
</trans-unit>
<trans-unit id="EJOhQKe" resname="job.addedit.hosttype.ssh.username.placeholder">
<source>job.addedit.hosttype.ssh.username.placeholder</source>
<target>__job.addedit.hosttype.ssh.username.placeholder</target>
</trans-unit>
<trans-unit id="VEZQ7fY" resname="job.addedit.hosttype.ssh.privatekey.label">
<source>job.addedit.hosttype.ssh.privatekey.label</source>
<target>__job.addedit.hosttype.ssh.privatekey.label</target>
</trans-unit>
<trans-unit id="1MzOMSK" resname="job.addedit.hosttype.ssh.privatekey.helptext">
<source>job.addedit.hosttype.ssh.privatekey.helptext</source>
<target>__job.addedit.hosttype.ssh.privatekey.helptext</target>
</trans-unit>
<trans-unit id="nxl.bTZ" resname="job.addedit.hosttype.ssh.passphrase.label">
<source>job.addedit.hosttype.ssh.passphrase.label</source>
<target>__job.addedit.hosttype.ssh.passphrase.label</target>
</trans-unit>
<trans-unit id="rYaggeh" resname="job.addedit.hosttype.ssh.passphrase.placeholder">
<source>job.addedit.hosttype.ssh.passphrase.placeholder</source>
<target>__job.addedit.hosttype.ssh.passphrase.placeholder</target>
</trans-unit>
<trans-unit id="MAQ8t1s" resname="job.addedit.hosttype.ssh.passphrase.helptext">
<source>job.addedit.hosttype.ssh.passphrase.helptext</source>
<target>__job.addedit.hosttype.ssh.passphrase.helptext</target>
</trans-unit>
<trans-unit id="1hg_Lri" resname="job.addedit.containertype.docker.header">
<source>job.addedit.containertype.docker.header</source>
<target>__job.addedit.containertype.docker.header</target>
</trans-unit>
<trans-unit id="fddg1.3" resname="job.addedit.containertype.docker.service.label">
<source>job.addedit.containertype.docker.service.label</source>
<target>__job.addedit.containertype.docker.service.label</target>
</trans-unit>
<trans-unit id="mmNVzOj" resname="job.addedit.containertype.docker.service.placeholder">
<source>job.addedit.containertype.docker.service.placeholder</source>
<target>__job.addedit.containertype.docker.service.placeholder</target>
</trans-unit>
<trans-unit id="kaHv1qa" resname="job.addedit.containertype.docker.username.label">
<source>job.addedit.containertype.docker.username.label</source>
<target>__job.addedit.containertype.docker.username.label</target>
</trans-unit>
<trans-unit id="UzbvieZ" resname="job.addedit.containertype.docker.username.placeholder">
<source>job.addedit.containertype.docker.username.placeholder</source>
<target>__job.addedit.containertype.docker.username.placeholder</target>
</trans-unit>
<trans-unit id="BsHxmnc" resname="job.addedit.variables.header">
<source>job.addedit.variables.header</source>
<target>__job.addedit.variables.header</target>
</trans-unit>
<trans-unit id="pawk4nL" resname="job.addedit.variables.secret.label">
<source>job.addedit.variables.secret.label</source>
<target>__job.addedit.variables.secret.label</target>
</trans-unit>
<trans-unit id="roGfPFi" resname="job.addedit.variables.name.placeholder">
<source>job.addedit.variables.name.placeholder</source>
<target>__job.addedit.variables.name.placeholder</target>
</trans-unit>
<trans-unit id="WWsh_72" resname="job.addedit.variables.value.placeholder">
<source>job.addedit.variables.value.placeholder</source>
<target>__job.addedit.variables.value.placeholder</target>
</trans-unit>
<trans-unit id="Ve0r_Wy" resname="job.addedit.variables.helptext">
<source>job.addedit.variables.helptext</source>
<target>__job.addedit.variables.helptext</target>
</trans-unit>
<trans-unit id="tL8wand" resname="job.addedit.variables.add.label">
<source>job.addedit.variables.add.label</source>
<target>__job.addedit.variables.add.label</target>
</trans-unit>
<trans-unit id="or7JWUe" resname="job.addedit.submit.label">
<source>job.addedit.submit.label</source>
<target>__job.addedit.submit.label</target>
</trans-unit>
<trans-unit id="ysrfPnl" resname="job.view.header">
<source>job.view.header</source>
<target>__job.view.header</target>
</trans-unit>
<trans-unit id="KBsRhNs" resname="job.view.edit">
<source>job.view.edit</source>
<target>__job.view.edit</target>
</trans-unit>
<trans-unit id="xvdCrX2" resname="job.view.show.onlyfailed">
<source>job.view.show.onlyfailed</source>
<target>__job.view.show.onlyfailed</target>
</trans-unit>
<trans-unit id="_zWmcxu" resname="job.view.show.all">
<source>job.view.show.all</source>
<target>__job.view.show.all</target>
</trans-unit>
<trans-unit id="lpu6CQS" resname="job.view.results.exitcode">
<source>job.view.results.exitcode</source>
<target>__job.view.results.exitcode</target>
</trans-unit>
<trans-unit id="9EemRnl" resname="job.view.results.runtime">
<source>job.view.results.runtime</source>
<target>__job.view.results.runtime</target>
</trans-unit>
<trans-unit id="juzEgkd" resname="job.view.results.manual">
<source>job.view.results.manual</source>
<target>__job.view.results.manual</target>
</trans-unit>
<trans-unit id="H.6.gtG" resname="job.view.results.noresults.failed">
<source>job.view.results.noresults.failed</source>
<target>__job.view.results.noresults.failed</target>
</trans-unit>
<trans-unit id="u3QkQi1" resname="job.view.results.noresults.all">
<source>job.view.results.noresults.all</source>
<target>__job.view.results.noresults.all</target>
</trans-unit>
<trans-unit id="zBxeZSL" resname="job.edit.title">
<source>job.edit.title</source>
<target>__job.edit.title</target>
</trans-unit>
<trans-unit id="CDJme2K" resname="job.edit.header">
<source>job.edit.header</source>
<target>__job.edit.header</target>
</trans-unit>
<trans-unit id="iSs41MC" resname="job.addedit.generalinfo.interval.placeholder">
<source>job.addedit.generalinfo.interval.placeholder</source>
<target>__job.addedit.generalinfo.interval.placeholder</target>
</trans-unit>
<trans-unit id="sxAwNxW" resname="job.addedit.crontype.command.header">
<source>job.addedit.crontype.command.header</source>
<target>__job.addedit.crontype.command.header</target>
</trans-unit>
<trans-unit id="p0Seiyx" resname="job.addedit.crontype.reboot.reboot.command.helptext">
<source>job.addedit.crontype.reboot.reboot.command.helptext</source>
<target>__job.addedit.crontype.reboot.reboot.command.helptext</target>
</trans-unit>
<trans-unit id="uVSkZpl" resname="job.addedit.hosttype.ssh.privatekey.keep.label">
<source>job.addedit.hosttype.ssh.privatekey.keep.label</source>
<target>__job.addedit.hosttype.ssh.privatekey.keep.label</target>
</trans-unit>
<trans-unit id="_OGkxC8" resname="settings.other.header">
<source>settings.other.header</source>
<target>__settings.other.header</target>
</trans-unit>
<trans-unit id="78Yswpr" resname="settings.other.locale.label">
<source>settings.other.locale.label</source>
<target>__settings.other.locale.label</target>
</trans-unit>
<trans-unit id="WQ4J4Fx" resname="settings.submit.label">
<source>settings.submit.label</source>
<target>__settings.submit.label</target>
</trans-unit>
<trans-unit id="SF_jXZZ" resname="job.view.title">
<source>job.view.title</source>
<target>__job.view.title</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -5,633 +5,637 @@
<tool tool-id="symfony" tool-name="Symfony"/>
</header>
<body>
<trans-unit id="qvIyBkY" resname="title">
<source>title</source>
<target>W3bcr0n m4n4g3m3nt</target>
</trans-unit>
<trans-unit id="HgWEol2" resname="header">
<source>header</source>
<target>W3bcr0n m4n4g3m3nt</target>
</trans-unit>
<trans-unit id="Q54TzT5" resname="demomode.flashnotice">
<source>demomode.flashnotice</source>
<target>d1z 4ppL1c4t10n b 1n d3m0 m0d3. Ch4ng3z 1z p3rs1st3d 1n t3h d4t4b4s3, but j0bz 1z n0t b31n' 3x3cut3d</target>
</trans-unit>
<trans-unit id="rpq61qN" resname="demomode.credentials.header">
<source>demomode.credentials.header</source>
<target>L0g1n 4 d3m0 m0d3</target>
</trans-unit>
<trans-unit id="jUz9fVE" resname="demomode.credentials.username">
<source>demomode.credentials.username</source>
<target>Us3rn4m3</target>
</trans-unit>
<trans-unit id="QNu97w_" resname="demomode.credentials.password">
<source>demomode.credentials.password</source>
<target>P4ssw0rd</target>
</trans-unit>
<trans-unit id="U8IBiON" resname="menu.overview">
<source>menu.overview</source>
<target>0v3rv13w</target>
</trans-unit>
<trans-unit id="iGC7eCk" resname="menu.add">
<source>menu.add</source>
<target>4dd @ n3w cr0nj0b</target>
</trans-unit>
<trans-unit id="4UTsL.X" resname="menu.settings">
<source>menu.settings</source>
<target>S3tt1ngz</target>
</trans-unit>
<trans-unit id="wBTFKFR" resname="menu.logout">
<source>menu.logout</source>
<target>L0g0ut</target>
</trans-unit>
<trans-unit id="4cxyGOO" resname="security.login.username.label">
<source>security.login.username.label</source>
<target>Us3rn4m3</target>
</trans-unit>
<trans-unit id="u2tKtI1" resname="security.login.username.placeholder">
<source>security.login.username.placeholder</source>
<target>j3r03n@h4x0r.L33t</target>
</trans-unit>
<trans-unit id="Niy_SZ2" resname="security.login.password.label">
<source>security.login.password.label</source>
<target>P4ssw0rd</target>
</trans-unit>
<trans-unit id="3rU2_6v" resname="security.login.password.placeholder">
<source>security.login.password.placeholder</source>
<target>C0rr3ct H0rs3 B4tt3ry St4pL3</target>
</trans-unit>
<trans-unit id="0MGdvgf" resname="security.login.remember.label">
<source>security.login.remember.label</source>
<target>D0 n0t f0rg3t</target>
</trans-unit>
<trans-unit id="4GvZndQ" resname="security.login.submit-btn.label">
<source>security.login.submit-btn.label</source>
<target>3nt3r</target>
</trans-unit>
<trans-unit id="W.225Bj" resname="settings.title">
<source>settings.title</source>
<target>S3tt1ngz</target>
</trans-unit>
<trans-unit id="a1bm5YC" resname="settings.header">
<source>settings.header</source>
<target>S3tt1ngz</target>
</trans-unit>
<trans-unit id="qUrJMfo" resname="settings.flashes.inexistinglocale">
<source>settings.flashes.inexistinglocale</source>
<target>L0c4L3 d03z n0t 3x1st</target>
</trans-unit>
<trans-unit id="XcSnV8X" resname="settings.flashes.localesaved">
<source>settings.flashes.localesaved</source>
<target>L0c4L3 b s4v3d</target>
</trans-unit>
<trans-unit id="kpbry92" resname="settings.flashes.repeatpasswordnotok">
<source>settings.flashes.repeatpasswordnotok</source>
<target>P4ssw0rdz 1z n0t 3qu4L</target>
</trans-unit>
<trans-unit id="DpJMsln" resname="settings.flashes.currentpassnotok">
<source>settings.flashes.currentpassnotok</source>
<target>P4ssw0rd b n0t c0rr3ct</target>
</trans-unit>
<trans-unit id="tB3o6UA" resname="settings.flashes.passwordsaved">
<source>settings.flashes.passwordsaved</source>
<target>P4ssw0rd b s4v3d</target>
</trans-unit>
<trans-unit id="aAt4FLV" resname="settings.password.header">
<source>settings.password.header</source>
<target>P4ssw0rd</target>
</trans-unit>
<trans-unit id="qqAzx9b" resname="settings.password.current.label">
<source>settings.password.current.label</source>
<target>Curr3nt p4ssw0rd</target>
</trans-unit>
<trans-unit id="rr8bU5t" resname="settings.password.current.placeholder">
<source>settings.password.current.placeholder</source>
<target>qwerty</target>
</trans-unit>
<trans-unit id="YVhGwqr" resname="settings.password.password.label">
<source>settings.password.password.label</source>
<target>N3w p4ssw0rd</target>
</trans-unit>
<trans-unit id="OZpjE9T" resname="settings.password.password.placeholder">
<source>settings.password.password.placeholder</source>
<target>azerty</target>
</trans-unit>
<trans-unit id="TNBtpD_" resname="settings.password.repeat.label">
<source>settings.password.repeat.label</source>
<target>R3p34t p4ssw0rd</target>
</trans-unit>
<trans-unit id="bYb7Tz." resname="settings.password.repeat.placeholder">
<source>settings.password.repeat.placeholder</source>
<target>azerty</target>
</trans-unit>
<trans-unit id="_OGkxC8" resname="settings.other.header">
<source>settings.other.header</source>
<target>0th3r s3tt1ngz</target>
</trans-unit>
<trans-unit id="78Yswpr" resname="settings.other.locale.label">
<source>settings.other.locale.label</source>
<target>L0c4L3</target>
</trans-unit>
<trans-unit id="WQ4J4Fx" resname="settings.submit.label">
<source>settings.submit.label</source>
<target>Subm1t</target>
</trans-unit>
<trans-unit id="0eRDYaC" resname="job.index.title">
<source>job.index.title</source>
<target>0v3rv13w</target>
</trans-unit>
<trans-unit id="J.7dT3_" resname="job.index.header">
<source>job.index.header</source>
<target>0v3rv13w 0f t3h cr0nj0bz</target>
</trans-unit>
<trans-unit id="T0URP45" resname="job.index.table.headers.name">
<source>job.index.table.headers.name</source>
<target>N4m3</target>
</trans-unit>
<trans-unit id="vNWgxUJ" resname="job.index.table.headers.host">
<source>job.index.table.headers.host</source>
<target>H0st</target>
</trans-unit>
<trans-unit id="1YQJCGW" resname="job.index.table.headers.interval">
<source>job.index.table.headers.interval</source>
<target>1nt3rv4L</target>
</trans-unit>
<trans-unit id="mZ.gLJq" resname="job.index.table.headers.nextrun">
<source>job.index.table.headers.nextrun</source>
<target>N3xtrun</target>
</trans-unit>
<trans-unit id="mokjk0L" resname="job.index.flashes.jobdeleted">
<source>job.index.flashes.jobdeleted</source>
<target>Cr0nj0b b succ3ssfuLLy d3L3t3d</target>
</trans-unit>
<trans-unit id="qvIyBkY" resname="title">
<source>title</source>
<target state="final">W3bcr0n m4n4g3m3nt</target>
</trans-unit>
<trans-unit id="HgWEol2" resname="header">
<source>header</source>
<target state="final">W3bcr0n m4n4g3m3nt</target>
</trans-unit>
<trans-unit id="Q54TzT5" resname="demomode.flashnotice">
<source>demomode.flashnotice</source>
<target state="final">d1z 4ppL1c4t10n b 1n d3m0 m0d3. Ch4ng3z 1z p3rs1st3d 1n t3h d4t4b4s3, but j0bz 1z n0t b31n' 3x3cut3d</target>
</trans-unit>
<trans-unit id="rpq61qN" resname="demomode.credentials.header">
<source>demomode.credentials.header</source>
<target state="final">L0g1n 4 d3m0 m0d3</target>
</trans-unit>
<trans-unit id="jUz9fVE" resname="demomode.credentials.username">
<source>demomode.credentials.username</source>
<target state="final">Us3rn4m3</target>
</trans-unit>
<trans-unit id="QNu97w_" resname="demomode.credentials.password">
<source>demomode.credentials.password</source>
<target state="final">P4ssw0rd</target>
</trans-unit>
<trans-unit id="U8IBiON" resname="menu.overview">
<source>menu.overview</source>
<target state="final">0v3rv13w</target>
</trans-unit>
<trans-unit id="iGC7eCk" resname="menu.add">
<source>menu.add</source>
<target state="final">4dd @ n3w cr0nj0b</target>
</trans-unit>
<trans-unit id="4UTsL.X" resname="menu.settings">
<source>menu.settings</source>
<target state="final">S3tt1ngz</target>
</trans-unit>
<trans-unit id="wBTFKFR" resname="menu.logout">
<source>menu.logout</source>
<target state="final">L0g0ut</target>
</trans-unit>
<trans-unit id="4cxyGOO" resname="security.login.username.label">
<source>security.login.username.label</source>
<target state="final">Us3rn4m3</target>
</trans-unit>
<trans-unit id="u2tKtI1" resname="security.login.username.placeholder">
<source>security.login.username.placeholder</source>
<target state="final">j3r03n@h4x0r.L33t</target>
</trans-unit>
<trans-unit id="Niy_SZ2" resname="security.login.password.label">
<source>security.login.password.label</source>
<target state="final">P4ssw0rd</target>
</trans-unit>
<trans-unit id="3rU2_6v" resname="security.login.password.placeholder">
<source>security.login.password.placeholder</source>
<target state="final">C0rr3ct H0rs3 B4tt3ry St4pL3</target>
</trans-unit>
<trans-unit id="0MGdvgf" resname="security.login.remember.label">
<source>security.login.remember.label</source>
<target state="final">D0 n0t f0rg3t</target>
</trans-unit>
<trans-unit id="4GvZndQ" resname="security.login.submit-btn.label">
<source>security.login.submit-btn.label</source>
<target state="final">3nt3r</target>
</trans-unit>
<trans-unit id="W.225Bj" resname="settings.title">
<source>settings.title</source>
<target state="final">S3tt1ngz</target>
</trans-unit>
<trans-unit id="a1bm5YC" resname="settings.header">
<source>settings.header</source>
<target state="final">S3tt1ngz</target>
</trans-unit>
<trans-unit id="qUrJMfo" resname="settings.flashes.inexistinglocale">
<source>settings.flashes.inexistinglocale</source>
<target state="final">L0c4L3 d03z n0t 3x1st</target>
</trans-unit>
<trans-unit id="XcSnV8X" resname="settings.flashes.localesaved">
<source>settings.flashes.localesaved</source>
<target state="final">L0c4L3 b s4v3d</target>
</trans-unit>
<trans-unit id="kpbry92" resname="settings.flashes.repeatpasswordnotok">
<source>settings.flashes.repeatpasswordnotok</source>
<target state="final">P4ssw0rdz 1z n0t 3qu4L</target>
</trans-unit>
<trans-unit id="DpJMsln" resname="settings.flashes.currentpassnotok">
<source>settings.flashes.currentpassnotok</source>
<target state="final">P4ssw0rd b n0t c0rr3ct</target>
</trans-unit>
<trans-unit id="tB3o6UA" resname="settings.flashes.passwordsaved">
<source>settings.flashes.passwordsaved</source>
<target state="final">P4ssw0rd b s4v3d</target>
</trans-unit>
<trans-unit id="aAt4FLV" resname="settings.password.header">
<source>settings.password.header</source>
<target state="final">P4ssw0rd</target>
</trans-unit>
<trans-unit id="qqAzx9b" resname="settings.password.current.label">
<source>settings.password.current.label</source>
<target state="final">Curr3nt p4ssw0rd</target>
</trans-unit>
<trans-unit id="rr8bU5t" resname="settings.password.current.placeholder">
<source>settings.password.current.placeholder</source>
<target state="final">qwerty</target>
</trans-unit>
<trans-unit id="YVhGwqr" resname="settings.password.password.label">
<source>settings.password.password.label</source>
<target state="final">N3w p4ssw0rd</target>
</trans-unit>
<trans-unit id="OZpjE9T" resname="settings.password.password.placeholder">
<source>settings.password.password.placeholder</source>
<target state="final">azerty</target>
</trans-unit>
<trans-unit id="TNBtpD_" resname="settings.password.repeat.label">
<source>settings.password.repeat.label</source>
<target state="final">R3p34t p4ssw0rd</target>
</trans-unit>
<trans-unit id="bYb7Tz." resname="settings.password.repeat.placeholder">
<source>settings.password.repeat.placeholder</source>
<target state="final">azerty</target>
</trans-unit>
<trans-unit id="_OGkxC8" resname="settings.other.header">
<source>settings.other.header</source>
<target state="final">0th3r s3tt1ngz</target>
</trans-unit>
<trans-unit id="78Yswpr" resname="settings.other.locale.label">
<source>settings.other.locale.label</source>
<target state="final">L0c4L3</target>
</trans-unit>
<trans-unit id="WQ4J4Fx" resname="settings.submit.label">
<source>settings.submit.label</source>
<target state="final">Subm1t</target>
</trans-unit>
<trans-unit id="0eRDYaC" resname="job.index.title">
<source>job.index.title</source>
<target state="final">0v3rv13w</target>
</trans-unit>
<trans-unit id="J.7dT3_" resname="job.index.header">
<source>job.index.header</source>
<target state="final">0v3rv13w 0f t3h cr0nj0bz</target>
</trans-unit>
<trans-unit id="T0URP45" resname="job.index.table.headers.name">
<source>job.index.table.headers.name</source>
<target state="final">N4m3</target>
</trans-unit>
<trans-unit id="vNWgxUJ" resname="job.index.table.headers.host">
<source>job.index.table.headers.host</source>
<target state="final">H0st</target>
</trans-unit>
<trans-unit id="1YQJCGW" resname="job.index.table.headers.interval">
<source>job.index.table.headers.interval</source>
<target state="final">1nt3rv4L</target>
</trans-unit>
<trans-unit id="mZ.gLJq" resname="job.index.table.headers.nextrun">
<source>job.index.table.headers.nextrun</source>
<target state="final">N3xtrun</target>
</trans-unit>
<trans-unit id="SF_jXZZ" resname="job.view.title">
<source>job.view.title</source>
<target state="final">0v3rv13w 0f runz 4 _jobname_</target>
<target>0v3rv13w 0f runz 4 _jobname_</target>
</trans-unit>
<trans-unit id="ysrfPnl" resname="job.view.header">
<source>job.view.header</source>
<target state="final">0v3rv13w 0f runz 4 _jobname_</target>
<target>0v3rv13w 0f runz 4 _jobname_</target>
</trans-unit>
<trans-unit id="KBsRhNs" resname="job.view.edit">
<source>job.view.edit</source>
<target state="final">3d1t j0b</target>
<target>3d1t j0b</target>
</trans-unit>