Merge branch 'RaspAP:master' into master

This commit is contained in:
Yo 2023-09-09 17:54:06 +02:00 committed by GitHub
commit 80836f3da4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 3031 additions and 324 deletions

View File

@ -24,8 +24,9 @@ The following features are currently available exclusively to sponsors. A tangib
✅ [MAC address cloning](https://docs.raspap.com/net-devices/#changing-the-mac-address)
✅ [Network diagnostics](https://docs.raspap.com/net-devices/#diagnostics)
✅ [WireGuard VPN kill switch](https://docs.raspap.com/wireguard/#kill-switch)
⚙️ Dynamic DNS support (in progress)
✅ [Dynamic DNS](https://docs.raspap.com/dynamicdns/)
✅ [Multiple WireGuard configs](https://docs.raspap.com/wireguard/#multiple-configs)
Look for the list above to grow as we add more exclusive features. Be sure to visit this page from time to time to learn about what's new, check the [Insiders docs page](https://docs.raspap.com/insiders/) and follow [@RaspAP on Twitter](https://twitter.com/rasp_ap) to stay updated.
## Funding targets

View File

@ -1,5 +1,5 @@
![](https://i.imgur.com/xeKD93p.png)
[![Release 2.9.2](https://img.shields.io/badge/release-v2.9.2-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) [![Build Status](https://app.travis-ci.com/RaspAP/raspap-webgui.svg?branch=master)](https://app.travis-ci.com/RaspAP/raspap-webgui) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/)
[![Release 2.9.3](https://img.shields.io/badge/release-v2.9.3-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) [![Build Status](https://app.travis-ci.com/RaspAP/raspap-webgui.svg?branch=master)](https://app.travis-ci.com/RaspAP/raspap-webgui) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/) [![Join the chat at https://app.gitter.im/#/room/#RaspAP:gitter.im](https://img.shields.io/badge/chat-on%20gitter-brightgreen)](https://app.gitter.im/#/room/#RaspAP:gitter.im)
RaspAP is feature-rich wireless router software that _just works_ on many popular [Debian-based devices](#supported-operating-systems), including the Raspberry Pi. Our popular [Quick installer](#quick-installer) creates a known-good default configuration for all current Raspberry Pis with onboard wireless. A fully responsive, mobile-ready interface gives you control over the relevant services and networking options. Advanced DHCP settings, WireGuard and OpenVPN support, [SSL certificates](https://docs.raspap.com/ssl-quick/), security audits, [captive portal integration](https://docs.raspap.com/captive/), themes and [multilingual options](https://docs.raspap.com/translations/) are included.
@ -32,7 +32,7 @@ We hope you enjoy using RaspAP as much as we do creating it. Tell us how you use
- [License](#license)
## Prerequisites
Start with a clean install of the [latest release of Raspberry Pi OS (32-bit) Lite](https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit). The Raspberry Pi OS desktop and 64-bit beta distros are unsupported.
Start with a clean install of the [latest release of Raspberry Pi OS Lite](https://www.raspberrypi.com/software/operating-systems/). Both the 32- and 64-bit Lite versions are supported. The Raspberry Pi OS desktop distro is [unsupported](https://docs.raspap.com/faq/#distros).
1. Update Raspbian, including the kernel and firmware, followed by a reboot:
```

View File

@ -9,6 +9,7 @@ if (isset($_POST['interface'])) {
define( 'NL80211_BAND_24GHZ', 0x1 );
define( 'NL80211_BAND_5GHZ', 0x2 );
$iface = escapeshellcmd($_POST['interface']);
$flags = 0;
// get physical device for selected interface
exec("iw dev | awk '/$iface/ {print line}{line = $0}'", $return);

View File

@ -46,6 +46,7 @@ if (isset($interface)) {
preg_match('/static\sdomain_name_server=(.*)/', $matched[0], $static_dns);
preg_match('/fallback\sstatic_'.$interface.'/', $matched[0], $fallback);
preg_match('/(?:no)?gateway/', $matched[0], $gateway);
preg_match('/nohook\swpa_supplicant/', $matched[0], $nohook_wpa_supplicant);
$dhcpdata['Metric'] = $metric[1];
$dhcpdata['StaticIP'] = strpos($static_ip[1],'/') ? substr($static_ip[1], 0, strpos($static_ip[1],'/')) : $static_ip[1];
$dhcpdata['SubnetMask'] = cidr2mask($static_ip[1]);
@ -53,6 +54,7 @@ if (isset($interface)) {
$dhcpdata['StaticDNS'] = $static_dns[1];
$dhcpdata['FallbackEnabled'] = empty($fallback) ? false: true;
$dhcpdata['DefaultRoute'] = $gateway[0] == "gateway";
$dhcpdata['NoHookWPASupplicant'] = $nohook_wpa_supplicant[0] == "nohook wpa_supplicant";
echo json_encode($dhcpdata);
}

627
app/css/material-dark.php Normal file
View File

@ -0,0 +1,627 @@
<?php header("Content-Type: text/css; charset=utf-8"); ?>
<?php
require_once '../../includes/functions.php';
$color = getColorOpt();
?>
/*
Theme Name: Material Dark
Author: @marek-guran
Author URI: https://github.com/marek-guran
Description: Inspired by Google's Material You Design
License: GNU General Public License v3.0
*/
<?php
// Base color
$baseColor = $color;
// Function to darken a color by a percentage
function darkenColor($color, $percent)
{
$percent /= 100;
$r = hexdec(substr($color, 1, 2));
$g = hexdec(substr($color, 3, 2));
$b = hexdec(substr($color, 5, 2));
$r = round($r * (1 - $percent));
$g = round($g * (1 - $percent));
$b = round($b * (1 - $percent));
return sprintf("#%02x%02x%02x", $r, $g, $b);
}
// Function to lighten a color by a percentage
function lightenColor($color, $percent)
{
$percent /= 100;
$r = hexdec(substr($color, 1, 2));
$g = hexdec(substr($color, 3, 2));
$b = hexdec(substr($color, 5, 2));
$r = round($r + (255 - $r) * $percent);
$g = round($g + (255 - $g) * $percent);
$b = round($b + (255 - $b) * $percent);
return sprintf("#%02x%02x%02x", $r, $g, $b);
}
$textColor = lightenColor($baseColor, 95);
// Create other color variables
$cardsColor = darkenColor($baseColor, 60);
$secondaryColor = lightenColor($baseColor, 30);
$primaryColor = $baseColor;
$backgroundColor = darkenColor($baseColor, 90);
?>
@import url('all.css');
body {
background-color: <?php echo $backgroundColor; ?>;
}
html * {
font-family: Helvetica,Arial,sans-serif;
color: <?php echo $textColor; ?>;
}
.nav-item.active .nav-link {
position: relative;
background-color: <?php echo $secondaryColor; ?>;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
border-top-right-radius: 18px;
border-bottom-right-radius: 18px;
}
h2 {
font-size: 2rem !important;
}
h4 {
font-size: 1.3rem;
}
h5.card-title {
font-size: 1.2rem;
}
.page-header {
border-left: .01rem solid <?php echo $secondaryColor; ?>;
border-bottom: .01rem solid <?php echo $secondaryColor; ?>;
}
.sidebar-light .nav-item.active .nav-link i {
color: <?php echo $textColor; ?>;
}
.sidebar .nav-item.active .nav-link {
font-weight: 400;
}
.sidebar .nav-item .nav-link span:hover {
color: <?php echo $textColor; ?>!important;
}
#wrapper #content-wrapper #content {
background-color: <?php echo $backgroundColor; ?>;
}
.topbar {
background-color: <?php echo $backgroundColor; ?>;
}
.col {
color: <?php echo $textColor; ?>;
}
.card-header .col i.fa-tachometer-alt,
.card-header .col i.fa-dot-circle,
.card-header .col i.fa-wifi,
.card-header .col i.fa-exchange-alt,
.card-header .col i.fa-hand-paper,
.card-header .col i.fa-network-wired,
.card-header .col i.fa-key,
.card-header .ra-wireguard,
.card-header .ra-wireguard:before,
.card-header .col i.fa-user-lock,
.card-header .col i.fa-chart-bar,
.card-header .col i.fa-cube,
.card-header .col i.fa-info-circle,
.card-header .col i.fa-globe,
.card-header .col i.fa-shield-alt {
color: <?php echo $textColor; ?>;
}
i.fa-bars {
color: <?php echo $primaryColor; ?>;
}
.nav-tabs {
border-bottom: 1px solid <?php echo $secondaryColor; ?>;
}
.nav-tabs .nav-link.active,
.nav-tabs .nav-link {
font-size: 1.0rem;
border-top-left-radius: 18px;
border-top-right-radius: 18px;
}
.nav-tabs .nav-link:hover {
border-color: transparent;
}
.navbar-default .navbar-brand:hover {
color: #d2d2d2;
}
.navbar-default .navbar-toggle {
border-color: transparent;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #d2d2d2;
}
.navbar-default .navbar-toggle:focus,
.navbar-default .navbar-toggle:hover {
background-color: <?php echo $backgroundColor; ?>;
}
#content, .navbar, .sidebar, .footer, .sticky-footer {
background-attachment: scroll;
background-repeat: repeat;
background-size: auto;
background-position: 0 0;
background-origin: padding-box;
background-clip: border-box;
}
.sticky-footer {
background-position: 30px 0;
}
.sidebar {
background-position: 0 20px;
}
.nav-tabs .nav-link.active {
color: <?php echo $textColor; ?>;
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
}
a:focus, a:hover {
color: #d2d2d2;
}
.card>.card-header, .modal-content, .modal-header {
border-color: transparent;
background-color: <?php echo $primaryColor; ?>;
color: <?php echo $textColor; ?>;
border-radius: 18px;
font-size: 1.0rem;
font-weight: 400;
}
.modal-body {
background-color: <?php echo $backgroundColor; ?>;
}
.card-header {
border-bottom-left-radius: 0px!important;
border-bottom-right-radius: 0px!important;
position: relative;
margin-bottom: -18px;
}
.card>.card-header .fa {
color: <?php echo $backgroundColor; ?>;
}
.card-header [class^="fa"] {
color: <?php echo $textColor; ?>;
font-size: 1.0rem;
}
.card, .card-body {
border-color: transparent;
border-radius: 18px;
background-color: <?php echo $cardsColor; ?>;
box-shadow: 0px -5px 5px rgba(0, 0, 0, 0.1),
0px 4px 6px rgba(0, 0, 0, 0.1);
}
.card-body {
padding-top: 36px; /* 18px to move down + 18px space at the top */
padding-bottom: 36px; /* 18px space at the bottom */
}
.unstyled {
background-color: <?php echo $cardsColor; ?>;
color: <?php echo $textColor; ?>;
}
hr {
border-top: .01rem solid <?php echo $secondaryColor; ?>;
}
.sidebar-brand-text {
color: <?php echo $secondaryColor; ?>;
}
.ra-raspap:before {
color: #ac1b3d !important;
}
.sidebar-light #sidebarToggle {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>; !important
}
.sidebar-light #sidebarToggle::after {
color: <?php echo $textColor; ?>;
}
.sidebar-light .nav-item .nav-link:hover i {
color: <?php echo $textColor; ?>;
}
.sidebar-light #sidebarToggle:hover {
background-color: <?php echo $secondaryColor; ?>;
}
.sidebar.toggled .nav-item .nav-link span {
display: none;
}
.sidebar.toggled .nav-item .nav-link {
text-align: center;
padding: .6rem 1rem;
width: 6.5rem;
}
.card-footer, .modal-footer {
background-color: <?php echo $primaryColor; ?>;
color: <?php echo $textColor; ?>;
border-top: 0px;
border-bottom-right-radius: 18px!important;
border-bottom-left-radius: 18px!important;
position: relative;
margin-top: -18px;
}
.modal-footer {
border-radius: 18px;
}
.card>.card-header::before, .navbar-default::before {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 2;
background-size: 100% 2px, 3px 100%;
pointer-events: none;
}
.sidebar-light, .sticky-footer {
background-color: <?php echo $backgroundColor; ?>;
}
.sidebar-light .nav-item .nav-link i {
color: rgba(230, 230, 230, .3);
}
.sidebar .nav-item .nav-link {
padding: 0.6rem;
padding-left: 1.2rem;
}
.sidebar-light hr.sidebar-divider {
border-top: 1px solid <?php echo $secondaryColor; ?>;
padding-top: 0.5rem;
}
.sidebar .nav-item .nav-link span {
font-size: 1.0rem;
}
.topbar .topbar-divider {
border-right: 1px solid <?php echo $secondaryColor; ?>;
}
.label-warning {
background-color: #d2d2d2;
}
span.label.label-warning {
color: <?php echo $backgroundColor; ?>;
}
.table>tbody>tr>td,
.table>tbody>tr>th,
.table>tfoot>tr>td,
.table>tfoot>tr>th,
.table>thead>tr>td,
.table>thead>tr>th {
background-color: <?php echo $primaryColor; ?>;
border-top: .01rem solid <?php echo $backgroundColor; ?>;
}
.table{
border-radius: 18px;
overflow: hidden;
}
.table>thead>tr>th {
vertical-align: bottom;
border-bottom: 0 solid <?php echo $secondaryColor; ?>;
}
[class*="btn"], [class*="btn"]:focus, [class*="btn"]:disabled {
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
border-radius: 18px;
color: <?php echo $textColor; ?>;
}
[class*="btn"]:hover {
border-radius: 18px;
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border-color: transparent;
}
[class*="btn"]:hover .disabled {
background-color:red;
}
[class*="alert"] {
border-radius: 18px;
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid #404040;
}
.close {
font-size: 1.2em;
font-weight: 400;
text-shadow: none;
color: <?php echo $textColor; ?>;
}
.form-control,
.form-control:focus,
.custom-select {
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-radius: 18px;
}
.form-control:disabled,
.form-control[readonly] {
background-color: <?php echo $backgroundColor; ?>;
opacity: 0.5;
}
.form-control::-webkit-input-placeholder { color: #d2d2d2; }
.form-control:-moz-placeholder { color: #d2d2d2; }
.form-control::-moz-placeholder { color: #d2d2d2; }
.form-control:-ms-input-placeholder { color: #d2d2d2; }
.form-control::-ms-input-placeholder { color: #d2d2d2; }
.form-control option {
font-size: 1em;
}
input[type="text"]{
color: <?php echo $textColor; ?>; !important
}
.progress {
background-color: <?php echo $backgroundColor; ?>;
border-radius: 18px;
}
.progress-bar {
color: <?php echo $backgroundColor; ?>;
}
#progressBar {
background-color: <?php echo $secondaryColor; ?>!important;
}
.progress-bar.bg-success {
background-color: <?php echo $primaryColor; ?>!important;
color: <?php echo $textColor; ?>!important;
}
.progress .progress-bar {
padding-left: 5px;
}
.progress-bar.progress-bar-info.progress-bar-striped.active {
background-color: <?php echo $secondaryColor; ?>;
}
.figure-img {
filter: opacity(0.7);
}
.ra-wireguard:before {
color: #404040 !important;
}
.ra-wireguard:hover:before {
color: #d1d3e2 !important;
}
.sidebar .nav-item.active .nav-link span.ra-wireguard:before {
color: #d2d2d2 !important;
}
.custom-control-input:checked ~ .custom-control-label::before {
background-color: <?php echo $secondaryColor; ?>;
}
.custom-control-input:checked ~ .custom-control-label::before {
background-color: <?php echo $primaryColor; ?>;
border-color: <?php echo $primaryColor; ?>;
}
.wg-keygen {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid yellow <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
.btn.btn-outline-secondary.js-add-dhcp-upstream-server {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
.btn.btn-outline-success.js-add-dhcp-static-lease {
border: 1px solid <?php echo $secondaryColor; ?>;
}
.btn.btn-outline-success.js-add-dhcp-static-lease:hover {
background-color: <?php echo $primaryColor; ?>;
}
.text-muted {
font-size: 0.8rem;
}
.fas.fa-circle {
font-size: 0.7rem;
}
pre {
background-color: <?php echo $backgroundColor; ?>;
border: <?php echo $backgroundColor; ?>;
}
button.btn.btn-light.js-toggle-password {
border: 1px solid <?php echo $secondaryColor; ?>;
}
.btn-primary {
border-color: transparent;
background-color: <?php echo $primaryColor; ?>;
}
.btn-primary:hover {
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
}
.btn.service-status {
background-color: <?php echo $backgroundColor; ?>;
}
input.btn.btn-success {
background-color: <?php echo $secondaryColor; ?>;
}
input.btn.btn-success:hover {
background-color: <?php echo $backgroundColor; ?>;
border-color: transparent;
}
.signal-icon .signal-bar {
background: <?php echo $secondaryColor; ?>;
}
.figure-img {
border-radius: 18px;
}
.logoutput {
border-radius: 18px!important;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid <?php echo $primaryColor; ?>!important;
}
.btn-sm {
border-top-right-radius: 18px!important;
border-bottom-right-radius: 18px!important;
}
.signal-icon .signal-bar {
background: <?php echo $secondaryColor; ?>;
}
input.btn.btn-warning {
background-color: <?php echo $secondaryColor; ?>;
}
input.btn.btn-warning:hover {
background-color: <?php echo $backgroundColor; ?>;!important
}
button.btn.btn-danger {
background-color: <?php echo $secondaryColor; ?>;
}
button.btn.btn-danger:hover {
background-color: <?php echo $backgroundColor; ?>;!important
}
.btn-group label.active {
background-color: <?php echo $primaryColor; ?>!important;
border-color:transparent!important;
color: <?php echo $textColor; ?>;!important
}
.btn-group {
background-color: <?php echo $cardsColor; ?>;!important
}
.btn-group:hover {
background-color: <?php echo $cardsColor; ?>;!important
}
.btn.btn-outline-secondary#gen_wpa_passphrase {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
a.scroll-to-top.rounded {
display: inline;
background-color: <?php echo $secondaryColor; ?>;
border-radius: 18px!important;
}
a.scroll-to-top.rounded i.fas.fa-angle-up {
color: <?php echo $textColor; ?>;
}
.btn.btn-sm.btn-outline-secondary.rounded-right {
border: 1px solid <?php echo $secondaryColor; ?>;
background-color: <?php echo $primaryColor; ?>;
}
.info-item.col-xs-3 {
color: <?php echo $textColor; ?>;
}
.text-muted {
color: <?php echo $textColor; ?>!important;
}
.grid-stack-item-content {
width: 100%;
height: 100%;
padding: 5px;
box-sizing: border-box;
}

633
app/css/material-light.php Normal file
View File

@ -0,0 +1,633 @@
<?php header("Content-Type: text/css; charset=utf-8"); ?>
<?php
require_once '../../includes/functions.php';
$color = getColorOpt();
?>
/*
Theme Name: Material Light
Author: @marek-guran
Author URI: https://github.com/marek-guran
Description: Inspired by Google's Material You Design
License: GNU General Public License v3.0
*/
<?php
// Base color
$baseColor = $color;
// Function to darken a color by a percentage
function darkenColor($color, $percent)
{
$percent /= 100;
$r = hexdec(substr($color, 1, 2));
$g = hexdec(substr($color, 3, 2));
$b = hexdec(substr($color, 5, 2));
$r = round($r * (1 - $percent));
$g = round($g * (1 - $percent));
$b = round($b * (1 - $percent));
return sprintf("#%02x%02x%02x", $r, $g, $b);
}
// Function to lighten a color by a percentage
function lightenColor($color, $percent)
{
$percent /= 100;
$r = hexdec(substr($color, 1, 2));
$g = hexdec(substr($color, 3, 2));
$b = hexdec(substr($color, 5, 2));
$r = round($r + (255 - $r) * $percent);
$g = round($g + (255 - $g) * $percent);
$b = round($b + (255 - $b) * $percent);
return sprintf("#%02x%02x%02x", $r, $g, $b);
}
$textColor = lightenColor($baseColor, 95);
// Create other color variables
$cardsColor = lightenColor($baseColor, 50);
$secondaryColor = lightenColor($baseColor, 30);
$primaryColor = $baseColor;
$backgroundColor = lightenColor($baseColor, 60);
?>
@import url('all.css');
body {
background-color: <?php echo $backgroundColor; ?>;
}
html * {
font-family: Helvetica,Arial,sans-serif;
color: <?php echo $textColor; ?>;
}
.nav-item.active .nav-link {
position: relative;
background-color: <?php echo $secondaryColor; ?>;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
border-top-right-radius: 18px;
border-bottom-right-radius: 18px;
}
h2 {
font-size: 2rem !important;
}
h4 {
font-size: 1.3rem;
}
h5.card-title {
font-size: 1.2rem;
}
.page-header {
border-left: .01rem solid <?php echo $secondaryColor; ?>;
border-bottom: .01rem solid <?php echo $secondaryColor; ?>;
}
.sidebar-light .nav-item.active .nav-link i {
color: <?php echo $textColor; ?>;
}
.sidebar .nav-item.active .nav-link {
font-weight: 400;
color: <?php echo $primaryColor; ?>;
}
#wrapper #content-wrapper #content {
background-color: <?php echo $backgroundColor; ?>;
}
.topbar {
background-color: <?php echo $backgroundColor; ?>;
}
.col {
color: <?php echo $textColor; ?>;
}
.card-header .col i.fa-tachometer-alt,
.card-header .col i.fa-dot-circle,
.card-header .col i.fa-wifi,
.card-header .col i.fa-exchange-alt,
.card-header .col i.fa-hand-paper,
.card-header .col i.fa-network-wired,
.card-header .col i.fa-key,
.card-header .ra-wireguard,
.card-header .ra-wireguard:before,
.card-header .col i.fa-user-lock,
.card-header .col i.fa-chart-bar,
.card-header .col i.fa-cube,
.card-header .col i.fa-info-circle,
.card-header .col i.fa-globe,
.card-header .col i.fa-shield-alt {
color: <?php echo $textColor; ?>;
}
i.fa-bars {
color: <?php echo $primaryColor; ?>;
}
.nav-tabs {
border-bottom: 1px solid <?php echo $secondaryColor; ?>;
}
.nav-tabs .nav-link.active,
.nav-tabs .nav-link {
font-size: 1.0rem;
border-top-left-radius: 18px;
border-top-right-radius: 18px;
}
.nav-tabs .nav-link:hover {
border-color: transparent;
}
.navbar-default .navbar-brand:hover {
color: #d2d2d2;
}
.navbar-default .navbar-toggle {
border-color: transparent;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #d2d2d2;
}
.navbar-default .navbar-toggle:focus,
.navbar-default .navbar-toggle:hover {
background-color: <?php echo $backgroundColor; ?>;
}
#content, .navbar, .sidebar, .footer, .sticky-footer {
background-attachment: scroll;
background-repeat: repeat;
background-size: auto;
background-position: 0 0;
background-origin: padding-box;
background-clip: border-box;
}
.sticky-footer {
background-position: 30px 0;
}
.sidebar {
background-position: 0 20px;
}
.nav-tabs .nav-link.active {
color: <?php echo $textColor; ?>;
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
}
a:focus, a:hover {
color: #d2d2d2;
}
.card>.card-header, .modal-content, .modal-header {
border-color: transparent;
background-color: <?php echo $primaryColor; ?>;
color: <?php echo $textColor; ?>;
border-radius: 18px;
font-size: 1.0rem;
font-weight: 400;
}
.modal-body {
background-color: <?php echo $backgroundColor; ?>;
}
.card-header {
border-bottom-left-radius: 0px!important;
border-bottom-right-radius: 0px!important;
position: relative;
margin-bottom: -18px;
}
.card>.card-header .fa {
color: <?php echo $backgroundColor; ?>;
}
.card-header [class^="fa"] {
color: <?php echo $textColor; ?>;
font-size: 1.0rem;
}
.card, .card-body {
border-color: transparent;
border-radius: 18px;
background-color: <?php echo $cardsColor; ?>;
box-shadow: 0px -5px 5px rgba(0, 0, 0, 0.1),
0px 4px 6px rgba(0, 0, 0, 0.1);
}
.card-body {
padding-top: 36px; /* 18px to move down + 18px space at the top */
padding-bottom: 36px; /* 18px space at the bottom */
}
.unstyled {
background-color: <?php echo $cardsColor; ?>;
color: <?php echo $textColor; ?>;
}
hr {
border-top: .01rem solid <?php echo $secondaryColor; ?>;
}
.sidebar-brand-text {
color: <?php echo $primaryColor; ?>;
}
.ra-raspap:before {
color: #ac1b3d !important;
}
.sidebar-light #sidebarToggle {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>; !important
}
.sidebar-light #sidebarToggle::after {
color: <?php echo $textColor; ?>;
}
.sidebar-light .nav-item .nav-link:hover i {
color: <?php echo $primaryColor; ?>;
}
.sidebar-light #sidebarToggle:hover {
background-color: <?php echo $secondaryColor; ?>;
}
.sidebar.toggled .nav-item .nav-link span {
display: none;
}
.sidebar.toggled .nav-item .nav-link {
text-align: center;
padding: .6rem 1rem;
width: 6.5rem;
}
.card-footer, .modal-footer {
background-color: <?php echo $primaryColor; ?>;
color: <?php echo $textColor; ?>;
border-top: 0px;
border-bottom-right-radius: 18px!important;
border-bottom-left-radius: 18px!important;
position: relative;
margin-top: -18px;
}
.modal-footer {
border-radius: 18px;
}
.card>.card-header::before, .navbar-default::before {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 2;
background-size: 100% 2px, 3px 100%;
pointer-events: none;
}
.sidebar-light, .sticky-footer {
background-color: <?php echo $backgroundColor; ?>;
}
.sidebar-light .nav-item .nav-link i {
color: <?php echo $textColor; ?>;;
}
.sidebar .nav-item .nav-link {
padding: 0.6rem;
padding-left: 1.2rem;
}
.sidebar-light hr.sidebar-divider {
border-top: 1px solid <?php echo $secondaryColor; ?>;
padding-top: 0.5rem;
}
.sidebar .nav-item .nav-link span {
font-size: 1.0rem;
}
.sidebar .nav-item .nav-link span:hover {
color: <?php echo $primaryColor; ?>!important;
}
.topbar .topbar-divider {
border-right: 1px solid <?php echo $secondaryColor; ?>;
}
.label-warning {
background-color: #d2d2d2;
}
span.label.label-warning {
color: <?php echo $backgroundColor; ?>;
}
.table>tbody>tr>td,
.table>tbody>tr>th,
.table>tfoot>tr>td,
.table>tfoot>tr>th,
.table>thead>tr>td,
.table>thead>tr>th {
background-color: <?php echo $primaryColor; ?>;
border-top: .01rem solid <?php echo $backgroundColor; ?>;
}
.table{
border-radius: 18px;
overflow: hidden;
}
.table>thead>tr>th {
vertical-align: bottom;
border-bottom: 0 solid <?php echo $secondaryColor; ?>;
}
[class*="btn"], [class*="btn"]:focus, [class*="btn"]:disabled {
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
border-radius: 18px;
color: <?php echo $textColor; ?>;
}
[class*="btn"]:hover {
border-radius: 18px;
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border-color: transparent;
}
[class*="btn"]:hover .disabled {
background-color:red;
}
[class*="alert"] {
border-radius: 18px;
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid #404040;
}
.close {
font-size: 1.2em;
font-weight: 400;
text-shadow: none;
color: <?php echo $textColor; ?>;
}
.form-control,
.form-control:focus,
.custom-select {
color: <?php echo $textColor; ?>;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-radius: 18px;
}
.form-control:disabled,
.form-control[readonly] {
background-color: <?php echo $backgroundColor; ?>;
opacity: 0.5;
}
.form-control::-webkit-input-placeholder { color: #d2d2d2; }
.form-control:-moz-placeholder { color: #d2d2d2; }
.form-control::-moz-placeholder { color: #d2d2d2; }
.form-control:-ms-input-placeholder { color: #d2d2d2; }
.form-control::-ms-input-placeholder { color: #d2d2d2; }
.form-control option {
font-size: 1em;
}
.form-control::placeholder {
color: <?php echo $textColor; ?>;
}
input[type="text"]{
color: <?php echo $textColor; ?>; !important
}
.progress {
background-color: <?php echo $backgroundColor; ?>;
border-radius: 18px;
}
.progress-bar {
color: <?php echo $backgroundColor; ?>;
}
#progressBar {
background-color: <?php echo $secondaryColor; ?>!important;
}
.progress-bar.bg-success {
background-color: <?php echo $primaryColor; ?>!important;
color: <?php echo $textColor; ?>!important;
}
.progress .progress-bar {
padding-left: 5px;
}
.progress-bar.progress-bar-info.progress-bar-striped.active {
background-color: <?php echo $secondaryColor; ?>;
}
.figure-img {
filter: opacity(0.7);
}
.ra-wireguard:before {
color: <?php echo $textColor; ?>!important;
}
.ra-wireguard:hover:before {
color: <?php echo $primaryColor; ?>!important;
}
.sidebar .nav-item.active .nav-link span.ra-wireguard:before {
color: <?php echo $textColor; ?>!important;
}
.custom-control-input:checked ~ .custom-control-label::before {
background-color: <?php echo $secondaryColor; ?>;
}
.custom-control-input:checked ~ .custom-control-label::before {
background-color: <?php echo $primaryColor; ?>;
border-color: <?php echo $primaryColor; ?>;
}
.wg-keygen {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid yellow <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
.btn.btn-outline-secondary.js-add-dhcp-upstream-server {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
.btn.btn-outline-success.js-add-dhcp-static-lease {
border: 1px solid <?php echo $secondaryColor; ?>;
}
.btn.btn-outline-success.js-add-dhcp-static-lease:hover {
background-color: <?php echo $primaryColor; ?>;
}
.text-muted {
font-size: 0.8rem;
}
.fas.fa-circle {
font-size: 0.7rem;
}
pre {
background-color: <?php echo $backgroundColor; ?>;
border: <?php echo $backgroundColor; ?>;
}
button.btn.btn-light.js-toggle-password {
border: 1px solid <?php echo $secondaryColor; ?>;
}
.btn-primary {
border-color: transparent;
background-color: <?php echo $primaryColor; ?>;
}
.btn-primary:hover {
background-color: <?php echo $secondaryColor; ?>;
border-color: transparent;
}
.btn.service-status {
background-color: <?php echo $secondaryColor; ?>;
}
input.btn.btn-success {
background-color: <?php echo $secondaryColor; ?>;
}
input.btn.btn-success:hover {
background-color: <?php echo $backgroundColor; ?>;
border-color: transparent;
}
.signal-icon .signal-bar {
background: <?php echo $secondaryColor; ?>;
}
.figure-img {
border-radius: 18px;
}
.logoutput {
border-radius: 18px!important;
background-color: <?php echo $backgroundColor; ?>;
border: 1px solid <?php echo $primaryColor; ?>!important;
}
.btn-sm {
border-top-right-radius: 18px!important;
border-bottom-right-radius: 18px!important;
}
.signal-icon .signal-bar {
background: <?php echo $secondaryColor; ?>;
}
input.btn.btn-warning {
background-color: <?php echo $secondaryColor; ?>;
}
input.btn.btn-warning:hover {
background-color: <?php echo $backgroundColor; ?>;!important
}
button.btn.btn-danger {
background-color: <?php echo $secondaryColor; ?>;
}
button.btn.btn-danger:hover {
background-color: <?php echo $backgroundColor; ?>;!important
}
.btn-group label.active {
background-color: <?php echo $primaryColor; ?>!important;
border-color:transparent!important;
color: <?php echo $textColor; ?>;!important
}
.btn-group {
background-color: <?php echo $cardsColor; ?>;!important
}
.btn-group:hover {
background-color: <?php echo $cardsColor; ?>;!important
}
.btn.btn-outline-secondary#gen_wpa_passphrase {
background-color: <?php echo $primaryColor; ?>;
border: 1px solid <?php echo $secondaryColor; ?>;
border-top-right-radius: 18px !important;
border-bottom-right-radius: 18px !important;
}
a.scroll-to-top.rounded {
display: inline;
background-color: <?php echo $secondaryColor; ?>;
border-radius: 18px!important;
}
a.scroll-to-top.rounded i.fas.fa-angle-up {
color: <?php echo $textColor; ?>;
}
.btn.btn-sm.btn-outline-secondary.rounded-right {
border: 1px solid <?php echo $secondaryColor; ?>;
background-color: <?php echo $primaryColor; ?>;
}
.info-item.col-xs-3 {
color: <?php echo $textColor; ?>;
}
.text-muted {
color: <?php echo $textColor; ?>!important;
}
.grid-stack-item-content {
width: 100%;
height: 100%;
padding: 5px;
box-sizing: border-box;
}

View File

@ -216,6 +216,12 @@ function loadInterfaceDHCPSelect() {
$('#txtgateway').val(jsonData.StaticRouters);
$('#chkfallback')[0].checked = jsonData.FallbackEnabled;
$('#default-route').prop('checked', jsonData.DefaultRoute);
if (strInterface.startsWith("wl")) {
$('#nohook-wpa-supplicant').parent().parent().parent().show()
$('#nohook-wpa-supplicant').prop('checked', jsonData.NoHookWPASupplicant);
} else {
$('#nohook-wpa-supplicant').parent().parent().parent().hide()
}
$('#txtrangestart').val(jsonData.RangeStart);
$('#txtrangeend').val(jsonData.RangeEnd);
$('#txtrangeleasetime').val(jsonData.leaseTime);
@ -530,12 +536,27 @@ function set_theme(theme) {
}
$(function() {
var currentTheme = getCookie('theme');
// Check if the current theme is a dark theme
var isDarkTheme = currentTheme === 'lightsout.css' || currentTheme === 'material-dark.php';
$('#night-mode').prop('checked', isDarkTheme);
$('#night-mode').change(function() {
var state = $(this).is(':checked');
if (state == true && getCookie('theme') != 'lightsout.css') {
set_theme('lightsout.css');
var currentTheme = getCookie('theme');
if (state == true) {
if (currentTheme == 'custom.php') {
set_theme('lightsout.css');
} else if (currentTheme == 'material-light.php') {
set_theme('material-dark.php');
}
} else {
set_theme('custom.php');
if (currentTheme == 'lightsout.css') {
set_theme('custom.php');
} else if (currentTheme == 'material-dark.php') {
set_theme('material-light.php');
}
}
});
});
@ -558,6 +579,8 @@ var themes = {
"default": "custom.php",
"hackernews" : "hackernews.css",
"lightsout" : "lightsout.css",
"material-light" : "material-light.php",
"material-dark" : "material-dark.php",
}
// Toggles the sidebar navigation.

View File

@ -7,6 +7,16 @@ if (theme == 'lightsout.css') {
var bgColor2 = '#141414';
var borderColor = 'rgba(37, 153, 63, 1)';
var labelColor = 'rgba(37, 153, 63, 1)';
} else if (theme == 'material-light.php') {
var bgColor1 = 'rgba(255, 255, 255, 0.5)';
var bgColor2 = 'rgba(0, 0, 0, 0.5)';
var borderColor = '#f2f2fb';
var labelColor = '#f2f2fb';
} else if (theme == 'material-dark.php') {
var bgColor1 = 'rgba(255, 255, 255, 0.5)';
var bgColor2 = 'rgba(0, 0, 0, 0.5)';
var borderColor = '#f2f2fb';
var labelColor = '#f2f2fb';
} else {
var bgColor1 = '#d4edda';
var bgColor2 = '#eaecf4';

View File

@ -40,10 +40,16 @@ class Sysinfo
return $uptime;
}
public function systime()
{
$systime = exec("date");
return $systime;
}
public function usedMemory()
{
$used = shell_exec("free -m | awk 'NR==2{ total=$2 ; used=$3 } END { print used/total*100}'");
return floor($used);
return floor(intval($used));
}
public function processorCount()

View File

@ -20,5 +20,5 @@ country_code=GB
## RaspAP wireless client AP mode
#interface=uap0
## RaspAP bridge AP mode (disabled by default)
## RaspAP bridge AP mode, disabled by default
#bridge=br0

View File

@ -75,8 +75,11 @@ function DisplayAdBlockConfig()
$dnsmasq_state = ($dnsmasq[0] > 0);
$serviceStatus = $dnsmasq_state && $enabled ? "up" : "down";
$adblock_custom_content = file_get_contents(RASPI_ADBLOCK_LISTPATH .'custom.txt');
if (file_exists(RASPI_ADBLOCK_LISTPATH .'custom.txt')) {
$adblock_custom_content = file_get_contents(RASPI_ADBLOCK_LISTPATH .'custom.txt');
} else {
$adblock_custom_content = '';
}
$adblock_log = '';
exec('sudo chmod o+r '.RASPI_DHCPCD_LOG);
$handle = fopen(RASPI_DHCPCD_LOG, "r");

View File

@ -6,7 +6,7 @@ if (!defined('RASPI_CONFIG')) {
$defaults = [
'RASPI_BRAND_TEXT' => 'RaspAP',
'RASPI_VERSION' => '2.9.2',
'RASPI_VERSION' => '2.9.3',
'RASPI_CONFIG_NETWORK' => RASPI_CONFIG.'/networking/defaults.json',
'RASPI_ADMIN_DETAILS' => RASPI_CONFIG.'/raspap.auth',
'RASPI_WIFI_AP_INTERFACE' => 'wlan0',

View File

@ -187,12 +187,14 @@ function updateDnsmasqConfig($iface,$status)
}
// Static leases
$staticLeases = array();
for ($i=0; $i < count($_POST["static_leases"]["mac"]); $i++) {
$mac = trim($_POST["static_leases"]["mac"][$i]);
$ip = trim($_POST["static_leases"]["ip"][$i]);
$comment = trim($_POST["static_leases"]["comment"][$i]);
if ($mac != "" && $ip != "") {
$staticLeases[] = array('mac' => $mac, 'ip' => $ip, 'comment' => $comment);
if (isset($_POST["static_leases"]["mac"])) {
for ($i=0; $i < count($_POST["static_leases"]["mac"]); $i++) {
$mac = trim($_POST["static_leases"]["mac"][$i]);
$ip = trim($_POST["static_leases"]["ip"][$i]);
$comment = trim($_POST["static_leases"]["comment"][$i]);
if ($mac != "" && $ip != "") {
$staticLeases[] = array('mac' => $mac, 'ip' => $ip, 'comment' => $comment);
}
}
}
// Sort ascending by IPs
@ -253,24 +255,27 @@ function updateDHCPConfig($iface,$status)
{
$cfg[] = '# RaspAP '.$iface.' configuration';
$cfg[] = 'interface '.$iface;
if (isset($_POST['StaticIP'])) {
if (isset($_POST['StaticIP']) && $_POST['StaticIP'] !== '') {
$mask = ($_POST['SubnetMask'] !== '' && $_POST['SubnetMask'] !== '0.0.0.0') ? '/'.mask2cidr($_POST['SubnetMask']) : null;
$cfg[] = 'static ip_address='.$_POST['StaticIP'].$mask;
}
if (isset($_POST['DefaultGateway'])) {
$cfg[] = 'static routers='.$_POST['DefaultGateway'];
if (isset($_POST['DefaultGateway']) && $_POST['DefaultGateway'] !== '') {
$cfg[] = 'static routers='.$_POST['DefaultGateway'];
}
if ($_POST['DNS1'] !== '' || $_POST['DNS2'] !== '') {
$cfg[] = 'static domain_name_server='.$_POST['DNS1'].' '.$_POST['DNS2'];
}
if ($_POST['Metric'] !== '') {
$cfg[] = 'metric '.$_POST['Metric'];
$cfg[] = 'metric '.$_POST['Metric'];
}
if ($_POST['Fallback'] == 1) {
$cfg[] = 'profile static_'.$iface;
$cfg[] = 'fallback static_'.$iface;
}
$cfg[] = $_POST['DefaultRoute'] == '1' ? 'gateway' : 'nogateway';
if (( substr($iface, 0, 2) === "wl") && $_POST['NoHookWPASupplicant'] == '1') {
$cfg[] = 'nohook wpa_supplicant';
}
$dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG);
if (!preg_match('/^interface\s'.$iface.'$/m', $dhcp_cfg)) {
$cfg[] = PHP_EOL;

View File

@ -52,11 +52,15 @@ function mask2cidr($mask)
*/
function cidr2mask($cidr)
{
$ta = substr ($cidr, strpos ($cidr, '/') + 1) * 1;
$netmask = str_split (str_pad (str_pad ('', $ta, '1'), 32, '0'), 8);
foreach ($netmask as &$element)
$element = bindec ($element);
return join ('.', $netmask);
$ipParts = explode('/', $cidr);
$ip = $ipParts[0];
$prefixLength = $ipParts[1];
$ipLong = ip2long($ip);
$netmaskLong = bindec(str_pad(str_repeat('1', $prefixLength), 32, '0'));
$netmask = long2ip(intval($netmaskLong));
return $netmask;
}
/**
@ -314,23 +318,23 @@ function CSRFMetaTag()
*/
function CSRFValidate()
{
$post_token = $_POST['csrf_token'];
$header_token = $_SERVER['HTTP_X_CSRF_TOKEN'];
if(isset($_POST['csrf_token'])) {
$post_token = $_POST['csrf_token'];
$header_token = $_SERVER['HTTP_X_CSRF_TOKEN'];
if (empty($post_token) && empty($header_token)) {
return false;
}
$request_token = $post_token;
if (empty($post_token)) {
$request_token = $header_token;
}
if (hash_equals($_SESSION['csrf_token'], $request_token)) {
return true;
} else {
error_log('CSRF violation');
return false;
if (empty($post_token) && empty($header_token)) {
return false;
}
$request_token = $post_token;
if (empty($post_token)) {
$request_token = $header_token;
}
if (hash_equals($_SESSION['csrf_token'], $request_token)) {
return true;
} else {
error_log('CSRF violation');
return false;
}
}
}
@ -426,8 +430,9 @@ function ParseConfig($arrConfig)
continue;
}
list($option, $value) = array_map("trim", explode("=", $line, 2));
if (strpos($line, "=") !== false) {
list($option, $value) = array_map("trim", explode("=", $line, 2));
}
if (empty($config[$option])) {
$config[$option] = $value ?: true;
} else {
@ -680,8 +685,10 @@ function getColorOpt()
}
function getSidebarState()
{
if ($_COOKIE['sidebarToggled'] == 'true' ) {
return"toggled";
if(isset($_COOKIE['sidebarToggled'])) {
if ($_COOKIE['sidebarToggled'] == 'true' ) {
return "toggled";
}
}
}

View File

@ -40,22 +40,25 @@ function DisplayHostAPDConfig()
exec($cmd, $txpower);
$txpower = intval($txpower[0]);
if (isset($_POST['interface'])) {
$interface = escapeshellarg($_POST['interface']);
}
if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['SaveHostAPDSettings'])) {
SaveHostAPDConfig($arrSecurity, $arrEncType, $arr80211Standard, $interfaces, $status);
}
}
$arrHostapdConf = parse_ini_file('/etc/raspap/hostapd.ini');
$arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini');
if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['StartHotspot']) || isset($_POST['RestartHotspot'])) {
$status->addMessage('Attempting to start hotspot', 'info');
if ($arrHostapdConf['BridgedEnable'] == 1) {
exec('sudo /etc/raspap/hostapd/servicestart.sh --interface br0 --seconds 3', $return);
exec('sudo '.RASPI_CONFIG.'/hostapd/servicestart.sh --interface br0 --seconds 3', $return);
} elseif ($arrHostapdConf['WifiAPEnable'] == 1) {
exec('sudo /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3', $return);
exec('sudo '.RASPI_CONFIG.'/hostapd/servicestart.sh --interface uap0 --seconds 3', $return);
} else {
exec('sudo /etc/raspap/hostapd/servicestart.sh --seconds 3', $return);
exec('sudo '.RASPI_CONFIG.'/hostapd/servicestart.sh --seconds 3', $return);
}
foreach ($return as $line) {
$status->addMessage($line, 'info');
@ -69,9 +72,11 @@ function DisplayHostAPDConfig()
}
}
exec('cat '. RASPI_HOSTAPD_CONFIG, $hostapdconfig);
exec('iwgetid '. escapeshellarg($_POST['interface']). ' -r', $wifiNetworkID);
if (!empty($wifiNetworkID[0])) {
$managedModeEnabled = true;
if (isset($interface)) {
exec('iwgetid '. $interface. ' -r', $wifiNetworkID);
if (!empty($wifiNetworkID[0])) {
$managedModeEnabled = true;
}
}
$hostapdstatus = $system->hostapdStatus();
$serviceStatus = $hostapdstatus[0] == 0 ? "down" : "up";
@ -98,16 +103,18 @@ function DisplayHostAPDConfig()
$arrConfig['country_code'] = $country_code[0];
}
// set txpower with iw if value is non-default ('auto')
if (isset($_POST['txpower']) && ($_POST['txpower'] != 'auto')) {
$txpower = intval($_POST['txpower']);
$sdBm = $txpower * 100;
exec('sudo /sbin/iw dev '.escapeshellarg($_POST['interface']).' set txpower fixed '.$sdBm, $return);
$status->addMessage('Setting transmit power to '.$_POST['txpower'].' dBm.', 'success');
$txpower = $_POST['txpower'];
} elseif ($_POST['txpower'] == 'auto') {
exec('sudo /sbin/iw dev '.escapeshellarg($_POST['interface']).' set txpower auto', $return);
$status->addMessage('Setting transmit power to '.$_POST['txpower'].'.', 'success');
$txpower = $_POST['txpower'];
if (isset($_POST['txpower'])) {
if ($_POST['txpower'] != 'auto') {
$txpower = intval($_POST['txpower']);
$sdBm = $txpower * 100;
exec('sudo /sbin/iw dev '.$interface.' set txpower fixed '.$sdBm, $return);
$status->addMessage('Setting transmit power to '.$_POST['txpower'].' dBm.', 'success');
$txpower = $_POST['txpower'];
} elseif ($_POST['txpower'] == 'auto') {
exec('sudo /sbin/iw dev '.$interface.' set txpower auto', $return);
$status->addMessage('Setting transmit power to '.$_POST['txpower'].'.', 'success');
$txpower = $_POST['txpower'];
}
}
$countries_5Ghz_max48ch = RASPI_5GHZ_ISO_ALPHA2;
@ -132,6 +139,8 @@ function DisplayHostAPDConfig()
if ($selectedHwMode === $hwModeDisabled) {
unset($selectedHwMode);
}
} else {
$hwModeDisabled = null;
}
echo renderTemplate(
@ -168,13 +177,16 @@ function DisplayHostAPDConfig()
*/
function SaveHostAPDConfig($wpa_array, $enc_types, $modes, $interfaces, $status)
{
// It should not be possible to send bad data for these fields so clearly
// someone is up to something if they fail. Fail silently.
// It should not be possible to send bad data for these fields.
// If wpa fields are absent, return false and log securely.
if (!(array_key_exists($_POST['wpa'], $wpa_array)
&& array_key_exists($_POST['wpa_pairwise'], $enc_types)
&& array_key_exists($_POST['hw_mode'], $modes))
) {
error_log("Attempting to set hostapd config with wpa='".$_POST['wpa']."', wpa_pairwise='".$_POST['wpa_pairwise']."' and hw_mode='".$_POST['hw_mode']."'"); // FIXME: log injection
$err = "Attempting to set hostapd config with wpa='".escapeshellarg($_POST['wpa']);
$err .= "', wpa_pairwise='".$escapeshellarg(_POST['wpa_pairwise']);
$err .= "and hw_mode='".$escapeshellarg(_POST['hw_mode'])."'";
error_log($err);
return false;
}
// Validate input

View File

@ -75,6 +75,9 @@ if (empty($_SESSION['locale']) && strlen($_SERVER['HTTP_ACCEPT_LANGUAGE']) >= 2)
case "pl":
$locale = "pl_PL.UTF-8";
break;
case "sk":
$locale = "sk_SK.UTF-8";
break;
default:
$locale = "en_GB.UTF-8";
break;
@ -117,10 +120,10 @@ function getLocales()
'pt_BR.UTF-8' => 'Português',
'ru_RU.UTF-8' => 'Русский',
'ro_RO.UTF-8' => 'Română',
'sk_SK.UTF-8' => 'Slovenčina',
'sv_SE.UTF-8' => 'Svenska',
'tr_TR.UTF-8' => 'Türkçe',
'vi_VN.UTF-8' => 'Tiếng Việt (Vietnamese)'
);
return $arrLocales;
return $arrLocales;
}

View File

@ -64,7 +64,7 @@ function DisplayOpenVPNConfig()
ftruncate($f, 0);
fclose($f);
}
} elseif (isset($_POST['log-openvpn']) || filesize('/tmp/openvpn.log') >0) {
} elseif (isset($_POST['log-openvpn']) || file_exists('/tmp/openvpn.log')) {
$logEnable = 1;
exec("sudo /etc/raspap/openvpn/openvpnlog.sh", $logOutput);
$logOutput = file_get_contents('/tmp/openvpn.log');

View File

@ -125,7 +125,11 @@ function DisplaySystem(&$extraFooterScripts)
exec('cat '. RASPI_LIGHTTPD_CONFIG, $return);
$conf = ParseConfig($return);
$serverPort = $conf['server.port'];
$serverBind = str_replace('"', '',$conf['server.bind']);
if (isset($conf['server.bind'])) {
$serverBind = str_replace('"', '',$conf['server.bind']);
} else {
$serverBind = '';
}
// define locales
$arrLocales = getLocales();
@ -138,6 +142,7 @@ function DisplaySystem(&$extraFooterScripts)
$cores = $system->processorCount();
$os = $system->operatingSystem();
$kernel = $system->kernelVersion();
$systime = $system->systime();
// mem used
$memused = $system->usedMemory();
@ -189,11 +194,13 @@ function DisplaySystem(&$extraFooterScripts)
// theme options
$themes = [
"default" => "RaspAP (default)",
"hackernews" => "HackerNews"
"hackernews" => "HackerNews",
"material-light" => "Material"
];
$themeFiles = [
"default" => "custom.php",
"hackernews" => "hackernews.css"
"hackernews" => "hackernews.css",
"material-light" => "material-light.php"
];
$selectedTheme = array_search($_COOKIE['theme'], $themeFiles);
@ -207,6 +214,7 @@ function DisplaySystem(&$extraFooterScripts)
"serverBind",
"hostname",
"uptime",
"systime",
"cores",
"os",
"kernel",
@ -222,6 +230,6 @@ function DisplaySystem(&$extraFooterScripts)
"hostapd_status",
"hostapd_led",
"themes",
"selectedTheme"
"selectedTheme"
));
}

View File

@ -77,44 +77,46 @@ function nearbyWifiStations(&$networks, $cached = true)
if ( isset($lastnet['index']) ) $index = $lastnet['index'] + 1;
}
array_shift($scan_results);
foreach ($scan_results as $network) {
$arrNetwork = preg_split("/[\t]+/", $network); // split result into array
$ssid = $arrNetwork[4];
if (is_array($scan_results)) {
array_shift($scan_results);
foreach ($scan_results as $network) {
$arrNetwork = preg_split("/[\t]+/", $network); // split result into array
$ssid = $arrNetwork[4];
// exclude raspap ssid
if (empty($ssid) || $ssid == $ap_ssid) {
continue;
}
// exclude raspap ssid
if (empty($ssid) || $ssid == $ap_ssid) {
continue;
}
// filter SSID string: unprintable 7bit ASCII control codes, delete or quotes -> ignore network
if (preg_match('[\x00-\x1f\x7f\'\`\´\"]', $ssid)) {
continue;
}
// filter SSID string: unprintable 7bit ASCII control codes, delete or quotes -> ignore network
if (preg_match('[\x00-\x1f\x7f\'\`\´\"]', $ssid)) {
continue;
}
// If network is saved
if (array_key_exists($ssid, $networks)) {
$networks[$ssid]['visible'] = true;
$networks[$ssid]['channel'] = ConvertToChannel($arrNetwork[1]);
// TODO What if the security has changed?
} else {
$networks[$ssid] = array(
'ssid' => $ssid,
'configured' => false,
'protocol' => ConvertToSecurity($arrNetwork[3]),
'channel' => ConvertToChannel($arrNetwork[1]),
'passphrase' => '',
'visible' => true,
'connected' => false,
'index' => $index
);
++$index;
}
// If network is saved
if (array_key_exists($ssid, $networks)) {
$networks[$ssid]['visible'] = true;
$networks[$ssid]['channel'] = ConvertToChannel($arrNetwork[1]);
// TODO What if the security has changed?
} else {
$networks[$ssid] = array(
'ssid' => $ssid,
'configured' => false,
'protocol' => ConvertToSecurity($arrNetwork[3]),
'channel' => ConvertToChannel($arrNetwork[1]),
'passphrase' => '',
'visible' => true,
'connected' => false,
'index' => $index
);
++$index;
}
// Save RSSI, if the current value is larger than the already stored
if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) {
if (! array_key_exists('RSSI', $networks[$arrNetwork[4]]) || $networks[$ssid]['RSSI'] < $arrNetwork[2]) {
$networks[$ssid]['RSSI'] = $arrNetwork[2];
// Save RSSI, if the current value is larger than the already stored
if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) {
if (! array_key_exists('RSSI', $networks[$arrNetwork[4]]) || $networks[$ssid]['RSSI'] < $arrNetwork[2]) {
$networks[$ssid]['RSSI'] = $arrNetwork[2];
}
}
}
}

View File

@ -14,7 +14,7 @@
* @author Lawrence Yau <sirlagz@gmail.com>
* @author Bill Zimmerman <billzimmerman@gmail.com>
* @license GNU General Public License, version 3 (GPL-3.0)
* @version 2.9.2
* @version 2.9.3
* @link https://github.com/RaspAP/raspap-webgui/
* @link https://raspap.com/
* @see http://sirlagz.net/2013/02/08/raspap-webgui/

View File

@ -140,7 +140,13 @@ function _get_linux_distro() {
# Sets php package option based on Linux version, abort if unsupported distro
function _set_php_package() {
case $RELEASE in
22.04|20.04|18.04|19.10|11*) # Ubuntu Server, Debian 11 & Armbian 22.05
23.05|12*) # Debian 12 & Armbian 23.05
php_package="php8.2-cgi"
phpcgiconf="/etc/php/8.2/cgi/php.ini" ;;
23.04) # Ubuntu Server 23.04
php_package="php8.1-cgi"
phpcgiconf="/etc/php/8.1/cgi/php.ini" ;;
22.04|20.04|18.04|19.10|11*) # Previous Ubuntu Server, Debian & Armbian distros
php_package="php7.4-cgi"
phpcgiconf="/etc/php/7.4/cgi/php.ini" ;;
10*|11*)
@ -165,6 +171,8 @@ function _set_php_package() {
function _manage_systemd_services() {
_install_log "Checking for systemd network services"
_check_notify_ubuntu
services=( "systemd-networkd" "systemd-resolved" )
for svc in "${services[@]}"; do
# Prompt to disable systemd service
@ -189,10 +197,27 @@ function _manage_systemd_services() {
_install_status 0
}
# Notifies Ubuntu users of pre-install requirements
function _check_notify_ubuntu() {
if [ ${OS,,} = "ubuntu" ]; then
_install_status 2 "Ubuntu Server requires manual pre- and post-install steps. See https://docs.raspap.com/manual/"
echo -n "Proceed with installation? [Y/n]: "
read answer < /dev/tty
if [ "$answer" != "${answer#[Nn]}" ]; then
echo "Installation aborted."
exit 0
else
_install_status 0
fi
fi
}
# Runs a system software update to make sure we're using all fresh packages
function _install_dependencies() {
_install_log "Installing required packages"
_set_php_package
# OS-specific packages
if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|18.04|19.10|11) ]]; then
echo "Adding apt-repository ppa:ondrej/php"
sudo apt-get install -y software-properties-common || _install_status 1 "Unable to install dependency"
@ -202,11 +227,13 @@ function _install_dependencies() {
fi
if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then
dhcpcd_package="dhcpcd5"
iw_package="iw"
fi
# Set dconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent $php_package $dhcpcd_package vnstat qrencode || _install_status 1 "Unable to install dependencies"
sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent $php_package $dhcpcd_package $iw_package vnstat qrencode || _install_status 1 "Unable to install dependencies"
_install_status 0
}
@ -461,6 +488,10 @@ function _download_latest_files() {
fi
_install_log "Cloning latest files from github"
if [ "$repo" == "RaspAP/raspap-insiders" ]; then
_install_status 3
echo "Insiders please read this: https://docs.raspap.com/insiders/#authentication"
fi
git clone --branch $branch --depth 1 -c advice.detachedHead=false $git_source_url /tmp/raspap-webgui || _install_status 1 "Unable to download files from github"
sudo mv /tmp/raspap-webgui $webroot_dir || _install_status 1 "Unable to move raspap-webgui to web root"
@ -718,11 +749,17 @@ function _optimize_php() {
function _install_complete() {
_install_log "Installation completed"
echo "Join RaspAP Insiders for early access to exclusive features!"
echo -e "${ANSI_RASPBERRY}"
echo "> https://docs.raspap.com/insiders/"
echo "> https://github.com/sponsors/RaspAP/"
echo -e "${ANSI_RESET}"
if [ "$repo" == "RaspAP/raspap-insiders" ]; then
echo -e "${ANSI_RASPBERRY}"
echo "Thank you for supporting this project as an Insider!"
echo -e "${ANSI_RESET}"
else
echo "Join RaspAP Insiders for early access to exclusive features!"
echo -e "${ANSI_RASPBERRY}"
echo "> https://docs.raspap.com/insiders/"
echo "> https://github.com/sponsors/RaspAP/"
echo -e "${ANSI_RESET}"
fi
if [ "$assume_yes" == 0 ]; then
# Prompt to reboot if wired ethernet (eth0) is connected.
# With default_configuration this will create an active AP on restart.

View File

@ -234,6 +234,8 @@ function _install_status() {
2)
echo -e "[$ANSI_YELLOW \U26A0 warning $ANSI_RESET] $2"
;;
3)
echo -e "[$ANSI_RASPBERRY ! important $ANSI_RESET] $2"
esac
}

Binary file not shown.

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: raspap\n"
"Report-Msgid-Bugs-To: Bill Zimmerman <billzimmerman@gmail.com>\n"
"POT-Creation-Date: 2017-10-19 08:56+0000\n"
"PO-Revision-Date: 2023-02-22 08:17\n"
"PO-Revision-Date: 2023-06-22 05:56\n"
"Last-Translator: Bill Zimmerman <billzimmerman@gmail.com>\n"
"Language-Team: German\n"
"Language: de_DE\n"
@ -433,8 +433,8 @@ msgstr "Format"
msgid "Choose a hosted server"
msgstr "Gehosteten Server auswählen"
msgid "Enable these options to log DHCP server activity."
msgstr "Aktivieren Sie diese Optionen, um die DHCP-Serveraktivität zu protokollieren."
msgid "Enable these options to log <code>dhcpcd</code> and <code>dnsmasq</code> activity."
msgstr "Diese Optionen Aktivieren <code>dhcpcd</code> und <code>dnsmasq</code> Logging."
msgid "Log DHCP requests"
msgstr "DHCP-Anfragen protokollieren"
@ -485,8 +485,8 @@ msgstr "Sicherheitstyp"
msgid "Encryption Type"
msgstr "Verschlüsselungstyp"
msgid "Pre-shared key (PSK)"
msgstr "Pre-Shared-Key (PSK)"
msgid "PSK"
msgstr "PSK"
msgid "Advanced settings"
msgstr "Erweiterte Einstellungen"
@ -606,7 +606,7 @@ msgid "Scan this QR code directly or %s %sprint a sign%s for your users."
msgstr "QR-Code direkt scannen oder %s %sein Zeichen drucken%s für die Benutzer."
msgid "Printable Wi-Fi sign"
msgstr ""
msgstr "Printable Wi-Fi sign"
msgid "To connect with your phone or tablet, scan the QR code above with your camera app."
msgstr "Um sich mit dem Telefon oder Tablet zu verbinden, den obigen QR-Code mit der Kamera-App scannen."
@ -617,6 +617,21 @@ msgstr "Für andere Geräte die Anmeldedaten unten verwenden."
msgid "Network"
msgstr "Netzwerk"
msgid "The selected interface (%s) has support for the 2.4 GHz wireless band only."
msgstr "Die ausgewählte Schnittstelle (%s) unterstützt nur das 2,4 GHz Band."
msgid "The selected interface (%s) has support for the 2.5 GHz wireless band only."
msgstr "Die ausgewählte Schnittstelle (%s) unterstützt nur das 2,4 GHz Band."
msgid "The selected interface (%s) has support for both the 2.4 and 5 GHz wireless bands."
msgstr "Die ausgewählte Schnittstelle (%s) unterstützt das 2,4 und 5 GHz Band."
msgid "The selected interface (%s) does not support wireless mode operation."
msgstr "Die ausgewählte Schnittstelle (%s) hat kein drahtloses Interface."
msgid "The 802.11ac 5 GHz option is disabled until a compatible wireless regulatory domain is set."
msgstr "Die 5 GHz Option ist deaktiviert, bis eine kompatible Domain gesetzt ist."
#: includes/networking.php
msgid "Summary"
msgstr "Zusammenfassung"
@ -711,6 +726,12 @@ msgstr "Fehler beim Speichern der Netzwerkkonfiguration"
msgid "Unable to detect interface"
msgstr "Schnittstelle kann nicht gefunden werden"
msgid "Routing table"
msgstr "Routingtabelle"
msgid "raw output"
msgstr "Raw Output"
#: includes/system.php
msgid "System Information"
msgstr "Systeminformationen"
@ -763,6 +784,12 @@ msgstr "Port des Webservers"
msgid "Web server bind address"
msgstr "Webserver Bindungsadresse"
msgid "OS"
msgstr "Betriebssystem"
msgid "Kernel"
msgstr "Kernel"
#: includes/themes.php
msgid "Theme settings"
msgstr "Oberflächendesign Einstellungen"
@ -877,7 +904,7 @@ msgstr "Einstellungen"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Derzeit verfügbare OpenVPN-Client-Konfigurationen werden unten angezeigt."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Die Aktivierung einer Konfiguration startet den Dienst <code>openvpn-client</code> neu."
msgid "Delete OpenVPN client"
@ -991,6 +1018,9 @@ msgstr "oben"
msgid "down"
msgstr "unten"
msgid "Clear log"
msgstr "Log löschen"
msgid "adblock"
msgstr "Werbesperre"

Binary file not shown.

View File

@ -464,6 +464,15 @@ msgstr "This option adds <code>dhcp-host</code> entries to the dnsmasq configura
msgid "This toggles the <code>gateway</code>/<code>nogateway</code> option for this interface in the DHCPCD configuration."
msgstr "This toggles the <code>gateway</code>/<code>nogateway</code> option for this interface in the DHCPCD configuration."
msgid "This toggles the <code>nohook wpa_supplicant</code> option for this interface in the DHCPCD configuration."
msgstr "This toggles the <code>nohook wpa_supplicant</code> option for this interface in the DHCPCD configuration."
msgid "Disable wpa_supplicant dhcp hook for this interface"
msgstr "Disable wpa_supplicant dhcp hook for this interface"
msgid "If you manage wireless connections with wpa_supplicant itself, the hook may create unwanted connection events. This option disables the hook."
msgstr "If you manage wireless connections with wpa_supplicant itself, the hook may create unwanted connection events. This option disables the hook."
#: includes/hostapd.php
msgid "Basic"
msgstr "Basic"
@ -728,6 +737,9 @@ msgstr "Pi Revision"
msgid "Uptime"
msgstr "Uptime"
msgid "System Time"
msgstr "System Time"
msgid "Memory Used"
msgstr "Memory Used"
@ -901,8 +913,8 @@ msgstr "Configurations"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Currently available OpenVPN client configurations are displayed below."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgstr "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Activating a configuration will restart the <code>openvpn-client</code> service."
msgid "Delete OpenVPN client"
msgstr "Delete OpenVPN client"

Binary file not shown.

View File

@ -844,7 +844,7 @@ msgstr "Configuraciones"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Las configuraciones de cliente OpenVPN actualmente disponibles se muestran a continuación."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Al activar una configuración, se reiniciará el servicio <code>openvpn-client</code>."
msgid "Delete OpenVPN client"

Binary file not shown.

View File

@ -877,7 +877,7 @@ msgstr "Configuration"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Les configurations des fichiers OpenVPN actuellement disponibles sont affichées ci-dessous."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "L'activation d'une configuration redémarrera le service <code>openvpn-client</code>."
msgid "Delete OpenVPN client"

Binary file not shown.

View File

@ -844,7 +844,7 @@ msgstr "Configurazioni"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Le configurazioni client OpenVPN attualmente disponibili sono visualizzate di seguito."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Attivando la configurazione si riavvierà il servizio <code>openvpn-client</code>."
msgid "Delete OpenVPN client"

View File

@ -844,7 +844,7 @@ msgstr "환경설정"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr ""
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr ""
msgid "Delete OpenVPN client"

Binary file not shown.

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: raspap\n"
"Report-Msgid-Bugs-To: Bill Zimmerman <billzimmerman@gmail.com>\n"
"POT-Creation-Date: 2017-10-19 08:56+0000\n"
"PO-Revision-Date: 2022-01-05 11:43\n"
"PO-Revision-Date: 2023-08-25 09:56\n"
"Last-Translator: Bill Zimmerman <billzimmerman@gmail.com>\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@ -40,7 +40,7 @@ msgid "Memory Use"
msgstr "Uso da memória"
msgid "CPU Temp"
msgstr "Temperatura do CPU"
msgstr "Temp CPU"
msgid "Networking"
msgstr "Rede"
@ -147,31 +147,31 @@ msgid "Not configured"
msgstr "Não configurado"
msgid "Connected"
msgstr ""
msgstr "Conectado"
msgid "Known"
msgstr ""
msgstr "Conhecido"
msgid "Nearby"
msgstr ""
msgstr "Ao redor"
msgid "<strong>Note:</strong> WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP"
msgstr "<strong>Nota:</strong> pontos de acesso WEP aparecem como 'Open'. Atualmente, o RaspAP não suporta conexão com WEP"
msgid "No Wifi stations found"
msgstr ""
msgstr "Nenhuma estação Wi-Fi encontrada"
msgid "Reinitializing wpa_supplicant"
msgstr ""
msgstr "Reinicializando wpa_supplicante"
msgid "Click 'Rescan' to search for nearby Wifi stations."
msgstr ""
msgstr "Clique em 'Reescanear' para procurar por estações Wi-Fi próximas."
msgid "Click 'Reinitialize' to force reinitialize <code>wpa_supplicant</code>."
msgstr ""
msgstr "Clique em 'Reiniciar' para forçar a reinicialização do <code>wpa_supplicant</code>."
msgid "Reinitialize"
msgstr ""
msgstr "Reiniciar"
#: includes/dashboard.php
msgid "Interface Information"
@ -268,58 +268,58 @@ msgid "Connected Devices"
msgstr "Dispositivos Conectados"
msgid "Client: Ethernet cable"
msgstr ""
msgstr "Cliente: Cabo Ethernet"
msgid "Ethernet"
msgstr ""
msgstr "Ethernet"
msgid "Client: Smartphone (USB tethering)"
msgstr ""
msgstr "Cliente: Smartphone (ligação USB)"
msgid "Smartphone"
msgstr ""
msgstr "Smartphone"
msgid "WiFi"
msgstr ""
msgstr "WiFi"
msgid "Mobile Data Client"
msgstr ""
msgstr "Cliente de dados móveis"
msgid "Mobile Data"
msgstr ""
msgstr "Dados móveis"
msgid "No information available"
msgstr ""
msgstr "Nenhuma informação disponível"
msgid "Interface name invalid"
msgstr ""
msgstr "Nome da interface inválido"
msgid "Required exec function is disabled. Check if exec is not added to php <code>disable_functions</code>."
msgstr ""
msgstr "A função exec necessária está desabilitada. Verifique se o exec não está adicionado ao php <code>disable_functions</code>."
msgid "Waiting for the interface to start ..."
msgstr ""
msgstr "Aguardando a interface iniciar..."
msgid "Stop the Interface"
msgstr ""
msgstr "Parar a Interface"
msgid "Connection mode"
msgstr ""
msgstr "Modo de conexão"
msgid "Signal quality"
msgstr ""
msgstr "Qualidade do sinal"
msgid "WAN IP"
msgstr ""
msgstr "WAN IP"
msgid "Web-GUI"
msgstr ""
msgstr "Web-GUI"
msgid "Signal strength"
msgstr ""
msgstr "Intensidade do sinal"
msgid "No Client device or not yet configured"
msgstr ""
msgstr "Nenhum dispositivo cliente ou ainda não configurado"
#: includes/dhcp.php
msgid "DHCP server settings"
@ -332,10 +332,10 @@ msgid "Interface"
msgstr "Inteface"
msgid "Enable DHCP for this interface"
msgstr ""
msgstr "Habilitar DHCP para esta interface"
msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface."
msgstr ""
msgstr "Habilite esta opção se você deseja que o RaspAP atribua endereços IP na interface selecionada."
msgid "DNS Server"
msgstr "Servidor DNS"
@ -368,7 +368,7 @@ msgid "MAC Address"
msgstr "Endereço MAC"
msgid "Optional comment"
msgstr ""
msgstr "Comentário opcional"
msgid "Host name"
msgstr "Nome de host"
@ -413,55 +413,55 @@ msgid "Dnsmasq is not running"
msgstr "Dnsmasq não executando"
msgid "Upstream DNS servers"
msgstr ""
msgstr "Servidores DNS Upstream"
msgid "Only ever query DNS servers configured below"
msgstr ""
msgstr "Sempre consultar servidores DNS configurados abaixo"
msgid "Enable this option if you want RaspAP to <b>send DNS queries to the servers configured below exclusively</b>. By default RaspAP also uses its upstream DHCP server's name servers."
msgstr ""
msgstr "Habilite esta opção se você quiser que o RaspAP <b>envie consultas DNS para os servidores configurados abaixo exclusivamente</b>. Por padrão, o RaspAP também usa seus servidores de nome do servidor DHCP upstream."
msgid "This option adds <code>no-resolv</code> to the dnsmasq configuration."
msgstr ""
msgstr "Esta opção adiciona <code>no-resolv</code> na configuração do dnsmasq."
msgid "Add upstream DNS server"
msgstr ""
msgstr "Adicionar servidor DNS upstream"
msgid "Format"
msgstr ""
msgstr "Formato"
msgid "Choose a hosted server"
msgstr ""
msgstr "Escolha um servidor hospedado"
msgid "Enable these options to log DHCP server activity."
msgstr ""
msgid "Enable these options to log <code>dhcpcd</code> and <code>dnsmasq</code> activity."
msgstr "Habilite essas opções para registrar as atividades <code>dhcpcd</code> e <code>dnsmasq</code>."
msgid "Log DHCP requests"
msgstr ""
msgstr "Registrar requisições DHCP"
msgid "Log DNS queries"
msgstr ""
msgstr "Registrar consultas DNS"
msgid "Restrict access"
msgstr ""
msgstr "Acesso restrito"
msgid "Limit network access to static clients"
msgstr ""
msgstr "Limitar o acesso da rede a clientes estáticos"
msgid "Enable this option if you want RaspAP to <b>ignore any clients</b> which are not specified in the static leases list."
msgstr ""
msgstr "Ative esta opção se você quiser que o RaspAP <b>ignore quaisquer clientes</b> que não são especificados na lista de concessões estáticas."
msgid "This option adds <code>dhcp-ignore</code> to the dnsmasq configuration."
msgstr ""
msgstr "Esta opção adiciona <code>dhcp-ignore</code> na configuração do dnsmasq."
msgid "Clients with a particular hardware MAC address can always be allocated the same IP address."
msgstr ""
msgstr "Os clientes com um endereço MAC de hardware específico podem sempre ter o mesmo endereço IP."
msgid "This option adds <code>dhcp-host</code> entries to the dnsmasq configuration."
msgstr ""
msgstr "Esta opção adiciona entradas <code>dhcp-host</code> na configuração do dnsmasq."
msgid "This toggles the <code>gateway</code>/<code>nogateway</code> option for this interface in the DHCPCD configuration."
msgstr ""
msgstr "Isto alterna a opção <code>de gateway</code>/<code>nogateway</code> para essa interface na configuração do DHCPCD."
#: includes/hostapd.php
msgid "Basic"
@ -486,7 +486,7 @@ msgid "Encryption Type"
msgstr "Tipo de Criptografia"
msgid "PSK"
msgstr ""
msgstr "PSK"
msgid "Advanced settings"
msgstr "Configurações avançadas"
@ -546,7 +546,7 @@ msgid "WiFi client AP mode"
msgstr "WiFi modo cliente AP"
msgid "Bridged AP mode"
msgstr ""
msgstr "Modo AP Bridged"
msgid "Hide SSID in broadcast"
msgstr "Esconder SSID em transmissão"
@ -555,41 +555,56 @@ msgid "Maximum number of clients"
msgstr "Número máximo de clientes"
msgid "Configures the <code>max_num_sta</code> option of hostapd. The default and maximum is 2007. If empty or 0, the default applies."
msgstr ""
msgstr "Configura a opção <code>max_num_sta</code> do hostapd. O padrão e máximo é 2007. Se vazio ou 0, o padrão se aplica."
msgid "Beacon interval"
msgstr ""
msgstr "Intervalo Beacon"
msgid "Disable <code>disassoc_low_ack</code>"
msgstr ""
msgstr "Desabilitar <code>disassoc_low_ack</code>"
msgid "Do not disassociate stations based on excessive transmission failures."
msgstr ""
msgstr "Não desassocie estações baseadas em falhas excessivas de transmissão."
msgid "Executing RaspAP service start"
msgstr ""
msgstr "Executando o serviço de inicialização RaspAP"
msgid "Close"
msgstr ""
msgstr "Fechar"
msgid "Enable this option to log <code>hostapd</code> activity."
msgstr ""
msgstr "Habilitar esta opção para registrar a atividade <code>hostapd</code>."
msgid "Transmit power (dBm)"
msgstr ""
msgstr "Potência de transmissão (dBm)"
msgid "Sets the <code>txpower</code> option for the AP interface and the configured country."
msgstr ""
msgstr "Define a opção <code>txpower</code> para a interface AP e o país configurado."
msgid "dBm is a unit of level used to indicate that a power ratio is expressed in decibels (dB) with reference to one milliwatt (mW). 30 dBm is equal to 1000 mW, while 0 dBm equals 1.25 mW."
msgstr ""
msgstr "dBm é uma unidade de nível usada para indicar que uma taxa de potência é expressa em decibéis (dB) com referência a um miliwatt (mW). 30 dBm é igual a 1000 mW, enquanto 0 dBm é igual a 1.25 mW."
msgid "The selected interface (%s) has support for the 2.4 GHz wireless band only."
msgstr "A interface selecionada (%s) tem suporte apenas para banda sem fio de 2.4 GHz."
msgid "The selected interface (%s) has support for the 2.5 GHz wireless band only."
msgstr "A interface selecionada (%s) tem suporte apenas para banda sem fio de 2.5 GHz."
msgid "The selected interface (%s) has support for both the 2.4 and 5 GHz wireless bands."
msgstr "A interface selecionada (%s) tem suporte apenas para as bandas sem fio de 2.4 e 2.5 GHz."
msgid "The selected interface (%s) does not support wireless mode operation."
msgstr "A interface selecionada (%s) não suporta operar no modo sem fio."
msgid "The 802.11ac 5 GHz option is disabled until a compatible wireless regulatory domain is set."
msgstr "A opção 802.11ac 5 GHz está desativada até que seja configurada a regulação local."
#: includes/networking.php
msgid "Summary"
msgstr "Sumário"
msgid "Internet connection"
msgstr ""
msgstr "Conexão de internet"
msgid "Current settings"
msgstr "Configurações atuais"
@ -619,7 +634,7 @@ msgid "Static IP Options"
msgstr "Opções de IP Estático"
msgid "Metric"
msgstr ""
msgstr "Métrica"
msgid "Apply settings"
msgstr "Aplicar Configurações"
@ -628,55 +643,61 @@ msgid "Information provided by /sys/class/net"
msgstr "Informação Provida por /sys/class/net"
msgid "Network Devices"
msgstr ""
msgstr "Dispositivos de Rede"
msgid "Mobile Data Settings"
msgstr ""
msgstr "Configurações de Dados Móveis"
msgid "Properties of network devices"
msgstr ""
msgstr "Propriedades dos dispositivos de rede"
msgid "Device"
msgstr ""
msgstr "Dispositivo"
msgid "MAC"
msgstr ""
msgstr "MAC"
msgid "USB vid/pid"
msgstr ""
msgstr "USB vid/pid"
msgid "Device type"
msgstr ""
msgstr "Tipo de dispositivo"
msgid "Fixed name"
msgstr ""
msgstr "Nome fixo"
msgid "Change"
msgstr ""
msgstr "Alterar"
msgid "Settings for Mobile Data Devices"
msgstr ""
msgstr "Configurações para dispositivos de dados móveis"
msgid "PIN of SIM card"
msgstr ""
msgstr "PIN do cartão SIM"
msgid "APN Settings (Modem device ppp0)"
msgstr ""
msgstr "Configurações do APN (dispositivo Modem ppp0)"
msgid "Access Point Name (APN)"
msgstr ""
msgstr "Nome do Ponto de Acesso (APN)"
msgid "Password"
msgstr ""
msgstr "Senha"
msgid "Successfully Updated Network Configuration"
msgstr ""
msgstr "Configuração de Rede Atualizada com Sucesso"
msgid "Error saving network configuration to file"
msgstr ""
msgstr "Erro ao salvar configuração de rede no arquivo"
msgid "Unable to detect interface"
msgstr ""
msgstr "Não foi possível detectar a interface"
msgid "Routing table"
msgstr "Tabela de roteamento"
msgid "raw output"
msgstr "raw output"
#: includes/system.php
msgid "System Information"
@ -695,10 +716,10 @@ msgid "Language setting saved"
msgstr "Configuração de idioma salva"
msgid "Console"
msgstr ""
msgstr "Console"
msgid "Hostname"
msgstr ""
msgstr "Nome do Host"
msgid "Pi Revision"
msgstr "Revisão do Pi"
@ -725,10 +746,16 @@ msgid "System Shutting Down Now!"
msgstr "Sistema Desligando Agora!"
msgid "Web server port"
msgstr ""
msgstr "Porta do servidor web"
msgid "Web server bind address"
msgstr ""
msgstr "Endereço de vinculação do servidor web"
msgid "OS"
msgstr "OS [Sistema operacional]"
msgid "Kernel"
msgstr "Kernel"
#: includes/themes.php
msgid "Theme settings"
@ -738,7 +765,7 @@ msgid "Select a theme"
msgstr "Selecione um tema"
msgid "Color"
msgstr ""
msgstr "Cor"
#: includes/data_usage.php
msgid "Data usage"
@ -766,7 +793,7 @@ msgid "Monthly"
msgstr "Por mês"
msgid "interface"
msgstr ""
msgstr "interface"
msgid "date"
msgstr "data"
@ -818,7 +845,7 @@ msgid "Diffie Hellman parameters"
msgstr "Parâmetros Diffie Hellman"
msgid "KeepAlive"
msgstr ""
msgstr "Manter Ativo"
msgid "Server log"
msgstr "Log do servidor"
@ -839,64 +866,64 @@ msgid "Attempting to stop openvpn"
msgstr "Tentando parar openvpn"
msgid "Configurations"
msgstr ""
msgstr "Configurações"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr ""
msgstr "Configurações do cliente OpenVPN disponíveis atualmente são exibidas abaixo."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgstr ""
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Ativar a configuração reiniciará o serviço <code>openvpn-client</code>."
msgid "Delete OpenVPN client"
msgstr ""
msgstr "Excluir cliente OpenVPN"
msgid "Delete client configuration? This cannot be undone."
msgstr ""
msgstr "Excluir configuração de cliente? Esta ação não pode ser desfeita."
msgid "Activate OpenVPN client"
msgstr ""
msgstr "Ativar o cliente OpenVPN"
msgid "Activate client configuration? This will restart the openvpn-client service."
msgstr ""
msgstr "Ativar configuração do cliente? Isto irá reiniciar o serviço openvpn-cliente."
msgid "Activate"
msgstr ""
msgstr "Ativar"
msgid "Cancel"
msgstr ""
msgstr "Cancelar"
msgid "Enable this option to log <code>openvpn</code> activity."
msgstr ""
msgstr "Habilite esta opção para registrar a atividade <code>openvpn</code>."
msgid "Authentification Method"
msgstr ""
msgstr "Método de Autenticação"
msgid "Username and password"
msgstr ""
msgstr "Usuário e senha"
msgid "Certificates"
msgstr ""
msgstr "Certificados"
msgid "Enter username and password"
msgstr ""
msgstr "Insira o usuário e senha"
msgid "Certificates in the configuration file"
msgstr ""
msgstr "Certificados no arquivo de configuração"
msgid "RaspAP supports certificates by including them in the configuration file."
msgstr ""
msgstr "O RaspAP suporta certificados incluindo-os no arquivo de configuração."
msgid "Signing certification authority (CA) certificate (e.g. <code>ca.crt</code>): enclosed in <code>&lt;ca> ... &lt;/ca></code> tags."
msgstr ""
msgstr "Certificado da autoridade certificadora (CA) (por exemplo, <code>ca.crt</code>): anexado em <code>&lt;ca> ... &lt;/ca></code> tags."
msgid "Client certificate (public key) (e.g. <code>client.crt</code>): enclosed in <code>&lt;cert> ... &lt;/cert></code> tags."
msgstr ""
msgstr "Certificado de cliente (chave pública) (por exemplo, <code>client.crt</code>): contido em tags <code>&lt;cert> ... &lt;/cert></code>."
msgid "Private key of the client certificate (e.g. <code>client.key</code>): enclosed in <code>&lt;key> ... &lt;/key></code> tags."
msgstr ""
msgstr "Chave privada do certificado do cliente (por exemplo, <code>client.key</code>): contido em tags <code>&lt;key> ... &lt;/key></code>."
msgid "Configuration File"
msgstr ""
msgstr "Arquivo de configuração"
#: includes/torproxy.php
msgid "TOR is not running"
@ -906,7 +933,7 @@ msgid "TOR is running"
msgstr "TOR está sendo executado"
msgid "Relay"
msgstr ""
msgstr "Relay"
msgid "Relay settings"
msgstr "Configurações de relay"
@ -934,7 +961,7 @@ msgstr "Tentando parar TOR"
#: template/dashboard.php
msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page."
msgstr ""
msgstr "O modo AP Bridge está ativado. Para o Hostname e IP, consulte a página de administrador do seu roteador."
#: common form controls
msgid "Save settings"
@ -958,249 +985,252 @@ msgstr "cima"
msgid "down"
msgstr "baixo"
msgid "Clear log"
msgstr "Limpar o log"
msgid "adblock"
msgstr ""
msgstr "adBlock"
msgid "Ad Blocking"
msgstr ""
msgstr "Bloqueador de anúncios"
msgid "Start Ad Blocking"
msgstr ""
msgstr "Iniciar o Bloqueador de Anúncios"
msgid "Restart Ad Blocking"
msgstr ""
msgstr "Reiniciar o Bloqueador de anúncios"
msgid "Blocklist settings"
msgstr ""
msgstr "Configurações da lista de bloqueio"
msgid "Enable blocklists"
msgstr ""
msgstr "Habilitar lista de bloqueio"
msgid "Enable this option if you want RaspAP to <b>block DNS requests for ads, tracking and other virtual garbage</b>. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis."
msgstr ""
msgstr "Ative esta opção se você quiser que o RaspAP <b>bloqueie requisições DNS para anúncios, rastreamento e outros lixo virtuais</b>. As listas de bloqueio são coletadas de múltiplas fontes ativamente mantidas e atualizadas, limpas, otimizadas e moderadas automaticamente."
msgid "This option adds <code>conf-file</code> and <code>addn-hosts</code> to the dnsmasq configuration."
msgstr ""
msgstr "Esta opção adiciona <code>conf-file</code> e <code>addn-hosts</code> à configuração do dnsmasq."
msgid "Choose a blocklist provider"
msgstr ""
msgstr "Escolha um provedor de lista de bloqueio"
msgid "Hostnames blocklist last updated"
msgstr ""
msgstr "Última atualização da lista de bloqueio de hosts"
msgid "Domains blocklist last updated"
msgstr ""
msgstr "Última atualização da lista de bloqueio de domínios"
msgid "Update now"
msgstr ""
msgstr "Atualizar agora"
msgid "Statistics"
msgstr ""
msgstr "Estatísticas"
msgid "Information provided by adblock"
msgstr ""
msgstr "Informação disponibilizada por adblock"
msgid "Enable custom blocklist"
msgstr ""
msgstr "Habilitar lista de bloqueio personalizada"
msgid "Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name."
msgstr ""
msgstr "Defina hosts personalizados a serem bloqueados digitando um endereço IPv4 ou IPv6 seguido de qualquer espaço em branco (espaços ou abas) e o nome do host."
msgid "<b>IPv4 example:</b> 0.0.0.0 badhost.com"
msgstr ""
msgstr "<b>IPv4 example:</b> 0.0.0.0 badhost.com"
msgid "This option adds an <code>addn-hosts</code> directive to the dnsmasq configuration."
msgstr ""
msgstr "Esta opção adiciona uma diretiva <code>addn-hosts</code> para a configuração do dnsmasq."
msgid "Custom blocklist not defined"
msgstr ""
msgstr "Lista de bloqueio personalizada não definida"
msgid "Invalid custom IP address found on line "
msgstr ""
msgstr "Endereço IP personalizado inválido encontrado na linha "
msgid "Invalid custom host found on line "
msgstr ""
msgstr "Host personalizado inválido encontrado na linha "
msgid "Tunnel settings"
msgstr ""
msgstr "Configurações do túnel"
msgid "Configuration Method"
msgstr ""
msgstr "Método de Configuração"
msgid "Upload file"
msgstr ""
msgstr "Enviar arquivo"
msgid "Create manually"
msgstr ""
msgstr "Criar manualmente"
msgid "Upload a WireGuard config"
msgstr ""
msgstr "Enviar uma configuração do WireGuard"
msgid "This option uploads and installs an existing WireGuard <code>.conf</code> file on this device."
msgstr ""
msgstr "Esta opção carrega e instala um arquivo existente do WireGuard <code>.conf</code> neste dispositivo."
msgid "Apply iptables rules for AP interface"
msgstr ""
msgstr "Aplicar regras do iptables para a interface AP"
msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface."
msgstr ""
msgstr "Recomendado se você deseja encaminhar tráfego de rede da interface wg0 para os clientes conectados na interface de AP."
msgid "This option adds <strong>iptables</strong> <code>Postup</code> and <code>PostDown</code> rules for the configured AP interface (%s)."
msgstr ""
msgstr "Esta opção adiciona as regras do <strong>iptables</strong> <code>Postup</code> e <code>PostDown</code> para a interface AP configurada (%s)."
msgid "Select WireGuard configuration file (.conf)"
msgstr ""
msgstr "Selecionar arquivo de configuração do WireGuard (.conf)"
msgid "Create a local WireGuard config"
msgstr ""
msgstr "Criar uma configuração local do WireGuard"
msgid "Enable server"
msgstr ""
msgstr "Habilitar servidor"
msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers."
msgstr ""
msgstr "Ative esta opção para proteger o tráfego de rede criando um túnel criptografado entre o RaspAP e os pontos configurados."
msgid "This setting generates a new WireGuard <code>.conf</code> file on this device."
msgstr ""
msgstr "Esta configuração gera um novo arquivo do WireGuard <code>.conf</code> neste dispositivo."
msgid "Local public key"
msgstr ""
msgstr "Chave pública local"
msgid "Local Port"
msgstr ""
msgstr "Porta Local"
msgid "IP Address"
msgstr ""
msgstr "Endereço IP"
msgid "DNS"
msgstr ""
msgstr "DNS"
msgid "Peer"
msgstr ""
msgstr "Ponto"
msgid "Enable peer"
msgstr ""
msgstr "Habilitar ponto"
msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer."
msgstr ""
msgstr "Habilite esta opção para criptografar o tráfego criando um túnel entre o RaspAP e este ponto."
msgid "This option adds <code>client.conf</code> to the WireGuard configuration."
msgstr ""
msgstr "Esta opção adiciona <code>client.conf</code> para a configuração do WireGuard."
msgid "Peer public key"
msgstr ""
msgstr "Chave pública do ponto"
msgid "Endpoint address"
msgstr ""
msgstr "Endereço do Endpoint"
msgid "Allowed IPs"
msgstr ""
msgstr "IPs Permitidos"
msgid "Persistent keepalive"
msgstr ""
msgstr "Manter persistente"
msgid "Enable this option to display an updated <code>wg-quick</code> debug log."
msgstr ""
msgstr "Ative esta opção para exibir um log de depuração atualizado do <code>wg-quick</code>."
msgid "WireGuard debug log updated"
msgstr ""
msgstr "Log de depuração do WireGuard atualizado"
msgid "Scan this QR code with your client to connect to this tunnel"
msgstr ""
msgstr "Escaneie este código QR com o seu cliente para se conectar a esse túnel"
msgid "or download the <code>client.conf</code> file to your device."
msgstr ""
msgstr "ou baixe o arquivo <code>client.conf</code> para o seu dispositivo."
msgid "Download"
msgstr ""
msgstr "Baixar"
msgid "Start WireGuard"
msgstr ""
msgstr "Iniciar o WireGuard"
msgid "Stop WireGuard"
msgstr ""
msgstr "Parar o WireGuard"
msgid "Information provided by wireguard"
msgstr ""
msgstr "Informação fornecida por Wireguard"
msgid "Attempting to start WireGuard"
msgstr ""
msgstr "Tentando iniciar o WireGuard"
msgid "Attempting to stop WireGuard"
msgstr ""
msgstr "Tentando parar o WireGuard"
msgid "WireGuard configuration updated successfully"
msgstr ""
msgstr "Configuração do Wireguard atualizada com sucesso"
msgid "WireGuard configuration failed to be updated"
msgstr ""
msgstr "A configuração do WireGuard falhou ao ser atualizada"
msgid "Client Firewall"
msgstr ""
msgstr "Firewall do Cliente"
msgid "Firewall is ENABLED"
msgstr ""
msgstr "O Firewall está ATIVADO"
msgid "Firewall is OFF"
msgstr ""
msgstr "O Firewall está DESATIVADO"
msgid "The default firewall will only allow outgoing and already established traffic."
msgstr ""
msgstr "O firewall padrão só permitirá tráfego de saída e o tráfego já foi estabelecido."
msgid "No incoming UDP traffic is allowed."
msgstr ""
msgstr "Nenhum tráfego UDP de entrada é permitido."
msgid "There are no restrictions for the access point <code>%s</code>."
msgstr ""
msgstr "Não há restrições para o ponto de acesso <code>%s</code>. "
msgid "Exception: Service"
msgstr ""
msgstr "Exceção: Serviço"
msgid "allow SSH access on port 22"
msgstr ""
msgstr "permitir acesso ao SSH na porta 22"
msgid "allow access to the RaspAP GUI on port 80 or 443"
msgstr ""
msgstr "permitir acesso à GUI do RaspAP na porta 80 ou 443"
msgid "Allow incoming connections for some services from the internet side."
msgstr ""
msgstr "Permitir conexões de entrada para alguns serviços a partir da internet."
msgid "Exception: network device"
msgstr ""
msgstr "Exceção: dispositivo de rede"
msgid "Exclude device(s)"
msgstr ""
msgstr "Excluir dispositivo(s)"
msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules."
msgstr ""
msgstr "Excluir o(s) dispositivo(s) de rede especificado(s) (separados por um espaço ou vírgula) das regras do firewall."
msgid "Current client devices: <code>%s</code>"
msgstr ""
msgstr "Dispositivos do cliente atual: <code>%s</code>"
msgid "The access point <code>%s</code> is per default excluded."
msgstr ""
msgstr "O ponto de acesso <code>%s</code> está excluído por padrão."
msgid "Exception: IP-Address"
msgstr ""
msgstr "Exceção: Endereço IP"
msgid "Allow incoming connections from"
msgstr ""
msgstr "Permitir conexões de entrada de"
msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted."
msgstr ""
msgstr "Para os endereços IP fornecidos (separados por um espaço ou vírgula) a conexão de entrada (via TCP e UDP) é aceita."
msgid "This is required for an OpenVPN via UDP or Wireguard connection."
msgstr ""
msgstr "Isto é necessário para uma conexão OpenVPN via UDP ou uma conexão WireGuard."
msgid "The list of configured VPN server IP addresses: <code><b>%s</b></code>"
msgstr ""
msgstr "A lista de endereços IP do servidor VPN configurado: <code><b>%s</b></code>"
msgid "Disable Firewall"
msgstr ""
msgstr "Desativar Firewall"
msgid "Enable Firewall"
msgstr ""
msgstr "Ativar Firewall"
msgid "Apply changes"
msgstr ""
msgstr "Aplicar alterações"

Binary file not shown.

View File

@ -844,7 +844,7 @@ msgstr "Configurații"
msgid "Currently available OpenVPN client configurations are displayed below."
msgstr "Configurațiile clientului OpenVPN disponibile sunt afișate mai jos."
msgid "Activating a configuraton will restart the <code>openvpn-client</code> service."
msgid "Activating a configuration will restart the <code>openvpn-client</code> service."
msgstr "Activarea unei configurații va reporni serviciul <code>openvpn-client</code>."
msgid "Delete OpenVPN client"

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -8,13 +8,14 @@
with the contributions of our <a href="https://github.com/raspap/raspap-webgui/graphs/contributors">developer community</a>
and <a href="https://crowdin.com/project/raspap">language translators</a>.
Learn more about joining the project as a <a href="https://docs.raspap.com/#get-involved">code contributor</a>,
<a href="https://docs.raspap.com/translations.html">translator</a> or <a href="https://github.com/sponsors/RaspAP">financial sponsor</a> with immediate access to <a href="https://github.com/sponsors/RaspAP#exclusive-features">exclusive features</a> available to <strong>Insiders</strong>.</div>
<a href="https://docs.raspap.com/translations/">translator</a> or <a href="https://github.com/sponsors/RaspAP">financial sponsor</a> with immediate access to <a href="https://github.com/sponsors/RaspAP#exclusive-features">exclusive features</a> available to <strong>Insiders</strong>.</div>
<div class="mt-3">Project documentation is available at <a href="https://docs.raspap.com/">https://docs.raspap.com/</a></div>
<div class="mt-3 project-links">
<div class="row">
<div class="col-md-6">GitHub <i class="fab fa-github"></i> <a href="https://github.com/RaspAP/">RaspAP</a></div>
<div class="col-md-6">Twitter <span style="color: #55acee"><i class="fab fa-twitter"></i></span> <a href="https://twitter.com/rasp_ap">@RaspAP</a></div>
<div class="col-md-6">Reddit <span style="color: #ff4500"><i class="fab fa-reddit"></i></span> <a href="https://www.reddit.com/r/RaspAP/">/r/raspap</a></div>
<div class="col-md-6">Gitter <span style="color: #ed1965"><i class="fab fa-gitter"></i></span> <a href="https://app.gitter.im/#/room/#RaspAP:gitter.im">/room/RaspAP</a></div>
<div class="col-md-6">License <i class="fas fa-balance-scale"></i> <a href="https://github.com/raspap/raspap-webgui/blob/master/LICENSE">GPL-3.0</a></div>
</div>
</div>

View File

@ -67,6 +67,19 @@
</div>
</div>
<div class="row">
<div class="form-group col-md-6">
<div class="custom-control custom-switch">
<input class="custom-control-input" id="nohook-wpa-supplicant" type="checkbox" name="NoHookWPASupplicant" value="1" aria-describedby="hook-wpa-supplicant-description">
<label class="custom-control-label" for="nohook-wpa-supplicant"><?php echo _("Disable wpa_supplicant dhcp hook for this interface") ?></label>
<?php getTooltip('If you manage wireless connections with wpa_supplicant itself, the hook may create unwanted connection events. This option disables the hook.', 'tipnohook'); ?>
</div>
<p class="mb-0" id="hook-wpa-supplicant-description">
<small><?php echo _("This toggles the <code>nohook wpa_supplicant</code> option for this interface in the DHCPCD configuration.") ?></small>
</p>
</div>
</div>
<h5 class="mt-1">DHCP options</h5>
<div class="row">
<div class="form-group col-md-6">

View File

@ -4,7 +4,7 @@
<h4 class="mt-3 mb-3"><?php echo _("Configurations"); ?></h4>
<p id="openvpnconfigs-description" class="mb-3">
<small><?php echo _("Currently available OpenVPN client configurations are displayed below.") ?></small>
<br><small class="text-muted"><?php echo _("Activating a configuraton will restart the <code>openvpn-client</code> service.") ?></small>
<br><small class="text-muted"><?php echo _("Activating a configuration will restart the <code>openvpn-client</code> service.") ?></small>
</p>
<div class="openvpn-configs js-openvpn-configs-container">
<?php foreach ($clients as $client) :

View File

@ -24,6 +24,9 @@ include('includes/sysstats.php');
</div>
<div class="row mb-1">
<div class="info-item col-xs-3"><?php echo _("Uptime"); ?></div><div class="info-value col-xs-3"><?php echo htmlspecialchars($uptime, ENT_QUOTES); ?></div>
</div>
<div class="row mb-1">
<div class="info-item col-xs-3"><?php echo _("System Time"); ?></div><div class="info-value col-xs-3"><?php echo htmlspecialchars($systime, ENT_QUOTES); ?></div>
</div>
</div>
</div>