Merge pull request '0.2' (#10) from 0.2 into main

Reviewed-on: #10
This commit is contained in:
muppeth 2023-09-02 18:29:53 +00:00
commit 6fecb95182
19 changed files with 394 additions and 293 deletions

8
README
View File

@ -1,12 +1,12 @@
Lacre Web
Lacre Webgate
--------------
This is Lacre's simple php based frontend. It has been forked from [gpg-mailgate](https://github.com/fkrone/gpg-mailgate) project and it is a continuation of the original work. Special thanks to all those who have contributed to amazing work of gpg-mailgate-web and those who are willing to contribute to Lacre to improve security of email storage.
Lacre-Web is a simple web interface designed to allow any web user to upload their PGP public key and then have all mail sent via your mail server be encrypted. (Note: this is not meant for email authentication, only encryption.)
Lacre-Webgate is a simple web interface designed to allow any web user to upload their PGP public key and then have all mail sent via your mail server be encrypted. (Note: this is not meant for email authentication, only encryption.)
After submitting their key to a web form, the user will be required to confirm their email address. A cron script will register the public key with gpg-lacre (keyhome_only must be set to no currently, which is the default) after email confirmation. From then on, email to the specified address will be encrypted with the public key.
Lacre-Web frontend is useful for two purposes:
Lacre-Webgate frontend is useful for two purposes:
- for a transparent PGP encryption layer in front of any web application
- as a web interface for gpg-lacre so that users on your mail server can easily upload and change their PGP keys.
@ -26,3 +26,5 @@ Below instructions assume working gpg-Lacre setup (backend) as well as working w
```
6) Ensure that cron is working and test your new Lacre-web installation!
2. Customization:
Lacre-Webgate allows for customization of css as well as templates. You can add your custom theme to `/themes/`. You can switch theme by adjusting `$config['site_theme']` in config.php` where the name is the theme's directory name.

1
public_html/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
config.php

View File

@ -20,35 +20,113 @@
*/
/*
DO NOT EDIT THIS FILE!
Instead, copy over "config.sample.php" to "config.php" and edit settings there.
*/
//
// GENERAL SITE SETTINGS
//
$config = array();
//web team contact
// this email address will be displayed if there is a database error
$config['email_web'] = 'admin@example.com';
//address to send emails from
$config['email_from'] = 'gpg-mailgate-web@example.com';
//this will be used as the subject when a user requests to add a PGP key
$config['email_subject_requestpgp'] = 'Confirm your email address';
//site theme
$config['site_theme'] = 'lacre';
//site URL, without trailing slash
$config['site_url'] = 'http://example.com/gpgmw';
//title of the website (displayed on home page)
$config['site_title'] = 'PGP key management';
//site logo
$config['site_logo'] = 'img/logo.png';
//link to FAQ page
$config['site_faqurl'] = 'https://lacre.io/faq';
//link to tutorial website
$config['site_howurl'] = 'https://learn.lacre.io';
//link to contact page
$config['site_contacturl'] = 'https://lacre.io/contact';
//language file to use (see language subdirectory)
$config['language'] = 'english';
//whether debug mode should be enabled
$config['debug'] = false;
//
// MAIL SETTINGS
//
//whether to send mail through SMTP (instead of PHP mail function)
$config['mail_smtp'] = false;
//SMTP settings, if mail_smtp is enabled
//this requires Net_SMTP from http://pear.php.net/package/Net_SMTP/ to be installed
$config['mail_smtp_host'] = 'localhost';
$config['mail_smtp_port'] = 25;
$config['mail_smtp_username'] = 'gpgmw';
$config['mail_smtp_password'] = '';
//
// DATABASE SETTINGS
//
//database name (MySQL only); or see include/dbconnect.php
$config['db_name'] = 'gpgmw';
//database host
$config['db_host'] = 'localhost';
//database username
$config['db_username'] = 'gpgmw';
//database password
$config['db_password'] = '';
//
// PGP VERIFICATION SETTINGS
//
//whether to enable immediate verification of PGP keys
// keys will always be verified with the email address in our cron job
// but this will enable verification from the web interface before email confirmation
//for this to work, Crypt_GPG from http://pear.php.net/Crypt_GPG must be installed
// (as well as any of its dependencies), and pgpverify_tmpdir must be set
$config['pgpverify_enable'] = false;
//a temporary directory to use for PGP verification, without trailing slash
// gpgmw will create subdirectories from here to use as temporary gpg home directories
// these directories will (should) be deleted immediately after use
$config['pgpverify_tmpdir'] = '/tmp';
//whether to allow blank "keys"
// this is useful to allow users to delete their key from the keystore
// if they no longer want encryption
$config['pgpverify_allowblank'] = true;
//
// LOCK SETTINGS
//
//the time in seconds a user must wait before trying again; otherwise they get locked out (count not increased)
$config['lock_time_initial'] = array('requestpgp' => 10);
//the number of tries a user has (that passes the lock_time_initial test) before being locked by overload (extended duration)
$config['lock_count_overload'] = array('requestpgp' => 3);
//the time that overloads last
$config['lock_time_overload'] = array('requestpgp' => 900);
//time after which locks no longer apply, assuming the lock isn't active
$config['lock_time_reset'] = 300;
//max time to store locks in the database; this way we can clear old locks with one function
$config['lock_time_max'] = 3600;
?>

View File

@ -1,119 +0,0 @@
<?php
/*
gpg-mailgate
This file is part of the gpg-mailgate source code.
gpg-mailgate 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.
gpg-mailgate source code 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.
You should have received a copy of the GNU General Public License
along with gpg-mailgate source code. If not, see <http://www.gnu.org/licenses/>.
*/
//
// GENERAL SITE SETTINGS
//
//web team contact
// this email address will be displayed if there is a database error
$config['email_web'] = 'admin@example.com';
//address to send emails from
$config['email_from'] = 'gpg-mailgate-web@example.com';
//this will be used as the subject when a user requests to add a PGP key
$config['email_subject_requestpgp'] = 'Confirm your email address';
//site URL, without trailing slash
$config['site_url'] = 'http://example.com/gpgmw';
//title of the website (displayed on home page)
$config['site_title'] = 'PGP key management';
//language file to use (see language subdirectory)
$config['language'] = 'english';
//whether debug mode should be enabled
$config['debug'] = false;
//
// MAIL SETTINGS
//
//whether to send mail through SMTP (instead of PHP mail function)
$config['mail_smtp'] = false;
//SMTP settings, if mail_smtp is enabled
//this requires Net_SMTP from http://pear.php.net/package/Net_SMTP/ to be installed
$config['mail_smtp_host'] = 'localhost';
$config['mail_smtp_port'] = 25;
$config['mail_smtp_username'] = 'gpgmw';
$config['mail_smtp_password'] = '';
//
// DATABASE SETTINGS
//
//database name (MySQL only); or see include/dbconnect.php
$config['db_name'] = 'gpgmw';
//database host
$config['db_host'] = 'localhost';
//database username
$config['db_username'] = 'gpgmw';
//database password
$config['db_password'] = '';
//
// PGP VERIFICATION SETTINGS
//
//whether to enable immediate verification of PGP keys
// keys will always be verified with the email address in our cron job
// but this will enable verification from the web interface before email confirmation
//for this to work, Crypt_GPG from http://pear.php.net/Crypt_GPG must be installed
// (as well as any of its dependencies), and pgpverify_tmpdir must be set
$config['pgpverify_enable'] = false;
//a temporary directory to use for PGP verification, without trailing slash
// gpgmw will create subdirectories from here to use as temporary gpg home directories
// these directories will (should) be deleted immediately after use
$config['pgpverify_tmpdir'] = '/tmp';
//whether to allow blank "keys"
// this is useful to allow users to delete their key from the keystore
// if they no longer want encryption
$config['pgpverify_allowblank'] = true;
//
// LOCK SETTINGS
//
//the time in seconds a user must wait before trying again; otherwise they get locked out (count not increased)
$config['lock_time_initial'] = array('requestpgp' => 10);
//the number of tries a user has (that passes the lock_time_initial test) before being locked by overload (extended duration)
$config['lock_count_overload'] = array('requestpgp' => 3);
//the time that overloads last
$config['lock_time_overload'] = array('requestpgp' => 900);
//time after which locks no longer apply, assuming the lock isn't active
$config['lock_time_reset'] = 300;
//max time to store locks in the database; this way we can clear old locks with one function
$config['lock_time_max'] = 3600;
?>

View File

@ -30,9 +30,9 @@ if(isset($_REQUEST['email']) && isset($_REQUEST['confirm'])) {
$result = confirmPGP($_REQUEST['email'], $_REQUEST['confirm']);
if($result === true) {
get_page("home", array('message' => $lang['confirm_success']));
get_page("info", array('message' => $lang['confirm_success']));
} else {
get_page("home", array('message' => $lang['confirm_fail_general']));
get_page("info", array('message' => $lang['confirm_fail_general']));
}
} else {
get_page("home");

View File

@ -75,19 +75,19 @@ function get_page($page, $args = array()) {
$basePath = basePath();
$themePath = $basePath . "/theme";
$themePageInclude = "$themePath/$page.php";
$templatePath = $basePath . "/themes/" . $config['site_theme'] . "/templates/";
$templatePageInclude = "$templatePath/$page.php";
if(file_exists("$themePath/header.php")) {
include("$themePath/header.php");
if(file_exists("$templatePath/header.php")) {
include("$templatePath/header.php");
}
if(file_exists($themePageInclude)) {
include($themePageInclude);
if(file_exists($templatePageInclude)) {
include($templatePageInclude);
}
if(file_exists("$themePath/footer.php")) {
include("$themePath/footer.php");
if(file_exists("$templatePath/footer.php")) {
include("$templatePath/footer.php");
}
}

View File

@ -31,9 +31,9 @@ if(isset($_POST['email']) && isset($_POST['key'])) {
$result = requestPGP($_POST['email'], $_POST['key']);
if($result === true) {
get_page("home", array('message' => $lang['submit_success']));
get_page("info", array('message' => $lang['submit_success']));
} else {
get_page("home", array('message' => $result));
get_page("info", array('message' => $result));
}
} else {
get_page("home");

View File

@ -22,10 +22,10 @@
$lang = array();
$lang['home_text'] = 'Use the form below to submit an ASCII-armored PGP public key. After submission, you will receive an email asking you to confirm your email address. Once confirmation is completed, mail sent to your email address via our mail server will be encrypted with your PGP public key.';
$lang['home_footer'] = '<a href="https://github.com/uakfdotb/gpg-mailgate">gpg-mailgate and gpg-mailgate-web</a> are released under the <a href="https://www.gnu.org/licenses/lgpl-3.0.txt">GNU LGPL</a>.';
$lang['home_text'] = 'Use the form below to submit your PGP public key. After submission, you will receive an email asking you to confirm your email address. Once confirmation is completed, mail sent to your email address via our mail server will be encrypted with your PGP public key.';
$lang['home_footer'] = '<a href="https://git.disroot.org/Lacre/lacre-webgate">gpg-lacre</a> and <a href="https://git.disroot.org/Lacre/lacre-webgate">lacre-webgate</a> are released under the <a href="https://www.gnu.org/licenses/lgpl-3.0.txt">GNU LGPL</a>.';
$lang['home_emaildesc'] = 'Your email address (must match key)';
$lang['home_keydesc'] = 'ASCII-armored PGP public key';
$lang['home_keydesc'] = 'PGP public key';
$lang['home_submitkey'] = 'Submit key';
$lang['submit_success'] = 'Key submission successful. Please check your email to confirm your email address.';
@ -44,4 +44,5 @@ $lang['confirm_fail_general'] = 'Error: failed to confirm any email address. You
$lang['mail_confirm'] = "Please confirm your email address to complete the submission process. You can do so by clicking the link below\n\n%s\n\nThanks,\ngpg-mailgate-web";
$lang['info_back'] = 'Go back';
?>

View File

@ -1,133 +0,0 @@
:root {
--main-bg-color: #203040;
--main-dark: darken(var(--main-bg-color), 90%);
--main-font: Tahoma, Verdana, Arial, sans-serif;
--main-font-color: #E3DEDB;
--main-linkcolor: #BB2244;
--main-hovercolor: #2C4359;
/* --bg-color: #203040 ;
--logo-color: #BB2244;
--highlight-color: #DD4466;
--txt-color: #E3DEDB;
--select-color: #2C4359;
*/
/* background colors */
--bg-hs: 210, 33%;
--bg-l:19%;
--bg: hsl(var(--bg-hs),var(--bg-l));
--bg-darker: hsl(var(--bg-hs),calc(var(--bg-l) - 5%));
--bg-darkest: hsl(var(--bg-hs),calc(var(--bg-l) - 10%));
/* main color */
--main-hs: 347, 69%;
--main-l: 43%;
--main: hsl(var(--main-hs),var(--main-l));
--main-darker: hsl(var(--main-hs),calc(var(--main-l) - 5%));
--main-darkest: hsl(var(--main-hs),calc(var(--main-l) - 10%));
/* font color */
--font-hs: 23, 12%;
--font-l: 87%;
--font: hsl(var(--font-hs),var(--font-l));
--font-darker: hsl(var(--font-hs),calc(var(--font-l) - 5%));
--font-darkest: hsl(var(--font-hs),calc(var(--font-l) - 70%));
}
html {
background-color: var(--bg-darkest);
}
body {
width: 70%;
margin: 0 auto;
background-color: var(--bg);
color: var(--font);
font-family: var(--main-font);
line-height: 1.2;
text-align: center;
}
.wrapper {
margin: 0 20%;
}
.padding {
padding: 3rem 1rem;
}
img.logo {
width: 70%;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
}
.cover {
width: 100%;
margin-left: 0;
object-fit: cover;
}
.hide {
display:none;
}
a {
color: var(--main);
text-decoration:none;
}
a:hover {
color: var(--main-darker);
}
.txtinfo {
padding: 2rem;
}
.key {
width: 80%;
margin: 1rem auto;
height: 150px;
padding: 12px 20px;
border-radius: 10px;
border: 1px solid var(--main);
background-color: var(--font);
color: var(--bg);
font-family: var(--main-font);
resize: none;
}
.email {
width: 50%;
margin: 1rem auto;
padding: 12px 20px;
border-radius: 10px;
border: 1px solid var(--main);
background-color: var(--font);
color: var(--bg);
font-family: var(--main-font);
resize: none;
}
input[type=submit] {
background-color: var(--main-darker);
border-radius: 4px;
border: 0px;
color: var(--font);
padding: 16px 32px;
margin: 4px 2px;
cursor: pointer;
}
input:hover[type=submit] {
background-color: var(--main-darkest);
}
.infomsg {
width: 70%;
margin: 0 auto;
border-radius: 4px;
border: 2px;
border-color: var(--main);
background-color: var(--bg); /*shold be bg-darker but hidden when empty*/
color: var(--main);
font-family: var(--main-font);
resize: none;
}
#infomsg p:empty {
display: none;
}
#infomsg p {
padding: 12px 24px;
}

3
public_html/themes/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*
!lacre
!lacre/*

View File

@ -0,0 +1,180 @@
:root {
/* background colors */
--bg-color-hs: 210, 33%;
--bg-color-l:19%;
--bg-color: hsl(var(--bg-color-hs),var(--bg-color-l));
--bg-color-darker: hsl(var(--bg-color-hs),calc(var(--bg-color-l) - 5%));
--bg-color-darkest: hsl(var(--bg-color-hs),calc(var(--bg-color-l) - 10%));
--bg-color-select: hsl(var(--bg-color-hs),calc(var(--bg-color-l) + 10%));
/* main color */
--main-color-hs: 347, 69%;
--main-color-l: 43%;
--main-color: hsl(var(--main-color-hs),var(--main-color-l));
--main-color-darker: hsl(var(--main-color-hs),calc(var(--main-color-l) - 5%));
--main-color-darkest: hsl(var(--main-color-hs),calc(var(--main-color-l) - 10%));
/* font color */
--text-color-hs: 23, 12%;
--text-color-l: 87%;
--text-color: hsl(var(--text-color-hs),var(--text-color-l));
--text-color-darker: hsl(var(--text-color-hs),calc(var(--text-color-l) - 5%));
--text-color-darkest: hsl(var(--text-color-hs),calc(var(--text-color-l) - 70%));
/* font family */
font-family: 'comfortaa', 'opensans-regular', sans-serif;
}
html {
background-color: var(--bg-color-darkest);
}
body {
width: 60%;
margin: 0 auto;
background-color: var(--bg-color);
color: var(--text-color);
font-family: var(--main-font);
line-height: 1.2;
text-align: center;
}
.wrapper {
margin: 0 10%;
}
.padding {
padding: .5rem 1rem;
}
.header {
background-color: var(--text-color);
color: var(--bg-color);
position: relative;
top: -2rem;
z-index: 99;
}
.header a {
color: var(--bg-color);
}
.header .logo {
font-size: 1.7rem;
text-transform: uppercase;
}
.narrow .row { max-width: 980px; }
.banner {
position: relative;
overflow:hidden;
z-index: 999;
pointer-events: none;
}
.banner img {
width: 70%;
margin: 0 15%;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
}
.cover {
width: 100%;
margin-left: 0;
object-fit: cover;
}
.hide {
display:none;
}
a {
color: var(--main-color);
text-decoration:none;
}
a:hover {
color: var(--main-color-darker);
}
.txtinfo {
padding: 2rem;
}
.key {
width: 70%;
margin: 1rem auto;
height: 600px;
padding: 12px 20px;
border-radius: 10px;
border: 1px solid var(--main-color);
background-color: var(--text-color);
color: var(--bg-color);
font-family: var(--main-font);
resize: none;
}
.email {
width: 50%;
margin: 1rem auto;
padding: 12px 20px;
border-radius: 10px;
border: 1px solid var(--main-color);
background-color: var(--text-color);
color: var(--bg-color);
font-family: var(--main-font);
resize: none;
}
input[type=submit] {
background-color: var(--main-color-darker);
border-radius: 4px;
border: 0px;
color: var(--text-color);
padding: 16px 32px;
margin: 4px 2px;
cursor: pointer;
}
input:hover[type=submit] {
background-color: var(--main-color-darkest);
}
#infomsg p:empty {
display: none;
}
#infomsg p {
padding: 2em;
width: 80%;
margin: 0 auto;
border-radius: 4px;
background-color: var(--bg-color-darker); /*shold be bg-darker but hidden when empty*/
color: var(--main-font-color);
font-family: var(--main-font);
resize: none;
}
.main-nav {
width: 80%;
margin: 0 auto;
}
.main-nav ul {
text-align: left;
letter-spacing: -1em;
margin: 0;
padding: 0;
}
.main-nav ul li {
display: inline-block;
letter-spacing: normal;
}
.main-nav ul li a {
position: relative;
display: block;
line-height: 45px;
color: var(--bg);
padding: 0 20px;
white-space: nowrap;
}
.main-nav > ul > li > a {
border-radius: 2px;
}
.main-nav ul li:hover > a {
background-color: var(--bg-color-select);
color: var(--text-color);
}
.main-nav ul li.selected > a {
background-color: #fff;
color: var(--bg-color-darker);
}
.main-nav ul li ul li {
display: block;
}
.main-nav li:hover > ul {
display: block;
}

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -21,5 +21,9 @@
*/
?>
<div id=footer>
<img src="themes/<?= $config['site_theme'] ?>/img/bottom_ribbon.png" class="cover">
<p><?= $lang['home_footer'] ?></p>
</div>
</body>
</html>

View File

@ -0,0 +1,41 @@
<?php
/*
gpg-mailgate
This file is part of the gpg-mailgate source code.
gpg-mailgate 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.
gpg-mailgate source code 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.
You should have received a copy of the GNU General Public License
along with gpg-mailgate source code. If not, see <http://www.gnu.org/licenses/>.
*/
?>
<form id="keyform" method="POST">
<p>
<label for="email"><?= $lang['home_emaildesc'] ?></label>
<br>
<input type="text" class="email" name="email" required>
</p>
<p>
<label for="key"><?= $lang['home_keydesc'] ?></label>
<br>
<!--input type="text" class="key" name="key" required-->
<textarea rows="5" cols="80" name="key" id="key" class="key"></textarea>
</p>
<p>
<input type="submit" value="<?= $lang['home_submitkey'] ?>" />
</p>
</form>

View File

@ -0,0 +1,45 @@
<?php
/*
gpg-mailgate
This file is part of the gpg-mailgate source code.
gpg-mailgate 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.
gpg-mailgate source code 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.
You should have received a copy of the GNU General Public License
along with gpg-mailgate source code. If not, see <http://www.gnu.org/licenses/>.
*/
?>
<html>
<head>
<title>Lacre - PGP key management</title>
</head>
<body>
<div id=header>
<div class="banner narrow">
<a href <?= $config['site_url'] ?>><img src="themes/<?= $config['site_theme'] ?>/<?= $config['site_logo'] ?>" class="center banner"></a>
</div>
<div class="header">
<nav class="main-nav">
<ul>
<li class="selected"><a href="/">Home</a></li>
<li class=""><a href="<?= $config['site_faqurl'] ?>">FAQ</a></li>
<li class=""><a href="<?= $config['site_howurl'] ?>">Help</a></li>
<li class=""><a href="<?= $config['site_contacturl'] ?>">Contact</a></li>
</ul>
</nav>
</div>
</div>
<h1><?= $config['site_title'] ?></h1>

View File

@ -19,20 +19,14 @@
along with gpg-mailgate source code. If not, see <http://www.gnu.org/licenses/>.
*/
echo "<link rel='stylesheet' href='theme/style.css' type='text/css'>";
echo '<link rel="stylesheet" href="themes/'.$config['site_theme'].'/css/style.css" type="text/css">';
?>
<div id=header>
<a href <?= $config['site_url'] ?>><img src="theme/branding/logo.png" class="center logo"></a>
<h1><?= $config['site_title'] ?></h1>
</div>
<div class="wrapper padding">
<? if(!empty($message)) { ?>
<div id=infomsg><p><b><i><?= htmlspecialchars($message) ?></i></b></p></div>
<? } ?>
<? if(!empty($fullform)) { ?>
<p><?= $lang['home_text'] ?></p>
<? if($result === false) { ?>
<form id="keyform" method="POST">
<p>
<label for="email"><?= $lang['home_emaildesc'] ?></label>
@ -49,10 +43,7 @@ echo "<link rel='stylesheet' href='theme/style.css' type='text/css'>";
<input type="submit" value="<?= $lang['home_submitkey'] ?>" />
</p>
</form>
<? } ?>
<? } ?>
</div>
<div id=footer>
<img src="theme/branding/bottom_ribbon.png" class="cover">
<p><?= $lang['home_footer'] ?></p>
</div>

View File

@ -1,3 +1,4 @@
<?php
/*
@ -18,11 +19,17 @@
You should have received a copy of the GNU General Public License
along with gpg-mailgate source code. If not, see <http://www.gnu.org/licenses/>.
*/
*/
echo '<link rel="stylesheet" href="themes/'.$config['site_theme'].'/css/style.css" type="text/css">';
?>
<html>
<head>
<title>Lacre - PGP key management</title>
</head>
<body>
<div class="wrapper padding">
<? if(!empty($message)) { ?>
<div id=infomsg><p><?= htmlspecialchars($message) ?></p></div>
<? } ?>
<p>
<input type="submit" value="<?= $lang['info_back'] ?>" onclick="parent.location='index.php'">
</p>
</div>