diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index a9241aa5..accec662 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ -github: billz +github: RaspAP + diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 505b7abf..de6bcee7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,39 +7,53 @@ assignees: '' --- -**Before submitting an issue** -Please read this first https://github.com/billz/raspap-webgui/wiki/Reporting-issues + + + -**Actual behavior** -Tell us what you observed instead. +## Checklist + +- [ ] This is a bug report +- [ ] I observed this bug on a clean install of the OS +- [ ] I have followed the project prerequisites +- [ ] I have searched this repository for existing issues +- [ ] I checked the FAQ and official documentation before creating this issue +- [ ] I have read and understand the issue reporting guidelines -**Screenshots** -If applicable, add screenshots to help explain your problem. +## Bug description + -**Additional context** -Add any other context about the problem here. +## Your environment +1. Operating System: **ENTER HERE** +2. Hardware and version: +3. RaspAP version: +4. Clean install of a compatible operating system? +5. RaspAP Quick Install or Manual setup? +6. Using default configuration? +7. Simultaneous AP and managed mode? +8. Onboard wireless chipset or external adapter? +9. Other software or services running with RaspAP? + +## Steps to reproduce + + +## Screenshots + + +## Additional context + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..9a0287eb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +## Is your feature request related to a problem? +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +## Describe the solution you'd like +A clear and concise description of what you want to happen. + +## Describe alternatives you've considered +A clear and concise description of any alternative solutions or features you've considered. + +## Additional context +Add any other context or screenshots about the feature request here. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..17e3b052 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - enhancement + - feature request +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 00000000..41e7dd98 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,67 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '17 9 * * 1' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: [ 'javascript', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..14cbebc4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,16 @@ +on: + issues: + types: [opened, edited] + +jobs: + auto_close_issues: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Automatically close issues that don't follow the issue template + uses: lucasbento/auto-close-issues@v1.0.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + issue-close-message: "@${issue.user.login}: hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template.\nPlease review this project's issue policy https://docs.raspap.com/issues" # optional property + closed-issues-label: "invalid" # optional property diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..bef647c8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +sudo: false +language: php + +matrix: + fast_finish: true + + include: + - php: '7.0' + - php: '7.1' + - php: '7.2' + - php: '7.3' + - php: '7.4' + - php: 'nightly' + + allow_failures: + - php: nightly + +before_script: + - composer install --prefer-source --quiet --no-interaction + +# Run test script commands. +script: + - composer test diff --git a/BACKERS.md b/BACKERS.md index 9e5c3ea3..a13b2e38 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -1,12 +1,51 @@ -# RaspAP Sponors +Insiders logo -Development of RaspAP is made possible thanks to our awesome sponsors! -You can join them by [becoming a sponsor](https://github.com/sponsors/billz). +Development of RaspAP is made possible thanks to a sponsorware release model. This means that new features are first exclusively released to sponsors as part of **Insiders**. Read on to learn how sponsorship works, and how easy it is to get access to Insiders. -### 💖 Benefactors +## How sponsorship works +New features first land in **Insiders**, which means that *sponsors will have access to them immediately*. Every feature is tied to a funding goal in monthly subscriptions. When a funding goal is hit, the features that are tied to it are merged back into the [public RaspAP repository](https://github.com/RaspAP/raspap-webgui) and released for general availability. Bugfixes and minor enhancements are always released simultaneously in both editions. -### 🏆 Gilded supporters +Don't want to sponsor? No problem, RaspAP already has tons of features available, so chances are that most of your requirements are already satisfied. See the list of **exclusive features** to learn which features are currently only available to sponsors. -### 🤖 Robot fuelers +## How to become a sponsor +You can become a sponsor using your individual or organization's GitHub account. Just pick any tier from $10/month and complete the checkout. Then, after a few hours, you will be added as a team member to the super-secret private GitHub repository containing the Insiders edition, which has all exclusive features. In addition, you get access to Insiders-only team discussions and content. -### ☕️ Coffee supporters +**Important**: If you're sponsoring [RaspAP](https://github.com/RaspAP/sponsors) through a GitHub organization, please send a short email to [sponsors@raspap.com](mailto:sponsors@raspap.com) with the name of your organization and the account that should be added as a collaborator. + +## Exclusive features +The following features are currently available exclusively to sponsors. A tangible side benefit of sponsorship is that Insiders are able to help steer future development of RaspAP. This is done through Insiders' access to discussions, feature requests, issues and pull requests in the private GitHub repository. + + ✅ [Network device management](https://docs.raspap.com/net-devices/) + ✅ [Firewall settings](https://docs.raspap.com/firewall/) + ✅ [WPA3-Personal AP security](https://docs.raspap.com/ap-basics/#wpa3-personal) + ✅ [802.11w Protected Management Frames](https://docs.raspap.com/ap-basics/#80211w) + ✅ [Printable Wi-Fi signs](https://docs.raspap.com/ap-basics/#printable-signs) + ✅ [Drag & drop dashboard widgets](https://docs.raspap.com/ap-basics/#drag-drop-widgets) + ✅ [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) + +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 +Below is a list of funding targets. When a funding target is reached, the features that are tied to it are merged back into RaspAP and released to the public for general availability. + +### $1000 +The second **Insiders Edition** includes the features listed above. + +### $500 +The [first Insiders Edition goal](https://docs.raspap.com/insiders/#500-1st-insiders-edition) was reached in December 2021. Thank you sponsors! + +## Quarterly giving +Beginning in 2022, each quarter 15% of all proceeds from Insiders will be donated directly to the [Raspberry Pi Foundation](https://www.raspberrypi.org/). The Raspberry Pi Foundation is a UK-based charity that works to put the power of computing and digital making into the hands of people all over the world. + +[![Get involved with the Raspberry Pi Foundation](https://img.youtube.com/vi/dEzg92g1LHw/0.jpg)](https://www.youtube.com/watch?v=dEzg92g1LHw) + +When you become an Insider, not only do you support development of RaspAP but you also help inspire young people by harnessing the power of computing to solve problems and express themselves creatively. + +## Frequently asked questions +We've covered all you need to know [here](https://docs.raspap.com/insiders/#frequently-asked-questions). + +### Terms +See our [official project documentation](https://docs.raspap.com/insiders/#terms). diff --git a/CNAME b/CNAME deleted file mode 100644 index 0949dd03..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -raspap.com \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a49d3714..e35dea31 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,13 @@ ## How to contribute -1. File an issue in the repository, using the bug tracker, describing the - contribution you'd like to make. This will help us to get you started on the - right foot. -2. Fork the project in your account and create a new branch: - `your-great-feature`. -3. Commit your changes in that branch. -4. Open a pull request, and reference the initial issue in the pull request - message. +1. Fork the project in your account and create a new branch: `your-great-feature`. +2. Open an issue in the repository describing the feature contribution you'd like to make. This will help us get you started on the right foot. +3. Commit changes in your feature branch. +4. Open a pull request and reference the initial issue in the pull request message. + +### Coding standards +This project follows the [PSR-2](http://www.php-fig.org/psr/psr-2/) coding style guidelines. There are many ways to check your code for PSR-2. An excellent tool is [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). The command line tool phpcs can be run against any single file. [Phing](https://www.phing.info/), a PHP build tool, integrates nicely with `phpcs` to automate PSR-2 checks across all source files in a project. + +### Development process +Development processes used by contributors to the project are described [on this page](https://docs.raspap.com/developers/). It does not endorse one over the other; rather it is meant to share two different approaches. + diff --git a/README.md b/README.md index cd1668b4..dc7f2c99 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ ![](https://i.imgur.com/xeKD93p.png) -# `$raspap` [![Release 2.1](https://img.shields.io/badge/Release-2.1-green.svg)](https://github.com/billz/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Sponsor](https://img.shields.io/badge/sponsor-%F0%9F%92%96-green)](https://github.com/sponsors/billz) +[![Release 2.9.0](https://img.shields.io/badge/release-v2.9.0-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/) -A simple, responsive web interface to control wifi, hostapd and related services on the Raspberry Pi. +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. -This project was inspired by a [blog post](http://sirlagz.net/2013/02/06/script-web-configuration-page-for-raspberry-pi/) by SirLagz about using a web page rather than ssh to configure wifi and hostapd settings on the Raspberry Pi. I began by prettifying the UI by wrapping it in [SB Admin 2](https://github.com/BlackrockDigital/startbootstrap-sb-admin-2), a Bootstrap based admin theme. Since then, the project has evolved to include greater control over many aspects of a networked RPi, better security, authentication, a Quick Installer, support for OpenVPN, themes and more. RaspAP has been featured on sites such as [Instructables](http://www.instructables.com/id/Raspberry-Pi-As-Completely-Wireless-Router/), [Adafruit](https://blog.adafruit.com/2016/06/24/raspap-wifi-configuration-portal-piday-raspberrypi-raspberry_pi/), [Raspberry Pi Weekly](https://www.raspberrypi.org/weekly/commander/) and [Awesome Raspberry Pi](https://project-awesome.org/thibmaek/awesome-raspberry-pi) and implemented in countless projects. +RaspAP has been featured on sites such as [Instructables](http://www.instructables.com/id/Raspberry-Pi-As-Completely-Wireless-Router/), [Adafruit](https://blog.adafruit.com/2016/06/24/raspap-wifi-configuration-portal-piday-raspberrypi-raspberry_pi/), [Raspberry Pi Weekly](https://www.raspberrypi.org/weekly/commander/) and [Awesome Raspberry Pi](https://project-awesome.org/thibmaek/awesome-raspberry-pi) and implemented in countless projects. -We'd be curious to hear about how you use this with [your own RPi-powered projects](https://github.com/billz/raspap-awesome). Until then, here are some screenshots: +We hope you enjoy using RaspAP as much as we do creating it. Tell us how you use this with [your own projects](https://github.com/raspap/raspap-awesome). -![](https://i.imgur.com/fwekyGE.gif) +![](https://i.imgur.com/uhBFoOB.png) ![](https://i.imgur.com/EiIpdOS.gif) ![](https://i.imgur.com/eCjUS1H.gif) ![](https://i.imgur.com/5FT2BcS.gif) @@ -16,211 +16,129 @@ We'd be curious to hear about how you use this with [your own RPi-powered projec - [Prerequisites](#prerequisites) - [Quick installer](#quick-installer) + - [Join Insiders](#join-insiders) + - [WireGuard support](#wireguard-support) + - [OpenVPN support](#openvpn-support) + - [Ad Blocking](#ad-blocking) + - [Bridged AP](#bridged-ap) - [Simultaneous AP and Wifi client](#simultaneous-ap-and-wifi-client) - - [Support us](#support-us) - [Manual installation](#manual-installation) + - [802.11ac 5GHz support](#80211ac-5ghz-support) + - [Supported operating systems](#supported-operating-systems) - [Multilingual support](#multilingual-support) - [HTTPS support](#https-support) - - [OpenVPN support](#openvpn-support) - [How to contribute](#how-to-contribute) - [Reporting issues](#reporting-issues) - [License](#license) ## Prerequisites -Start with a clean install of the [latest release of Raspbian](https://www.raspberrypi.org/downloads/raspbian/) (currently Buster). Raspbian Buster Lite is recommended. +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. 1. Update Raspbian, including the kernel and firmware, followed by a reboot: ``` sudo apt-get update -sudo apt-get dist-upgrade +sudo apt-get full-upgrade sudo reboot ``` -2. Set the WiFi country in raspi-config's **Localisation Options**: `sudo raspi-config` +2. Set the "WLAN country" option in `raspi-config`'s **Localisation Options**: `sudo raspi-config` -3. If you have an older Raspberry Pi without an onboard WiFi chipset, the [**Edimax Wireless 802.11b/g/n nano USB adapter**](https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) is an excellent option – it's small, cheap and has good driver support. +3. If you have a device without an onboard wireless chipset, the [**Edimax Wireless 802.11b/g/n nano USB adapter**](https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) is an excellent option – it's small, cheap and has good driver support. With the prerequisites done, you can proceed with either the Quick installer or Manual installation steps below. ## Quick installer -Install RaspAP from your RaspberryPi's shell prompt: +Install RaspAP from your device's shell prompt: ```sh curl -sL https://install.raspap.com | bash ``` -The [installer](https://github.com/billz/raspap-webgui/wiki/Quick-Installer-usage) will complete the steps in the manual installation (below) for you. +The [installer](https://docs.raspap.com/quick/) will complete the steps in the manual installation (below) for you. After the reboot at the end of the installation the wireless network will be configured as an access point as follows: * IP address: 10.3.141.1 * Username: admin * Password: secret -* DHCP range: 10.3.141.50 to 10.3.141.255 +* DHCP range: 10.3.141.50 — 10.3.141.254 * SSID: `raspi-webgui` * Password: ChangeMe -**Note:** As the name suggests, the Quick Installer is a great way to quickly setup a new AP. However, it does not automagically detect the unique configuration of your RPi. Best results are obtained by connecting an RPi to ethernet (`eth0`) or as a WiFi client, also known as managed mode, with `wlan0`. For the latter, refer to [this FAQ](https://github.com/billz/raspap-webgui/wiki/FAQs#how-do-i-prepare-the-sd-card-to-connect-to-wifi-in-headless-mode). Please [read this](https://github.com/billz/raspap-webgui/wiki/Reporting-issues) before reporting an issue. +**Note:** As the name suggests, the Quick Installer is a great way to quickly setup a new AP. However, it does not automagically detect the unique configuration of your system. Best results are obtained by connecting to ethernet (`eth0`) or as a WiFi client, also known as managed mode, with `wlan0`. For the latter, refer to [this FAQ](https://docs.raspap.com/faq/#headless). Special instructions for the Pi Zero W are [available here](https://docs.raspap.com/ap-sta/). + +Please [read this](https://docs.raspap.com/issues/) before reporting an issue. + +## Join Insiders +[![](https://i.imgur.com/eml7k0b.png)](https://github.com/sponsors/RaspAP/) + +RaspAP is free software, but powered by _your_ support. If you find RaspAP useful for your personal or commercial projects, [become an Insider](https://github.com/sponsors/RaspAP/) and get early access to [exclusive features](https://docs.raspap.com/insiders/#exclusive-features) in the [Insiders Edition](https://docs.raspap.com/insiders/). + +A tangible side benefit of sponsorship is that **Insiders** are able to help _steer future development of RaspAP_. This is done through Insiders' team access to discussions, feature requests, issues and more in the private GitHub repository. + +## WireGuard support + +![](https://i.imgur.com/5YDv37e.png) + +WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be considerably more performant than OpenVPN, and is generally regarded as the most secure, easiest to use, and simplest VPN solution for modern Linux distributions. + +WireGuard may be optionally installed by the [Quick Installer](https://docs.raspap.com/quick/). Once this is done, you can manage local (server) settings, create a peer configuration and control the `wg-quick` service with RaspAP. + +Details are [provided here](https://docs.raspap.com/wireguard/). + +## OpenVPN support + +![](https://i.imgur.com/ta7tCon.png) + +OpenVPN may be optionally installed by the Quick Installer. Once this is done, you can [manage client configurations](https://docs.raspap.com/openvpn/) and the `openvpn-client` service with RaspAP. + +To configure an OpenVPN client, upload a valid .ovpn file and, optionally, specify your login credentials. RaspAP will store your client configuration and add firewall rules to forward traffic from OpenVPN's `tun0` interface to your configured wireless interface. + +See our [OpenVPN documentation](https://docs.raspap.com/openvpn/) for more information. + + +## Ad Blocking +This feature uses DNS blacklisting to block requests for ads, trackers and other undesirable hosts. To enable ad blocking, simply respond to the prompt during the installation. As a beta release, we encourage testing and feedback from users of RaspAP. + +Details are [provided here](https://docs.raspap.com/adblock/). + +## Bridged AP +By default RaspAP configures a routed AP for your clients to connect to. A bridged AP configuration is also possible. Slide the **Bridged AP mode** toggle under the **Advanced** tab of **Configure hotspot**, then save and restart the hotspot. + +**Note:** In bridged mode, all routing capabilities are handled by your upstream router. Because your router assigns IP addresses to your device's hotspot and its clients, you might not be able to reach the RaspAP web interface from the default `10.3.141.1` address. Instead use your RPi's hostname followed by `.local` to access the RaspAP web interface. With Raspbian default settings, this should look like `raspberrypi.local`. Alternate methods are [discussed here](https://www.raspberrypi.org/documentation/remote-access/ip-address.md). + +More information on Bridged AP mode is provided [in our documentation](https://docs.raspap.com/bridged/). ## Simultaneous AP and Wifi client -RaspAP lets you easily create an AP with a Wifi client configuration. With your RPi configured in managed mode, enable the AP from the **Advanced** tab of **Configure hotspot** by sliding the **Wifi client AP mode** toggle. Save settings and start the hotspot. The managed mode AP is functional without restart. +RaspAP lets you create an AP with a Wifi client configuration, often called [AP-STA mode](https://docs.raspap.com/ap-sta/). With your system configured in managed mode, enable the AP from the **Advanced** tab of **Configure hotspot** by sliding the **Wifi client AP mode** toggle. Save settings and start the hotspot. The managed mode AP is functional without restart. -![](https://i.imgur.com/YObvd32.gif) - -**Note:** This option is disabled until you configure your RPi as a wireless client. For a Raspberry Pi operating in [managed mode](https://github.com/billz/raspap-webgui/wiki/FAQs#how-do-i-prepare-the-sd-card-to-connect-to-wifi-in-headless-mode) without an `eth0` connection, this configuration must be enabled _before_ a reboot. - -## Support us - -RaspAP is free software, but powered by your support. If you find RaspAP useful for your personal or commercial projects, please [become a sponsor](https://github.com/sponsors/billz) or make a one-time donation with [Beerpay](https://beerpay.io/billz/raspap-webgui). Either option makes a big difference! - -[![Beerpay](https://beerpay.io/billz/raspap-webgui/badge.svg)](https://beerpay.io/billz/raspap-webgui) +**Note:** This option is disabled until you configure your system as a wireless client. For a device operating in [managed mode](https://docs.raspap.com/faq/#headless) without an `eth0` connection, this configuration must be enabled [_before_ a reboot](https://docs.raspap.com/ap-sta/). ## Manual installation -These steps apply to the latest release of Raspbian (currently [Buster](https://www.raspberrypi.org/downloads/raspbian/)). Notes for previously released versions are provided, where applicable. Start off by installing git, lighttpd, php7, hostapd and dnsmasq. -```sh -sudo apt-get install git lighttpd php7.1-cgi hostapd dnsmasq vnstat -``` -**Note:** for Raspbian Stretch, replace `php7.1-cgi` with `php7.0-cgi`. For Raspbian Jessie and older versions, use `php5-cgi`. After that, enable PHP for lighttpd and restart it for the settings to take effect. -```sh -sudo lighttpd-enable-mod fastcgi-php -sudo service lighttpd restart -``` -Now comes the fun part. For security reasons, the `www-data` user which lighttpd runs under is not allowed to start or stop daemons, or run commands like ifdown and ifup, all of which we want our page to do. -So what I have done is added the `www-data` user to the sudoers file, but with restrictions on what commands the user can run. Add the following to the end of `/etc/sudoers`: +Detailed manual setup instructions are provided [on our documentation site](https://docs.raspap.com/manual/). -```sh -www-data ALL=(ALL) NOPASSWD:/sbin/ifdown -www-data ALL=(ALL) NOPASSWD:/sbin/ifup -www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant.conf -www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant.conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf -www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan_results -www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan -www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] reconfigure -www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] select_network -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf -www-data ALL=(ALL) NOPASSWD:/bin/systemctl start hostapd.service -www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop hostapd.service -www-data ALL=(ALL) NOPASSWD:/bin/systemctl start dnsmasq.service -www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop dnsmasq.service -www-data ALL=(ALL) NOPASSWD:/bin/systemctl start openvpn-client@client -www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop openvpn-client@client -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/openvpn.ovpn /etc/openvpn/client/client.conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/authdata /etc/openvpn/client/login.conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dhcpddata /etc/dhcpcd.conf -www-data ALL=(ALL) NOPASSWD:/sbin/shutdown -h now -www-data ALL=(ALL) NOPASSWD:/sbin/reboot -www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] down -www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] up -www-data ALL=(ALL) NOPASSWD:/sbin/ip -s a f label wlan[0-9] -www-data ALL=(ALL) NOPASSWD:/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf -www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/enablelog.sh -www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/disablelog.sh -www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/servicestart.sh -www-data ALL=(ALL) NOPASSWD:/etc/raspap/lighttpd/configport.sh -www-data ALL=(ALL) NOPASSWD:/etc/raspap/openvpn/configauth.sh -``` +## 802.11ac 5GHz support +RaspAP provides an 802.11ac wireless mode option for supported hardware (currently the RPi 3B+/4 and compatible Orange Pi models) and wireless regulatory domains. See [this FAQ](https://docs.raspap.com/faq/#80211ac) for more information. -Once those modifications are done, git clone the files to `/var/www/html`. -**Note:** for older versions of Raspbian (before Jessie, May 2016) use -`/var/www` instead. -```sh -sudo rm -rf /var/www/html -sudo git clone https://github.com/billz/raspap-webgui /var/www/html -``` -Move the high-res favicons to the web root. -``` -sudo mv /var/www/html/app/icons/* /var/www/html -``` -Set the files ownership to `www-data` user. -```sh -sudo chown -R www-data:www-data /var/www/html -``` -Move the RaspAP configuration file to the correct location. -```sh -sudo mkdir /etc/raspap -sudo mv /var/www/html/raspap.php /etc/raspap/ -sudo chown -R www-data:www-data /etc/raspap -``` -Move the HostAPD logging and service control shell scripts to the correct location. -```sh -sudo mkdir /etc/raspap/hostapd -sudo mv /var/www/html/installers/*log.sh /etc/raspap/hostapd -sudo mv /var/www/html/installers/service*.sh /etc/raspap/hostapd -``` -Set ownership and permissions for logging and service control scripts. -```sh -sudo chown -c root:www-data /etc/raspap/hostapd/*.sh -sudo chmod 750 /etc/raspap/hostapd/*.sh -``` -Add the following lines to `/etc/rc.local` before `exit 0`. -```sh -echo 1 > /proc/sys/net/ipv4/ip_forward #RASPAP -iptables -t nat -A POSTROUTING -j MASQUERADE #RASPAP -iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE #RASPAP -``` -Force a reload of new settings in `/etc/rc.local`. -```sh -sudo systemctl restart rc-local.service -sudo systemctl daemon-reload -``` -Unmask and enable the hostapd service. -```sh -sudo systemctl unmask hostapd.service -sudo systemctl enable hostapd.service -``` -Move the raspap service to the correct location and enable it. -``` -sudo mv /var/www/html/installers/raspap.service /lib/systemd/system -sudo systemctl enable raspap.service -``` -Copy the configuration files for dhcpcd, dnsmasq, and hostapd. -``` -sudo mv /var/www/html/config/default_hostapd /etc/default/hostapd -sudo mv /var/www/html/config/hostapd.conf /etc/hostapd/hostapd.conf -sudo mv /var/www/html/config/dnsmasq.conf /etc/dnsmasq.conf -sudo mv /var/www/html/config/dhcpcd.conf /etc/dhcpcd.conf -sudo mv /var/www/html/config/config.php /var/www/html/includes/ -``` -(Optional) Optimize PHP -``` -sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' /etc/php/7.1/cgi/php.ini -sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' /etc/php/7.1/cgi/php.ini -sudo phpenmod opcache -``` -Reboot and it should be up and running! -```sh -sudo reboot -``` +## Supported operating systems +RaspAP was originally made for Raspbian, but now also installs on the following Debian-based distros. -The default username is 'admin' and the default password is 'secret'. +| Distribution | Release | Architecture | Support | +|---|:---:|:---:|:---:| +| Raspberry Pi OS | (32-bit) Lite Bullseye | ARM | Official | +| Raspberry Pi OS | (64-bit) Lite Bullseye | ARM | Official | +| Armbian | Bullseye | [ARM](https://docs.armbian.com/#supported-socs) | Official | +| Debian | Bullseye | ARM / x86_64 | Beta | +| Ubuntu | 18.04 LTS / 19.10 | ARM / x86_64 | Beta | + +![](https://i.imgur.com/luiyYNw.png) + +We find Armbian particularly well-suited for this project. Please note that "supported" is not a guarantee. If you are able to improve support for your preferred distro, we encourage you to [actively contribute](#how-to-contribute) to the project. ## Multilingual support -RaspAP uses [GNU Gettext](https://www.gnu.org/software/gettext/) to manage multilingual messages. In order to use RaspAP with one of our supported translations, you must configure a corresponding language package on your RPi. To list languages currently installed on your system, use `locale -a` at the shell prompt. To generate new locales, run `sudo dpkg-reconfigure locales` and select any other desired locales. Details are provided on our [wiki](https://github.com/billz/raspap-webgui/wiki/Translations#raspap-in-your-language). +RaspAP uses [GNU Gettext](https://www.gnu.org/software/gettext/) to manage multilingual messages. In order to use RaspAP with one of our supported translations, you must configure a corresponding language package on your RPi. To list languages currently installed on your system, use `locale -a` at the shell prompt. To generate new locales, run `sudo dpkg-reconfigure locales` and select any other desired locales. Details are provided on our [documentation site](https://docs.raspap.com/translations/). -The following translations are currently maintained by the project: - -- Deutsch -- Français -- Italiano -- Português -- Svenska -- Nederlands -- 简体中文 (Chinese Simplified) -- Indonesian -- 한국어 (Korean) -- 日本語 (Japanese) -- Tiếng Việt (Vietnamese) -- Čeština -- Русский -- Español -- Finnish -- Sinhala -- Türkçe - -If your language is not in the list above, why not [contribute a translation](https://github.com/billz/raspap-webgui/wiki/Translations#contributing-a-translation)? Contributors will receive credit as the original translators. +See this list of [supported languages](https://docs.raspap.com/translations/#supported-languages) that are actively maintained by volunteer translators. If your language is not supported, why not [contribute a translation](https://docs.raspap.com/translations/#contributing-to-a-translation)? Contributors will receive credit as the original translators. ## HTTPS support -The Quick Installer may be used to [generate SSL certificates](https://github.com/billz/raspap-webgui/wiki/SSL-certificates-(Quick-Installer)) with `mkcert`. The installer automates the manual steps [described in the wiki](https://github.com/billz/raspap-webgui/wiki/SSL-(Manual-steps)), including configuring lighttpd with SSL support. +The Quick Installer may be used to [generate SSL certificates](https://docs.raspap.com/ssl-quick/) with `mkcert`. The installer automates the manual steps [described here](https://docs.raspap.com/ssl-manual/), including configuring lighttpd with SSL support. Simply append the `-c` or `--cert` option to the Quick Installer, like so: @@ -230,27 +148,30 @@ curl -sL https://install.raspap.com | bash -s -- --cert **Note**: this only installs mkcert and generates an SSL certificate with the input you provide. It does *not* (re)install RaspAP. -More information on SSL certificates and HTTPS support is available [on our wiki](https://github.com/billz/raspap-webgui/wiki/SSL-certificates-(Quick-Installer)). - -## OpenVPN support -OpenVPN may be optionally installed by the Quick Installer. Once this is done, you can managage a client configuration and the `openvpn-client` service with RaspAP. - -To configure an OpenVPN client, upload a valid .ovpn file and, optionally, specify your login credentials. RaspAP will store your client configuration and add firewall rules to forward traffic from OpenVPN's `tun0` interface to your configured wireless interface. - -**Note**: this feature is currently in beta. Please [read this](https://github.com/billz/raspap-webgui/wiki/FAQs#-openvpn-fails-to-start-andor-i-have-no-internet-help) before reporting an issue. +More information on SSL certificates and HTTPS support is available [in our documentation](https://docs.raspap.com/ssl-quick/). ## How to contribute +1. Fork the project in your account and create a new branch: `your-great-feature`. +2. Open an issue in the repository describing the feature contribution you'd like to make. +3. Commit changes in your feature branch. +4. Open a pull request and reference the initial issue in the pull request message. -1. File an issue in the repository describing the contribution you'd like to make. This will help us get you started on the - right foot. -2. Fork the project in your account and create a new branch: `your-great-feature`. -3. Commit your changes in that branch. -4. Open a pull request, and reference the initial issue in the pull request message. - -This project follows the [PSR-2](http://www.php-fig.org/psr/psr-2/) coding style guidelines. There are many ways to check your code for PSR-2. An excellent tool is [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). The command line tool `phpcs` can be run against any single file. [Phing](https://www.phing.info/), a PHP build tool, integrates nicely with `phpcs` to automate PSR-2 checks across all source files in a project. +Find out more about our [coding style guidelines and recommended tools](CONTRIBUTING.md). ## Reporting issues -Please [read this](https://github.com/billz/raspap-webgui/wiki/Reporting-issues) before reporting a bug. +Please [read this](https://docs.raspap.com/issues/) before reporting a bug. + +## Contributors + +### Code Contributors +This project exists thanks to all the awesome people who [contribute](CONTRIBUTING.md) their time and expertise. + + + +### Financial Contributors +Development of RaspAP is made possible thanks to a sponsorware release model. This means that new features are first exclusively released to sponsors as part of [**Insiders**](https://github.com/sponsors/RaspAP). + +Learn more about [how sponsorship works](https://docs.raspap.com/insiders/#how-sponsorship-works), and how easy it is to get access to Insiders. ## License See the [LICENSE](./LICENSE) file. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..b37c905e --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,27 @@ +# Security Policy + +The RaspAP team and community take all security vulnerabilities seriously. This document outlines security procedures and general policies for the RaspAP open source projects as found on https://github.com/RaspAP/. +If you believe you have found a security vulnerability in any RaspAP-owned repository, please report it to us as described below. + +## Reporting a vulnerability in RaspAP + +Thank you for improving the security of our open source software. +We appreciate your efforts and responsible disclosure, and will make every effort to acknowledge your contributions. + +Please report (suspected) security vulnerabilities to [security@raspap.com](mailto:security@raspap.com). The requested information listed below will help us better understand the nature and scope of the possible issue: + +1. Type of issue (eg. shell exploit, cross-site scripting, etc.) +2. Full paths of source file(s) related to the manifestation of the issue +3. The location of the affected source code (tag/branch/commit or direct URL) +4. Any special configuration required to reproduce the issue +5. Step-by-step instructions to reproduce the issue +6. Proof-of-concept or exploit code (if possible) +7. Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +You will receive a response from us within 48 hours. Developers may ask for additional information or clarity on your report. +If the issue is confirmed, we will release a patch as soon as possible depending on complexity, but historically within a few days. + +## Third-party modules +Report security vulnerabilities in third-party modules to the person or team maintaining the module. diff --git a/ajax/adblock/update_blocklist.php b/ajax/adblock/update_blocklist.php new file mode 100644 index 00000000..86f326b4 --- /dev/null +++ b/ajax/adblock/update_blocklist.php @@ -0,0 +1,24 @@ +$return]; + echo json_encode($jsonData); +} + diff --git a/ajax/bandwidth/get_bandwidth.php b/ajax/bandwidth/get_bandwidth.php index 37d4adc9..4fcf8057 100644 --- a/ajax/bandwidth/get_bandwidth.php +++ b/ajax/bandwidth/get_bandwidth.php @@ -1,6 +1,6 @@ IFNAMSIZ) { require_once './get_bandwidth_hourly.php'; -exec(sprintf('vnstat -i %s --json ', escapeshellarg($interface)), $jsonstdoutvnstat, - $exitcodedaily); +exec( + sprintf('vnstat -i %s --json ', escapeshellarg($interface)), $jsonstdoutvnstat, + $exitcodedaily +); if ($exitcodedaily !== 0) { - exit('vnstat error'); + exit('vnstat error'); } $jsonobj = json_decode($jsonstdoutvnstat[0], true); $timeunits = filter_input(INPUT_GET, 'tu'); if ($timeunits === 'm') { // months - $jsonData = $jsonobj['interfaces'][0]['traffic']['months']; + $jsonData = $jsonobj['interfaces'][0]['traffic']['month']; } else { // default: days - $jsonData = $jsonobj['interfaces'][0]['traffic']['days']; + $jsonData = $jsonobj['interfaces'][0]['traffic']['day']; } $datasizeunits = filter_input(INPUT_GET, 'dsu'); +$dsu_factor = $datasizeunits == "mb" ? 1024 * 1024 : 1024; header('X-Content-Type-Options: nosniff'); header('Content-Type: application/json'); echo '[ '; $firstelm = true; for ($i = count($jsonData) - 1; $i >= 0; --$i) { if ($timeunits === 'm') { - $dt = DateTime::createFromFormat('Y n', $jsonData[$i]['date']['year'].' '. - $jsonData[$i]['date']['month']); + $dt = DateTime::createFromFormat( + 'Y n', $jsonData[$i]['date']['year'].' '. + $jsonData[$i]['date']['month'] + ); } else { - $dt = DateTime::createFromFormat('Y n j', $jsonData[$i]['date']['year'].' '. + $dt = DateTime::createFromFormat( + 'Y n j', $jsonData[$i]['date']['year'].' '. $jsonData[$i]['date']['month'].' '. - $jsonData[$i]['date']['day']); + $jsonData[$i]['date']['day'] + ); } if ($firstelm) { @@ -67,13 +74,8 @@ for ($i = count($jsonData) - 1; $i >= 0; --$i) { echo ','; } - if ($datasizeunits == 'mb') { - $datasend = round($jsonData[$i]['tx'] / 1024, 0); - $datareceived = round($jsonData[$i]['rx'] / 1024, 0); - } else { - $datasend = $jsonData[$i]['rx']; - $datareceived = $jsonData[$i]['rx']; - } + $datasend = round($jsonData[$i]['tx'] / $dsu_factor, 0); + $datareceived = round($jsonData[$i]['rx'] / $dsu_factor, 0); if ($timeunits === 'm') { echo '{ "date": "' , $dt->format('Y-m') , '", "rx": "' , $datareceived , diff --git a/ajax/bandwidth/get_bandwidth_hourly.php b/ajax/bandwidth/get_bandwidth_hourly.php index 482b6c6f..5e2f93f1 100644 --- a/ajax/bandwidth/get_bandwidth_hourly.php +++ b/ajax/bandwidth/get_bandwidth_hourly.php @@ -1,66 +1,66 @@ - array('date' => '00:00', 'rx' => 0, 'tx' => 0), - 1 => array('date' => '01:00', 'rx' => 0, 'tx' => 0), - 2 => array('date' => '02:00', 'rx' => 0, 'tx' => 0), - 3 => array('date' => '03:00', 'rx' => 0, 'tx' => 0), - 4 => array('date' => '04:00', 'rx' => 0, 'tx' => 0), - 5 => array('date' => '05:00', 'rx' => 0, 'tx' => 0), - 6 => array('date' => '06:00', 'rx' => 0, 'tx' => 0), - 7 => array('date' => '07:00', 'rx' => 0, 'tx' => 0), - 8 => array('date' => '08:00', 'rx' => 0, 'tx' => 0), - 9 => array('date' => '09:00', 'rx' => 0, 'tx' => 0), - 10 => array('date' => '10:00', 'rx' => 0, 'tx' => 0), - 11 => array('date' => '11:00', 'rx' => 0, 'tx' => 0), - 12 => array('date' => '12:00', 'rx' => 0, 'tx' => 0), - 13 => array('date' => '13:00', 'rx' => 0, 'tx' => 0), - 14 => array('date' => '14:00', 'rx' => 0, 'tx' => 0), - 15 => array('date' => '15:00', 'rx' => 0, 'tx' => 0), - 16 => array('date' => '16:00', 'rx' => 0, 'tx' => 0), - 17 => array('date' => '17:00', 'rx' => 0, 'tx' => 0), - 18 => array('date' => '18:00', 'rx' => 0, 'tx' => 0), - 19 => array('date' => '19:00', 'rx' => 0, 'tx' => 0), - 20 => array('date' => '20:00', 'rx' => 0, 'tx' => 0), - 21 => array('date' => '21:00', 'rx' => 0, 'tx' => 0), - 22 => array('date' => '22:00', 'rx' => 0, 'tx' => 0), - 23 => array('date' => '23:00', 'rx' => 0, 'tx' => 0) - ); - - - - - exec(sprintf('vnstat -i %s --json h', escapeshellarg($interface)), $jsonstdoutvnstat, $exitcodedaily); - if ($exitcodedaily !== 0) { - exit('vnstat error'); - } - - $jsonobj = json_decode($jsonstdoutvnstat[0], true)['interfaces'][0]; - $jsonData = $jsonobj['traffic']['hours']; - for ($i = count($jsonData) - 1; $i >= 0; --$i) { - $data_template[$jsonData[$i]['id']]['rx'] = round($jsonData[$i]['rx'] / 1024, 0); - $data_template[$jsonData[$i]['id']]['tx'] = round($jsonData[$i]['tx'] / 1024, 0); - } - - $data = array(); - $hour = $jsonobj['updated']['time']['hour']; - foreach ($data_template as $key => $value) { - if ($key > $hour) { - array_push($data, $value); - } - } - foreach ($data_template as $key => $value) { - if ($key <= $hour) { - array_push($data, $value); - } - } - echo json_encode($data); - exit(0); -} + array('date' => '00:00', 'rx' => 0, 'tx' => 0), + 1 => array('date' => '01:00', 'rx' => 0, 'tx' => 0), + 2 => array('date' => '02:00', 'rx' => 0, 'tx' => 0), + 3 => array('date' => '03:00', 'rx' => 0, 'tx' => 0), + 4 => array('date' => '04:00', 'rx' => 0, 'tx' => 0), + 5 => array('date' => '05:00', 'rx' => 0, 'tx' => 0), + 6 => array('date' => '06:00', 'rx' => 0, 'tx' => 0), + 7 => array('date' => '07:00', 'rx' => 0, 'tx' => 0), + 8 => array('date' => '08:00', 'rx' => 0, 'tx' => 0), + 9 => array('date' => '09:00', 'rx' => 0, 'tx' => 0), + 10 => array('date' => '10:00', 'rx' => 0, 'tx' => 0), + 11 => array('date' => '11:00', 'rx' => 0, 'tx' => 0), + 12 => array('date' => '12:00', 'rx' => 0, 'tx' => 0), + 13 => array('date' => '13:00', 'rx' => 0, 'tx' => 0), + 14 => array('date' => '14:00', 'rx' => 0, 'tx' => 0), + 15 => array('date' => '15:00', 'rx' => 0, 'tx' => 0), + 16 => array('date' => '16:00', 'rx' => 0, 'tx' => 0), + 17 => array('date' => '17:00', 'rx' => 0, 'tx' => 0), + 18 => array('date' => '18:00', 'rx' => 0, 'tx' => 0), + 19 => array('date' => '19:00', 'rx' => 0, 'tx' => 0), + 20 => array('date' => '20:00', 'rx' => 0, 'tx' => 0), + 21 => array('date' => '21:00', 'rx' => 0, 'tx' => 0), + 22 => array('date' => '22:00', 'rx' => 0, 'tx' => 0), + 23 => array('date' => '23:00', 'rx' => 0, 'tx' => 0) + ); + + exec(sprintf('vnstat -i %s --json h', escapeshellarg($interface)), $jsonstdoutvnstat, $exitcodedaily); + if ($exitcodedaily !== 0) { + exit('vnstat error'); + } + + $datasizeunits = filter_input(INPUT_GET, 'dsu'); + $dsu_factor = $datasizeunits == "mb" ? 1024 * 1024 : 1024; + + $jsonobj = json_decode($jsonstdoutvnstat[0], true)['interfaces'][0]; + $jsonData = $jsonobj['traffic']['hour']; + for ($i = count($jsonData) - 1; $i >= 0 && $i >= count($jsonData)-25; --$i) { + $data_template[$jsonData[$i]['time']['hour']]['rx'] = round($jsonData[$i]['rx'] / $dsu_factor, 0); + $data_template[$jsonData[$i]['time']['hour']]['tx'] = round($jsonData[$i]['tx'] / $dsu_factor, 0); + } + + $data = array(); + $hour = $jsonobj['updated']['time']['hour']; + foreach ($data_template as $key => $value) { + if ($key > $hour) { + array_push($data, $value); + } + } + foreach ($data_template as $key => $value) { + if ($key <= $hour) { + array_push($data, $value); + } + } + echo json_encode($data); + exit(0); +} diff --git a/ajax/logging/clearlog.php b/ajax/logging/clearlog.php new file mode 100644 index 00000000..a5c67385 --- /dev/null +++ b/ajax/logging/clearlog.php @@ -0,0 +1,13 @@ + $path .'/hostapd.conf', "tmp" => "/tmp/hostapddata", "dest" => RASPI_HOSTAPD_CONFIG), + array("src" => $path .'/dhcpcd.conf', "tmp" => "/tmp/dhcpddata", "dest" => RASPI_DHCPCD_CONFIG), + array("src" => $path .'/090_wlan0.conf', "tmp" => "/tmp/dnsmasqdata", "dest" => RASPI_DNSMASQ_PREFIX.'wlan0.conf'), + array("src" => $path .'/090_raspap.conf', "tmp" => "/tmp/dnsmasqdata", "dest" => RASPI_DNSMASQ_PREFIX.'raspap.conf'), + ); + + foreach ($configs as $config) { + try { + $tmp = file_get_contents($config["src"]); + file_put_contents($config["tmp"], $tmp); + system("sudo cp ".$config["tmp"]. " ".$config["dest"]); + } catch (Exception $e) { + $return = $e->getCode(); + } + } + $jsonData = ['return'=>$return]; + echo json_encode($jsonData); + +} else { + handleInvalidCSRFToken(); +} + diff --git a/ajax/networking/gen_int_config.php b/ajax/networking/gen_int_config.php deleted file mode 100644 index c166c529..00000000 --- a/ajax/networking/gen_int_config.php +++ /dev/null @@ -1,42 +0,0 @@ - $file) { - if ($index != "defaults") { - $cnfFile = parse_ini_file(RASPI_CONFIG_NETWORKING.'/'.$file, false, INI_SCANNER_RAW); - if ($cnfFile['static'] === 'true') { - $strConfFile .= "interface ".$cnfFile['interface']."\n"; - $strConfFile .= "static ip_address=".$cnfFile['ip_address']."\n"; - $strConfFile .= "static routers=".$cnfFile['routers']."\n"; - $strConfFile .= "static domain_name_servers=".$cnfFile['domain_name_server']."\n"; - } elseif ($cnfFile['static'] === 'false' && $cnfFile['failover'] === 'true') { - $strConfFile .= "profile static_".$cnfFile['interface']."\n"; - $strConfFile .= "static ip_address=".$cnfFile['ip_address']."\n"; - $strConfFile .= "static routers=".$cnfFile['routers']."\n"; - $strConfFile .= "static domain_name_servers=".$cnfFile['domain_name_server']."\n\n"; - $strConfFile .= "interface ".$cnfFile['interface']."\n"; - $strConfFile .= "fallback static_".$cnfFile['interface']."\n\n"; - } else { - $strConfFile .= "#DHCP configured for ".$cnfFile['interface']."\n\n"; - } - } else { - $strConfFile .= file_get_contents(RASPI_CONFIG_NETWORKING.'/'.$index)."\n\n"; - } - } - - if (file_put_contents(RASPI_CONFIG_NETWORKING.'/dhcpcd.conf', $strConfFile)) { - exec('sudo /bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf'); - $output = ['return'=>0,'output'=>'Settings successfully applied']; - } else { - $output = ['return'=>2,'output'=>'Unable to write to apply settings']; - } - echo json_encode($output); -} diff --git a/ajax/networking/get_all_interfaces.php b/ajax/networking/get_all_interfaces.php index 6924d4d9..b4e18572 100644 --- a/ajax/networking/get_all_interfaces.php +++ b/ajax/networking/get_all_interfaces.php @@ -1,6 +1,6 @@ 0) { + $flags += NL80211_BAND_24GHZ; + } + if (count(preg_grep('/^5[0-9]{3}/i', $frequencies)) >0) { + $flags += NL80211_BAND_5GHZ; + } + + switch ($flags) { + case NL80211_BAND_24GHZ: + $msg = sprintf(_("The selected interface (%s) has support for the 2.4 GHz wireless band only."), $iface); + break; + case NL80211_BAND_5GHZ: + $msg = sprintf(_("The selected interface (%s) has support for the 5 GHz wireless band only."), $iface); + break; + case NL80211_BAND_24GHZ | NL80211_BAND_5GHZ: + $msg = sprintf(_("The selected interface (%s) has support for both the 2.4 and 5 GHz wireless bands."), $iface); + break; + default: + $msg = sprintf(_("The selected interface (%s) does not support wireless mode operation."), $iface); + } + echo json_encode($msg); +} + diff --git a/ajax/networking/get_int_config.php b/ajax/networking/get_int_config.php deleted file mode 100644 index ddcef701..00000000 --- a/ajax/networking/get_int_config.php +++ /dev/null @@ -1,23 +0,0 @@ -1,'output'=>['intConfig'=>$intConfig]]; - echo json_encode($jsonData); - - // Todo - get dhcp lease information from `dhcpcd -U eth0` ? maybe ? -} else { - $jsonData = ['return'=>2,'output'=>['Error getting data']]; - echo json_encode($jsonData); -} diff --git a/ajax/networking/get_ip_summary.php b/ajax/networking/get_ip_summary.php index b3b16030..bee214de 100644 --- a/ajax/networking/get_ip_summary.php +++ b/ajax/networking/get_ip_summary.php @@ -1,8 +1,8 @@ 1) { + $dhcpdata['DNS1'] = $arrDns[1]; + } + if (count($arrDns) > 2) { + $dhcpdata['DNS2'] = $arrDns[2]; + } + } + } + + // fetch dhcpcd.conf settings for interface + $conf = file_get_contents(RASPI_DHCPCD_CONFIG); + preg_match('/^#\sRaspAP\s'.$interface.'\s.*?(?=\s*+$)/ms', $conf, $matched); + preg_match('/metric\s(\d*)/', $matched[0], $metric); + preg_match('/static\sip_address=(.*)/', $matched[0], $static_ip); + preg_match('/static\srouters=(.*)/', $matched[0], $static_routers); + 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); + $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]); + $dhcpdata['StaticRouters'] = $static_routers[1]; + $dhcpdata['StaticDNS'] = $static_dns[1]; + $dhcpdata['FallbackEnabled'] = empty($fallback) ? false: true; + $dhcpdata['DefaultRoute'] = $gateway[0] == "gateway"; + + echo json_encode($dhcpdata); +} diff --git a/ajax/networking/get_wgcfg.php b/ajax/networking/get_wgcfg.php new file mode 100644 index 00000000..6a9d771d --- /dev/null +++ b/ajax/networking/get_wgcfg.php @@ -0,0 +1,9 @@ + $pubkey_tmp", $return); + $wgdata['pubkey'] = str_replace("\n",'',file_get_contents($pubkey_tmp)); + exec("sudo mv $privkey_tmp $privkey", $return); + exec("sudo mv $pubkey_tmp $pubkey", $return); + + echo json_encode($wgdata); +} diff --git a/ajax/networking/save_int_config.php b/ajax/networking/save_int_config.php deleted file mode 100644 index 74716a23..00000000 --- a/ajax/networking/save_int_config.php +++ /dev/null @@ -1,34 +0,0 @@ -0,'output'=>['Successfully Updated Network Configuration']]; - } else { - $jsonData = ['return'=>1,'output'=>['Error saving network configuration to file']]; - } -} else { - $jsonData = ['return'=>2,'output'=>'Unable to detect interface']; -} - -echo json_encode($jsonData); diff --git a/ajax/networking/save_net_dev_config.php b/ajax/networking/save_net_dev_config.php new file mode 100644 index 00000000..a95baa50 --- /dev/null +++ b/ajax/networking/save_net_dev_config.php @@ -0,0 +1,93 @@ +0,'output'=>['Successfully saved mobile data settings']]; + } else { + $jsonData = ['return'=>1,'output'=>['Error saving mobile data settings']]; + } + } else if ( preg_match("/netdevices/",$int)) { + if(!isset($_POST['opts']) ) { + $jsonData = ['return'=>0,'output'=>['No valid data to add/delete udev rule ']]; + echo json_encode($jsonData); + return; + } else { + $opts=explode(" ",$_POST['opts'] ); + $dev=$opts[0]; + $vid=$_POST["int-vid-".$dev]; + $pid=$_POST["int-pid-".$dev]; + $mac=$_POST["int-mac-".$dev]; + $name=trim($_POST["int-name-".$dev]); + // limit device name to letters and numbers. Total length max 20 + $name=preg_replace("/[^a-z0-9]/", "", strtolower($name)); + $name=substr($name, 0, min(strlen($name),20)); + $type=$_POST["int-type-".$dev]; + $newtype=$_POST["int-new-type-".$dev]; + $udevfile=$_SESSION["udevrules"]["udev_rules_file"]; // default file /etc/udev/rules.d/80-net-devices.rules"; + + // find the rule prototype and prefix + $rule = ""; + foreach($_SESSION["udevrules"]["network_devices"] as $devt) { + if($devt["type"]==$newtype) { + $rulenew = $devt["udev_rule"]; + $prefix = $devt["name_prefix"]; + } + } + + // check for an existing rule and delete lines with same MAC or same VID/PID + if (!empty($vid) && !empty($pid)) { + $rule = '^.*ATTRS{idVendor}==\"' . $vid . '\".*ATTRS{idProduct}==\"' . $pid . '\".*$'; + exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile); // clear all entries with this VID/PID + $rule = '^.*ATTRS{idProduct}==\"' . $pid . '\".*ATTRS{idVendor}==\"' . $vid . '\".*$'; + exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile); // clear all entries with this VID/PID + } + if (!empty($mac)) { + exec('sudo sed -i "/^.*'.$mac.'.*$/d" '.$udevfile); // clear all entries with same MAC + } + // create new entry + if ( ($type != $newtype) || !empty($name) ) { // new device type or new name + if (empty($name)) $name = $prefix."%n"; + if (!empty($mac)) $rule = preg_replace("/\\\$MAC\\\$/i", $mac, $rulenew); + if (!empty($vid)) $rule = preg_replace("/\\\$IDVENDOR\\\$/i", $vid, $rule); + if (!empty($pid)) $rule = preg_replace("/\\\$IDPRODUCT\\\$/i", $pid, $rule); + if (!empty($name)) $rule = preg_replace("/\\\$DEVNAME\\\$/i",$name,$rule); + if (!empty($rule)) exec('echo \''.$rule.'\' | sudo /usr/bin/tee -a '.$udevfile); + } + $jsonData = ['return'=>0,'output'=>['Settings changed for device '.$dev. '
Changes will only be in effect after reconnecting the device' ] ]; + } + } else { + $jsonData = ['return'=>1,'output'=>['Unknown network configuration']]; + } +} else { + $jsonData = ['return'=>2,'output'=>'Unable to detect interface']; +} + +echo json_encode($jsonData); diff --git a/ajax/networking/wifi_stations.php b/ajax/networking/wifi_stations.php index 445e13e0..ecc9c098 100644 --- a/ajax/networking/wifi_stations.php +++ b/ajax/networking/wifi_stations.php @@ -1,9 +1,10 @@ $network) $networks[$ssid]["ssidutf8"] = ssid2utf8( $ssid ); -echo renderTemplate('wifi_stations', compact('networks')); +$connected = array_filter($networks, function($n) { return $n['connected']; } ); +$known = array_filter($networks, function($n) { return !$n['connected'] && $n['configured']; } ); +$nearby = array_filter($networks, function($n) { return !$n['configured']; } ); + +echo renderTemplate('wifi_stations', compact('networks', 'connected', 'known', 'nearby'), true); diff --git a/ajax/openvpn/activate_ovpncfg.php b/ajax/openvpn/activate_ovpncfg.php new file mode 100644 index 00000000..06cff8b9 --- /dev/null +++ b/ajax/openvpn/activate_ovpncfg.php @@ -0,0 +1,27 @@ +$return]; + echo json_encode($jsonData); +} + diff --git a/app/css/all.css b/app/css/all.css new file mode 100644 index 00000000..12a47159 --- /dev/null +++ b/app/css/all.css @@ -0,0 +1,230 @@ +/* +Name: all.css +Author: @billz +Author URI: https://github.com/billz +Description: Classes shared by all themes +License: GNU General Public License v3.0 +*/ + +/* Small devices (portrait phones, up to 576px) */ +@media (max-width: 576px) { + .container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; } + .card .card-header { padding: .75rem .5rem; font-size: 1.0rem; } + .row { margin-left: 0rem; margin-right: 0rem; } + .col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; } + .form-group.col-md-6 { margin-left: -0.5rem; } + h4.mt-3 { margin-left: 0.5rem; } +} + +.sidebar-brand-text { + text-transform: none; + color: #212529; + font-size: 2.0rem; + font-weight: 500; + font-family: Helvetica, Arial, sans-serif; +} + +.h-underlined { + border-bottom: 1px solid #e3e6f0; + padding-bottom: 0.3rem; +} + +.navbar-logo { + margin-top: 0.5em; + margin-left: 0.5em; +} + +.page-header { + font-size: 26pt; + margin: 20px 0 20px; +} + +.info-item { + text-transform: uppercase; + font-size: 0.7em; + color: #858796; +} + +.info-value { + font-size: 0.7rem; + margin-left: 0.7rem; +} + +.info-item-xs { + font-size: 0.7rem; + margin-left: 0.3rem; +} + +.info-item-wifi { + width: 6rem; + float: left; +} + +.service-status { + border-width: 0; + align-items: center; +} + +.service-status-up { + color: #a1ec38 !important; +} + +.service-status-warn { + color: #f6f044 !important; +} + +.service-status-down { + color: #f80107 !important; + animation: flash 1s linear infinite; +} +@keyframes flash { + 50% { + opacity: 0; + } +} + +.logoutput { + width:100%; + height: 20rem; + border: 1px solid #d1d3e2; + border-radius: .35rem; +} + +.dhcp-static-leases { + margin-top: 1em; + margin-bottom: 1em; +} + +.dhcp-static-lease-row { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.loading-spinner { + background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent; + min-height: 450px; + width: 100%; +} + +@media (min-width: 576px) { + .card-grid { + display: grid; + grid-template-columns: minmax(0, 1fr) 50%; + grid-gap: 1rem; + } +} + +.toggle-off.btn { + padding-left: 1.2rem; + font-size: 0.9rem!important; +} + +.toggle-on.btn { + font-size: 0.9rem!important; +} + +canvas#divDBChartBandwidthhourly { + height: 350px!important; +} + +.chart-container { + height: 150px; + width: 200px; +} + +.dbChart { + display: flex; + height: 80%; +} + +.table { + margin-bottom: 0rem; +} + +.check-hidden { + visibility: hidden; +} + +.check-progress { + color: #999; +} + +.fa-check { + color: #90ee90; +} + +.fa-times { + color: #ff4500; +} + +button.btn.btn-light.js-toggle-password { + border: 1px solid lightgrey; +} + +.signal-icon { + margin-top: 2px; + height: 16px; + width: 16px; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: baseline; +} +.signal-icon .signal-bar { + width: 4px; + border-radius: 1px; + opacity: 30%; + background: ; +} + +.signal-icon .signal-bar:nth-child(1) { height: 40%; } +.signal-icon .signal-bar:nth-child(2) { height: 70%; } +.signal-icon .signal-bar:nth-child(3) { height: 100%; } + +.signal-icon.weak .signal-bar:nth-child(1), +.signal-icon.medium .signal-bar:nth-child(1), +.signal-icon.medium .signal-bar:nth-child(2), +.signal-icon.strong .signal-bar:nth-child(1), +.signal-icon.strong .signal-bar:nth-child(2), +.signal-icon.strong .signal-bar:nth-child(3) +{ opacity: 100%; }.signal-icon { + margin-top: 2px; + height: 16px; + width: 16px; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: baseline; +} +.signal-icon .signal-bar { + width: 4px; + border-radius: 1px; + opacity: 30%; +} + +.signal-icon .signal-bar:nth-child(1) { height: 40%; } +.signal-icon .signal-bar:nth-child(2) { height: 70%; } +.signal-icon .signal-bar:nth-child(3) { height: 100%; } + +.signal-icon.weak .signal-bar:nth-child(1), +.signal-icon.medium .signal-bar:nth-child(1), +.signal-icon.medium .signal-bar:nth-child(2), +.signal-icon.strong .signal-bar:nth-child(1), +.signal-icon.strong .signal-bar:nth-child(2), +.signal-icon.strong .signal-bar:nth-child(3) +{ opacity: 100%; } + +.gs-edit { + border: 1px dashed #ccc; + background-color: #f1faee; + border-radius: 4px; +} + +figcaption.figure-caption a { + color: #858796; +} + +button > i.fas { + pointer-events: none; +} + diff --git a/app/css/custom.css b/app/css/custom.css deleted file mode 100644 index c20ebfa0..00000000 --- a/app/css/custom.css +++ /dev/null @@ -1,193 +0,0 @@ -body { - color: #212529; -} - -.page-header { - margin: 20px 0 20px; -} - -.page-header .logo { - margin-right: 5px; -} - -/* Small devices (portrait phones, up to 576px) */ -@media (max-width: 576px) { - .container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; } - .card .card-header { padding: .75rem .5rem; font-size: 1.0rem; } - .row { margin-left: 0rem; margin-right: 0rem; } - .col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; } - .form-group.col-md-6 { margin-left: -0.5rem; } - .js-wifi-stations { margin-left: -0.5rem; margin-right: -0.5rem; } - h4.mt-3 { margin-left: 0.5rem; } -} - -.sidebar { - background-color: #f8f9fc; -} - -.sidebar-brand-text { - text-transform: none; - color: #212529; - font-size: 2.0rem; - font-weight: 500; - font-family: Helvetica, Arial, sans-serif; -} - -.sidebar .nav-item.active .nav-link { - font-weight: 500; -} - -.card .card-header { - border-color: #d8224c; - background-color: #d8224c; - color: #fff; -} - -.card-footer { - background-color: #f2f1f0; -} - -.nav-item { - font-size: 0.85rem; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-link { - font-size: 1.0rem; -} - -.nav-tabs a.nav-link { - color: #6e707e; -} - -a.nav-link.active { - font-weight: bolder; -} - -.sidebar .nav-item .nav-link { - padding: 0.6rem; -} - -.alert-success { - background-color: #d4edda; -} - -.btn-primary { - color: #d8224c; - background-color: #fff; - border-color: #d8224c; -} - -.btn-warning { - color: #333; -} - -.btn-primary:hover { - background-color: #c61931; - border-color: #c61931; -} - -i.fa.fa-bars { - color: #d1d3e2; -} - -i.fa.fa-bars:hover{ - color: #6e707e; -} - -.info-item { - width: 10rem; - float: left; -} - -.info-item-wifi { - width: 6rem; - float: left; -} - -.webconsole { - width:100%; - height:100%; - border:1px solid; -} - -#console { - height:500px; -} - -.systemtabcontent { - height:100%; - min-height:500px; -} - -.service-status { - border-width: 0; -} - -.service-status-up { - color: green; -} - -.service-status-down { - color: red; - animation: flash 1s linear infinite; -} -@keyframes flash { - 50% { - opacity: 0; - } -} - -.logoutput { - width:100%; - height: 20rem; - border: 1px solid #d1d3e2; - border-radius: .35rem; -} - -pre.unstyled { - border-width: 0; - background-color: transparent; - padding: 0; -} - -.dhcp-static-leases { - margin-top: 1em; - margin-bottom: 1em; -} - -.dhcp-static-lease-row { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -.loading-spinner { - background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent; - min-height: 150px; - width: 100%; -} - -.js-reload-wifi-stations { - min-width: 10rem; -} - -.sidebar.toggled .nav-item .nav-link span { - display: none; -} .sidebar .nav-item .nav-link i, -.sidebar .nav-item .nav-link span { - font-size: 1.0rem; -} - -.btn-warning:hover { - color: #000; -} - -.toggle-off.btn { - padding-left: 1.2rem; - font-size: 0.9rem!important; -} - -.toggle-on.btn { - font-size: 0.9rem!important; -} - diff --git a/app/css/custom.php b/app/css/custom.php new file mode 100644 index 00000000..ff87b3b2 --- /dev/null +++ b/app/css/custom.php @@ -0,0 +1,115 @@ + + + +/* +Theme Name: RaspAP default +Author: @billz +Author URI: https://github.com/billz +Description: Default theme for RaspAP +License: GNU General Public License v3.0 +*/ + +@import url('all.css'); + +body { + color: #212529; +} + +.sidebar { + background-color: #f8f9fc; +} + +.sidebar .nav-item.active .nav-link { + font-weight: 500; +} + +.card .card-header, .modal-header { + border-color: ; + color: #fff; + background-color: ; +} + +.modal-header { + border-radius: 0px; +} + +.btn-primary { + color: ; + border-color: ; + background-color: #fff; +} + +.card-footer, .modal-footer { + background-color: #f2f1f0; +} + +.nav-item { + font-size: 0.85rem; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-link { + font-size: 1.0rem; +} + +.nav-tabs a.nav-link { + color: #6e707e; +} + +a.nav-link.active { + font-weight: bolder; +} + +.sidebar .nav-item .nav-link { + padding: 0.6rem 0.6rem 0.6rem 1.0rem; +} + +.alert-success { + background-color: #d4edda; +} + +.btn-primary { + background-color: #fff; +} + +.btn-warning { + color: #333; +} + +.btn-primary:hover { + background-color: ; + border-color: ; +} + +i.fa.fa-bars { + color: #d1d3e2; +} + +i.fa.fa-bars:hover{ + color: #6e707e; +} + +pre.unstyled { + border-width: 0; + background-color: transparent; + padding: 0; +} + +.sidebar.toggled .nav-item .nav-link span { + display: none; +} .sidebar .nav-item .nav-link i, +.sidebar .nav-item .nav-link span { + font-size: 1.0rem; +} + +.btn-warning:hover { + color: #000; +} + +.signal-icon .signal-bar { + background: ; +} + diff --git a/app/css/hackernews.css b/app/css/hackernews.css index d5f7ae63..76a55370 100644 --- a/app/css/hackernews.css +++ b/app/css/hackernews.css @@ -1,6 +1,15 @@ +/* +Theme Name: HackerNews +Author: @billz +Author URI: https://github.com/billz +Description: A theme inspired by HackerNews for RaspAP +License: GNU General Public License v3.0 +*/ + +@import url('all.css'); + html * { font-family: Verdana, Geneva, sans-serif; - font-size: 0.9rem; color: #828282; } @@ -12,6 +21,10 @@ a:focus, a:hover { color: #666; } +h2 { + font-size: 2rem !important; +} + h4 { font-size: 1.3rem; color: #212529; @@ -22,12 +35,12 @@ h5.card-title { color: #212529; } -.card { - border-radius: 1px; +.card, .modal-dialog { + border-radius: 3px; border-color: #ff6600; } -.card>.card-header { +.card>.card-header, .modal-header { border-color: #ff6600; background-color: #ff6600; color: #000; @@ -41,19 +54,23 @@ h5.card-title { font-size: 1.0rem; } -.card-header [class^="fa"] { +.card-header [class^="fa"], .modal-header [class^="fa"] { color: #fff; font-size: 1.0rem; } -.sidebar-brand-text { - text-transform: none; - color: #212529; - font-size: 2.0rem; - font-weight: 500; - font-family: Verdana, Geneva, sans-serif; +.modal-title { + color: #000; + font-size: 1.0rem; } +.modal-content { + border-radius: 0px; +} + +.sidebar-light hr.sidebar-divider { + padding-top: 0.5rem; +} ul.nav-tabs, .nav-tabs .nav-link { background-color: #f6f6ef; @@ -62,34 +79,19 @@ ul.nav-tabs, .nav-tabs .nav-link { .sidebar .nav-item .nav-link { padding: 0.6rem; + margin-left: 0.6rem; } .sidebar-light .nav-item.active .nav-link { font-weight: 300; } -.page-header { - font-size: 26pt; - margin: 10px 0 20px; -} - #wrapper,#page-wrapper, #wrapper #content-wrapper, .nav>li>a,.nav { background-color: #fff; } -/* Small devices (portrait phones, up to 576px) */ -@media (max-width: 576px) { - .container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; } - .card .card-header { padding: .75rem .5rem; font-size: 1.0rem; } - .row { margin-left: 0rem; margin-right: 0rem; } - .col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; } - .form-group.col-md-6 { margin-left: -0.5rem; } - .js-wifi-stations { margin-left: -0.5rem; margin-right: -0.5rem; } - h4.mt-3 { margin-left: 0.5rem; } -} - .card-body { background-color: #f6f6ef; } @@ -120,44 +122,10 @@ ul.nav-tabs, .nav-tabs .nav-link { color: #eee; } -.info-item { - width: 10rem; - float: left; +.fas.fa-circle { + font-size: 0.7rem; } -.info-item-wifi { - width: 6rem; - float: left; -} - -.logoutput { - width: 100%; - height: 20rem; - border: 1px solid #d1d3e2; - border-radius: .35rem; -} - -.service-status { - border-width: 0; -} - -i.fas.fa-circle.service-status-up { - color: green; -} - -i.fas.fa-circle.service-status-down { - color: red; -} - -.service-status-down { - animation: flash 1s linear infinite; -} -@keyframes flash { - 50% { - opacity: 0; - } -} - .logoutput { width:100%; height:300px; @@ -169,26 +137,6 @@ pre.unstyled { padding: 0; } -.dhcp-static-leases { - margin-top: 1em; - margin-bottom: 1em; -} - -.dhcp-static-lease-row { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -.loading-spinner { - background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent; - min-height: 150px; - width: 100%; -} - -.js-reload-wifi-stations { - min-width: 10rem; -} - .sidebar.toggled .nav-item .nav-link { text-align: center; padding: .6rem 1rem; @@ -206,12 +154,7 @@ pre.unstyled { color: #000; } -.toggle-off.btn { - padding-left: 0.9rem; - font-size: 0.9rem!important; -} - -.toggle-on.btn { - font-size: 0.9rem!important; +.signal-icon .signal-bar { + background: #ff6600; } diff --git a/app/css/lightsout.css b/app/css/lightsout.css new file mode 100644 index 00000000..aea5c83d --- /dev/null +++ b/app/css/lightsout.css @@ -0,0 +1,360 @@ +/* +Theme Name: Lights Out +Author: @billz +Author URI: https://github.com/billz +Description: A dark mode theme for RaspAP +License: GNU General Public License v3.0 +*/ + +@import url('all.css'); + +html * { + font-family: Helvetica,Arial,sans-serif; + color: #afafaf; +} + +h2 { + font-size: 2rem !important; +} + +h4 { + font-size: 1.3rem; +} + +h5.card-title { + font-size: 1.2rem; +} + +.page-header { + border-left: .01rem solid #d2d2d2; + border-bottom: .01rem solid #d2d2d2; +} + +.sidebar-light .nav-item.active .nav-link i { + color: #d2d2d2; +} + +.sidebar .nav-item.active .nav-link { + font-weight: 400; +} + +#wrapper #content-wrapper #content { + background-color: #202020; +} + +.topbar { + background-color: #202020; +} + +.nav-tabs { + border-bottom: 1px solid #404040; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-link { + font-size: 1.0rem; +} + +.nav-tabs .nav-link:hover { + border-color: transparent; +} + +.navbar-default .navbar-brand:hover { + color: #d2d2d2; +} + +.navbar-default .navbar-toggle { + border-color: #d2d2d2; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #d2d2d2; +} + +.navbar-default .navbar-toggle:focus, +.navbar-default .navbar-toggle:hover { + background-color: #202020; +} + +#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: #d2d2d2; + background-color: #141414; + border-color: #404040 #404040 #141414; +} + +a:focus, a:hover { + color: #d2d2d2; +} + +.card>.card-header, .modal-content, .modal-header { + border-color: #404040; + background-color: #202020; + color: #afafaf; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + font-size: 1.0rem; + font-weight: 400; +} + +.modal-body { + background-color: #141414; +} + +.card>.card-header .fa { + color: #202020; +} + +.card-header [class^="fa"] { + color: #afafaf; + font-size: 1.0rem; +} + +.col { + color: #afafaf; +} + +.card, .card-body { + border-color: #343434; + border-radius: 3px; + background-color: #141414; +} + +hr { + border-top: .01rem solid #d2d2d2; +} + +.sidebar-brand-text { + color: #2b8080 !important; +} + +.ra-raspap:before { + color: #ac1b3d !important; +} + +.sidebar-light #sidebarToggle { + background-color: #202020; + border: 1px solid #afafaf !important +} + +.sidebar-light #sidebarToggle::after { + color: #afafaf; +} + +.sidebar-light .nav-item .nav-link:hover i { + color: #d2d2d2; +} + +.sidebar-light #sidebarToggle:hover { + background-color: #202020; +} + +.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: #202020; + border-top: 0px; +} + +.modal-footer { + border-radius: 0.3rem; +} + +.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: #202020; +} + +.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 #404040; + padding-top: 0.5rem; +} + +.sidebar .nav-item .nav-link span { + font-size: 1.0rem; +} + +.topbar .topbar-divider { + border-right: 1px solid #404040; +} + +.label-warning { + background-color: #d2d2d2; +} + +span.label.label-warning { + color: #202020; +} + +.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: #202020; + border-top: .01rem solid #202020; +} + +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: .01rem solid #d2d2d2; +} + +[class*="btn"], [class*="btn"]:focus, [class*="btn"]:disabled { + background-color: #202020; + border-color: #404040; + border-radius: 3px; + color: #d2d2d2; +} + +[class*="btn"]:hover { + border-radius: 3px; + color: #d2d2d2; + background-color: #202020; + border-color: #afafaf; +} + +[class*="btn"]:hover .disabled { + background-color:red; +} + +[class*="alert"] { + border-radius: .35rem; + color: #d2d2d2; + background-color: #202020; + border: 1px solid #404040; +} + +.close { + font-size: 1.2em; + font-weight: 400; + text-shadow: none; + color: #d2d2d2; +} + +.form-control, +.form-control:focus, +.custom-select { + color: #d2d2d2; + background-color: #202020; + border: 1px solid #404040; + border-radius: 3px; +} + +.form-control:disabled, +.form-control[readonly] { + background-color: #202020; + 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; } + +input[type="text"]{ +color: #d2d2d2 !important +} + +.progress { + background-color: #202020; + border-radius: 0px; +} + +.progress-bar { + color: #202020; +} + +.progress-bar.progress-bar-info.progress-bar-striped.active { + background-color: #d2d2d2; +} + +.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; +} + +.logoutput { + background-color: #202020; + border-color: #404040; +} + +.text-muted { + font-size: 0.8rem; +} + +.fas.fa-circle { + font-size: 0.7rem; +} + +pre { + background-color: #202020; + border: #202020; +} + +button.btn.btn-light.js-toggle-password { + border: 1px solid #343434; +} + + +.signal-icon .signal-bar { + background: #2b8080; +} + diff --git a/app/css/terminal.css b/app/css/terminal.css deleted file mode 100644 index 3ac3a1fb..00000000 --- a/app/css/terminal.css +++ /dev/null @@ -1,396 +0,0 @@ -html * { - font-family: Courier New, Andale Mono, monospace; - font-size: 1.0rem; - color: #2ee600; -} - -h4 { - font-size: 1.3rem; -} - -h5.card-title { - font-size: 1.2rem; -} - -.page-header { - padding: 0 20px; - border-left: 1px solid #2ee600; -} - -.sidebar-light .nav-item.active .nav-link i { - color: #2ee600; -} - -.sidebar .nav-item.active .nav-link { - font-weight: 700; -} - -#wrapper #content-wrapper #content { - background-color: #000; -} - -/* Small devices (portait phones, up to 576px) */ -@media (max-width: 576px) { - .container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; } - .card .card-header { padding: .75rem .5rem; font-size: 1.0rem; } - .row { margin-left: 0rem; margin-right: 0rem; } - .col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; } - .form-group.col-md-6 { margin-left: -0.5rem; } - .js-wifi-stations { margin-left: -0.5rem; margin-right: -0.5rem; } - h4.mt-3 { margin-left: 0.5rem; } -} - -.topbar { - background-color: #000; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-link { - font-size: 1.0rem; -} - -.nav-tabs>li.active>a, -.nav-tabs>li.active>a:focus, -.nav-tabs>li.active>a:hover, -.nav-tabs .nav-link:hover, -.input-group-addon { - color: #2ee600; - cursor: default; - background-color: #000; - border: 1px solid #2ee600; - border-bottom-color: #2ee600; - border-radius: inherit; -} - -.nav-tabs>li>a,.nav-tabs>li>a:hover { - border: 1px solid #2ee600; -} - -.nav-tabs { - border-bottom: 1px solid #2ee600; -} - -.navbar-default .navbar-brand, -.navbar-default .navbar-brand:hover { - color: #2ee600; -} - -.navbar-default .navbar-toggle { - border-color: #2ee600; -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #2ee600; -} - -.navbar-default .navbar-toggle:focus, -.navbar-default .navbar-toggle:hover { - background-color: #000; -} - -.nav-tabs .nav-link.active { - color: #000; - background-color: #2ee600; - border-color: #2ee600; - border-radius: inherit; -} - -.sidebar-brand-icon { - filter: invert(65%) sepia(900%) saturate(536%) hue-rotate(68deg) brightness(100%) contrast(120%); - width: 30px; -} - -a:focus, a:hover { - color: #2ee600; -} - -.card>.card-header { - border-color: #2ee600; - background-color: #2ee600; - color: #000; - border-radius: unset; - font-size: 1.1rem; - font-weight: bold; -} - -.card>.card-header .fa { - color: #000; -} - -.card-header [class^="fa"] { - color: #000; - font-size: 1.0rem; -} - -.col { - color: #000; -} - -.card, .card-body { - margin-bottom: 20px; - border: 1px solid #2ee600; - border-radius: 0px; - background-color: #000; -} - -hr { - border-top: 1px solid #2ee600; -} - -.page-header { - font-size: 24pt; - margin: 10px 0 20px; - border-bottom: 1px solid #2ee600; -} - -.sidebar-brand-text { - text-transform: none; - color: #2ee600; - font-size: 2.0rem; - font-weight: 500; - font-family: inherit; -} - -.sidebar-light #sidebarToggle { - background-color: #2ee600; -} - -.sidebar-light #sidebarToggle::after { - color: #000; -} - -.sidebar-light .nav-item .nav-link:hover i { - color: #81ff61; -} - -.sidebar-light #sidebarToggle:hover { - background-color: #81ff61; -} - -.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 { - background-color: #000; - border-top: 1px solid #2ee600; -} - -.card>.card-header::before, .navbar-default::before { - content: " "; - display: block; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.06), rgba(0, 255, 0, 0.02), rgba(0, 0, 255, 0.06)); - z-index: 2; - background-size: 100% 2px, 3px 100%; - pointer-events: none; -} - -.sidebar-light, .sticky-footer { - background-color: #000; -} - -.sidebar-light .nav-item .nav-link i { - color: #2ee600; -} - -.sidebar .nav-item .nav-link { - padding: 0.6rem; -} - -.sidebar-light hr.sidebar-divider { - border-top: 1px solid #2ee600; -} - -.topbar .topbar-divider { - border-right: 1px solid #2ee600; -} - -.info-item { - width: 12rem; - float: left; -} - -.info-item-wifi { - width: 6rem; - float: left; -} - -.label-warning { - background-color: #2ee600; -} - -span.label.label-warning { - color: #000; -} - -.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: #000; - border-top: 1px solid #000; -} - -.table>thead>tr>th { - vertical-align: bottom; - border-bottom: 1px solid #2ee600; -} - -[class*="btn"], [class*="btn"]:focus, [class*="btn"]:disabled { - background-color: #000; - border-color: #2ee600; - border-color: #2ee600; - border-radius: 0px; - color: #2ee600; -} - -[class*="btn"]:hover { - background-color: #81ff61; - border-color: #81ff61; - border-color: #81ff61; - border-radius: 0px; - color: #000; -} - -[class*="btn"]:hover .disabled { - background-color:red; -} - -[class*="alert"] { - border-radius: 0px; - color: #2ee600; - background-color: #000; - border-color: #2ee600; - border: 1px dashed; -} - -.close { - font-size: 18px; - font-weight: normal; - text-shadow: 0 0px 0 #000; - opacity: 1; -} - -.form-control, -.form-control:focus { - color: #2ee600; - background-color: #000; - border: 1px solid #2ee600; - border-radius: 0px; - transition: unset; -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #000; - opacity: 0.5; -} - -.form-control::-webkit-input-placeholder { color: #2ee600; } -.form-control:-moz-placeholder { color: #2ee600; } -.form-control::-moz-placeholder { color: #2ee600; } -.form-control:-ms-input-placeholder { color: #2ee600; } -.form-control::-ms-input-placeholder { color: #2ee600; } - -input[type="text"]{ -color: #2ee600 !important -} - -.progress { - background-color: #000; - border-radius: 0px; -} - -.progress-bar { - color: #000; -} - -.progress-bar.progress-bar-info.progress-bar-striped.active { - background-color: #2ee600; -} - -.logoutput { - width: 100%; - height: 300px; - background-color: #000; - border-color: #2ee600; -} - -.webconsole { - width: 100%; - height: 100%; - border-color: #2ee600; - border-bottom: 1px solid; - border-left: 1px solid; - border-top: 0px; - border-right: 1px solid; -} - -#console { - height: 500px; -} - -tspan, rect { - fill: #2ee600; -} - -.service-status { - border-width: 0; -} - -span.text.service-status { - font-size: 0.75rem; - margin-top: 0.2rem; -} - -i.fas.fa-circle.service-status-up { - color: #2ee600; -} - -i.fas.fa-circle.service-status-down { - color: #2ee600; - animation: flash 1s linear infinite; -} -@keyframes flash { - 50% { - opacity: 0; - } -} - -pre { - background-color: #000; - border: #000; -} - -.dhcp-static-leases { - margin-top: 1em; - margin-bottom: 1em; -} - -.dhcp-static-lease-row { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -.toggle-off.btn { - padding-left: 1.2rem; - font-size: 0.9rem!important; -} - -.toggle-on.btn { - font-size: 0.9rem!important; -} - diff --git a/app/icons/site.webmanifest b/app/icons/site.webmanifest index 321ab7db..5d0d01c4 100644 --- a/app/icons/site.webmanifest +++ b/app/icons/site.webmanifest @@ -3,7 +3,7 @@ "short_name": "RaspAP", "icons": [ { - "src": "/dist/icons/android-chrome-192x192.png", + "src": "/app/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" } diff --git a/app/img/authors-8bit-200px.png b/app/img/authors-8bit-200px.png deleted file mode 100644 index 72c6f1b3..00000000 Binary files a/app/img/authors-8bit-200px.png and /dev/null differ diff --git a/app/img/insiders.png b/app/img/insiders.png new file mode 100644 index 00000000..6ad27f35 Binary files /dev/null and b/app/img/insiders.png differ diff --git a/app/img/no-trace-200x200.png b/app/img/no-trace-200x200.png new file mode 100644 index 00000000..ab1b40e4 Binary files /dev/null and b/app/img/no-trace-200x200.png differ diff --git a/app/img/raspAP-logo.php b/app/img/raspAP-logo.php new file mode 100644 index 00000000..c23399ab --- /dev/null +++ b/app/img/raspAP-logo.php @@ -0,0 +1,51 @@ + + + +image/svg+xml diff --git a/app/img/raspAP-logo.png b/app/img/raspAP-logo.png index 3943725f..d1da5e19 100644 Binary files a/app/img/raspAP-logo.png and b/app/img/raspAP-logo.png differ diff --git a/app/img/raspAP-logo64px.png b/app/img/raspAP-logo64px.png deleted file mode 100644 index 3c424683..00000000 Binary files a/app/img/raspAP-logo64px.png and /dev/null differ diff --git a/app/img/wg-qr-code.php b/app/img/wg-qr-code.php new file mode 100644 index 00000000..7a66e6fc --- /dev/null +++ b/app/img/wg-qr-code.php @@ -0,0 +1,28 @@ +')); } else if(jsonData['return'] == 2) { @@ -49,91 +47,24 @@ function setupTabs() { }); } -function loadCurrentSettings(strInterface) { - $.post('ajax/networking/get_int_config.php',{interface:strInterface},function(data){ - jsonData = JSON.parse(data); - $.each(jsonData['output'],function(i,v) { - var int = v['interface']; - $.each(v,function(i2,v2) { - switch(i2) { - case "static": - if(v2 == 'true') { - $('#'+int+'-static').click(); - $('#'+int+'-nofailover').click(); - } else { - $('#'+int+'-dhcp').click(); - } - break; - case "failover": - if(v2 === 'true') { - $('#'+int+'-failover').click(); - } else { - $('#'+int+'-nofailover').click(); - } - break; - case "ip_address": - var arrIPNetmask = v2.split('/'); - $('#'+int+'-ipaddress').val(arrIPNetmask[0]); - $('#'+int+'-netmask').val(createNetmaskAddr(arrIPNetmask[1])); - break; - case "routers": - $('#'+int+'-gateway').val(v2); - break; - case "domain_name_server": - svrsDNS = v2.split(" "); - $('#'+int+'-dnssvr').val(svrsDNS[0]); - $('#'+int+'-dnssvralt').val(svrsDNS[1]); - break; - } - }); - }); - }); -} - -function saveNetworkSettings(int) { - var frmInt = $('#frm-'+int).find(':input'); - var arrFormData = {}; - $.each(frmInt,function(i3,v3){ - if($(v3).attr('type') == 'radio') { - arrFormData[$(v3).attr('id')] = $(v3).prop('checked'); - } else { - arrFormData[$(v3).attr('id')] = $(v3).val(); - } - }); - arrFormData['interface'] = int; - $.post('ajax/networking/save_int_config.php',arrFormData,function(data){ - var jsonData = JSON.parse(data); - $('#msgNetworking').html(msgShow(jsonData['return'],jsonData['output'])); - }); -} - -function applyNetworkSettings() { - var int = $(this).data('int'); - arrFormData = {}; - arrFormData['generate'] = ''; - $.post('ajax/networking/gen_int_config.php',arrFormData,function(data){ - console.log(data); - var jsonData = JSON.parse(data); - $('#msgNetworking').html(msgShow(jsonData['return'],jsonData['output'])); - }); -} - $(document).on("click", ".js-add-dhcp-static-lease", function(e) { e.preventDefault(); var container = $(".js-new-dhcp-static-lease"); var mac = $("input[name=mac]", container).val().trim(); var ip = $("input[name=ip]", container).val().trim(); + var comment = $("input[name=comment]", container).val().trim(); if (mac == "" || ip == "") { return; } - var row = $("#js-dhcp-static-lease-row").html() .replace("{{ mac }}", mac) - .replace("{{ ip }}", ip); + .replace("{{ ip }}", ip) + .replace("{{ comment }}", comment); $(".js-dhcp-static-lease-container").append(row); $("input[name=mac]", container).val(""); $("input[name=ip]", container).val(""); + $("input[name=comment]", container).val(""); }); $(document).on("click", ".js-remove-dhcp-static-lease", function(e) { @@ -145,14 +76,90 @@ $(document).on("submit", ".js-dhcp-settings-form", function(e) { $(".js-add-dhcp-static-lease").trigger("click"); }); +$(document).on("click", ".js-add-dhcp-upstream-server", function(e) { + e.preventDefault(); + + var field = $("#add-dhcp-upstream-server-field") + var row = $("#dhcp-upstream-server").html().replace("{{ server }}", field.val()) + + if (field.val().trim() == "") { return } + + $(".js-dhcp-upstream-servers").append(row) + + field.val("") +}); + +$(document).on("click", ".js-remove-dhcp-upstream-server", function(e) { + e.preventDefault(); + $(this).parents(".js-dhcp-upstream-server").remove(); +}); + +$(document).on("submit", ".js-dhcp-settings-form", function(e) { + $(".js-add-dhcp-upstream-server").trigger("click"); +}); + +/** + * mark a form field, e.g. a select box, with the class `.js-field-preset` + * and give it an attribute `data-field-preset-target` with a text field's + * css selector. + * + * now, if the element marked `.js-field-preset` receives a `change` event, + * its value will be copied to all elements matching the selector in + * data-field-preset-target. + */ +$(document).on("change", ".js-field-preset", function(e) { + var selector = this.getAttribute("data-field-preset-target") + var value = "" + this.value + var syncValue = function(el) { el.value = value } + + if (value.trim() === "") { return } + + document.querySelectorAll(selector).forEach(syncValue) +}); + +$(document).on("click", "#gen_wpa_passphrase", function(e) { + $('#txtwpapassphrase').val(genPassword(63)); +}); + +$(document).on("click", "#js-clearhostapd-log", function(e) { + $.post('ajax/logging/clearlog.php?',{'logfile':'/tmp/hostapd.log'},function(data){ + jsonData = JSON.parse(data); + $("#hostapd-log").val(""); + }); +}); + +$(document).on("click", "#js-cleardnsmasq-log", function(e) { + $.post('ajax/logging/clearlog.php?',{'logfile':'/var/log/dnsmasq.log'},function(data){ + jsonData = JSON.parse(data); + $("#dnsmasq-log").val(""); + }); +}); + +$(document).on("click", "#js-clearopenvpn-log", function(e) { + $.post('ajax/logging/clearlog.php?',{'logfile':'/tmp/openvpn.log'},function(data){ + jsonData = JSON.parse(data); + $("#openvpn-log").val(""); + }); +}); + + +// Enable Bootstrap tooltips +$(function () { + $('[data-toggle="tooltip"]').tooltip() +}) + +function genPassword(pwdLen) { + var pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + var rndPass = Array(pwdLen).fill(pwdChars).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join(''); + return rndPass; +} + function setupBtns() { $('#btnSummaryRefresh').click(function(){getAllInterfaces();}); - $('.intsave').click(function(){ var int = $(this).data('int'); saveNetworkSettings(int); }); - $('.intapply').click(function(){ applyNetworkSettings(); }); @@ -166,13 +173,19 @@ function setCSRFTokenHeader(event, xhr, settings) { } function contentLoaded() { - pageCurrent = window.location.href.split("?")[1].split("=")[1]; - pageCurrent = pageCurrent.replace("#",""); + pageCurrent = window.location.href.split("/").pop(); switch(pageCurrent) { case "network_conf": getAllInterfaces(); setupTabs(); setupBtns(); + break; + case "hostapd_conf": + loadChannel(); + setHardwareModeTooltip(); + break; + case "dhcpd_conf": + loadInterfaceDHCPSelect(); break; } } @@ -187,42 +200,322 @@ function loadWifiStations(refresh) { .load('ajax/networking/wifi_stations.php'+qs, complete); }; } - $(".js-reload-wifi-stations").on("click", loadWifiStations(true)); +/* +Populates the DHCP server form fields +Option toggles are set dynamically depending on the loaded configuration +*/ +function loadInterfaceDHCPSelect() { + var strInterface = $('#cbxdhcpiface').val(); + $.get('ajax/networking/get_netcfg.php?iface='+strInterface,function(data){ + jsonData = JSON.parse(data); + $('#dhcp-iface')[0].checked = jsonData.DHCPEnabled; + $('#txtipaddress').val(jsonData.StaticIP); + $('#txtsubnetmask').val(jsonData.SubnetMask); + $('#txtgateway').val(jsonData.StaticRouters); + $('#chkfallback')[0].checked = jsonData.FallbackEnabled; + $('#default-route').prop('checked', jsonData.DefaultRoute); + $('#txtrangestart').val(jsonData.RangeStart); + $('#txtrangeend').val(jsonData.RangeEnd); + $('#txtrangeleasetime').val(jsonData.leaseTime); + $('#txtdns1').val(jsonData.DNS1); + $('#txtdns2').val(jsonData.DNS2); + $('#cbxrangeleasetimeunits').val(jsonData.leaseTimeInterval); + $('#no-resolv')[0].checked = jsonData.upstreamServersEnabled; + $('#cbxdhcpupstreamserver').val(jsonData.upstreamServers[0]); + $('#txtmetric').val(jsonData.Metric); + + if (jsonData.StaticIP !== null && jsonData.StaticIP !== '' && !jsonData.FallbackEnabled) { + $('#chkstatic').closest('.btn').button('toggle'); + $('#chkstatic').closest('.btn').button('toggle').blur(); + $('#chkstatic').blur(); + $('#chkfallback').prop('disabled', true); + } else { + $('#chkdhcp').closest('.btn').button('toggle'); + $('#chkdhcp').closest('.btn').button('toggle').blur(); + $('#chkdhcp').blur(); + $('#chkfallback').prop('disabled', false); + } + if (jsonData.FallbackEnabled || $('#chkdhcp').is(':checked')) { + $('#dhcp-iface').prop('disabled', true); + } + }); +} + +function setDHCPToggles(state) { + if ($('#chkfallback').is(':checked') && state) { + $('#chkfallback').prop('checked', state); + } + if ($('#dhcp-iface').is(':checked') && !state) { + $('#dhcp-iface').prop('checked', state); + } + + $('#chkfallback').prop('disabled', state); + $('#dhcp-iface').prop('disabled', !state); + //$('#dhcp-iface').prop('checked', state); +} + +function loadChannel() { + $.get('ajax/networking/get_channel.php',function(data){ + jsonData = JSON.parse(data); + loadChannelSelect(jsonData); + }); +} + +$('#hostapdModal').on('shown.bs.modal', function (e) { + var seconds = 9; + var countDown = setInterval(function(){ + if(seconds <= 0){ + clearInterval(countDown); + } + var pct = Math.floor(100-(seconds*100/9)); + document.getElementsByClassName('progress-bar').item(0).setAttribute('style','width:'+Number(pct)+'%'); + seconds --; + }, 1000); +}); + +$('#configureClientModal').on('shown.bs.modal', function (e) { +}); + +$('#ovpn-confirm-delete').on('click', '.btn-delete', function (e) { + var cfg_id = $(this).data('recordId'); + $.post('ajax/openvpn/del_ovpncfg.php',{'cfg_id':cfg_id},function(data){ + jsonData = JSON.parse(data); + $("#ovpn-confirm-delete").modal('hide'); + var row = $(document.getElementById("openvpn-client-row-" + cfg_id)); + row.fadeOut( "slow", function() { + row.remove(); + }); + }); +}); + +$('#ovpn-confirm-delete').on('show.bs.modal', function (e) { + var data = $(e.relatedTarget).data(); + $('.btn-delete', this).data('recordId', data.recordId); +}); + +$('#ovpn-confirm-activate').on('click', '.btn-activate', function (e) { + var cfg_id = $(this).data('record-id'); + $.post('ajax/openvpn/activate_ovpncfg.php',{'cfg_id':cfg_id},function(data){ + jsonData = JSON.parse(data); + $("#ovpn-confirm-activate").modal('hide'); + setTimeout(function(){ + window.location.reload(); + },300); + }); +}); + +$('#ovpn-confirm-activate').on('shown.bs.modal', function (e) { + var data = $(e.relatedTarget).data(); + $('.btn-activate', this).data('recordId', data.recordId); +}); + +$('#ovpn-userpw,#ovpn-certs').on('click', function (e) { + if (this.id == 'ovpn-userpw') { + $('#PanelCerts').hide(); + $('#PanelUserPW').show(); + } else if (this.id == 'ovpn-certs') { + $('#PanelUserPW').hide(); + $('#PanelCerts').show(); + } +}); + +$('#js-system-reset-confirm').on('click', function (e) { + var progressText = $('#js-system-reset-confirm').attr('data-message'); + var successHtml = $('#system-reset-message').attr('data-message'); + var closeHtml = $('#js-system-reset-cancel').attr('data-message'); + var csrfToken = $('meta[name=csrf_token]').attr('content'); + var progressHtml = $('
').text(progressText).html() + ''; + $('#system-reset-message').html(progressHtml); + $.post('ajax/networking/do_sys_reset.php?',{'csrf_token':csrfToken},function(data){ + setTimeout(function(){ + jsonData = JSON.parse(data); + if(jsonData['return'] == 0) { + $('#system-reset-message').text(successHtml); + } else { + $('#system-reset-message').text('Error occured: '+ jsonData['return']); + } + $("#js-system-reset-confirm").hide(); + $("#js-system-reset-cancel").text(closeHtml); + },750); + }); +}); + +$(document).ready(function(){ + $("#PanelManual").hide(); +}); + +$('#wg-upload,#wg-manual').on('click', function (e) { + if (this.id == 'wg-upload') { + $('#PanelManual').hide(); + $('#PanelUpload').show(); + } else if (this.id == 'wg-manual') { + $('#PanelUpload').hide(); + $('#PanelManual').show(); + } +}); + +// Add the following code if you want the name of the file appear on select +$(".custom-file-input").on("change", function() { + var fileName = $(this).val().split("\\").pop(); + $(this).siblings(".custom-file-label").addClass("selected").html(fileName); +}); + +/* +Sets the wirelss channel select options based on hw_mode and country_code. + +Methodology: In North America up to channel 11 is the maximum allowed WiFi 2.4Ghz channel, +except for the US that allows channel 12 & 13 in low power mode with additional restrictions. +Canada allows channel 12 in low power mode. Because it's unsure if low powered mode can be +supported the channels are not selectable for those countries. Also Uzbekistan and Colombia +allow up to channel 11 as maximum channel on the 2.4Ghz WiFi band. +Source: https://en.wikipedia.org/wiki/List_of_WLAN_channels +Additional: https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git +*/ +function loadChannelSelect(selected) { + // Fetch wireless regulatory data + $.getJSON("config/wireless.json", function(json) { + var hw_mode = $('#cbxhwmode').val(); + var country_code = $('#cbxcountries').val(); + var channel_select = $('#cbxchannel'); + var data = json["wireless_regdb"]; + var selectablechannels = Array.range(1,14); + + // Assign array of countries to valid frequencies (channels) + var countries_2_4Ghz_max11ch = data["2_4GHz_max11ch"].countries; + var countries_2_4Ghz_max14ch = data["2_4GHz_max14ch"].countries; + var countries_5Ghz_max48ch = data["5Ghz_max48ch"].countries; + + // Map selected hw_mode and country to determine channel list + if (hw_mode === 'a') { + selectablechannels = data["5Ghz_max48ch"].channels; + } else if (($.inArray(country_code, countries_2_4Ghz_max11ch) !== -1) && (hw_mode !== 'ac') ) { + selectablechannels = data["2_4GHz_max11ch"].channels; + } else if (($.inArray(country_code, countries_2_4Ghz_max14ch) !== -1) && (hw_mode === 'b')) { + selectablechannels = data["2_4GHz_max14ch"].channels; + } else if (($.inArray(country_code, countries_5Ghz_max48ch) !== -1) && (hw_mode === 'ac')) { + selectablechannels = data["5Ghz_max48ch"].channels; + } + + // Set channel select with available values + selected = (typeof selected === 'undefined') ? selectablechannels[0] : selected; + channel_select.empty(); + $.each(selectablechannels, function(key,value) { + channel_select.append($("").attr("value", value).text(value)); + }); + channel_select.val(selected); + }); +} + +/* Sets hardware mode tooltip text for selected interface. + */ +function setHardwareModeTooltip() { + var iface = $('#cbxinterface').val(); + var hwmodeText = ''; + // Explanatory text if 802.11ac is disabled + if ($('#cbxhwmode').find('option[value="ac"]').prop('disabled') == true ) { + var hwmodeText = $('#hwmode').attr('data-tooltip'); + } + $.post('ajax/networking/get_frequencies.php?',{'interface': iface},function(data){ + var responseText = JSON.parse(data); + $('#tiphwmode').attr('data-original-title', responseText + '\n' + hwmodeText ); + }); +} + +/* Updates the selected blocklist + * Request is passed to an ajax handler to download the associated list. + * Interface elements are updated to indicate current progress, status. + */ +function updateBlocklist() { + var blocklist_id = $('#cbxblocklist').val(); + if (blocklist_id == '') { return; } + $('#cbxblocklist-status').find('i').removeClass('fas fa-check').addClass('fas fa-cog fa-spin'); + $('#cbxblocklist-status').removeClass('check-hidden').addClass('check-progress'); + $.post('ajax/adblock/update_blocklist.php',{ 'blocklist_id':blocklist_id },function(data){ + var jsonData = JSON.parse(data); + if (jsonData['return'] == '0') { + $('#cbxblocklist-status').find('i').removeClass('fas fa-cog fa-spin').addClass('fas fa-check'); + $('#cbxblocklist-status').removeClass('check-progress').addClass('check-updated').delay(500).animate({ opacity: 1 }, 700); + $('#'+blocklist_id).text("Just now"); + } + }) +} + +function clearBlocklistStatus() { + $('#cbxblocklist-status').removeClass('check-updated').addClass('check-hidden'); +} + +// Handler for the wireguard generate key button +$('.wg-keygen').click(function(){ + var entity_pub = $(this).parent('div').prev('input[type="text"]'); + var entity_priv = $(this).parent('div').next('input[type="hidden"]'); + var updated = entity_pub.attr('name')+"-pubkey-status"; + $.post('ajax/networking/get_wgkey.php',{'entity':entity_pub.attr('name') },function(data){ + var jsonData = JSON.parse(data); + entity_pub.val(jsonData.pubkey); + $('#' + updated).removeClass('check-hidden').addClass('check-updated').delay(500).animate({ opacity: 1 }, 700); + }) +}) + +// Handler for wireguard client.conf download +$('.wg-client-dl').click(function(){ + var req = new XMLHttpRequest(); + var url = 'ajax/networking/get_wgcfg.php'; + req.open('get', url, true); + req.responseType = 'blob'; + req.setRequestHeader('Content-type', 'text/plain; charset=UTF-8'); + req.onreadystatechange = function (event) { + if(req.readyState == 4 && req.status == 200) { + var blob = req.response; + var link=document.createElement('a'); + link.href=window.URL.createObjectURL(blob); + link.download = 'client.conf'; + link.click(); + } + } + req.send(); +}) + +// Event listener for Bootstrap's form validation +window.addEventListener('load', function() { + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.getElementsByClassName('needs-validation'); + // Loop over them and prevent submission + var validation = Array.prototype.filter.call(forms, function(form) { + form.addEventListener('submit', function(event) { + if (form.checkValidity() === false) { + event.preventDefault(); + event.stopPropagation(); + } + form.classList.add('was-validated'); + }, false); + }); +}, false); + +// Static Array method +Array.range = (start, end) => Array.from({length: (end - start)}, (v, k) => k + start); + $(document).on("click", ".js-toggle-password", function(e) { var button = $(e.target) var field = $(button.data("target")); + if (field.is(":input")) { e.preventDefault(); if (!button.data("__toggle-with-initial")) { - button.data("__toggle-with-initial", button.text()) + $("i", this).removeClass("fas fa-eye").addClass(button.attr("data-toggle-with")); } if (field.attr("type") === "password") { - button.text(button.data("toggle-with")); field.attr("type", "text"); } else { - button.text(button.data("__toggle-with-initial")); + $("i", this).removeClass("fas fa-eye-slash").addClass("fas fa-eye"); field.attr("type", "password"); } } }); -$(document).on("keyup", ".js-validate-psk", function(e) { - var field = $(e.target); - var colors = field.data("colors").split(","); - var target = $(field.data("target")); - if (field.val().length < 8 || field.val().length > 63) { - field.css("backgroundColor", colors[0]); - target.attr("disabled", true); - } else { - field.css("backgroundColor", colors[1]); - target.attr("disabled", false); - } -}); - $(function() { $('#theme-select').change(function() { var theme = themes[$( "#theme-select" ).val() ]; @@ -236,6 +529,17 @@ function set_theme(theme) { setCookie('theme',theme,90); } +$(function() { + $('#night-mode').change(function() { + var state = $(this).is(':checked'); + if (state == true && getCookie('theme') != 'lightsout.css') { + set_theme('lightsout.css'); + } else { + set_theme('custom.php'); + } + }); +}); + function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); @@ -249,10 +553,11 @@ function getCookie(cname) { return (value != null) ? unescape(value[1]) : null; } +// Define themes var themes = { - "default": "custom.css", + "default": "custom.php", "hackernews" : "hackernews.css", - "terminal" : "terminal.css", + "lightsout" : "lightsout.css", } // Toggles the sidebar navigation. diff --git a/app/js/dashboardchart.js b/app/js/dashboardchart.js new file mode 100644 index 00000000..e9b039fa --- /dev/null +++ b/app/js/dashboardchart.js @@ -0,0 +1,106 @@ +(function($, _t) { + "use strict"; + + /** + * Create a Chart.js barchart. + */ + function CreateChart(ctx, labels) { + var barchart = new Chart(ctx,{ + type: 'line', + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + xAxes: [{ + scaleLabel: { + display: true + }, + ticks: { + maxRotation: 0, + minRotation: 0 + } + }], + yAxes: [{ + id: 'y-axis-1', + type: 'linear', + display: true, + position: 'left', + ticks: { + beginAtZero: true + } + }] + } + }, + data: { + labels: labels, + datasets: [] + } + }); + return barchart; + } + + function ShowBandwidthChartHandler(e) { + // Remove hourly chartjs chart + $('#divDBChartBandwidthhourly').empty(); + // Construct ajax uri for getting the proper data + var timeunit = 'hourly'; + var uri = 'ajax/bandwidth/get_bandwidth.php?'; + uri += 'inet='; + uri += encodeURIComponent($('#divInterface').text()); + uri += '&tu='; + uri += encodeURIComponent(timeunit.substr(0, 1)); + var datasizeunits = 'mb'; + uri += '&dsu='+encodeURIComponent(datasizeunits); + // Get data for chart + $.ajax({ + url: uri, + dataType: 'json', + beforeSend: function() {} + }).done(function(jsondata) { + // Map json values to label array + var labels = jsondata.map(function(e) { + return e.date; + }); + // Init. chart with label series + var barchart = CreateChart('divDBChartBandwidth'+timeunit, labels); + var dataRx = jsondata.map(function(e) { + return e.rx; + }); + var dataTx = jsondata.map(function(e) { + return e.tx; + }); + addData(barchart, dataTx, dataRx, datasizeunits); + }).fail(function(xhr, textStatus) { + if (window.console) { + console.error('server error'); + } else { + alert("server error"); + } + }); + } + /** + * Add data array to datasets of current chart. + */ + function addData(chart, dataTx, dataRx, datasizeunits) { + chart.data.datasets.push({ + label: 'Send'+' '+datasizeunits.toUpperCase(), + yAxisID: 'y-axis-1', + borderColor: 'rgba(75, 192, 192, 1)', + backgroundColor: 'rgba(75, 192, 192, 0.2)', + data: dataTx + }); + chart.data.datasets.push({ + label: 'Receive'+' '+datasizeunits.toUpperCase(), + yAxisID: 'y-axis-1', + borderColor: 'rgba(192, 192, 192, 1)', + backgroundColor: 'rgba(192, 192, 192, 0.2)', + data: dataRx + }); + chart.update(); + } + $(document).ready(function() { + ShowBandwidthChartHandler(); + }); + +})(jQuery, t); + diff --git a/app/js/huebee.js b/app/js/huebee.js new file mode 100644 index 00000000..486d28b2 --- /dev/null +++ b/app/js/huebee.js @@ -0,0 +1,22 @@ +// Initialize Huebee color picker +var elem = document.querySelector('.color-input'); +var hueb = new Huebee( elem, { + notation: 'hex', + saturations: 2, + customColors: [ '#d8224c', '#dd4814', '#ea0', '#19f', '#333' ], + className: 'light-picker', + hue0: 210 +}); + +// Set custom color if defined +var color = getCookie('color'); +if (color == null || color == '') { + color = '#2b8080'; +} +hueb.setColor(color); + +// Change event +hueb.on( 'change', function( color, hue, sat, lum ) { + setCookie('color',color,90); +}) + diff --git a/app/js/linkquality.js b/app/js/linkquality.js index 6e8dd34b..40f87a7c 100644 --- a/app/js/linkquality.js +++ b/app/js/linkquality.js @@ -1,86 +1,86 @@ // Link quality gauge for ChartJS -// Support for dark terminal theme +// Support for dark theme theme = getCookie('theme'); -if (theme == 'terminal.css') { - var bgColor1 = '#000'; - var bgColor2 = '#000'; - var borderColor = 'rgba(46, 230, 0, 1)'; - var labelColor = 'rgba(46, 230, 0, 1)'; +if (theme == 'lightsout.css') { + var bgColor1 = '#141414'; + var bgColor2 = '#141414'; + var borderColor = 'rgba(37, 153, 63, 1)'; + var labelColor = 'rgba(37, 153, 63, 1)'; } else { - var bgColor1 = '#d4edda'; - var bgColor2 = '#eaecf4'; - var borderColor = 'rgba(147, 210, 162, 1)'; - var labelColor = 'rgba(130, 130, 130, 1)'; + var bgColor1 = '#d4edda'; + var bgColor2 = '#eaecf4'; + var borderColor = 'rgba(147, 210, 162, 1)'; + var labelColor = 'rgba(130, 130, 130, 1)'; } let data1 = { - datasets: [{ - data: [linkQ, 100-linkQ], - backgroundColor: [bgColor1, bgColor2], - borderColor: borderColor, - }], + datasets: [{ + data: [linkQ, 100-linkQ], + backgroundColor: [bgColor1, bgColor2], + borderColor: borderColor, + }], }; let config = { - type: 'doughnut', - data: data1, - options: { - aspectRatio: 2, - responsive: true, - tooltips: {enabled: false}, - hover: {mode: null}, - legend: { - display: false, - }, - rotation: (2/3)*Math.PI,//2+(1/3), - circumference: (1+(2/3)) * Math.PI, // * Math.PI, - cutoutPercentage: 80, - animation: { - animateScale: false, - animateRotate: true - }, - tooltips: { - enabled: false - } + type: 'doughnut', + data: data1, + options: { + aspectRatio: 2, + responsive: true, + maintainAspectRatio: false, + tooltips: {enabled: false}, + hover: {mode: null}, + legend: { + display: false, }, - centerText: { - display: true, - text: linkQ + "%" + rotation: (2/3)*Math.PI,//2+(1/3), + circumference: (1+(2/3)) * Math.PI, // * Math.PI, + cutoutPercentage: 80, + animation: { + animateScale: false, + animateRotate: true + }, + tooltips: { + enabled: false } -}; - -Chart.Chart.pluginService.register({ + }, + centerText: { + display: true, + text: linkQ + "%" + }, + plugins: [{ beforeDraw: function(chart) { - if (chart.config.centerText.display !== null && - typeof chart.config.centerText.display !== 'undefined' && - chart.config.centerText.display) { - drawLinkQ(chart); - } + if (chart.config.centerText.display !== null && + typeof chart.config.centerText.display !== 'undefined' && + chart.config.centerText.display) { + drawLinkQ(chart); + } } -}); + }] +}; function drawLinkQ(chart) { - let width = chart.chart.width; - let height = chart.chart.height; - let ctx = chart.chart.ctx; + let width = chart.chart.width; + let height = chart.chart.height; + let ctx = chart.chart.ctx; - ctx.restore(); - let fontSize = (height / 100).toFixed(2); - ctx.font = fontSize + "em sans-serif"; - ctx.fillStyle = labelColor; - ctx.textBaseline = "middle"; + ctx.restore(); + let fontSize = (height / 100).toFixed(2); + ctx.font = fontSize + "em sans-serif"; + ctx.fillStyle = labelColor; + ctx.textBaseline = "middle"; - let text = chart.config.centerText.text; - let textX = Math.round((width - ctx.measureText(text).width) * 0.5); - let textY = height / 2; - ctx.fillText(text, textX, textY); - ctx.save(); + let text = chart.config.centerText.text; + let textX = Math.round((width - ctx.measureText(text).width) * 0.5); + let textY = height / 2; + ctx.fillText(text, textX, textY); + ctx.save(); } window.onload = function() { - let ctx = document.getElementById("canvas").getContext("2d"); - window.myDoughnut = new Chart(ctx, config); + let ctx = document.getElementById("divChartLinkQ").getContext("2d"); + var chart = new Chart(ctx, config); }; diff --git a/app/lib/Parsedown.php b/app/lib/Parsedown.php new file mode 100644 index 00000000..ae0cbdec --- /dev/null +++ b/app/lib/Parsedown.php @@ -0,0 +1,1994 @@ +textElements($text); + + # convert to markup + $markup = $this->elements($Elements); + + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + protected function textElements($text) + { + # make sure no definitions are set + $this->DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # iterate through lines to identify blocks + return $this->linesElements($lines); + } + + # + # Setters + # + + function setBreaksEnabled($breaksEnabled) + { + $this->breaksEnabled = $breaksEnabled; + + return $this; + } + + protected $breaksEnabled; + + function setMarkupEscaped($markupEscaped) + { + $this->markupEscaped = $markupEscaped; + + return $this; + } + + protected $markupEscaped; + + function setUrlsLinked($urlsLinked) + { + $this->urlsLinked = $urlsLinked; + + return $this; + } + + protected $urlsLinked = true; + + function setSafeMode($safeMode) + { + $this->safeMode = (bool) $safeMode; + + return $this; + } + + protected $safeMode; + + function setStrictMode($strictMode) + { + $this->strictMode = (bool) $strictMode; + + return $this; + } + + protected $strictMode; + + protected $safeLinksWhitelist = array( + 'http://', + 'https://', + 'ftp://', + 'ftps://', + 'mailto:', + 'tel:', + 'data:image/png;base64,', + 'data:image/gif;base64,', + 'data:image/jpeg;base64,', + 'irc:', + 'ircs:', + 'git:', + 'ssh:', + 'news:', + 'steam:', + ); + + # + # Lines + # + + protected $BlockTypes = array( + '#' => array('Header'), + '*' => array('Rule', 'List'), + '+' => array('List'), + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), + '0' => array('List'), + '1' => array('List'), + '2' => array('List'), + '3' => array('List'), + '4' => array('List'), + '5' => array('List'), + '6' => array('List'), + '7' => array('List'), + '8' => array('List'), + '9' => array('List'), + ':' => array('Table'), + '<' => array('Comment', 'Markup'), + '=' => array('SetextHeader'), + '>' => array('Quote'), + '[' => array('Reference'), + '_' => array('Rule'), + '`' => array('FencedCode'), + '|' => array('Table'), + '~' => array('FencedCode'), + ); + + # ~ + + protected $unmarkedBlockTypes = array( + 'Code', + ); + + # + # Blocks + # + + protected function lines(array $lines) + { + return $this->elements($this->linesElements($lines)); + } + + protected function linesElements(array $lines) + { + $Elements = array(); + $CurrentBlock = null; + + foreach ($lines as $line) + { + if (chop($line) === '') + { + if (isset($CurrentBlock)) + { + $CurrentBlock['interrupted'] = (isset($CurrentBlock['interrupted']) + ? $CurrentBlock['interrupted'] + 1 : 1 + ); + } + + continue; + } + + while (($beforeTab = strstr($line, "\t", true)) !== false) + { + $shortage = 4 - mb_strlen($beforeTab, 'utf-8') % 4; + + $line = $beforeTab + . str_repeat(' ', $shortage) + . substr($line, strlen($beforeTab) + 1) + ; + } + + $indent = strspn($line, ' '); + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) + { + $methodName = 'block' . $CurrentBlock['type'] . 'Continue'; + $Block = $this->$methodName($Line, $CurrentBlock); + + if (isset($Block)) + { + $CurrentBlock = $Block; + + continue; + } + else + { + if ($this->isBlockCompletable($CurrentBlock['type'])) + { + $methodName = 'block' . $CurrentBlock['type'] . 'Complete'; + $CurrentBlock = $this->$methodName($CurrentBlock); + } + } + } + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) + { + foreach ($this->BlockTypes[$marker] as $blockType) + { + $blockTypes []= $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) + { + $Block = $this->{"block$blockType"}($Line, $CurrentBlock); + + if (isset($Block)) + { + $Block['type'] = $blockType; + + if ( ! isset($Block['identified'])) + { + if (isset($CurrentBlock)) + { + $Elements[] = $this->extractElement($CurrentBlock); + } + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) + { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and $CurrentBlock['type'] === 'Paragraph') + { + $Block = $this->paragraphContinue($Line, $CurrentBlock); + } + + if (isset($Block)) + { + $CurrentBlock = $Block; + } + else + { + if (isset($CurrentBlock)) + { + $Elements[] = $this->extractElement($CurrentBlock); + } + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) + { + $methodName = 'block' . $CurrentBlock['type'] . 'Complete'; + $CurrentBlock = $this->$methodName($CurrentBlock); + } + + # ~ + + if (isset($CurrentBlock)) + { + $Elements[] = $this->extractElement($CurrentBlock); + } + + # ~ + + return $Elements; + } + + protected function extractElement(array $Component) + { + if ( ! isset($Component['element'])) + { + if (isset($Component['markup'])) + { + $Component['element'] = array('rawHtml' => $Component['markup']); + } + elseif (isset($Component['hidden'])) + { + $Component['element'] = array(); + } + } + + return $Component['element']; + } + + protected function isBlockContinuable($Type) + { + return method_exists($this, 'block' . $Type . 'Continue'); + } + + protected function isBlockCompletable($Type) + { + return method_exists($this, 'block' . $Type . 'Complete'); + } + + # + # Code + + protected function blockCode($Line, $Block = null) + { + if (isset($Block) and $Block['type'] === 'Paragraph' and ! isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] >= 4) + { + $text = substr($Line['body'], 4); + + $Block = array( + 'element' => array( + 'name' => 'pre', + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ), + ); + + return $Block; + } + } + + protected function blockCodeContinue($Line, $Block) + { + if ($Line['indent'] >= 4) + { + if (isset($Block['interrupted'])) + { + $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); + + unset($Block['interrupted']); + } + + $Block['element']['element']['text'] .= "\n"; + + $text = substr($Line['body'], 4); + + $Block['element']['element']['text'] .= $text; + + return $Block; + } + } + + protected function blockCodeComplete($Block) + { + return $Block; + } + + # + # Comment + + protected function blockComment($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (strpos($Line['text'], '') !== false) + { + $Block['closed'] = true; + } + + return $Block; + } + } + + protected function blockCommentContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + $Block['element']['rawHtml'] .= "\n" . $Line['body']; + + if (strpos($Line['text'], '-->') !== false) + { + $Block['closed'] = true; + } + + return $Block; + } + + # + # Fenced Code + + protected function blockFencedCode($Line) + { + $marker = $Line['text'][0]; + + $openerLength = strspn($Line['text'], $marker); + + if ($openerLength < 3) + { + return; + } + + $infostring = trim(substr($Line['text'], $openerLength), "\t "); + + if (strpos($infostring, '`') !== false) + { + return; + } + + $Element = array( + 'name' => 'code', + 'text' => '', + ); + + if ($infostring !== '') + { + /** + * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * Every HTML element may have a class attribute specified. + * The attribute, if specified, must have a value that is a set + * of space-separated tokens representing the various classes + * that the element belongs to. + * [...] + * The space characters, for the purposes of this specification, + * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), + * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and + * U+000D CARRIAGE RETURN (CR). + */ + $language = substr($infostring, 0, strcspn($infostring, " \t\n\f\r")); + + $Element['attributes'] = array('class' => "language-$language"); + } + + $Block = array( + 'char' => $marker, + 'openerLength' => $openerLength, + 'element' => array( + 'name' => 'pre', + 'element' => $Element, + ), + ); + + return $Block; + } + + protected function blockFencedCodeContinue($Line, $Block) + { + if (isset($Block['complete'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); + + unset($Block['interrupted']); + } + + if (($len = strspn($Line['text'], $Block['char'])) >= $Block['openerLength'] + and chop(substr($Line['text'], $len), ' ') === '' + ) { + $Block['element']['element']['text'] = substr($Block['element']['element']['text'], 1); + + $Block['complete'] = true; + + return $Block; + } + + $Block['element']['element']['text'] .= "\n" . $Line['body']; + + return $Block; + } + + protected function blockFencedCodeComplete($Block) + { + return $Block; + } + + # + # Header + + protected function blockHeader($Line) + { + $level = strspn($Line['text'], '#'); + + if ($level > 6) + { + return; + } + + $text = trim($Line['text'], '#'); + + if ($this->strictMode and isset($text[0]) and $text[0] !== ' ') + { + return; + } + + $text = trim($text, ' '); + + $Block = array( + 'element' => array( + 'name' => 'h' . $level, + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $text, + 'destination' => 'elements', + ) + ), + ); + + return $Block; + } + + # + # List + + protected function blockList($Line, array $CurrentBlock = null) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]{1,9}+[.\)]'); + + if (preg_match('/^('.$pattern.'([ ]++|$))(.*+)/', $Line['text'], $matches)) + { + $contentIndent = strlen($matches[2]); + + if ($contentIndent >= 5) + { + $contentIndent -= 1; + $matches[1] = substr($matches[1], 0, -$contentIndent); + $matches[3] = str_repeat(' ', $contentIndent) . $matches[3]; + } + elseif ($contentIndent === 0) + { + $matches[1] .= ' '; + } + + $markerWithoutWhitespace = strstr($matches[1], ' ', true); + + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'data' => array( + 'type' => $name, + 'marker' => $matches[1], + 'markerType' => ($name === 'ul' ? $markerWithoutWhitespace : substr($markerWithoutWhitespace, -1)), + ), + 'element' => array( + 'name' => $name, + 'elements' => array(), + ), + ); + $Block['data']['markerTypeRegex'] = preg_quote($Block['data']['markerType'], '/'); + + if ($name === 'ol') + { + $listStart = ltrim(strstr($matches[1], $Block['data']['markerType'], true), '0') ?: '0'; + + if ($listStart !== '1') + { + if ( + isset($CurrentBlock) + and $CurrentBlock['type'] === 'Paragraph' + and ! isset($CurrentBlock['interrupted']) + ) { + return; + } + + $Block['element']['attributes'] = array('start' => $listStart); + } + } + + $Block['li'] = array( + 'name' => 'li', + 'handler' => array( + 'function' => 'li', + 'argument' => !empty($matches[3]) ? array($matches[3]) : array(), + 'destination' => 'elements' + ) + ); + + $Block['element']['elements'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + if (isset($Block['interrupted']) and empty($Block['li']['handler']['argument'])) + { + return null; + } + + $requiredIndent = ($Block['indent'] + strlen($Block['data']['marker'])); + + if ($Line['indent'] < $requiredIndent + and ( + ( + $Block['data']['type'] === 'ol' + and preg_match('/^[0-9]++'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', $Line['text'], $matches) + ) or ( + $Block['data']['type'] === 'ul' + and preg_match('/^'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', $Line['text'], $matches) + ) + ) + ) { + if (isset($Block['interrupted'])) + { + $Block['li']['handler']['argument'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['indent'] = $Line['indent']; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => array( + 'function' => 'li', + 'argument' => array($text), + 'destination' => 'elements' + ) + ); + + $Block['element']['elements'] []= & $Block['li']; + + return $Block; + } + elseif ($Line['indent'] < $requiredIndent and $this->blockList($Line)) + { + return null; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ($Line['indent'] >= $requiredIndent) + { + if (isset($Block['interrupted'])) + { + $Block['li']['handler']['argument'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + $text = substr($Line['body'], $requiredIndent); + + $Block['li']['handler']['argument'] []= $text; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,'.$requiredIndent.'}+/', '', $Line['body']); + + $Block['li']['handler']['argument'] []= $text; + + return $Block; + } + } + + protected function blockListComplete(array $Block) + { + if (isset($Block['loose'])) + { + foreach ($Block['element']['elements'] as &$li) + { + if (end($li['handler']['argument']) !== '') + { + $li['handler']['argument'] []= ''; + } + } + } + + return $Block; + } + + # + # Quote + + protected function blockQuote($Line) + { + if (preg_match('/^>[ ]?+(.*+)/', $Line['text'], $matches)) + { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => array( + 'function' => 'linesElements', + 'argument' => (array) $matches[1], + 'destination' => 'elements', + ) + ), + ); + + return $Block; + } + } + + protected function blockQuoteContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?+(.*+)/', $Line['text'], $matches)) + { + $Block['element']['handler']['argument'] []= $matches[1]; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $Block['element']['handler']['argument'] []= $Line['text']; + + return $Block; + } + } + + # + # Rule + + protected function blockRule($Line) + { + $marker = $Line['text'][0]; + + if (substr_count($Line['text'], $marker) >= 3 and chop($Line['text'], " $marker") === '') + { + $Block = array( + 'element' => array( + 'name' => 'hr', + ), + ); + + return $Block; + } + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + if ( ! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] < 4 and chop(chop($Line['text'], ' '), $Line['text'][0]) === '') + { + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; + + return $Block; + } + } + + # + # Markup + + protected function blockMarkup($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (preg_match('/^<[\/]?+(\w*)(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+(\/)?>/', $Line['text'], $matches)) + { + $element = strtolower($matches[1]); + + if (in_array($element, $this->textLevelElements)) + { + return; + } + + $Block = array( + 'name' => $matches[1], + 'element' => array( + 'rawHtml' => $Line['text'], + 'autobreak' => true, + ), + ); + + return $Block; + } + } + + protected function blockMarkupContinue($Line, array $Block) + { + if (isset($Block['closed']) or isset($Block['interrupted'])) + { + return; + } + + $Block['element']['rawHtml'] .= "\n" . $Line['body']; + + return $Block; + } + + # + # Reference + + protected function blockReference($Line) + { + if (strpos($Line['text'], ']') !== false + and preg_match('/^\[(.+?)\]:[ ]*+?(?:[ ]+["\'(](.+)["\')])?[ ]*+$/', $Line['text'], $matches) + ) { + $id = strtolower($matches[1]); + + $Data = array( + 'url' => $matches[2], + 'title' => isset($matches[3]) ? $matches[3] : null, + ); + + $this->DefinitionData['Reference'][$id] = $Data; + + $Block = array( + 'element' => array(), + ); + + return $Block; + } + } + + # + # Table + + protected function blockTable($Line, array $Block = null) + { + if ( ! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) + { + return; + } + + if ( + strpos($Block['element']['handler']['argument'], '|') === false + and strpos($Line['text'], '|') === false + and strpos($Line['text'], ':') === false + or strpos($Block['element']['handler']['argument'], "\n") !== false + ) { + return; + } + + if (chop($Line['text'], ' -:|') !== '') + { + return; + } + + $alignments = array(); + + $divider = $Line['text']; + + $divider = trim($divider); + $divider = trim($divider, '|'); + + $dividerCells = explode('|', $divider); + + foreach ($dividerCells as $dividerCell) + { + $dividerCell = trim($dividerCell); + + if ($dividerCell === '') + { + return; + } + + $alignment = null; + + if ($dividerCell[0] === ':') + { + $alignment = 'left'; + } + + if (substr($dividerCell, - 1) === ':') + { + $alignment = $alignment === 'left' ? 'center' : 'right'; + } + + $alignments []= $alignment; + } + + # ~ + + $HeaderElements = array(); + + $header = $Block['element']['handler']['argument']; + + $header = trim($header); + $header = trim($header, '|'); + + $headerCells = explode('|', $header); + + if (count($headerCells) !== count($alignments)) + { + return; + } + + foreach ($headerCells as $index => $headerCell) + { + $headerCell = trim($headerCell); + + $HeaderElement = array( + 'name' => 'th', + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $headerCell, + 'destination' => 'elements', + ) + ); + + if (isset($alignments[$index])) + { + $alignment = $alignments[$index]; + + $HeaderElement['attributes'] = array( + 'style' => "text-align: $alignment;", + ); + } + + $HeaderElements []= $HeaderElement; + } + + # ~ + + $Block = array( + 'alignments' => $alignments, + 'identified' => true, + 'element' => array( + 'name' => 'table', + 'elements' => array(), + ), + ); + + $Block['element']['elements'] []= array( + 'name' => 'thead', + ); + + $Block['element']['elements'] []= array( + 'name' => 'tbody', + 'elements' => array(), + ); + + $Block['element']['elements'][0]['elements'] []= array( + 'name' => 'tr', + 'elements' => $HeaderElements, + ); + + return $Block; + } + + protected function blockTableContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if (count($Block['alignments']) === 1 or $Line['text'][0] === '|' or strpos($Line['text'], '|')) + { + $Elements = array(); + + $row = $Line['text']; + + $row = trim($row); + $row = trim($row, '|'); + + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]++`|`)++/', $row, $matches); + + $cells = array_slice($matches[0], 0, count($Block['alignments'])); + + foreach ($cells as $index => $cell) + { + $cell = trim($cell); + + $Element = array( + 'name' => 'td', + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $cell, + 'destination' => 'elements', + ) + ); + + if (isset($Block['alignments'][$index])) + { + $Element['attributes'] = array( + 'style' => 'text-align: ' . $Block['alignments'][$index] . ';', + ); + } + + $Elements []= $Element; + } + + $Element = array( + 'name' => 'tr', + 'elements' => $Elements, + ); + + $Block['element']['elements'][1]['elements'] []= $Element; + + return $Block; + } + } + + # + # ~ + # + + protected function paragraph($Line) + { + return array( + 'type' => 'Paragraph', + 'element' => array( + 'name' => 'p', + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $Line['text'], + 'destination' => 'elements', + ), + ), + ); + } + + protected function paragraphContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + $Block['element']['handler']['argument'] .= "\n".$Line['text']; + + return $Block; + } + + # + # Inline Elements + # + + protected $InlineTypes = array( + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup'), + '[' => array('Link'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + ); + + # ~ + + protected $inlineMarkerList = '!*_&[:<`~\\'; + + # + # ~ + # + + public function line($text, $nonNestables = array()) + { + return $this->elements($this->lineElements($text, $nonNestables)); + } + + protected function lineElements($text, $nonNestables = array()) + { + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + $Elements = array(); + + $nonNestables = (empty($nonNestables) + ? array() + : array_combine($nonNestables, $nonNestables) + ); + + # $excerpt is based on the first occurrence of a marker + + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) + { + $marker = $excerpt[0]; + + $markerPosition = strlen($text) - strlen($excerpt); + + $Excerpt = array('text' => $excerpt, 'context' => $text); + + foreach ($this->InlineTypes[$marker] as $inlineType) + { + # check to see if the current inline type is nestable in the current context + + if (isset($nonNestables[$inlineType])) + { + continue; + } + + $Inline = $this->{"inline$inlineType"}($Excerpt); + + if ( ! isset($Inline)) + { + continue; + } + + # makes sure that the inline belongs to "our" marker + + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) + { + continue; + } + + # sets a default inline position + + if ( ! isset($Inline['position'])) + { + $Inline['position'] = $markerPosition; + } + + # cause the new element to 'inherit' our non nestables + + + $Inline['element']['nonNestables'] = isset($Inline['element']['nonNestables']) + ? array_merge($Inline['element']['nonNestables'], $nonNestables) + : $nonNestables + ; + + # the text that comes before the inline + $unmarkedText = substr($text, 0, $Inline['position']); + + # compile the unmarked text + $InlineText = $this->inlineText($unmarkedText); + $Elements[] = $InlineText['element']; + + # compile the inline + $Elements[] = $this->extractElement($Inline); + + # remove the examined text + $text = substr($text, $Inline['position'] + $Inline['extent']); + + continue 2; + } + + # the marker does not belong to an inline + + $unmarkedText = substr($text, 0, $markerPosition + 1); + + $InlineText = $this->inlineText($unmarkedText); + $Elements[] = $InlineText['element']; + + $text = substr($text, $markerPosition + 1); + } + + $InlineText = $this->inlineText($text); + $Elements[] = $InlineText['element']; + + foreach ($Elements as &$Element) + { + if ( ! isset($Element['autobreak'])) + { + $Element['autobreak'] = false; + } + } + + return $Elements; + } + + # + # ~ + # + + protected function inlineText($text) + { + $Inline = array( + 'extent' => strlen($text), + 'element' => array(), + ); + + $Inline['element']['elements'] = self::pregReplaceElements( + $this->breaksEnabled ? '/[ ]*+\n/' : '/(?:[ ]*+\\\\|[ ]{2,}+)\n/', + array( + array('name' => 'br'), + array('text' => "\n"), + ), + $text + ); + + return $Inline; + } + + protected function inlineCode($Excerpt) + { + $marker = $Excerpt['text'][0]; + + if (preg_match('/^(['.$marker.']++)[ ]*+(.+?)[ ]*+(? strlen($matches[0]), + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ); + } + } + + protected function inlineEmailTag($Excerpt) + { + $hostnameLabel = '[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?'; + + $commonMarkEmail = '[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]++@' + . $hostnameLabel . '(?:\.' . $hostnameLabel . ')*'; + + if (strpos($Excerpt['text'], '>') !== false + and preg_match("/^<((mailto:)?$commonMarkEmail)>/i", $Excerpt['text'], $matches) + ){ + $url = $matches[1]; + + if ( ! isset($matches[2])) + { + $url = "mailto:$url"; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $matches[1], + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + protected function inlineEmphasis($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + $marker = $Excerpt['text'][0]; + + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'strong'; + } + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'em'; + } + else + { + return; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => $emphasis, + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $matches[1], + 'destination' => 'elements', + ) + ), + ); + } + + protected function inlineEscapeSequence($Excerpt) + { + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) + { + return array( + 'element' => array('rawHtml' => $Excerpt['text'][1]), + 'extent' => 2, + ); + } + } + + protected function inlineImage($Excerpt) + { + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') + { + return; + } + + $Excerpt['text']= substr($Excerpt['text'], 1); + + $Link = $this->inlineLink($Excerpt); + + if ($Link === null) + { + return; + } + + $Inline = array( + 'extent' => $Link['extent'] + 1, + 'element' => array( + 'name' => 'img', + 'attributes' => array( + 'src' => $Link['element']['attributes']['href'], + 'alt' => $Link['element']['handler']['argument'], + ), + 'autobreak' => true, + ), + ); + + $Inline['element']['attributes'] += $Link['element']['attributes']; + + unset($Inline['element']['attributes']['href']); + + return $Inline; + } + + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => array( + 'function' => 'lineElements', + 'argument' => null, + 'destination' => 'elements', + ), + 'nonNestables' => array('Url', 'Link'), + 'attributes' => array( + 'href' => null, + 'title' => null, + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) + { + $Element['handler']['argument'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } + else + { + return; + } + + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*+"|\'[^\']*+\'))?\s*+[)]/', $remainder, $matches)) + { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) + { + $Element['attributes']['title'] = substr($matches[2], 1, - 1); + } + + $extent += strlen($matches[0]); + } + else + { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) + { + $definition = strlen($matches[1]) ? $matches[1] : $Element['handler']['argument']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } + else + { + $definition = strtolower($Element['handler']['argument']); + } + + if ( ! isset($this->DefinitionData['Reference'][$definition])) + { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + protected function inlineMarkup($Excerpt) + { + if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) + { + return; + } + + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*+[ ]*+>/s', $Excerpt['text'], $matches)) + { + return array( + 'element' => array('rawHtml' => $matches[0]), + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) + { + return array( + 'element' => array('rawHtml' => $matches[0]), + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*+(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+\/?>/s', $Excerpt['text'], $matches)) + { + return array( + 'element' => array('rawHtml' => $matches[0]), + 'extent' => strlen($matches[0]), + ); + } + } + + protected function inlineSpecialCharacter($Excerpt) + { + if (substr($Excerpt['text'], 1, 1) !== ' ' and strpos($Excerpt['text'], ';') !== false + and preg_match('/^&(#?+[0-9a-zA-Z]++);/', $Excerpt['text'], $matches) + ) { + return array( + 'element' => array('rawHtml' => '&' . $matches[1] . ';'), + 'extent' => strlen($matches[0]), + ); + } + + return; + } + + protected function inlineStrikethrough($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) + { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'del', + 'handler' => array( + 'function' => 'lineElements', + 'argument' => $matches[1], + 'destination' => 'elements', + ) + ), + ); + } + } + + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') + { + return; + } + + if (strpos($Excerpt['context'], 'http') !== false + and preg_match('/\bhttps?+:[\/]{2}[^\s<]+\b\/*+/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE) + ) { + $url = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + + return $Inline; + } + } + + protected function inlineUrlTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w++:\/{2}[^ >]++)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + # ~ + + protected function unmarkedText($text) + { + $Inline = $this->inlineText($text); + return $this->element($Inline['element']); + } + + # + # Handlers + # + + protected function handle(array $Element) + { + if (isset($Element['handler'])) + { + if (!isset($Element['nonNestables'])) + { + $Element['nonNestables'] = array(); + } + + if (is_string($Element['handler'])) + { + $function = $Element['handler']; + $argument = $Element['text']; + unset($Element['text']); + $destination = 'rawHtml'; + } + else + { + $function = $Element['handler']['function']; + $argument = $Element['handler']['argument']; + $destination = $Element['handler']['destination']; + } + + $Element[$destination] = $this->{$function}($argument, $Element['nonNestables']); + + if ($destination === 'handler') + { + $Element = $this->handle($Element); + } + + unset($Element['handler']); + } + + return $Element; + } + + protected function handleElementRecursive(array $Element) + { + return $this->elementApplyRecursive(array($this, 'handle'), $Element); + } + + protected function handleElementsRecursive(array $Elements) + { + return $this->elementsApplyRecursive(array($this, 'handle'), $Elements); + } + + protected function elementApplyRecursive($closure, array $Element) + { + $Element = call_user_func($closure, $Element); + + if (isset($Element['elements'])) + { + $Element['elements'] = $this->elementsApplyRecursive($closure, $Element['elements']); + } + elseif (isset($Element['element'])) + { + $Element['element'] = $this->elementApplyRecursive($closure, $Element['element']); + } + + return $Element; + } + + protected function elementApplyRecursiveDepthFirst($closure, array $Element) + { + if (isset($Element['elements'])) + { + $Element['elements'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['elements']); + } + elseif (isset($Element['element'])) + { + $Element['element'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['element']); + } + + $Element = call_user_func($closure, $Element); + + return $Element; + } + + protected function elementsApplyRecursive($closure, array $Elements) + { + foreach ($Elements as &$Element) + { + $Element = $this->elementApplyRecursive($closure, $Element); + } + + return $Elements; + } + + protected function elementsApplyRecursiveDepthFirst($closure, array $Elements) + { + foreach ($Elements as &$Element) + { + $Element = $this->elementApplyRecursiveDepthFirst($closure, $Element); + } + + return $Elements; + } + + protected function element(array $Element) + { + if ($this->safeMode) + { + $Element = $this->sanitiseElement($Element); + } + + # identity map if element has no handler + $Element = $this->handle($Element); + + $hasName = isset($Element['name']); + + $markup = ''; + + if ($hasName) + { + $markup .= '<' . $Element['name']; + + if (isset($Element['attributes'])) + { + foreach ($Element['attributes'] as $name => $value) + { + if ($value === null) + { + continue; + } + + $markup .= " $name=\"".self::escape($value).'"'; + } + } + } + + $permitRawHtml = false; + + if (isset($Element['text'])) + { + $text = $Element['text']; + } + // very strongly consider an alternative if you're writing an + // extension + elseif (isset($Element['rawHtml'])) + { + $text = $Element['rawHtml']; + + $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; + $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; + } + + $hasContent = isset($text) || isset($Element['element']) || isset($Element['elements']); + + if ($hasContent) + { + $markup .= $hasName ? '>' : ''; + + if (isset($Element['elements'])) + { + $markup .= $this->elements($Element['elements']); + } + elseif (isset($Element['element'])) + { + $markup .= $this->element($Element['element']); + } + else + { + if (!$permitRawHtml) + { + $markup .= self::escape($text, true); + } + else + { + $markup .= $text; + } + } + + $markup .= $hasName ? '' : ''; + } + elseif ($hasName) + { + $markup .= ' />'; + } + + return $markup; + } + + protected function elements(array $Elements) + { + $markup = ''; + + $autoBreak = true; + + foreach ($Elements as $Element) + { + if (empty($Element)) + { + continue; + } + + $autoBreakNext = (isset($Element['autobreak']) + ? $Element['autobreak'] : isset($Element['name']) + ); + // (autobreak === false) covers both sides of an element + $autoBreak = !$autoBreak ? $autoBreak : $autoBreakNext; + + $markup .= ($autoBreak ? "\n" : '') . $this->element($Element); + $autoBreak = $autoBreakNext; + } + + $markup .= $autoBreak ? "\n" : ''; + + return $markup; + } + + # ~ + + protected function li($lines) + { + $Elements = $this->linesElements($lines); + + if ( ! in_array('', $lines) + and isset($Elements[0]) and isset($Elements[0]['name']) + and $Elements[0]['name'] === 'p' + ) { + unset($Elements[0]['name']); + } + + return $Elements; + } + + # + # AST Convenience + # + + /** + * Replace occurrences $regexp with $Elements in $text. Return an array of + * elements representing the replacement. + */ + protected static function pregReplaceElements($regexp, $Elements, $text) + { + $newElements = array(); + + while (preg_match($regexp, $text, $matches, PREG_OFFSET_CAPTURE)) + { + $offset = $matches[0][1]; + $before = substr($text, 0, $offset); + $after = substr($text, $offset + strlen($matches[0][0])); + + $newElements[] = array('text' => $before); + + foreach ($Elements as $Element) + { + $newElements[] = $Element; + } + + $text = $after; + } + + $newElements[] = array('text' => $text); + + return $newElements; + } + + # + # Deprecated Methods + # + + function parse($text) + { + $markup = $this->text($text); + + return $markup; + } + + protected function sanitiseElement(array $Element) + { + static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; + static $safeUrlNameToAtt = array( + 'a' => 'href', + 'img' => 'src', + ); + + if ( ! isset($Element['name'])) + { + unset($Element['attributes']); + return $Element; + } + + if (isset($safeUrlNameToAtt[$Element['name']])) + { + $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); + } + + if ( ! empty($Element['attributes'])) + { + foreach ($Element['attributes'] as $att => $val) + { + # filter out badly parsed attribute + if ( ! preg_match($goodAttribute, $att)) + { + unset($Element['attributes'][$att]); + } + # dump onevent attribute + elseif (self::striAtStart($att, 'on')) + { + unset($Element['attributes'][$att]); + } + } + } + + return $Element; + } + + protected function filterUnsafeUrlInAttribute(array $Element, $attribute) + { + foreach ($this->safeLinksWhitelist as $scheme) + { + if (self::striAtStart($Element['attributes'][$attribute], $scheme)) + { + return $Element; + } + } + + $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); + + return $Element; + } + + # + # Static Methods + # + + protected static function escape($text, $allowQuotes = false) + { + return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); + } + + protected static function striAtStart($string, $needle) + { + $len = strlen($needle); + + if ($len > strlen($string)) + { + return false; + } + else + { + return strtolower(substr($string, 0, $len)) === strtolower($needle); + } + } + + static function instance($name = 'default') + { + if (isset(self::$instances[$name])) + { + return self::$instances[$name]; + } + + $instance = new static(); + + self::$instances[$name] = $instance; + + return $instance; + } + + private static $instances = array(); + + # + # Fields + # + + protected $DefinitionData; + + # + # Read-Only + + protected $specialCharacters = array( + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', '~' + ); + + protected $StrongRegex = array( + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*+[*])+?)[*]{2}(?![*])/s', + '_' => '/^__((?:\\\\_|[^_]|_[^_]*+_)+?)__(?!_)/us', + ); + + protected $EmRegex = array( + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', + ); + + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*+(?:\s*+=\s*+(?:[^"\'=<>`\s]+|"[^"]*+"|\'[^\']*+\'))?+'; + + protected $voidElements = array( + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', + ); + + protected $textLevelElements = array( + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', + 'i', 'rp', 'del', 'code', 'strike', 'marquee', + 'q', 'rt', 'ins', 'font', 'strong', + 's', 'tt', 'kbd', 'mark', + 'u', 'xm', 'sub', 'nobr', + 'sup', 'ruby', + 'var', 'span', + 'wbr', 'time', + ); +} diff --git a/app/lib/system.php b/app/lib/system.php index e7007d0a..22f7255a 100644 --- a/app/lib/system.php +++ b/app/lib/system.php @@ -1,49 +1,90 @@ + * @license https://github.com/raspap/raspap-webgui/blob/master/LICENSE + */ - public function uptime() { - $uparray = explode(" ", exec("cat /proc/uptime")); - $seconds = round($uparray[0], 0); - $minutes = $seconds / 60; - $hours = $minutes / 60; - $days = floor($hours / 24); - $hours = floor($hours - ($days * 24)); - $minutes = floor($minutes - ($days * 24 * 60) - ($hours * 60)); - $uptime= ''; - if ($days != 0) { - $uptime .= $days . ' day' . (($days > 1)? 's ':' '); - } - if ($hours != 0) { - $uptime .= $hours . ' hour' . (($hours > 1)? 's ':' '); - } - if ($minutes != 0) { - $uptime .= $minutes . ' minute' . (($minutes > 1)? 's ':' '); +namespace RaspAP\System; + +class Sysinfo +{ + public function hostname() + { + return shell_exec("hostname -f"); } - return $uptime; - } + public function uptime() + { + $uparray = explode(" ", exec("cat /proc/uptime")); + $seconds = round($uparray[0], 0); + $minutes = $seconds / 60; + $hours = $minutes / 60; + $days = floor($hours / 24); + $hours = floor($hours - ($days * 24)); + $minutes = floor($minutes - ($days * 24 * 60) - ($hours * 60)); + $uptime= ''; + if ($days != 0) { + $uptime .= $days . ' day' . (($days > 1)? 's ':' '); + } + if ($hours != 0) { + $uptime .= $hours . ' hour' . (($hours > 1)? 's ':' '); + } + if ($minutes != 0) { + $uptime .= $minutes . ' minute' . (($minutes > 1)? 's ':' '); + } - public function usedMemory() { - $used = shell_exec("free -m | awk '/Mem:/ { total=$2 ; used=$3 } END { print used/total*100}'"); - return floor($used); - } + return $uptime; + } - public function processorCount() { - $procs = shell_exec("nproc --all"); - return intval($proc); - } + public function usedMemory() + { + $used = shell_exec("free -m | awk 'NR==2{ total=$2 ; used=$3 } END { print used/total*100}'"); + return floor($used); + } - public function loadAvg1Min() { - $load = exec("awk '{print $1}' /proc/loadavg"); - return floatval($load); - } + public function processorCount() + { + $procs = shell_exec("nproc --all"); + return intval($procs); + } - public function systemLoadPercentage() { - return intval(($this->loadAvg1Min() * 100) / $this->processorCount()); - } + public function loadAvg1Min() + { + $load = exec("awk '{print $1}' /proc/loadavg"); + return floatval($load); + } + + public function systemLoadPercentage() + { + return intval(($this->loadAvg1Min() * 100) / $this->processorCount()); + } + + public function systemTemperature() + { + $cpuTemp = file_get_contents("/sys/class/thermal/thermal_zone0/temp"); + return number_format((float)$cpuTemp/1000, 1); + } + + public function hostapdStatus() + { + exec('pidof hostapd | wc -l', $status); + return $status; + } + + public function operatingSystem() + { + $os_desc = shell_exec("lsb_release -sd"); + return $os_desc; + } + + public function kernelVersion() + { + $kernel = shell_exec("uname -r"); + return $kernel; + } } diff --git a/app/lib/uploader.php b/app/lib/uploader.php new file mode 100644 index 00000000..e15e451c --- /dev/null +++ b/app/lib/uploader.php @@ -0,0 +1,505 @@ + + * @author Aivis Silins + * @link https://github.com/aivis/PHP-file-upload-class + * @license https://github.com/raspap/raspap-webgui/blob/master/LICENSE + */ + +namespace RaspAP\Uploader; + +class Upload +{ + + /** + * Default directory persmissions (destination) + */ + protected $default_permissions = 0750; + + /** + * File post array + * + * @var array + */ + protected $file_post = array(); + + /** + * Destination directory + * + * @var string + */ + protected $destination; + + /** + * Fileinfo + * + * @var object + */ + protected $finfo; + + /** + * Data about file + * + * @var array + */ + public $file = array(); + + /** + * Max. file size + * + * @var int + */ + protected $max_file_size; + + /** + * Allowed mime types + * + * @var array + */ + protected $mimes = array(); + + /** + * Temp path + * + * @var string + */ + protected $tmp_name; + + /** + * Validation errors + * + * @var array + */ + protected $validation_errors = array(); + + /** + * Filename (new) + * + * @var string + */ + protected $filename; + + /** + * Internal callbacks (filesize check, mime, etc) + * + * @var array + */ + private $callbacks = array(); + + /** + * Root dir + * + * @var string + */ + protected $root; + + /** + * Return upload object + * + * $destination = 'path/to/file/destination/'; + * + * @param string $destination + * @param string $root + * @return Upload + */ + public static function factory($destination, $root = false) + { + return new Upload($destination, $root); + } + + /** + * Define root constant and set & create destination path + * + * @param string $destination + * @param string $root + */ + public function __construct($destination, $root = false) + { + if ($root) { + $this->root = $root; + } else { + $this->root = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR; + } + + // set & create destination path + if (!$this->set_destination($destination)) { + throw new Exception('Upload: Unable to create destination. '.$this->root . $this->destination); + } + //create finfo object + $this->finfo = new \finfo(); + } + + /** + * Set target filename + * + * @param string $filename + */ + public function set_filename($filename) + { + $this->filename = $filename; + } + + /** + * Check & Save file + * + * Return data about current upload + * + * @return array + */ + public function upload($filename = false) + { + if($filename ) { + $this->set_filename($filename); + } + + $this->set_filename($filename); + + if ($this->check()) { + $this->save(); + } + + // return state data + return $this->get_state(); + } + + /** + * Save file on server + * Return state data + * + * @return array + */ + public function save() + { + $this->save_file(); + return $this->get_state(); + } + + /** + * Validate file (execute callbacks) + * Returns TRUE if validation successful + * + * @return bool + */ + public function check() + { + //execute callbacks (check filesize, mime, also external callbacks + $this->validate(); + + //add error messages + $this->file['errors'] = $this->get_errors(); + + //change file validation status + $this->file['status'] = empty($this->validation_errors); + + return $this->file['status']; + } + + /** + * Get current state data + * + * @return array + */ + public function get_state() + { + return $this->file; + } + + /** + * Save file on server + */ + protected function save_file() + { + //create & set new filename + if(empty($this->filename)) { + $this->create_new_filename(); + } + + //set filename + $this->file['filename'] = $this->filename; + + //set full path + $this->file['full_path'] = $this->root . $this->destination . $this->filename; + $this->file['path'] = $this->destination . $this->filename; + + $status = move_uploaded_file($this->tmp_name, $this->file['full_path']); + + //checks whether upload successful + if (!$status) { + throw new Exception('Upload: Failed to upload file.'); + } + + //done + $this->file['status'] = true; + } + + /** + * Set data about file + */ + protected function set_file_data() + { + $file_size = $this->get_file_size(); + $this->file = array( + 'status' => false, + 'destination' => $this->destination, + 'size_in_bytes' => $file_size, + 'size_in_mb' => $this->bytes_to_mb($file_size), + 'mime' => $this->get_file_mime(), + 'filename' => $this->file_post['name'], + 'tmp_name' => $this->file_post['tmp_name'], + 'post_data' => $this->file_post, + ); + } + + /** + * Set validation error + * + * @param string $message + */ + public function set_error($message) + { + $this->validation_errors[] = $message; + } + + /** + * Return validation errors + * + * @return array + */ + public function get_errors() + { + return $this->validation_errors; + } + + /** + * Set external callback methods + * + * @param object $instance_of_callback_object + * @param array $callback_methods + */ + public function callbacks($instance_of_callback_object, $callback_methods) + { + if (empty($instance_of_callback_object)) { + throw new Exception('Upload: $instance_of_callback_object cannot be empty.'); + + } + + if (!is_array($callback_methods)) { + throw new Exception('Upload: $callback_methods data type need to be array.'); + } + + $this->external_callback_object = $instance_of_callback_object; + $this->external_callback_methods = $callback_methods; + } + + /** + * Execute callbacks + */ + protected function validate() + { + //get curent errors + $errors = $this->get_errors(); + + if (empty($errors)) { + + //set data about current file + $this->set_file_data(); + + //execute internal callbacks + $this->execute_callbacks($this->callbacks, $this); + + //execute external callbacks + $this->execute_callbacks($this->external_callback_methods, $this->external_callback_object); + } + } + + /** + * Execute callbacks + */ + protected function execute_callbacks($callbacks, $object) + { + foreach($callbacks as $method) { + $object->$method($this); + + } + } + + /** + * File mime type validation callback + * + * @param object $object + */ + protected function check_mime_type($object) + { + if (!empty($object->mimes)) { + if (!in_array($object->file['mime'], $object->mimes)) { + $object->set_error('MIME type not allowed.'); + } + } + } + + /** + * Set allowed mime types + * + * @param array $mimes + */ + public function set_allowed_mime_types($mimes) + { + $this->mimes = $mimes; + //if mime types is set -> set callback + $this->callbacks[] = 'check_mime_type'; + } + + /** + * File size validation callback + * + * @param object $object + */ + protected function check_file_size($object) + { + if (!empty($object->max_file_size)) { + $file_size_in_mb = $this->bytes_to_mb($object->file['size_in_bytes']); + if ($object->max_file_size <= $file_size_in_mb) { + $object->set_error('File exceeds maximum allowed size.'); + } + } + } + + /** + * Set max file size + * + * @param int $size + */ + public function set_max_file_size($size) + { + $this->max_file_size = $size; + + //if max file size is set -> set callback + $this->callbacks[] = 'check_file_size'; + } + + /** + * Set File array to object + * + * @param array $file + */ + public function file($file) + { + $this->set_file_array($file); + } + + /** + * Set file array + * + * @param array $file + */ + protected function set_file_array($file) + { + //checks whether file array is valid + if (!$this->check_file_array($file)) { + //file not selected or some bigger problems (broken files array) + $this->set_error('Please select file.'); + } + + //set file data + $this->file_post = $file; + + //set tmp path + $this->tmp_name = $file['tmp_name']; + } + + /** + * Checks whether Files post array is valid + * + * @return bool + */ + protected function check_file_array($file) + { + return isset($file['error']) + && !empty($file['name']) + && !empty($file['type']) + && !empty($file['tmp_name']) + && !empty($file['size']); + } + + /** + * Get file mime type + * + * @return string + */ + protected function get_file_mime() + { + return $this->finfo->file($this->tmp_name, FILEINFO_MIME_TYPE); + } + + /** + * Get file size + * + * @return int + */ + protected function get_file_size() + { + return filesize($this->tmp_name); + } + + /** + * Set destination path (return TRUE on success) + * + * @param string $destination + * @return bool + */ + protected function set_destination($destination) + { + $this->destination = $destination . DIRECTORY_SEPARATOR; + return $this->destination_exist() ? true : $this->create_destination(); + } + + /** + * Checks whether destination folder exists + * + * @return bool + */ + protected function destination_exist() + { + return is_writable($this->root . $this->destination); + } + + /** + * Create path to destination + * + * @param string $dir + * @return bool + */ + protected function create_destination() + { + return mkdir($this->root . $this->destination, $this->default_permissions, true); + } + + /** + * Set unique filename + * + * @return string + */ + protected function create_new_filename() + { + $filename = sha1(mt_rand(1, 9999) . $this->destination . uniqid()) . time(); + $this->set_filename($filename); + } + + /** + * Convert bytes to MB + * + * @param int $bytes + * @return int + */ + protected function bytes_to_mb($bytes) + { + return round(($bytes / 1048576), 2); + } +} + diff --git a/app/pitft/stats.py b/app/pitft/stats.py new file mode 100644 index 00000000..ba8a3648 --- /dev/null +++ b/app/pitft/stats.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# +# Author: @billz +# Author URI: https://github.com/billz +# Description: RaspAP stats display for the Adafruit Mini PiTFT, +# a 135x240 Color TFT add-on for the Raspberry Pi. +# Based on Adafruit's rgb_display_ministats.py +# See: https://github.com/adafruit/Adafruit_CircuitPython_RGB_Display +# License: MIT License + +import time +import subprocess +import digitalio +import board +from PIL import Image, ImageDraw, ImageFont +import adafruit_rgb_display.st7789 as st7789 + +# Configuration for CS and DC pins +cs_pin = digitalio.DigitalInOut(board.CE0) +dc_pin = digitalio.DigitalInOut(board.D25) +reset_pin = None + +# Config for display baudrate (default max is 24mhz) +BAUDRATE = 64000000 + +# Setup SPI bus using hardware SPI +spi = board.SPI() + +# Create the ST7789 display +disp = st7789.ST7789(spi, cs=cs_pin, dc=dc_pin, rst=reset_pin, baudrate=BAUDRATE, + width=135, height=240, x_offset=53, y_offset=40) + +# Create blank image with mode 'RGB' +height = disp.width # swap height/width to rotate it to landscape +width = disp.height +image = Image.new('RGB', (width, height)) +rotation = 90 + +# Get a drawing object and clear the image +draw = ImageDraw.Draw(image) +draw.rectangle((0, 0, width, height), outline=0, fill=(0, 0, 0)) +disp.image(image,rotation) + +# Define some constants +padding = -2 +top = padding +bottom = height-padding +# Move left to right keeping track of the current x position +x = 0 + +# Load DejaVu TTF Font +# Install with: sudo apt-get install ttf-dejavu +font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 24) + +# Turn on the backlight +backlight = digitalio.DigitalInOut(board.D22) +backlight.switch_to_output() +backlight.value = True + +while True: + # Draw a black filled box to clear the image + draw.rectangle((0, 0, width, height), outline=0, fill=0) + + # Collect basic system stats + cmd = "hostname -I | cut -d\' \' -f1" + IP = "IP: "+subprocess.check_output(cmd, shell=True).decode("utf-8") + + cmd = "pidof hostapd | wc -l | awk '{printf \"Hotspot: %s\", $1 == 1 ? \"Active\" : \"Down\"}'" + Hostapd = subprocess.check_output(cmd, shell=True).decode("utf-8") + + cmd = "vnstat -i wlan0 | grep tx: | awk '{printf \"Data Tx: %d %s\", $5,$6}'" + DataTx = subprocess.check_output(cmd, shell=True).decode("utf-8") + + cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'" + CPU = subprocess.check_output(cmd, shell=True).decode("utf-8") + + cmd = "free -m | awk 'NR==2{printf \"Mem: %sMB %.2f%%\", $3,$3*100/$2 }'" + MemUsage = subprocess.check_output(cmd, shell=True).decode("utf-8") + + cmd = "cat /sys/class/thermal/thermal_zone0/temp | awk \'{printf \"CPU Temp: %.1f C\", $(NF-0) / 1000}\'" # pylint: disable=line-too-long + Temp = subprocess.check_output(cmd, shell=True).decode("utf-8") + + # Write five lines of stats + y = top + draw.text((x, y), IP, font=font, fill="#ffaaaa") + y += font.getsize(IP)[1] + draw.text((x, y), Hostapd, font=font, fill="#d46a6a") + y += font.getsize(Hostapd)[1] + draw.text((x, y), DataTx, font=font, fill="#aa3939") + y += font.getsize(DataTx)[1] + draw.text((x, y), MemUsage, font=font, fill="#801515") + y += font.getsize(MemUsage)[1] + draw.text((x, y), Temp, font=font, fill="#550000") + + # Display image + disp.image(image, rotation) + time.sleep(.1) + diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..ed4f5e8f --- /dev/null +++ b/composer.json @@ -0,0 +1,31 @@ +{ + "name": "raspap/raspap-webgui", + "description": "Simple wireless AP setup and mangement for Debian-based devices", + "license": "GPL-3.0", + "homepage": "https://raspap.com/", + "keywords": ["raspberrypi", "debian", "armbian", "wifi"], + "type": "raspap-core", + "authors": [ + { + "name": "RaspAP Team", + "email": "billzimmerman@gmail.com", + "homepage": "https://raspap.com/" + } + ], + "require": { + "php": "^7.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpcompatibility/php-compatibility": "^9.3.5", + "squizlabs/php_codesniffer": "^3.5.5" + }, + "scripts": { + "lint": "parallel-lint . --exclude vendor", + "phpcs": "phpcs -p -s --config-set installed_paths vendor/phpcompatibility/php-compatibility .", + "test": [ + "composer lint", + "composer phpcs" + ] + } +} diff --git a/config/090_raspap.conf b/config/090_raspap.conf new file mode 100644 index 00000000..f44d1a89 --- /dev/null +++ b/config/090_raspap.conf @@ -0,0 +1,4 @@ +# RaspAP default config +log-facility=/var/log/dnsmasq.log +conf-dir=/etc/dnsmasq.d + diff --git a/config/090_wlan0.conf b/config/090_wlan0.conf new file mode 100644 index 00000000..026c3928 --- /dev/null +++ b/config/090_wlan0.conf @@ -0,0 +1,6 @@ +# RaspAP wlan0 configuration for wired (ethernet) AP mode +interface=wlan0 +domain-needed +dhcp-range=10.3.141.50,10.3.141.254,255.255.255.0,12h +dhcp-option=6,9.9.9.9,1.1.1.1 + diff --git a/config/50-raspap-router.conf b/config/50-raspap-router.conf new file mode 100644 index 00000000..1c10d26f --- /dev/null +++ b/config/50-raspap-router.conf @@ -0,0 +1,9 @@ +server.modules += ( + "mod_rewrite", +) + +$HTTP["url"] =~ "^/REPLACE_ME/(?!(dist|app|ajax|config)).*" { + url.rewrite-once = ( "^/REPLACE_ME/(.*?)(\?.+)?$"=>"/REPLACE_ME/index.php/$1$2" ) + server.error-handler-404 = "/REPLACE_ME/index.php" +} + diff --git a/config/blocklists.json b/config/blocklists.json new file mode 100644 index 00000000..5c76e464 --- /dev/null +++ b/config/blocklists.json @@ -0,0 +1,6 @@ +{ + "notracking/hosts-blocklist": [ + "notracking-hostnames", + "notracking-domains" + ] +} diff --git a/config/client_config/70-mobile-data-sticks.rules b/config/client_config/70-mobile-data-sticks.rules new file mode 100644 index 00000000..5ba62000 --- /dev/null +++ b/config/client_config/70-mobile-data-sticks.rules @@ -0,0 +1,4 @@ +# mobile data modem - ttyUSB0 device appears +SUBSYSTEM=="tty", KERNEL=="ttyUSB0", TAG+="systemd", ENV{SYSTEMD_WANTS}="start start_ppp0_device.service" + + diff --git a/config/client_config/80-raspap-net-devices.rules b/config/client_config/80-raspap-net-devices.rules new file mode 100644 index 00000000..ddec8203 --- /dev/null +++ b/config/client_config/80-raspap-net-devices.rules @@ -0,0 +1,3 @@ +SUBSYSTEM=="net", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", NAME="hilink%n", TAG+="systemd", ENV{SYSTEMD_WANTS}="start start_huawei_hilink@hilink%n.service" + + diff --git a/config/client_config/huawei_hilink_api.sh b/config/client_config/huawei_hilink_api.sh new file mode 100644 index 00000000..6dc439f4 --- /dev/null +++ b/config/client_config/huawei_hilink_api.sh @@ -0,0 +1,505 @@ +#!/bin/bash +# +# Huawei Hilink API +# ================= +# - communication with Hilink devices via HTTP +# - send a standard http request with a xml formatted string to the device (default IP 192.169.8.1) +# - Howto: +# o "source" this script in your own script from the command line +# o if hilink_host ip/name differs, set "hilink_host=192.168.178.1" before calling any function +# o if the device is locked by a password, set hilink_user="admin"; hilink_password"1234secret" +# _login is called automatically +# only password type 4 is supported +# o if the SIM is requiring a PIN, set "hilink_pin=1234" +# o connect device to network: _switchMobileData ON ( or 1 ) +# o disconnect device: _switchMobileData OFF ( or 0 ) +# o get informations about the device: _getDeviceInformation and _getStatus and _getNetProvider +# all functions return XML formatted data in $response. +# o _getAllInformations: returns all available informations as key/value pairs (outputs text) +# o Check if device is connected: "if _isConnected; then .... fi" +# o $response can be parsed by calling _valueFromResponse +# e.g "_valueFromResponse msisdn" to get the phone number after a call to _getDeviceInformation +# +# +# Usage of functions +# - call the function with parameters (if required) +# - return code: 0 - success; 1 - failed +# - $status: status information (OK, ERROR) +# - $response: xml response to be parsed for the required information +# +# +# required software: curl, base64, sha256sum, sed +# +# ToDo: improve error handling +# +# zbchristian 2021 +# + +# Initialization procedure +# ======================== +# +# hilink_host=192.168.8.1 # ip address of device +# hilink_user="admin" # user name if locked (default admin) +# hilink_password="1234Secret" # password if locked +# hilink_pin="1234" # PIN of SIM +# _initHilinkAPI # initialize the API +# +# Termination +# =========== +# cleanup the API before quitting the shell +# _closeHilinkAPI (optional: add parameter "save" to save the session/token data for subsequent calls. Valid for a few minutes.) +# +# BE AWARE, THAT THE API USES SOME GLOBAL VARIABLES : hilink_host, user, password, pin, response, status +# USE THESE ONLY TO COMMUNICATE WITH THE API. +# DO NOT USE THE VARIABLE PRE_FIX "hilink_" FOR YOUR OWN VARIABLES +# + +hilink_host_default="192.168.8.1" +hilink_save_file="/tmp/hilink_api_saved.dat" +hilink_save_age=60 +hilink_header_file="/tmp/hilink_login_hdr.txt" + +# initialize +function _initHilinkAPI() { + local age + if [ -z "$hilink_host" ]; then hilink_host=$hilink_host_default; fi + if ! _hostReachable; then return 1; fi + if [ -f $hilink_save_file ]; then # found file with saved data + _getSavedData + age=$(( $(date +%s) - $(stat $hilink_save_file -c %Y) )) + if [[ $age -gt $hilink_save_age ]]; then + rm -f $hilink_save_file + _logout + _sessToken + fi + fi + if [ -z "$hilink_sessID" ] || [ -z "$hilink_token" ]; then _sessToken; fi + _login + return $? +} + +function _getSavedData() { + local dat + if [ -f $hilink_save_file ]; then # restore saved session data + dat=$(cat $hilink_save_file) + hilink_sessID=$(echo "$dat" | sed -nr 's/sessionid: ([a-z0-9]*)/\1/ip') + hilink_token=$(echo "$dat" | sed -nr 's/token: ([a-z0-9]*)/\1/ip') + hilink_tokenlist=( $(echo "$dat" | sed -nr 's/tokenlist: ([a-z0-9 ]*)/\1/ip') ) + fi +} + +# Cleanup +# parameter: "save" - will store sessionid and tokens in file +function _closeHilinkAPI() { + local opt + if [ -z "$hilink_host" ]; then hilink_host=$hilink_host_default; fi + if ! _hostReachable; then return 1; fi + rm -f $hilink_save_file + [ ! -z "$1" ] && opt="${1,,}" + if [ ! -z "$opt" ] && [ "$opt" = "save" ]; then + echo "sessionid: $hilink_sessID" > $hilink_save_file + echo "token: $hilink_token" >> $hilink_save_file + echo "tokenlist: ${hilink_tokenlist[@]}" >> $hilink_save_file + fi + _logout + hilink_tokenlist="" + hilink_sessID="" + hilink_token="" + return 0 +} + +# get status (connection status, DNS, ) +# parameter: none +function _getStatus() { + if _login; then + if _sendRequest "api/monitoring/status"; then + if [ ! -z "$1" ]; then _valueFromResponse "$1"; fi + fi + return $? + fi + return 1 +} + +function _isConnected() { + local conn + conn=$(_getStatus "connectionstatus") + status="NO" + if [ ! -z "$conn" ] && [ $conn -eq 901 ]; then + status="YES" + return 0 + fi + return 1 +} + +# get device information (device name, imei, imsi, msisdn-phone number, MAC, WAN IP ...) +# parameter: name of parameter to return +function _getDeviceInformation() { + if _login; then + if _sendRequest "api/device/information"; then + if [ ! -z "$1" ]; then _valueFromResponse "$1"; fi + fi + return $? + fi + return 1 +} + +# get net provider information +# parameter: name of parameter to return +function _getNetProvider() { + if _login; then + if _sendRequest "api/net/current-plmn"; then + if [ ! -z "$1" ]; then _valueFromResponse "$1"; fi + fi + return $? + fi + return 1 +} + +# get signal level +# parameter: name of parameter to return +function _getSignal() { + if _login; then + if _sendRequest "api/device/signal"; then + if [ ! -z "$1" ]; then _valueFromResponse "$1"; fi + fi + return $? + fi + return 1 +} + +function _getAllInformations() { + if _getDeviceInformation; then _keyValuePairs; fi + if _getSignal; then _keyValuePairs; fi + if _getNetProvider; then _keyValuePairs; fi +} + +# get status of mobile data connection +# parameter: none +function _getMobileDataStatus() { + if _login; then + if _sendRequest "api/dialup/mobile-dataswitch"; then + status=$(_valueFromResponse "dataswitch") + if [ $? -eq 0 ] && [ ! -z "$status" ]; then echo "$status"; fi + fi + return $? + fi + return 1 +} + + +# PIN of SIM can be passed either as $hilink_pin, or as parameter +# parameter: PIN number of SIM card +function _enableSIM() { +#SimState: +#255 - no SIM, +#256 - error CPIN, +#257 - ready, +#258 - PIN disabled, +#259 - check PIN, +#260 - PIN required, +#261 - PUK required + local simstate + if [ ! -z "$1" ]; then hilink_pin="$1"; fi + if ! _login; then return 1; fi + if _sendRequest "api/pin/status"; then + simstate=$(echo $response | sed -rn 's/.*([0-9]*)<\/simstate>.*/\1/pi') + if [[ $simstate -eq 257 ]]; then status="SIM ready"; return 0; fi + if [[ $simstate -eq 260 ]]; then + status="PIN required" + if [ ! -z "$hilink_pin" ]; then _setPIN "$hilink_pin"; fi + return $? + fi + if [[ $simstate -eq 255 ]]; then status="NO SIM"; return 1; fi + fi + return 1 +} + +# obtain session and verification token - stored in vars $hilink_sessID and $token +# parameter: none +function _sessToken() { + hilink_tokenlist="" + hilink_token="" + hilink_sessID="" + response=$(curl -s http://$hilink_host/api/webserver/SesTokInfo -m 5 2> /dev/null) + if [ -z "$response" ]; then echo "No access to device at $hilink_host"; return 1; fi + status=$(echo "$response" | sed -nr 's/.*([0-9]*)<\/code>.*/\1/ip') + if [ -z "$status" ]; then + hilink_token=$(echo $response | sed -r 's/.*(.*)<\/TokInfo>.*/\1/') + hilink_sessID=$(echo $response | sed -r 's/.*(.*)<\/SesInfo>.*/\1/') + if [ ! -z "$hilink_sessID" ] && [ ! -z "$hilink_token" ]; then + hilink_sessID="SessionID=$hilink_sessID" + return 0 + fi + fi + return 1 +} + +# unlock device (if locked) with user name and password +# requires stored hilink_user="admin"; hilink_password"1234secret";hilink_host=$hilink_host_default +# parameter: none +function _login() { + local ret encpw pwtype pwtype3 hashedpw pwtype4 + if _loginState; then return 0; fi # login not required, or already done + _sessToken + # get password type + if ! _sendRequest "api/user/state-login"; then return 1; fi + pwtype=$(echo "$response" | sed -rn 's/.*([0-9])<\/password_type>.*/\1/pi') + if [ -z "$pwtype" ];then pwtype=4; fi # fallback is type 4 + ret=1 + if [[ ! -z "$hilink_user" ]] && [[ ! -z "$hilink_password" ]]; then + # password encoding + # type 3 : base64(pw) encoded + # type 4 : base64(sha256sum(user + base64(sha256sum(pw)) + token)) + pwtype3=$(echo -n "$hilink_password" | base64 --wrap=0) + hashedpw=$(echo -n "$hilink_password" | sha256sum -b | sed -nr 's/^([0-9a-z]*).*$/\1/ip' ) + hashedpw=$(echo -n "$hashedpw" | base64 --wrap=0) + pwtype4=$(echo -n "$hilink_user$hashedpw$hilink_token" | sha256sum -b | sed -nr 's/^([0-9a-z]*).*$/\1/ip' ) + encpw=$(echo -n "$pwtype4" | base64 --wrap=0) + if [ $pwtype -ne 4 ]; then encpw=$pwtype3; fi + hilink_xmldata="$hilink_user$encpw$pwtype" + hilink_xtraopts="--dump-header $hilink_header_file" + rm -f $hilink_header_file + _sendRequest "api/user/login" + if [ ! -z "$status" ] && [ "$status" = "OK" ]; then + # store the list of 30 tokens. Each token is valid for a single request + hilink_tokenlist=( $(cat $hilink_header_file | sed -rn 's/^__RequestVerificationToken:\s*([0-9a-z#]*).*$/\1/pi' | sed 's/#/ /g') ) + _getToken + hilink_sessID=$(cat $hilink_header_file | grep -ioP 'SessionID=([a-z0-9]*)') + if [ ! -z "$hilink_sessID" ] && [ ! -z "$hilink_token" ]; then ret=0; fi + fi + rm -f $hilink_header_file + fi + return $ret +} + +# logout of hilink device +# parameter: none +function _logout() { + if _loginState; then + hilink_xmldata="1" + if _sendRequest "api/user/logout"; then + hilink_tokenlist="" + hilink_sessID="" + hilink_token="" + hilink_login_enabled="" + fi + return $? + fi + return 1 +} + +# parameter: none +function _loginState() { + local state + status="OK" + if [ -z "$hilink_login_enabled" ]; then _checkLoginEnabled; fi + if [ $hilink_login_enabled -eq 1 ]; then return 0; fi # login is disabled + _sendRequest "api/user/state-login" + state=`echo "$response" | sed -rn 's/.*(.*)<\/state>.*/\1/pi'` + if [ ! -z "$state" ] && [ $state -eq 0 ]; then # already logged in + return 0 + fi + return 1 +} + +function _checkLoginEnabled() { + local state + if _sendRequest "api/user/hilink_login"; then + hilink_login_enabled=0 + state=$(echo $response | sed -rn 's/.*(.*)<\/hilink_login>.*/\1/pi') + if [ ! -z "$state" ] && [ $state -eq 0 ]; then # no login enabled + hilink_login_enabled=1 + fi + else + hilink_login_enabled="" + fi +} + +# switch mobile data on/off 1/0 +# if SIM is locked, $hilink_pin has to be set +# parameter: state - ON/OFF or 1/0 +function _switchMobileData() { + local mode + if [ -z "$1" ]; then return 1; fi + _login + mode="${1,,}" + [ "$mode" = "on" ] && mode=1 + [ "$mode" = "off" ] && mode=0 + if [[ $mode -ge 0 ]]; then + if _enableSIM "$hilink_pin"; then + hilink_xmldata="$mode" + _sendRequest "api/dialup/mobile-dataswitch" + return $? + fi + fi + return 1 +} + +# parameter: PIN of SIM card +function _setPIN() { + local pin + if [ -z "$1" ]; then return 1; fi + pin="$1" + hilink_xmldata="0$pin" + _sendRequest "api/pin/operate" + return $? +} + +# Send request to host at http://$hilink_host/$apiurl +# data in $hilink_xmldata and options in $hilink_xtraopts +# parameter: apiurl (e.g. "api/user/login") +function _sendRequest() { + local ret apiurl + status="ERROR" + if [ -z "$1" ]; then return 1; fi + apiurl="$1" + ret=1 + if [ -z "$hilink_sessID" ] || [ -z "$hilink_token" ]; then _sessToken; fi + if [ -z "$hilink_xmldata" ];then + response=$(curl -s http://$hilink_host/$apiurl -m 10 \ + -H "Cookie: $hilink_sessID") + else + response=$(curl -s -X POST http://$hilink_host/$apiurl -m 10 \ + -H "Content-Type: text/xml" \ + -H "Cookie: $hilink_sessID" \ + -H "__RequestVerificationToken: $hilink_token" \ + -d "$hilink_xmldata" $hilink_xtraopts 2> /dev/null) + _getToken + fi + if [ ! -z "$response" ];then + response=$(echo $response | tr -d '\012\015') # delete newline chars + status=$(echo "$response" | sed -nr 's/.*([0-9]*)<\/code>.*/\1/ip') # check for error code + if [ -z "$status" ]; then + status="OK" + response=$(echo "$response" | sed -nr 's/.*(.*)<\/response>.*/\1/ip') + [ -z "$response" ] && response="none" + ret=0 + else + status="ERROR $status" + fi + else + status="ERROR" + fi + if [[ "$status" =~ ERROR ]]; then _handleError; fi + hilink_xtraopts="" + hilink_xmldata="" + return $ret +} + +# handle the list of tokens available after login +# parameter: none +function _getToken() { + if [ ! -z "$hilink_tokenlist" ] && [ ${#hilink_tokenlist[@]} -gt 0 ]; then + hilink_token=${hilink_tokenlist[0]} # get first token in list + hilink_tokenlist=("${hilink_tokenlist[@]:1}") # remove used token from list + if [ ${#hilink_tokenlist[@]} -eq 0 ]; then + _logout # use the last token to logout + fi + else + _sessToken # old token has been used - need new session + fi +} + +# Analyse $status for error code +# return error text in $status +function _handleError() { + local ret txt + txt=$(_getErrorText) + if [ -z "$code" ]; then return 1; fi + ret=0 + case "$code" in + 101|108003|108007) + ret=1 + status="$txt" + ;; + 108001|108002|108006) + ret=1 + status="$txt" + ;; + 125001|125002|125003) + _sessToken + ret=0 + ;; + *) + ;; + esac + return "$ret" +} + +declare -A hilink_err_api +hilink_err_api[101]="Unable to get session ID/token" +hilink_err_api[108001]="Invalid username/password" +hilink_err_api[108002]=${hilink_err_api[108001]} +hilink_err_api[108006]=${hilink_err_api[108001]} +hilink_err_api[108003]="User already logged in - need to wait a bit" +hilink_err_api[108007]="Too many login attempts - need to wait a bit" +hilink_err_api[125001]="Invalid session/request token" +hilink_err_api[125002]=${hilink_err_api[125001]} +hilink_err_api[125003]=${hilink_err_api[125001]} + +# check error and return error text +# status passsed in $status, or $1 +function _getErrorText() { + local err code errortext + err="$status" + code="0" + if [ ! -z "$1" ]; then err="$1"; fi + if [ -z "$err" ]; then return 1; fi + errortext="$err" + if [[ "$err" =~ ERROR\ *([0-9]*) ]] && [ ! -z "${BASH_REMATCH[1]}" ]; then + code=${BASH_REMATCH[1]} + if [ ! -z "$code" ] && [ ! -z "${hilink_err_api[$code]}" ]; then + errortext="${hilink_err_api[$code]}" + fi + fi + echo $errortext + return 0 +} + +function _hostReachable() { + local avail + avail=$( timeout 0.5 ping -c 1 $hilink_host | sed -rn 's/.*time=.*/1/p' ) + if [ -z "$avail" ]; then status="ERROR: Not reachable"; return 1; fi + status="OK" + return 0; +} + +# helper function to parse $response (xml format) for a value +# call another function first! +# parameter: tag-name +function _valueFromResponse() { + local par value + if [ -z "$response" ] || [ -z "$1" ]; then return 1; fi + par="$1" + value=$(echo $response | sed -rn 's/.*<'$par'>(.*)<\/'$par'>.*/\1/pi') + if [ -z "$value" ]; then return 1; fi + echo "$value" + return 0 +} + +# list all keys of the current xml response +function _keysFromResponse() { + if [ -z "$response" ]; then return 1; fi + echo $response | grep -oiP "(?<=<)[a-z_-]*(?=>)" + return 0 +} + +# return all key=value pairs of the current xml response +function _keyValuePairs() { + if [ -z "$response" ]; then return 1; fi + echo $response | sed -n 's/<\([^>]*\)>\(.*\)<\/\1>[^<]*/\1=\"\2\"\n/gpi' + return 0 +} + +hilink_token="" +hilink_tokenlist="" +hilink_sessID="" +hilink_xmldata="" +hilink_xtraopts="" +hilink_host=$hilink_host_default +hilink_user="admin" +hilink_password="" +hilink_pin="" +response="" +status="" + \ No newline at end of file diff --git a/config/client_config/info_huawei.sh b/config/client_config/info_huawei.sh new file mode 100644 index 00000000..fe6c27a1 --- /dev/null +++ b/config/client_config/info_huawei.sh @@ -0,0 +1,109 @@ +#!/bin/bash +# get info about device and signal of Huawei mobile USB devices +# parm: +# $1 : requested information (manufacturer, device, imei, imsi, telnumber, ipaddress, mode, signal, operator) +# $2 : (optional) type - hilink or modem (default: hilink) +# $3 : (optional) for hilink: ip address of the device (default: 192.168.8.1) +# for modem: tty interface for communication (default: /dev/ttypUSB2) +# $4 : more options can be added for Hilink devices ('-u user -P password -p pin'). These are passed to the corresponding script +# +# requires: bc +# calls the scripts info_huawei_hilink.sh and info_huawei_modem.sh (same path as this script) +# +# zbchristian 2020 +# +path=$(dirname "$0") +opt="device" +if [ ! -z "$1" ]; then opt=${1,,}; fi +type="hilink" +if [ ! -z "$2" ]; then type=${2,,}; fi + +parms="" +if [ "$type" = "hilink" ]; then + connect="-h 192.168.8.1" + if [ ! -z "$3" ]; then connect="-h $3"; fi + if [ ! -z "$4" ]; then parms="$4"; fi + script="$path/info_huawei_hilink.sh" +else + connect="/dev/ttyUSB2" + if [ ! -z "$3" ]; then connect=$3; fi + script="$path/info_huawei_modem.sh" +fi +res=$($script $opt $connect $parms) + +# some results require special treatment +case $opt in + +# manufacturer) +# if [ "$res" = "none" ]; then res="Huawei"; fi +# ;; + +# device) +# if [ ! "$res" = "none" ]; then res="Huawei $res"; +# else res="Huawei"; fi +# ;; + + mode) + if [ ! "$res" = "none" ]; then + if [ "$type" = "hilink" ]; then + if [ "$res" = "LTE" ]; then res="4G" + elif [ "$res" = "WCDMA" ]; then res="3G"; + else res="2G"; fi + else + if [ $res -eq 7 ]; then res="4G" + elif [ $res -lt 7 ] && [ $res -gt 2 ] ; then res="3G"; + else res="2G"; fi + fi + fi + ;; + + signal) + # return signal strength/quality in % + if [ "$type" = "hilink" ]; then + # signal request tries to get RSRQ value + # try to get RSRQ (4G), EC/IO (3G) or RSSI (2G) value + if [ "$res" = "none" ]; then res=$($script "ecio"); fi + if [ ! "$res" = "none" ]; then + # for rsrq and ecio assume: -3dB (100%) downto -20dB (0%) + qual=${res//dB/} + if [[ ! "$qual" =~ [-0-9\.]* ]]; then qual=-100; fi + qual=$(bc <<< "scale=0;res=$qual-0.5;res/1") # just round to next integer + if [ $qual -le -20 ]; then qual=0; + elif [ $qual -ge -3 ]; then qual=100; + else qual=$(bc <<< "scale=0;res=100.0/17.0*$qual+2000.0/17.0;res/1"); fi + else + # try rssi: >-70dBm (100%) downto -100dBm (0%) + res=$($script "rssi"); + if [ ! "$res" = "none" ]; then + if [[ ! $res =~ [-0-9\.]* ]]; then res="-120 dBm"; fi + qual=${res//dBm/} + qual=$(bc <<< "scale=0;res=$qual+0.5;res/1") # just round to next integer + if [ $qual -le -110 ]; then qual=0; + elif [ $qual -ge -70 ]; then qual=100; + else qual=$(bc <<< "scale=0;res=2.5*$qual+275;res/1"); fi + fi + fi + else + # modem returns RSSI as number 0-31 - 0 = -113dB (0%), 1 = -111dB, 31 = >=51dB (100%) + qual=$(bc <<< "scale=0;res=$res*3.5+0.5;res/1") + if [ $qual -gt 100 ]; then res=100; fi + fi + if [ ! "$res" = "none" ]; then res="$res (${qual}%)"; fi + ;; + + operator) + # check if operator/network is just a 5 digit number -> extract network name from table + if [[ $res =~ ^[0-9]{5}$ ]]; then + mcc=${res:0:3} + mnc=${res:3:2} + op=$(cat $path/mcc-mnc-table.csv | sed -rn 's/^'$mcc'\,[0-9]*\,'$mnc'\,(.*\,){4}(.*)$/\2/p') + if [ ! -z "$op" ]; then res="$op ($res)"; fi + fi + ;; + + *) + ;; +esac + +echo $res + diff --git a/config/client_config/info_huawei_hilink.sh b/config/client_config/info_huawei_hilink.sh new file mode 100644 index 00000000..c98ee9fe --- /dev/null +++ b/config/client_config/info_huawei_hilink.sh @@ -0,0 +1,95 @@ +#!/bin/bash +# Information about HUAWEI hilink +# ------------------------------- +# get info about the device and signal +# parameter: $1 - "connected", "device", "ipaddress", "mode", "signal" (see case statement below) +# -u,--user - username +# -P,--password - password +# -p,--pin - SIM pin +# -h,--host - host ip address for API calls (optional) +# returns the value of the parameter, or "none" if not found or empty +# +# All device informations are buffered for 5 secs to speed up subsequent calls +# +# zbchristian 2021 + +function _setAPIParams() { + if [ ! -z "$hostip" ]; then hilink_host="$hostip"; fi + if [ ! -z "$username" ]; then hilink_user="$username"; fi + if [ ! -z "$password" ]; then hilink_password="$password"; fi + if [ ! -z "$simpin" ]; then hilink_pin="$simpin"; fi +} + +if [ -z "$1" ]; then echo "none"; exit; fi +property="${1,,}" +shift +hostip="192.168.8.1" +while [ -n "$1" ]; do + case "$1" in + -u|--user) username="$2"; shift ;; + -P|--password) password="$2"; shift ;; + -p|--pin) simpin="$2"; shift ;; + -h|--host) hostip="$2"; shift ;; + esac + shift +done + +status="no valid option given" +result="none" +hostip="192.168.8.1" +if [ "$opt" = "connected" ]; then + source /usr/local/sbin/huawei_hilink_api.sh + _setAPIParams + if ! _initHilinkAPI; then echo "none"; exit; fi + result=$(_getMobileDataStatus) + _closeHilinkAPI +else + info_file="/tmp/huawei_infos_${hostip}_$(id -u).dat" + if [ -f "$info_file" ]; then + age=$(( $(date +%s) - $(stat $info_file -c %Y) )) + if [[ $age -gt 10 ]]; then rm -f $info_file; fi + fi + + if [ -f "$info_file" ]; then + infos=$(cat $info_file) + else + source /usr/local/sbin/huawei_hilink_api.sh + _setAPIParams + if ! _initHilinkAPI; then echo "none"; exit; fi + infos=$(_getAllInformations) + _closeHilinkAPI + if [ ! -z "$infos" ]; then echo -n "$infos" > $info_file; fi + fi + + case "$property" in + device|devicename) + key="devicename" + ;; + ipaddress|wanipaddress) + key="wanipaddress" + ;; + mode) + key="workmode" + ;; + telnumber) + key="msisdn" + ;; + imei|imsi|rssi|rsrq|rsrp|sinr|ecio) + key="$property" + ;; + signal) + key="rsrq" + ;; + operator|fullname) + key="fullname" + ;; + *) + key="device" + ;; + esac + if [ -z "$key" ]; then result="none"; fi + result=$(echo "$infos" | sed -rn 's/'$key'=\"([^ \s]*)\"/\1/ip') + if [ -z "$result" ]; then result="none"; fi +fi +echo -n "$result" + diff --git a/config/client_config/info_huawei_modem.sh b/config/client_config/info_huawei_modem.sh new file mode 100644 index 00000000..33c78b7d --- /dev/null +++ b/config/client_config/info_huawei_modem.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Information about HUAWEI modem - via AT commands +# ------------------------------------------------ +# get info about the device and signal +# parameter: $1 - see opts list below +# $2 - tty device name for the communicaton (optional) +# returns the value of the parameter, or "none" if not found or empty +# +# requires: socat +# +# zbchristian 2020 + +opts=("manufacturer" "device" "imei" "imsi" "telnumber" "mode" "signal" "operator") + +# at command to extract information +atcmds=("AT+CGMI" "AT+CGMM" "AT+CGSN" "AT+CIMI" "AT+CNUM" "AT+COPS?" "AT+CSQ" "AT+COPS?") +# regexp pattern to extract wanted information from result string +pats=( " " " " " " " " ".*\,\"([0-9\+]*)\".*" '.*\,([0-9])$' ".*: ([0-9]*).*" '.*\,\"([^ ]*)\".*$') + +# tty device for communication - usually 3 tty devices are created and the 3rd ttyUSB2 is available, even, when the device is connected +dev="/dev/ttyUSB2" + +atsilent="AT^CURC=0" + +if [ ! -z $2 ]; then dev=$2; fi + +idx=-1 +opt=${opts[0]} +if [ ! -z $1 ]; then opt=$1; fi + +for i in "${!opts[@]}"; do + if [[ ${opts[$i]} == $opt ]]; then idx=$i; fi +done +if [[ $idx == -1 ]];then echo "none"; exit; fi + +atcmd=${atcmds[$idx]} +pat=${pats[$idx]} + + +result=`(echo $atsilent; echo $atcmd) | sudo /usr/bin/socat - $dev` +# escape the AT command to be used in the regexp +atesc=${atcmd//[\+]/\\+} +atesc=${atesc//[\?]/\\?} +result=`echo $result | sed -rn 's/.*'"$atesc"'\s([^ ]+|[^ ]+ [^ ]+)\sOK.*$/\1/pg'` +if [[ $pat != " " ]]; then + result=`echo $result | sed -rn 's/'"$pat"'/\1/pg'` +fi + +if [ -z "$result" ]; then result="none"; fi + +echo $result + diff --git a/config/client_config/interfaces b/config/client_config/interfaces new file mode 100644 index 00000000..157aa22b --- /dev/null +++ b/config/client_config/interfaces @@ -0,0 +1,13 @@ +# interfaces(5) file used by ifup(8) and ifdown(8) + +# Please note that this file is written to be used with dhcpcd +# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' + +# Include files from /etc/network/interfaces.d: +source-directory /etc/network/interfaces.d + +auto ppp0 +iface ppp0 inet wvdial +provider connect +pre-up /usr/local/sbin/ppp0_setpin.sh +up /usr/local/sbin/ppp0_route.sh diff --git a/config/client_config/mcc-mnc-table.csv b/config/client_config/mcc-mnc-table.csv new file mode 100644 index 00000000..34510563 --- /dev/null +++ b/config/client_config/mcc-mnc-table.csv @@ -0,0 +1,1691 @@ +MCC,MCC (int),MNC,MNC (int),ISO,Country,Country Code,Network +289,649,88,2191,ge,Abkhazia,7,A-Mobile +289,649,68,1679,ge,Abkhazia,7,A-Mobile +289,649,67,1663,ge,Abkhazia,7,Aquafon +412,1042,80,2063,af,Afghanistan,93,Afghan Telecom Corp. (AT) +412,1042,88,2191,af,Afghanistan,93,Afghan Telecom Corp. (AT) +412,1042,01,31,af,Afghanistan,93,Afghan Wireless/AWCC +412,1042,40,1039,af,Afghanistan,93,Areeba/MTN +412,1042,50,1295,af,Afghanistan,93,Etisalat +412,1042,30,783,af,Afghanistan,93,Etisalat +412,1042,20,527,af,Afghanistan,93,Roshan/TDCA +412,1042,03,63,af,Afghanistan,93,WaselTelecom (WT) +276,630,01,31,al,Albania,355,AMC/Cosmote +276,630,03,63,al,Albania,355,Eagle Mobile +276,630,04,79,al,Albania,355,PLUS Communication Sh.a +276,630,02,47,al,Albania,355,Vodafone +603,1539,01,31,dz,Algeria,213,ATM Mobils +603,1539,02,47,dz,Algeria,213,Orascom / DJEZZY +603,1539,03,63,dz,Algeria,213,Oreedo/Wataniya / Nedjma +544,1348,11,287,as,American Samoa,684,Blue Sky Communications +213,531,03,63,ad,Andorra,376,Mobiland +631,1585,04,79,ao,Angola,244,MoviCel +631,1585,02,47,ao,Angola,244,Unitel +365,869,840,2112,ai,Anguilla,1264,Cable and Wireless +365,869,010,16,ai,Anguilla,1264,Digicell / Wireless Vent. Ltd +344,836,030,48,ag,Antigua and Barbuda,1268,APUA PCS +344,836,920,2336,ag,Antigua and Barbuda,1268,C & W +344,836,930,2352,ag,Antigua and Barbuda,1268,DigiCel/Cing. Wireless +722,1826,310,784,ar,Argentina Republic,54,Claro/ CTI/AMX +722,1826,330,816,ar,Argentina Republic,54,Claro/ CTI/AMX +722,1826,320,800,ar,Argentina Republic,54,Claro/ CTI/AMX +722,1826,010,16,ar,Argentina Republic,54,Compania De Radiocomunicaciones Moviles SA +722,1826,070,112,ar,Argentina Republic,54,Movistar/Telefonica +722,1826,020,32,ar,Argentina Republic,54,Nextel +722,1826,340,832,ar,Argentina Republic,54,Telecom Personal S.A. +722,1826,341,833,ar,Argentina Republic,54,Telecom Personal S.A. +283,643,01,31,am,Armenia,374,ArmenTel/Beeline +283,643,04,79,am,Armenia,374,Karabakh Telecom +283,643,10,271,am,Armenia,374,Orange +283,643,05,95,am,Armenia,374,Vivacell +363,867,02,47,aw,Aruba,297,Digicel +363,867,20,527,aw,Aruba,297,Digicel +363,867,01,31,aw,Aruba,297,Setar GSM +505,1285,14,335,au,Australia,61,AAPT Ltd. +505,1285,24,591,au,Australia,61,Advanced Comm Tech Pty. +505,1285,09,159,au,Australia,61,Airnet Commercial Australia Ltd.. +505,1285,04,79,au,Australia,61,Department of Defense +505,1285,26,623,au,Australia,61,Dialogue Communications Pty Ltd +505,1285,12,303,au,Australia,61,H3G Ltd. +505,1285,06,111,au,Australia,61,H3G Ltd. +505,1285,88,2191,au,Australia,61,Localstar Holding Pty. Ltd +505,1285,19,415,au,Australia,61,Lycamobile Pty Ltd +505,1285,08,143,au,Australia,61,Railcorp/Vodafone +505,1285,99,2463,au,Australia,61,Railcorp/Vodafone +505,1285,13,319,au,Australia,61,Railcorp/Vodafone +505,1285,02,47,au,Australia,61,Singtel Optus +505,1285,90,2319,au,Australia,61,Singtel Optus +505,1285,01,31,au,Australia,61,Telstra Corp. Ltd. +505,1285,11,287,au,Australia,61,Telstra Corp. Ltd. +505,1285,71,1823,au,Australia,61,Telstra Corp. Ltd. +505,1285,72,1839,au,Australia,61,Telstra Corp. Ltd. +505,1285,05,95,au,Australia,61,The Ozitel Network Pty. +505,1285,16,367,au,Australia,61,Victorian Rail Track Corp. (VicTrack) +505,1285,07,127,au,Australia,61,Vodafone +505,1285,03,63,au,Australia,61,Vodafone +232,562,09,159,at,Austria,43,A1 MobilKom +232,562,02,47,at,Austria,43,A1 MobilKom +232,562,01,31,at,Austria,43,A1 MobilKom +232,562,11,287,at,Austria,43,A1 MobilKom +232,562,15,351,at,Austria,43,T-Mobile/Telering +232,562,10,271,at,Austria,43,H3G +232,562,14,335,at,Austria,43,H3G +232,562,05,95,at,Austria,43,3/Orange/One Connect +232,562,12,303,at,Austria,43,3/Orange/One Connect +232,562,06,111,at,Austria,43,3/Orange/One Connect +232,562,17,383,at,Austria,43,Spusu/Mass Response +232,562,04,79,at,Austria,43,T-Mobile/Telering +232,562,03,63,at,Austria,43,T-Mobile/Telering +232,562,07,127,at,Austria,43,T-Mobile/Telering +232,562,19,415,at,Austria,43,Tele2 +232,562,08,143,at,Austria,43,A1 MobilKom +232,562,13,319,at,Austria,43,UPC Austria +400,1024,01,31,az,Azerbaijan,994,Azercell Telekom B.M. +400,1024,04,79,az,Azerbaijan,994,Azerfon. +400,1024,03,63,az,Azerbaijan,994,Caspian American Telecommunications LLC (CATEL) +400,1024,02,47,az,Azerbaijan,994,J.V. Bakcell GSM 2000 +364,868,390,912,bs,Bahamas,1242,Bahamas Telco. Comp. +364,868,39,927,bs,Bahamas,1242,Bahamas Telco. Comp. +364,868,30,783,bs,Bahamas,1242,Bahamas Telco. Comp. +364,868,03,63,bs,Bahamas,1242,Smart Communications +426,1062,01,31,bh,Bahrain,973,Batelco +426,1062,02,47,bh,Bahrain,973,ZAIN/Vodafone +426,1062,04,79,bh,Bahrain,973,VIVA +470,1136,02,47,bd,Bangladesh,880,Robi/Aktel +470,1136,05,95,bd,Bangladesh,880,Citycell +470,1136,06,111,bd,Bangladesh,880,Citycell +470,1136,01,31,bd,Bangladesh,880,GrameenPhone +470,1136,03,63,bd,Bangladesh,880,Orascom/Banglalink +470,1136,04,79,bd,Bangladesh,880,TeleTalk +470,1136,07,127,bd,Bangladesh,880,Airtel/Warid +342,834,600,1536,bb,Barbados,1246,LIME +342,834,810,2064,bb,Barbados,1246,Cingular Wireless +342,834,750,1872,bb,Barbados,1246,Digicel +342,834,050,80,bb,Barbados,1246,Digicel +342,834,820,2080,bb,Barbados,1246,Sunbeach +257,599,03,63,by,Belarus,375,BelCel JV +257,599,04,79,by,Belarus,375,BeST +257,599,01,31,by,Belarus,375,Mobile Digital Communications +257,599,02,47,by,Belarus,375,MTS +206,518,20,527,be,Belgium,32,Base/KPN +206,518,01,31,be,Belgium,32,Belgacom/Proximus +206,518,06,111,be,Belgium,32,Lycamobile Belgium +206,518,10,271,be,Belgium,32,Mobistar/Orange +206,518,02,47,be,Belgium,32,SNCT/NMBS +206,518,05,95,be,Belgium,32,Telenet BidCo NV +702,1794,67,1663,bz,Belize,501,DigiCell +702,1794,68,1679,bz,Belize,501,International Telco (INTELCO) +616,1558,04,79,bj,Benin,229,Bell Benin/BBCOM +616,1558,02,47,bj,Benin,229,Etisalat/MOOV +616,1558,05,95,bj,Benin,229,GloMobile +616,1558,01,31,bj,Benin,229,Libercom +616,1558,03,63,bj,Benin,229,MTN/Spacetel +350,848,000,0,bm,Bermuda,1441,Bermuda Digital Communications Ltd (BDC) +350,848,99,2463,bm,Bermuda,1441,CellOne Ltd +350,848,10,271,bm,Bermuda,1441,DigiCel / Cingular +350,848,02,47,bm,Bermuda,1441,M3 Wireless Ltd +350,848,01,31,bm,Bermuda,1441,Telecommunications (Bermuda & West Indies) Ltd (Digicel Bermuda) +402,1026,11,287,bt,Bhutan,975,B-Mobile +402,1026,17,383,bt,Bhutan,975,Bhutan Telecom Ltd (BTL) +402,1026,77,1919,bt,Bhutan,975,TashiCell +736,1846,02,47,bo,Bolivia,591,Entel Pcs +736,1846,01,31,bo,Bolivia,591,Viva/Nuevatel +736,1846,03,63,bo,Bolivia,591,Tigo +218,536,90,2319,ba,Bosnia & Herzegov.,387,BH Mobile +218,536,03,63,ba,Bosnia & Herzegov.,387,Eronet Mobile +218,536,05,95,ba,Bosnia & Herzegov.,387,M-Tel +652,1618,04,79,bw,Botswana,267,BeMOBILE +652,1618,01,31,bw,Botswana,267,Mascom Wireless (Pty) Ltd. +652,1618,02,47,bw,Botswana,267,Orange +724,1828,12,303,br,Brazil,55,Claro/Albra/America Movil +724,1828,38,911,br,Brazil,55,Claro/Albra/America Movil +724,1828,05,95,br,Brazil,55,Claro/Albra/America Movil +724,1828,01,31,br,Brazil,55,Vivo S.A./Telemig +724,1828,32,815,br,Brazil,55,CTBC Celular SA (CTBC) +724,1828,34,847,br,Brazil,55,CTBC Celular SA (CTBC) +724,1828,33,831,br,Brazil,55,CTBC Celular SA (CTBC) +724,1828,08,143,br,Brazil,55,TIM +724,1828,00,15,br,Brazil,55,Nextel (Telet) +724,1828,39,927,br,Brazil,55,Nextel (Telet) +724,1828,30,783,br,Brazil,55,Oi (TNL PCS / Oi) +724,1828,16,367,br,Brazil,55,Brazil Telcom +724,1828,31,799,br,Brazil,55,Oi (TNL PCS / Oi) +724,1828,24,591,br,Brazil,55,Amazonia Celular S/A +724,1828,54,1359,br,Brazil,55,PORTO SEGURO TELECOMUNICACOES +724,1828,15,351,br,Brazil,55,Sercontel Cel +724,1828,07,127,br,Brazil,55,CTBC/Triangulo +724,1828,19,415,br,Brazil,55,Vivo S.A./Telemig +724,1828,03,63,br,Brazil,55,TIM +724,1828,02,47,br,Brazil,55,TIM +724,1828,04,79,br,Brazil,55,TIM +724,1828,37,895,br,Brazil,55,Unicel do Brasil Telecomunicacoes Ltda +724,1828,23,575,br,Brazil,55,Vivo S.A./Telemig +724,1828,11,287,br,Brazil,55,Vivo S.A./Telemig +724,1828,10,271,br,Brazil,55,Vivo S.A./Telemig +724,1828,06,111,br,Brazil,55,Vivo S.A./Telemig +348,840,570,1392,vg,British Virgin Islands,284,Caribbean Cellular +348,840,770,1904,vg,British Virgin Islands,284,Digicel +348,840,170,368,vg,British Virgin Islands,284,LIME +528,1320,02,47,bn,Brunei Darussalam,673,b-mobile +528,1320,11,287,bn,Brunei Darussalam,673,Datastream (DTSCom) +528,1320,01,31,bn,Brunei Darussalam,673,Telekom Brunei Bhd (TelBru) +284,644,06,111,bg,Bulgaria,359,BTC Mobile EOOD (vivatel) +284,644,03,63,bg,Bulgaria,359,BTC Mobile EOOD (vivatel) +284,644,05,95,bg,Bulgaria,359,Telenor/Cosmo/Globul +284,644,01,31,bg,Bulgaria,359,MobilTel AD +613,1555,03,63,bf,Burkina Faso,226,TeleCel +613,1555,01,31,bf,Burkina Faso,226,TeleMob-OnaTel +613,1555,02,47,bf,Burkina Faso,226,Airtel/ZAIN/CelTel +642,1602,02,47,bi,Burundi,257,Africel / Safaris +642,1602,08,143,bi,Burundi,257,Lumitel/Viettel +642,1602,03,63,bi,Burundi,257,Onatel / Telecel +642,1602,07,127,bi,Burundi,257,Smart Mobile / LACELL +642,1602,01,31,bi,Burundi,257,Spacetel / Econet / Leo +642,1602,82,2095,bi,Burundi,257,Spacetel / Econet / Leo +456,1110,04,79,kh,Cambodia,855,Cambodia Advance Communications Co. Ltd (CADCOMMS) +456,1110,02,47,kh,Cambodia,855,Smart Mobile +456,1110,08,143,kh,Cambodia,855,Metfone +456,1110,18,399,kh,Cambodia,855,MFone/Camshin/Cellcard +456,1110,01,31,kh,Cambodia,855,Mobitel/Cam GSM +456,1110,03,63,kh,Cambodia,855,QB/Cambodia Adv. Comms. +456,1110,05,95,kh,Cambodia,855,Smart Mobile +456,1110,06,111,kh,Cambodia,855,Smart Mobile +456,1110,09,159,kh,Cambodia,855,Sotelco/Beeline +624,1572,01,31,cm,Cameroon,237,MTN +624,1572,04,79,cm,Cameroon,237,Nextel +624,1572,02,47,cm,Cameroon,237,Orange +302,770,652,1618,ca,Canada,1,BC Tel Mobility +302,770,630,1584,ca,Canada,1,Bell Aliant +302,770,651,1617,ca,Canada,1,Bell Mobility +302,770,610,1552,ca,Canada,1,Bell Mobility +302,770,670,1648,ca,Canada,1,CityWest Mobility +302,770,360,864,ca,Canada,1,Clearnet +302,770,361,865,ca,Canada,1,Clearnet +302,770,380,896,ca,Canada,1,DMTS Mobility +302,770,710,1808,ca,Canada,1,Globalstar Canada +302,770,640,1600,ca,Canada,1,Latitude Wireless +302,770,370,880,ca,Canada,1,FIDO (Rogers AT&T/ Microcell) +302,770,320,800,ca,Canada,1,mobilicity +302,770,702,1794,ca,Canada,1,MT&T Mobility +302,770,655,1621,ca,Canada,1,MTS Mobility +302,770,660,1632,ca,Canada,1,MTS Mobility +302,770,701,1793,ca,Canada,1,NB Tel Mobility +302,770,703,1795,ca,Canada,1,New Tel Mobility +302,770,760,1888,ca,Canada,1,Public Mobile +302,770,657,1623,ca,Canada,1,Quebectel Mobility +302,770,720,1824,ca,Canada,1,Rogers AT&T Wireless +302,770,654,1620,ca,Canada,1,Sask Tel Mobility +302,770,680,1664,ca,Canada,1,Sask Tel Mobility +302,770,780,1920,ca,Canada,1,Sask Tel Mobility +302,770,656,1622,ca,Canada,1,Tbay Mobility +302,770,220,544,ca,Canada,1,Telus Mobility +302,770,653,1619,ca,Canada,1,Telus Mobility +302,770,500,1280,ca,Canada,1,Videotron +302,770,490,1168,ca,Canada,1,WIND +625,1573,01,31,cv,Cape Verde,238,CV Movel +625,1573,02,47,cv,Cape Verde,238,T+ Telecom +346,838,050,80,ky,Cayman Islands,1345,Digicel Cayman Ltd +346,838,006,6,ky,Cayman Islands,1345,Digicel Ltd. +346,838,140,320,ky,Cayman Islands,1345,LIME / Cable & Wirel. +623,1571,01,31,cf,Central African Rep.,236,Centrafr. Telecom+ +623,1571,04,79,cf,Central African Rep.,236,Nationlink +623,1571,03,63,cf,Central African Rep.,236,Orange/Celca +623,1571,02,47,cf,Central African Rep.,236,Telecel Centraf. +622,1570,04,79,td,Chad,235,Salam/Sotel +622,1570,02,47,td,Chad,235,Tchad Mobile +622,1570,03,63,td,Chad,235,Tigo/Milicom/Tchad Mobile +622,1570,01,31,td,Chad,235,Airtel/ZAIN/Celtel +730,1840,06,111,cl,Chile,56,Blue Two Chile SA +730,1840,11,287,cl,Chile,56,Celupago SA +730,1840,15,351,cl,Chile,56,Cibeles Telecom SA +730,1840,03,63,cl,Chile,56,Claro +730,1840,10,271,cl,Chile,56,Entel Telefonia +730,1840,01,31,cl,Chile,56,Entel Telefonia Mov +730,1840,14,335,cl,Chile,56,Netline Telefonica Movil Ltda +730,1840,04,79,cl,Chile,56,Nextel SA +730,1840,09,159,cl,Chile,56,Nextel SA +730,1840,05,95,cl,Chile,56,Nextel SA +730,1840,19,415,cl,Chile,56,Sociedad Falabella Movil SPA +730,1840,02,47,cl,Chile,56,TELEFONICA +730,1840,07,127,cl,Chile,56,TELEFONICA +730,1840,12,303,cl,Chile,56,Telestar Movil SA +730,1840,00,15,cl,Chile,56,TESAM SA +730,1840,13,319,cl,Chile,56,Tribe Mobile SPA +730,1840,08,143,cl,Chile,56,VTR Banda Ancha SA +460,1120,07,127,cn,China,86,China Mobile GSM +460,1120,02,47,cn,China,86,China Mobile GSM +460,1120,00,15,cn,China,86,China Mobile GSM +460,1120,04,79,cn,China,86,China Space Mobile Satellite Telecommunications Co. Ltd (China Spacecom) +460,1120,05,95,cn,China,86,China Telecom +460,1120,03,63,cn,China,86,China Telecom +460,1120,06,111,cn,China,86,China Unicom +460,1120,01,31,cn,China,86,China Unicom +732,1842,130,304,co,Colombia,57,Avantel SAS +732,1842,102,258,co,Colombia,57,Movistar +732,1842,103,259,co,Colombia,57,TIGO/Colombia Movil +732,1842,001,1,co,Colombia,57,TIGO/Colombia Movil +732,1842,101,257,co,Colombia,57,Comcel S.A. Occel S.A./Celcaribe +732,1842,002,2,co,Colombia,57,Edatel S.A. +732,1842,187,391,co,Colombia,57,eTb +732,1842,123,291,co,Colombia,57,Movistar +732,1842,111,273,co,Colombia,57,TIGO/Colombia Movil +732,1842,142,322,co,Colombia,57,UNE EPM Telecomunicaciones SA ESP +732,1842,020,32,co,Colombia,57,UNE EPM Telecomunicaciones SA ESP +732,1842,154,340,co,Colombia,57,Virgin Mobile Colombia SAS +654,1620,01,31,km,Comoros,269,HURI - SNPT +630,1584,90,2319,cd,Congo Dem. Rep.,243,Africell +630,1584,86,2159,cd,Congo Dem. Rep.,243,Orange RDC sarl +630,1584,05,95,cd,Congo Dem. Rep.,243,SuperCell +630,1584,89,2207,cd,Congo Dem. Rep.,243,TIGO/Oasis +630,1584,01,31,cd,Congo Dem. Rep.,243,Vodacom +630,1584,88,2191,cd,Congo Dem. Rep.,243,Yozma Timeturns sprl (YTT) +630,1584,02,47,cd,Congo Dem. Rep.,243,Airtel/ZAIN +629,1577,01,31,cg,Congo Republic,242,Airtel SA +629,1577,02,47,cg,Congo Republic,242,Azur SA (ETC) +629,1577,10,271,cg,Congo Republic,242,MTN/Libertis +629,1577,07,127,cg,Congo Republic,242,Warid +548,1352,01,31,ck,Cook Islands,682,Telecom Cook Islands +712,1810,03,63,cr,Costa Rica,506,Claro +712,1810,02,47,cr,Costa Rica,506,ICE +712,1810,01,31,cr,Costa Rica,506,ICE +712,1810,04,79,cr,Costa Rica,506,Movistar +712,1810,20,527,cr,Costa Rica,506,Virtualis +219,537,01,31,hr,Croatia,385,T-Mobile/Cronet +219,537,02,47,hr,Croatia,385,Tele2 +219,537,10,271,hr,Croatia,385,VIPnet d.o.o. +368,872,01,31,cu,Cuba,53,C-COM +362,866,95,2399,cw,Curacao,599,EOCG Wireless NV +362,866,69,1695,cw,Curacao,599,Polycom N.V./ Digicel +280,640,10,271,cy,Cyprus,357,MTN/Areeba +280,640,20,527,cy,Cyprus,357,PrimeTel PLC +280,640,01,31,cy,Cyprus,357,Vodafone/CyTa +230,560,08,143,cz,Czech Rep.,420,Compatel s.r.o. +230,560,02,47,cz,Czech Rep.,420,O2 +230,560,01,31,cz,Czech Rep.,420,T-Mobile / RadioMobil +230,560,05,95,cz,Czech Rep.,420,Travel Telekommunikation s.r.o. +230,560,04,79,cz,Czech Rep.,420,Ufone +230,560,99,2463,cz,Czech Rep.,420,Vodafone +230,560,03,63,cz,Czech Rep.,420,Vodafone +238,568,05,95,dk,Denmark,45,ApS KBUS +238,568,23,575,dk,Denmark,45,Banedanmark +238,568,28,655,dk,Denmark,45,CoolTEL ApS +238,568,06,111,dk,Denmark,45,H3G +238,568,12,303,dk,Denmark,45,Lycamobile Ltd +238,568,03,63,dk,Denmark,45,Mach Connectivity ApS +238,568,07,127,dk,Denmark,45,Mundio Mobile +238,568,04,79,dk,Denmark,45,NextGen Mobile Ltd (CardBoardFish) +238,568,10,271,dk,Denmark,45,TDC Denmark +238,568,01,31,dk,Denmark,45,TDC Denmark +238,568,02,47,dk,Denmark,45,Telenor/Sonofon +238,568,77,1919,dk,Denmark,45,Telenor/Sonofon +238,568,20,527,dk,Denmark,45,Telia +238,568,30,783,dk,Denmark,45,Telia +638,1592,01,31,dj,Djibouti,253,Djibouti Telecom SA (Evatis) +366,870,110,272,dm,Dominica,1767,C & W +366,870,020,32,dm,Dominica,1767,Cingular Wireless/Digicel +366,870,050,80,dm,Dominica,1767,Wireless Ventures (Dominica) Ltd (Digicel Dominica) +370,880,02,47,do,Dominican Republic,1809,Claro +370,880,01,31,do,Dominican Republic,1809,Orange +370,880,03,63,do,Dominican Republic,1809,TRIcom +370,880,04,79,do,Dominican Republic,1809,Trilogy Dominicana S. A. +740,1856,02,47,ec,Ecuador,593,Alegro/Telcsa +740,1856,00,15,ec,Ecuador,593,MOVISTAR/OteCel +740,1856,01,31,ec,Ecuador,593,Claro/Porta +602,1538,01,31,eg,Egypt,20,Orange/Mobinil +602,1538,03,63,eg,Egypt,20,ETISALAT +602,1538,02,47,eg,Egypt,20,Vodafone/Mirsfone +706,1798,01,31,sv,El Salvador,503,CLARO/CTE +706,1798,02,47,sv,El Salvador,503,Digicel +706,1798,05,95,sv,El Salvador,503,INTELFON SA de CV +706,1798,04,79,sv,El Salvador,503,Telefonica +706,1798,03,63,sv,El Salvador,503,Telemovil +627,1575,03,63,gq,Equatorial Guinea,240,HiTs-GE +627,1575,01,31,gq,Equatorial Guinea,240,ORANGE/GETESA +657,1623,01,31,er,Eritrea,291,Eritel +248,584,01,31,ee,Estonia,372,EMT GSM +248,584,02,47,ee,Estonia,372,Radiolinja Eesti +248,584,03,63,ee,Estonia,372,Tele2 Eesti AS +248,584,04,79,ee,Estonia,372,Top Connect OU +636,1590,01,31,et,Ethiopia,251,ETH/MTN +750,1872,001,1,fk,Falkland Islands (Malvinas),500,Cable and Wireless South Atlantic Ltd (Falkland Islands +288,648,03,63,fo,Faroe Islands,298,Edge Mobile Sp/F +288,648,01,31,fo,Faroe Islands,298,Faroese Telecom +288,648,02,47,fo,Faroe Islands,298,Kall GSM +542,1346,02,47,fj,Fiji,679,DigiCell +542,1346,01,31,fj,Fiji,679,Vodafone +244,580,14,335,fi,Finland,358,Alands +244,580,26,623,fi,Finland,358,Compatel Ltd +244,580,03,63,fi,Finland,358,DNA/Finnet +244,580,12,303,fi,Finland,358,DNA/Finnet +244,580,13,319,fi,Finland,358,DNA/Finnet +244,580,04,79,fi,Finland,358,DNA/Finnet +244,580,21,543,fi,Finland,358,Elisa/Saunalahti +244,580,05,95,fi,Finland,358,Elisa/Saunalahti +244,580,82,2095,fi,Finland,358,ID-Mobile +244,580,11,287,fi,Finland,358,Mundio Mobile (Finland) Ltd +244,580,09,159,fi,Finland,358,Nokia Oyj +244,580,10,271,fi,Finland,358,TDC Oy Finland +244,580,91,2335,fi,Finland,358,TeliaSonera +208,520,27,639,fr,France,33,AFONE SA +208,520,92,2351,fr,France,33,Association Plate-forme Telecom +208,520,28,655,fr,France,33,Astrium +208,520,88,2191,fr,France,33,Bouygues Telecom +208,520,21,543,fr,France,33,Bouygues Telecom +208,520,20,527,fr,France,33,Bouygues Telecom +208,520,14,335,fr,France,33,Lliad/FREE Mobile +208,520,07,127,fr,France,33,GlobalStar +208,520,06,111,fr,France,33,GlobalStar +208,520,05,95,fr,France,33,GlobalStar +208,520,29,671,fr,France,33,Orange +208,520,17,383,fr,France,33,Legos - Local Exchange Global Operation Services SA +208,520,16,367,fr,France,33,Lliad/FREE Mobile +208,520,15,351,fr,France,33,Lliad/FREE Mobile +208,520,25,607,fr,France,33,Lycamobile SARL +208,520,24,591,fr,France,33,MobiquiThings +208,520,03,63,fr,France,33,MobiquiThings +208,520,31,799,fr,France,33,Mundio Mobile (France) Ltd +208,520,26,623,fr,France,33,NRJ +208,520,23,575,fr,France,33,Virgin Mobile/Omer +208,520,89,2207,fr,France,33,Virgin Mobile/Omer +208,520,91,2335,fr,France,33,Orange +208,520,02,47,fr,France,33,Orange +208,520,01,31,fr,France,33,Orange +208,520,13,319,fr,France,33,S.F.R. +208,520,11,287,fr,France,33,S.F.R. +208,520,10,271,fr,France,33,S.F.R. +208,520,09,159,fr,France,33,S.F.R. +208,520,04,79,fr,France,33,SISTEER +208,520,00,15,fr,France,33,Tel/Tel +208,520,22,559,fr,France,33,Transatel SA +340,832,20,527,fg,French Guiana,594,Bouygues/DigiCel +340,832,01,31,fg,French Guiana,594,Orange Caribe +340,832,02,47,fg,French Guiana,594,Outremer Telecom +340,832,11,287,fg,French Guiana,594,TelCell GSM +340,832,03,63,fg,French Guiana,594,TelCell GSM +547,1351,15,351,pf,French Polynesia,689,Pacific Mobile Telecom (PMT) +547,1351,20,527,pf,French Polynesia,689,Vini/Tikiphone +628,1576,04,79,ga,Gabon,241,Azur/Usan S.A. +628,1576,01,31,ga,Gabon,241,Libertis S.A. +628,1576,02,47,ga,Gabon,241,MOOV/Telecel +628,1576,03,63,ga,Gabon,241,Airtel/ZAIN/Celtel Gabon S.A. +607,1543,02,47,gm,Gambia,220,Africel +607,1543,03,63,gm,Gambia,220,Comium +607,1543,01,31,gm,Gambia,220,Gamcel +607,1543,04,79,gm,Gambia,220,Q-Cell +282,642,01,31,ge,Georgia,995,Geocell Ltd. +282,642,03,63,ge,Georgia,995,Iberiatel Ltd. +282,642,02,47,ge,Georgia,995,Magti GSM Ltd. +282,642,04,79,ge,Georgia,995,MobiTel/Beeline +282,642,05,95,ge,Georgia,995,Silknet +262,610,17,383,de,Germany,49,E-Plus +262,610,10,271,de,Germany,49,DB Netz AG +262,610,n/a,271,de,Germany,49,Debitel +262,610,77,1919,de,Germany,49,E-Plus +262,610,03,63,de,Germany,49,E-Plus +262,610,05,95,de,Germany,49,E-Plus +262,610,12,303,de,Germany,49,E-Plus +262,610,20,527,de,Germany,49,E-Plus +262,610,14,335,de,Germany,49,Group 3G UMTS +262,610,43,1087,de,Germany,49,Lycamobile +262,610,13,319,de,Germany,49,Mobilcom +262,610,08,143,de,Germany,49,O2 +262,610,07,127,de,Germany,49,O2 +262,610,11,287,de,Germany,49,O2 +262,610,n/a,287,de,Germany,49,Talkline +262,610,06,111,de,Germany,49,T-mobile/Telekom +262,610,01,31,de,Germany,49,T-mobile/Telekom +262,610,16,367,de,Germany,49,Telogic/ViStream +262,610,42,1071,de,Germany,49,Vodafone D2 +262,610,04,79,de,Germany,49,Vodafone D2 +262,610,02,47,de,Germany,49,Vodafone D2 +262,610,09,159,de,Germany,49,Vodafone D2 +620,1568,04,79,gh,Ghana,233,Expresso Ghana Ltd +620,1568,07,127,gh,Ghana,233,GloMobile +620,1568,03,63,gh,Ghana,233,Milicom/Tigo +620,1568,01,31,gh,Ghana,233,MTN +620,1568,02,47,gh,Ghana,233,Vodafone +620,1568,06,111,gh,Ghana,233,Airtel/ZAIN +266,614,06,111,gi,Gibraltar,350,CTS Mobile +266,614,09,159,gi,Gibraltar,350,eazi telecom +266,614,01,31,gi,Gibraltar,350,Gibtel GSM +202,514,07,127,gr,Greece,30,AMD Telecom SA +202,514,02,47,gr,Greece,30,Cosmote +202,514,01,31,gr,Greece,30,Cosmote +202,514,14,335,gr,Greece,30,CyTa Mobile +202,514,04,79,gr,Greece,30,Organismos Sidirodromon Ellados (OSE) +202,514,03,63,gr,Greece,30,OTE Hellenic Telecommunications Organization SA +202,514,10,271,gr,Greece,30,Tim/Wind +202,514,09,159,gr,Greece,30,Tim/Wind +202,514,05,95,gr,Greece,30,Vodafone +290,656,01,31,gl,Greenland,299,Tele Greenland +352,850,110,272,gd,Grenada,1473,Cable & Wireless +352,850,030,48,gd,Grenada,1473,Digicel +352,850,050,80,gd,Grenada,1473,Digicel +340,832,08,143,gp,Guadeloupe,590,Dauphin Telecom SU (Guadeloupe Telecom) +340,832,10,271,gp,Guadeloupe,590, +310,784,370,880,gu,Guam,1671,Docomo +310,784,470,1136,gu,Guam,1671,Docomo +310,784,140,320,gu,Guam,1671,GTA Wireless +310,784,033,51,gu,Guam,1671,Guam Teleph. Auth. +310,784,032,50,gu,Guam,1671,IT&E OverSeas +311,785,250,592,gu,Guam,1671,Wave Runner LLC +704,1796,01,31,gt,Guatemala,502,Claro +704,1796,03,63,gt,Guatemala,502,Telefonica +704,1796,02,47,gt,Guatemala,502,TIGO/COMCEL +611,1553,04,79,gn,Guinea,224,MTN/Areeba +611,1553,05,95,gn,Guinea,224,Celcom +611,1553,03,63,gn,Guinea,224,Intercel +611,1553,01,31,gn,Guinea,224,Orange/Sonatel/Spacetel +611,1553,02,47,gn,Guinea,224,SotelGui +632,1586,01,31,gw,Guinea-Bissau,245,GuineTel +632,1586,03,63,gw,Guinea-Bissau,245,Orange +632,1586,02,47,gw,Guinea-Bissau,245,SpaceTel +738,1848,02,47,gy,Guyana,592,Cellink Plus +738,1848,01,31,gy,Guyana,592,DigiCel +372,882,01,31,ht,Haiti,509,Comcel +372,882,02,47,ht,Haiti,509,Digicel +372,882,03,63,ht,Haiti,509,National Telecom SA (NatCom) +708,1800,040,64,hn,Honduras,504,Digicel +708,1800,030,48,hn,Honduras,504,HonduTel +708,1800,001,1,hn,Honduras,504,SERCOM/CLARO +708,1800,002,2,hn,Honduras,504,Telefonica/CELTEL +454,1108,28,655,hk,Hongkong China,852,China Mobile/Peoples +454,1108,13,319,hk,Hongkong China,852,China Mobile/Peoples +454,1108,12,303,hk,Hongkong China,852,China Mobile/Peoples +454,1108,09,159,hk,Hongkong China,852,China Motion +454,1108,07,127,hk,Hongkong China,852,China Unicom Ltd +454,1108,11,287,hk,Hongkong China,852,China-HongKong Telecom Ltd (CHKTL) +454,1108,01,31,hk,Hongkong China,852,Citic Telecom Ltd. +454,1108,02,47,hk,Hongkong China,852,CSL Ltd. +454,1108,00,15,hk,Hongkong China,852,CSL Ltd. +454,1108,18,399,hk,Hongkong China,852,CSL Ltd. +454,1108,10,271,hk,Hongkong China,852,CSL/New World PCS Ltd. +454,1108,04,79,hk,Hongkong China,852,H3G/Hutchinson +454,1108,03,63,hk,Hongkong China,852,H3G/Hutchinson +454,1108,14,335,hk,Hongkong China,852,H3G/Hutchinson +454,1108,05,95,hk,Hongkong China,852,H3G/Hutchinson +454,1108,20,527,hk,Hongkong China,852,HKT/PCCW +454,1108,29,671,hk,Hongkong China,852,HKT/PCCW +454,1108,16,367,hk,Hongkong China,852,HKT/PCCW +454,1108,19,415,hk,Hongkong China,852,HKT/PCCW +454,1108,47,1151,hk,Hongkong China,852,shared by private TETRA systems +454,1108,40,1039,hk,Hongkong China,852,shared by private TETRA systems +454,1108,08,143,hk,Hongkong China,852,Truephone +454,1108,17,383,hk,Hongkong China,852,Vodafone/SmarTone +454,1108,15,351,hk,Hongkong China,852,Vodafone/SmarTone +454,1108,06,111,hk,Hongkong China,852,Vodafone/SmarTone +216,534,01,31,hu,Hungary,36,Pannon/Telenor +216,534,30,783,hu,Hungary,36,T-mobile/Magyar +216,534,71,1823,hu,Hungary,36,UPC Magyarorszag Kft. +216,534,70,1807,hu,Hungary,36,Vodafone +274,628,09,159,is,Iceland,354,Amitelo +274,628,07,127,is,Iceland,354,IceCell +274,628,08,143,is,Iceland,354,Siminn +274,628,01,31,is,Iceland,354,Siminn +274,628,11,287,is,Iceland,354,NOVA +274,628,04,79,is,Iceland,354,VIKING/IMC +274,628,02,47,is,Iceland,354,Vodafone/Tal hf +274,628,05,95,is,Iceland,354,Vodafone/Tal hf +274,628,03,63,is,Iceland,354,Vodafone/Tal hf +404,1028,42,1071,in,India,91,Aircel +404,1028,33,831,in,India,91,Aircel +404,1028,29,671,in,India,91,Aircel +404,1028,28,655,in,India,91,Aircel +404,1028,25,607,in,India,91,Aircel +404,1028,17,383,in,India,91,Aircel +404,1028,01,31,in,India,91,Aircel Digilink India +404,1028,15,351,in,India,91,Aircel Digilink India +404,1028,60,1551,in,India,91,Aircel Digilink India +405,1029,53,1343,in,India,91,AirTel +404,1028,86,2159,in,India,91,Barakhamba Sales & Serv. +404,1028,13,319,in,India,91,Barakhamba Sales & Serv. +404,1028,74,1871,in,India,91,BSNL +404,1028,38,911,in,India,91,BSNL +404,1028,57,1407,in,India,91,BSNL +404,1028,80,2063,in,India,91,BSNL +404,1028,73,1855,in,India,91,BSNL +404,1028,34,847,in,India,91,BSNL +404,1028,66,1647,in,India,91,BSNL +404,1028,55,1375,in,India,91,BSNL +404,1028,72,1839,in,India,91,BSNL +404,1028,77,1919,in,India,91,BSNL +404,1028,64,1615,in,India,91,BSNL +404,1028,54,1359,in,India,91,BSNL +404,1028,71,1823,in,India,91,BSNL +404,1028,76,1903,in,India,91,BSNL +404,1028,62,1583,in,India,91,BSNL +404,1028,53,1343,in,India,91,BSNL +404,1028,59,1439,in,India,91,BSNL +404,1028,75,1887,in,India,91,BSNL +404,1028,51,1311,in,India,91,BSNL +404,1028,58,1423,in,India,91,BSNL +404,1028,81,2079,in,India,91,BSNL +404,1028,10,271,in,India,91,Bharti Airtel Limited (Delhi) +404,1028,045,69,in,India,91,Bharti Airtel Limited (Karnataka) (India) +404,1028,79,1951,in,India,91,CellOne A&N +404,1028,89,2207,in,India,91,Escorts Telecom Ltd. +404,1028,88,2191,in,India,91,Escorts Telecom Ltd. +404,1028,87,2175,in,India,91,Escorts Telecom Ltd. +404,1028,82,2095,in,India,91,Escorts Telecom Ltd. +404,1028,12,303,in,India,91,Escotel Mobile Communications +404,1028,19,415,in,India,91,Escotel Mobile Communications +404,1028,56,1391,in,India,91,Escotel Mobile Communications +405,1029,05,95,in,India,91,Fascel Limited +404,1028,05,95,in,India,91,Fascel +404,1028,70,1807,in,India,91,Hexacom India +404,1028,16,367,in,India,91,Hexcom India +404,1028,04,79,in,India,91,Idea Cellular Ltd. +404,1028,24,591,in,India,91,Idea Cellular Ltd. +404,1028,22,559,in,India,91,Idea Cellular Ltd. +404,1028,78,1935,in,India,91,Idea Cellular Ltd. +404,1028,07,127,in,India,91,Idea Cellular Ltd. +404,1028,69,1695,in,India,91,Mahanagar Telephone Nigam +404,1028,68,1679,in,India,91,Mahanagar Telephone Nigam +404,1028,83,2111,in,India,91,Reliable Internet Services +404,1028,36,879,in,India,91,Reliance Telecom Private +404,1028,52,1327,in,India,91,Reliance Telecom Private +404,1028,50,1295,in,India,91,Reliance Telecom Private +404,1028,67,1663,in,India,91,Reliance Telecom Private +404,1028,18,399,in,India,91,Reliance Telecom Private +404,1028,85,2143,in,India,91,Reliance Telecom Private +404,1028,09,159,in,India,91,Reliance Telecom Private +404,1028,41,1055,in,India,91,RPG Cellular +404,1028,14,335,in,India,91,Spice +404,1028,44,1103,in,India,91,Spice +404,1028,11,287,in,India,91,Sterling Cellular Ltd. +405,1029,034,52,in,India,91,TATA / Karnataka +404,1028,30,783,in,India,91,Usha Martin Telecom +510,1296,08,143,id,Indonesia,62,Axis/Natrindo +510,1296,99,2463,id,Indonesia,62,Esia (PT Bakrie Telecom) (CDMA) +510,1296,07,127,id,Indonesia,62,Flexi (PT Telkom) (CDMA) +510,1296,89,2207,id,Indonesia,62,H3G CP +510,1296,21,543,id,Indonesia,62,Indosat/Satelindo/M3 +510,1296,01,31,id,Indonesia,62,Indosat/Satelindo/M3 +510,1296,00,15,id,Indonesia,62,PT Pasifik Satelit Nusantara (PSN) +510,1296,27,639,id,Indonesia,62,PT Sampoerna Telekomunikasi Indonesia (STI) +510,1296,28,655,id,Indonesia,62,PT Smartfren Telecom Tbk +510,1296,09,159,id,Indonesia,62,PT Smartfren Telecom Tbk +510,1296,11,287,id,Indonesia,62,PT. Excelcom +510,1296,10,271,id,Indonesia,62,Telkomsel +901,2305,13,319,n/a,International Networks,882,Antarctica +432,1074,19,415,ir,Iran,98,Mobile Telecommunications Company of Esfahan JV-PJS (MTCE) +432,1074,70,1807,ir,Iran,98,MTCE +432,1074,35,863,ir,Iran,98,MTN/IranCell +432,1074,20,527,ir,Iran,98,Rightel +432,1074,32,815,ir,Iran,98,Taliya +432,1074,11,287,ir,Iran,98,MCI/TCI +432,1074,14,335,ir,Iran,98,TKC/KFZO +418,1048,05,95,iq,Iraq,964,Asia Cell +418,1048,92,2351,iq,Iraq,964,Itisaluna and Kalemat +418,1048,82,2095,iq,Iraq,964,Korek +418,1048,40,1039,iq,Iraq,964,Korek +418,1048,45,1119,iq,Iraq,964,Mobitel (Iraq-Kurdistan) and Moutiny +418,1048,30,783,iq,Iraq,964,Orascom Telecom +418,1048,20,527,iq,Iraq,964,ZAIN/Atheer/Orascom +418,1048,08,143,iq,Iraq,964,Sanatel +272,626,04,79,ie,Ireland,353,Access Telecom Ltd. +272,626,09,159,ie,Ireland,353,Clever Communications Ltd +272,626,07,127,ie,Ireland,353,eircom Ltd +272,626,05,95,ie,Ireland,353,Three/H3G +272,626,11,287,ie,Ireland,353,Tesco Mobile/Liffey Telecom +272,626,13,319,ie,Ireland,353,Lycamobile +272,626,03,63,ie,Ireland,353,Meteor Mobile Ltd. +272,626,02,47,ie,Ireland,353,Three/O2/Digifone +272,626,01,31,ie,Ireland,353,Vodafone Eircell +425,1061,14,335,il,Israel,972,Alon Cellular Ltd +425,1061,02,47,il,Israel,972,Cellcom ltd. +425,1061,08,143,il,Israel,972,Golan Telekom +425,1061,15,351,il,Israel,972,Home Cellular Ltd +425,1061,77,1919,il,Israel,972,Hot Mobile/Mirs +425,1061,07,127,il,Israel,972,Hot Mobile/Mirs +425,1061,01,31,il,Israel,972,Orange/Partner Co. Ltd. +425,1061,03,63,il,Israel,972,Pelephone +425,1061,12,303,il,Israel,972,Pelephone +425,1061,16,367,il,Israel,972,Rami Levy Hashikma Marketing Communications Ltd +425,1061,19,415,il,Israel,972,Telzar/AZI +222,546,34,847,it,Italy,39,BT Italia SpA +222,546,02,47,it,Italy,39,Elsacom +222,546,08,143,it,Italy,39,Fastweb SpA +222,546,00,15,it,Italy,39,Fix Line +222,546,99,2463,it,Italy,39,Hi3G +222,546,77,1919,it,Italy,39,IPSE 2000 +222,546,35,863,it,Italy,39,Lycamobile Srl +222,546,07,127,it,Italy,39,Noverca Italia Srl +222,546,33,831,it,Italy,39,PosteMobile SpA +222,546,00,15,it,Italy,39,Premium Number(s) +222,546,30,783,it,Italy,39,RFI Rete Ferroviaria Italiana SpA +222,546,48,1167,it,Italy,39,Telecom Italia Mobile SpA +222,546,43,1087,it,Italy,39,Telecom Italia Mobile SpA +222,546,01,31,it,Italy,39,TIM +222,546,10,271,it,Italy,39,Vodafone +222,546,06,111,it,Italy,39,Vodafone +222,546,00,15,it,Italy,39,VOIP Line +222,546,44,1103,it,Italy,39,WIND (Blu) - +222,546,88,2191,it,Italy,39,WIND (Blu) - +612,1554,07,127,ci,Ivory Coast,225,Aircomm SA +612,1554,02,47,ci,Ivory Coast,225,Atlantik Tel./Moov +612,1554,04,79,ci,Ivory Coast,225,Comium +612,1554,01,31,ci,Ivory Coast,225,Comstar +612,1554,05,95,ci,Ivory Coast,225,MTN +612,1554,03,63,ci,Ivory Coast,225,Orange +612,1554,06,111,ci,Ivory Coast,225,OriCell +338,824,110,272,jm,Jamaica,1876,Cable & Wireless +338,824,020,32,jm,Jamaica,1876,Cable & Wireless +338,824,180,384,jm,Jamaica,1876,Cable & Wireless +338,824,050,80,jm,Jamaica,1876,DIGICEL/Mossel +440,1088,00,15,jp,Japan,81,Y-Mobile +440,1088,75,1887,jp,Japan,81,KDDI Corporation +440,1088,56,1391,jp,Japan,81,KDDI Corporation +441,1089,70,1807,jp,Japan,81,KDDI Corporation +440,1088,52,1327,jp,Japan,81,KDDI Corporation +440,1088,76,1903,jp,Japan,81,KDDI Corporation +440,1088,71,1823,jp,Japan,81,KDDI Corporation +440,1088,53,1343,jp,Japan,81,KDDI Corporation +440,1088,77,1919,jp,Japan,81,KDDI Corporation +440,1088,08,143,jp,Japan,81,KDDI Corporation +440,1088,72,1839,jp,Japan,81,KDDI Corporation +440,1088,54,1359,jp,Japan,81,KDDI Corporation +440,1088,79,1951,jp,Japan,81,KDDI Corporation +440,1088,07,127,jp,Japan,81,KDDI Corporation +440,1088,73,1855,jp,Japan,81,KDDI Corporation +440,1088,55,1375,jp,Japan,81,KDDI Corporation +440,1088,88,2191,jp,Japan,81,KDDI Corporation +440,1088,50,1295,jp,Japan,81,KDDI Corporation +440,1088,74,1871,jp,Japan,81,KDDI Corporation +440,1088,70,1807,jp,Japan,81,KDDI Corporation +440,1088,89,2207,jp,Japan,81,KDDI Corporation +440,1088,51,1311,jp,Japan,81,KDDI Corporation +440,1088,67,1663,jp,Japan,81,NTT Docomo +440,1088,01,31,jp,Japan,81,NTT Docomo +440,1088,14,335,jp,Japan,81,NTT Docomo +441,1089,94,2383,jp,Japan,81,NTT Docomo +441,1089,41,1055,jp,Japan,81,NTT Docomo +440,1088,62,1583,jp,Japan,81,NTT Docomo +440,1088,39,927,jp,Japan,81,NTT Docomo +440,1088,30,783,jp,Japan,81,NTT Docomo +440,1088,10,271,jp,Japan,81,NTT Docomo +441,1089,45,1119,jp,Japan,81,NTT Docomo +440,1088,24,591,jp,Japan,81,NTT Docomo +440,1088,68,1679,jp,Japan,81,NTT Docomo +440,1088,15,351,jp,Japan,81,NTT Docomo +441,1089,98,2447,jp,Japan,81,NTT Docomo +441,1089,42,1071,jp,Japan,81,NTT Docomo +440,1088,63,1599,jp,Japan,81,NTT Docomo +440,1088,38,911,jp,Japan,81,NTT Docomo +440,1088,26,623,jp,Japan,81,NTT Docomo +440,1088,11,287,jp,Japan,81,NTT Docomo +440,1088,21,543,jp,Japan,81,NTT Docomo +441,1089,44,1103,jp,Japan,81,NTT Docomo +440,1088,13,319,jp,Japan,81,NTT Docomo +440,1088,23,575,jp,Japan,81,NTT Docomo +440,1088,69,1695,jp,Japan,81,NTT Docomo +440,1088,16,367,jp,Japan,81,NTT Docomo +441,1089,99,2463,jp,Japan,81,NTT Docomo +440,1088,34,847,jp,Japan,81,NTT Docomo +440,1088,64,1615,jp,Japan,81,NTT Docomo +440,1088,37,895,jp,Japan,81,NTT Docomo +440,1088,25,607,jp,Japan,81,NTT Docomo +440,1088,22,559,jp,Japan,81,NTT Docomo +441,1089,43,1087,jp,Japan,81,NTT Docomo +440,1088,27,639,jp,Japan,81,NTT Docomo +440,1088,02,47,jp,Japan,81,NTT Docomo +440,1088,17,383,jp,Japan,81,NTT Docomo +440,1088,31,799,jp,Japan,81,NTT Docomo +440,1088,87,2175,jp,Japan,81,NTT Docomo +440,1088,65,1631,jp,Japan,81,NTT Docomo +440,1088,36,879,jp,Japan,81,NTT Docomo +441,1089,92,2351,jp,Japan,81,NTT Docomo +440,1088,12,303,jp,Japan,81,NTT Docomo +440,1088,58,1423,jp,Japan,81,NTT Docomo +440,1088,28,655,jp,Japan,81,NTT Docomo +440,1088,03,63,jp,Japan,81,NTT Docomo +440,1088,18,399,jp,Japan,81,NTT Docomo +441,1089,91,2335,jp,Japan,81,NTT Docomo +440,1088,32,815,jp,Japan,81,NTT Docomo +440,1088,61,1567,jp,Japan,81,NTT Docomo +440,1088,66,1647,jp,Japan,81,NTT Docomo +440,1088,35,863,jp,Japan,81,NTT Docomo +441,1089,93,2367,jp,Japan,81,NTT Docomo +441,1089,40,1039,jp,Japan,81,NTT Docomo +440,1088,49,1183,jp,Japan,81,NTT Docomo +440,1088,29,671,jp,Japan,81,NTT Docomo +440,1088,09,159,jp,Japan,81,NTT Docomo +440,1088,19,415,jp,Japan,81,NTT Docomo +441,1089,90,2319,jp,Japan,81,NTT Docomo +440,1088,33,831,jp,Japan,81,NTT Docomo +440,1088,60,1551,jp,Japan,81,NTT Docomo +440,1088,99,2463,jp,Japan,81,NTT Docomo +440,1088,78,1935,jp,Japan,81,Okinawa Cellular Telephone +440,1088,04,79,jp,Japan,81,SoftBank Mobile Corp +441,1089,62,1583,jp,Japan,81,SoftBank Mobile Corp +440,1088,45,1119,jp,Japan,81,SoftBank Mobile Corp +440,1088,20,527,jp,Japan,81,SoftBank Mobile Corp +440,1088,96,2415,jp,Japan,81,SoftBank Mobile Corp +440,1088,40,1039,jp,Japan,81,SoftBank Mobile Corp +441,1089,63,1599,jp,Japan,81,SoftBank Mobile Corp +440,1088,47,1151,jp,Japan,81,SoftBank Mobile Corp +440,1088,95,2399,jp,Japan,81,SoftBank Mobile Corp +440,1088,41,1055,jp,Japan,81,SoftBank Mobile Corp +441,1089,64,1615,jp,Japan,81,SoftBank Mobile Corp +440,1088,46,1135,jp,Japan,81,SoftBank Mobile Corp +440,1088,97,2431,jp,Japan,81,SoftBank Mobile Corp +440,1088,42,1071,jp,Japan,81,SoftBank Mobile Corp +441,1089,65,1631,jp,Japan,81,SoftBank Mobile Corp +440,1088,90,2319,jp,Japan,81,SoftBank Mobile Corp +440,1088,92,2351,jp,Japan,81,SoftBank Mobile Corp +440,1088,98,2447,jp,Japan,81,SoftBank Mobile Corp +440,1088,43,1087,jp,Japan,81,SoftBank Mobile Corp +440,1088,93,2367,jp,Japan,81,SoftBank Mobile Corp +440,1088,48,1167,jp,Japan,81,SoftBank Mobile Corp +440,1088,06,111,jp,Japan,81,SoftBank Mobile Corp +441,1089,61,1567,jp,Japan,81,SoftBank Mobile Corp +440,1088,44,1103,jp,Japan,81,SoftBank Mobile Corp +440,1088,94,2383,jp,Japan,81,SoftBank Mobile Corp +440,1088,85,2143,jp,Japan,81,KDDI Corporation +440,1088,83,2111,jp,Japan,81,KDDI Corporation +440,1088,80,2063,jp,Japan,81,KDDI Corporation +440,1088,86,2159,jp,Japan,81,KDDI Corporation +440,1088,81,2079,jp,Japan,81,KDDI Corporation +440,1088,84,2127,jp,Japan,81,KDDI Corporation +440,1088,82,2095,jp,Japan,81,KDDI Corporation +416,1046,77,1919,jo,Jordan,962,Orange/Petra +416,1046,03,63,jo,Jordan,962,Umniah Mobile Co. +416,1046,02,47,jo,Jordan,962,Xpress +416,1046,01,31,jo,Jordan,962,ZAIN /J.M.T.S +401,1025,01,31,kz,Kazakhstan,7,Beeline/KaR-Tel LLP +401,1025,07,127,kz,Kazakhstan,7,Dalacom/Altel +401,1025,02,47,kz,Kazakhstan,7,K-Cell +401,1025,77,1919,kz,Kazakhstan,7,Tele2/NEO/MTS +639,1593,05,95,ke,Kenya,254,Econet Wireless +639,1593,07,127,ke,Kenya,254,Orange +639,1593,02,47,ke,Kenya,254,Safaricom Ltd. +639,1593,03,63,ke,Kenya,254,Airtel/Zain/Celtel Ltd. +545,1349,09,159,ki,Kiribati,686,Kiribati Frigate +467,1127,193,403,kp,Korea N. Dem. People's Rep.,850,Sun Net +450,1104,02,47,kr,Korea S Republic of,82,KT Freetel Co. Ltd. +450,1104,04,79,kr,Korea S Republic of,82,KT Freetel Co. Ltd. +450,1104,08,143,kr,Korea S Republic of,82,KT Freetel Co. Ltd. +450,1104,06,111,kr,Korea S Republic of,82,LG Telecom +450,1104,03,63,kr,Korea S Republic of,82,SK Telecom +450,1104,05,95,kr,Korea S Republic of,82,SK Telecom Co. Ltd +419,1049,04,79,kw,Kuwait,965,Viva +419,1049,03,63,kw,Kuwait,965,Wataniya +419,1049,02,47,kw,Kuwait,965,Zain +437,1079,03,63,kg,Kyrgyzstan,996,AkTel LLC +437,1079,01,31,kg,Kyrgyzstan,996,Beeline/Bitel +437,1079,05,95,kg,Kyrgyzstan,996,MEGACOM +437,1079,09,159,kg,Kyrgyzstan,996,O!/NUR Telecom +457,1111,02,47,la,Laos P.D.R.,856,ETL Mobile +457,1111,01,31,la,Laos P.D.R.,856,Lao Tel +457,1111,08,143,la,Laos P.D.R.,856,Beeline/Tigo/Millicom +457,1111,03,63,la,Laos P.D.R.,856,UNITEL/LAT +247,583,05,95,lv,Latvia,371,Bite +247,583,01,31,lv,Latvia,371,Latvian Mobile Phone +247,583,09,159,lv,Latvia,371,SIA Camel Mobile +247,583,08,143,lv,Latvia,371,SIA IZZI +247,583,07,127,lv,Latvia,371,SIA Master Telecom +247,583,06,111,lv,Latvia,371,SIA Rigatta +247,583,02,47,lv,Latvia,371,Tele2 +247,583,03,63,lv,Latvia,371,TRIATEL/Telekom Baltija +415,1045,33,831,lb,Lebanon,961,Cellis +415,1045,32,815,lb,Lebanon,961,Cellis +415,1045,35,863,lb,Lebanon,961,Cellis +415,1045,34,847,lb,Lebanon,961,FTML Cellis +415,1045,39,927,lb,Lebanon,961,MIC2/LibanCell/MTC +415,1045,38,911,lb,Lebanon,961,MIC2/LibanCell/MTC +415,1045,37,895,lb,Lebanon,961,MIC2/LibanCell/MTC +415,1045,01,31,lb,Lebanon,961,MIC1 (Alfa) +415,1045,03,63,lb,Lebanon,961,MIC2/LibanCell/MTC +415,1045,36,879,lb,Lebanon,961,MIC2/LibanCell/MTC +651,1617,02,47,ls,Lesotho,266,Econet/Ezi-cel +651,1617,01,31,ls,Lesotho,266,Vodacom Lesotho +618,1560,07,127,lr,Liberia,231,CELLCOM +618,1560,04,79,lr,Liberia,231,Comium BVI +618,1560,02,47,lr,Liberia,231,Libercell +618,1560,20,527,lr,Liberia,231,LibTelco +618,1560,01,31,lr,Liberia,231,Lonestar +606,1542,02,47,ly,Libya,218,Al-Madar +606,1542,01,31,ly,Libya,218,Al-Madar +606,1542,06,111,ly,Libya,218,Hatef +606,1542,00,15,ly,Libya,218,Libyana +606,1542,03,63,ly,Libya,218,Libyana +295,661,06,111,li,Liechtenstein,423,CUBIC (Liechtenstein +295,661,07,127,li,Liechtenstein,423,First Mobile AG +295,661,02,47,li,Liechtenstein,423,Orange +295,661,01,31,li,Liechtenstein,423,Swisscom FL AG +295,661,77,1919,li,Liechtenstein,423,Alpmobile/Tele2 +295,661,05,95,li,Liechtenstein,423,Telecom FL1 AG +246,582,02,47,lt,Lithuania,370,Bite +246,582,01,31,lt,Lithuania,370,Omnitel +246,582,03,63,lt,Lithuania,370,Tele2 +270,624,77,1919,lu,Luxembourg,352,Millicom Tango GSM +270,624,01,31,lu,Luxembourg,352,P+T/Post LUXGSM +270,624,99,2463,lu,Luxembourg,352,Orange/VOXmobile S.A. +455,1109,01,31,mo,Macao China,853,C.T.M. TELEMOVEL+ +455,1109,04,79,mo,Macao China,853,C.T.M. TELEMOVEL+ +455,1109,02,47,mo,Macao China,853,China Telecom +455,1109,05,95,mo,Macao China,853,Hutchison Telephone Co. Ltd +455,1109,03,63,mo,Macao China,853,Hutchison Telephone Co. Ltd +455,1109,06,111,mo,Macao China,853,Smartone Mobile +455,1109,00,15,mo,Macao China,853,Smartone Mobile +294,660,75,1887,mk,Macedonia,389,ONE/Cosmofone +294,660,02,47,mk,Macedonia,389,ONE/Cosmofone +294,660,01,31,mk,Macedonia,389,T-Mobile/Mobimak +294,660,03,63,mk,Macedonia,389,VIP Mobile +646,1606,01,31,mg,Madagascar,261,Airtel/MADACOM +646,1606,02,47,mg,Madagascar,261,Orange/Soci +646,1606,03,63,mg,Madagascar,261,Sacel +646,1606,04,79,mg,Madagascar,261,Telma +650,1616,01,31,mw,Malawi,265,TNM/Telekom Network Ltd. +650,1616,10,271,mw,Malawi,265,Airtel/Zain/Celtel ltd. +502,1282,01,31,my,Malaysia,60,Art900 +502,1282,151,337,my,Malaysia,60,Baraka Telecom Sdn Bhd +502,1282,19,415,my,Malaysia,60,CelCom +502,1282,13,319,my,Malaysia,60,CelCom +502,1282,198,408,my,Malaysia,60,CelCom +502,1282,16,367,my,Malaysia,60,Digi Telecommunications +502,1282,10,271,my,Malaysia,60,Digi Telecommunications +502,1282,20,527,my,Malaysia,60,Electcoms Wireless Sdn Bhd +502,1282,17,383,my,Malaysia,60,Maxis +502,1282,12,303,my,Malaysia,60,Maxis +502,1282,11,287,my,Malaysia,60,MTX Utara +502,1282,153,339,my,Malaysia,60,Webe/Packet One Networks (Malaysia) Sdn Bhd +502,1282,155,341,my,Malaysia,60,Samata Communications Sdn Bhd +502,1282,154,340,my,Malaysia,60,Tron/Talk Focus Sdn Bhd +502,1282,18,399,my,Malaysia,60,U Mobile +502,1282,195,405,my,Malaysia,60,XOX Com Sdn Bhd +502,1282,152,338,my,Malaysia,60,YES +472,1138,01,31,mv,Maldives,960,Dhiraagu/C&W +472,1138,02,47,mv,Maldives,960,Ooredo/Wataniya +610,1552,01,31,ml,Mali,223,Malitel +610,1552,02,47,ml,Mali,223,Orange/IKATEL +278,632,21,543,mt,Malta,356,GO Mobile +278,632,77,1919,mt,Malta,356,Melita +278,632,01,31,mt,Malta,356,Vodafone +340,832,12,303,mq,Martinique (French Department of),596,UTS Caraibe +609,1545,02,47,mr,Mauritania,222,Chinguitel SA +609,1545,01,31,mr,Mauritania,222,Mattel +609,1545,10,271,mr,Mauritania,222,Mauritel +617,1559,10,271,mu,Mauritius,230,Emtel Ltd +617,1559,03,63,mu,Mauritius,230,Mahanagar Telephone +617,1559,02,47,mu,Mauritius,230,Mahanagar Telephone +617,1559,01,31,mu,Mauritius,230,Orange/Cellplus +334,820,50,1295,mx,Mexico,52,AT&T/IUSACell +334,820,050,80,mx,Mexico,52,AT&T/IUSACell +334,820,040,64,mx,Mexico,52,AT&T/IUSACell +334,820,04,79,mx,Mexico,52,AT&T/IUSACell +334,820,030,48,mx,Mexico,52,Movistar/Pegaso +334,820,03,63,mx,Mexico,52,Movistar/Pegaso +334,820,01,31,mx,Mexico,52,NEXTEL +334,820,09,159,mx,Mexico,52,NEXTEL +334,820,090,144,mx,Mexico,52,NEXTEL +334,820,010,16,mx,Mexico,52,NEXTEL +334,820,080,128,mx,Mexico,52,Operadora Unefon SA de CV +334,820,070,112,mx,Mexico,52,Operadora Unefon SA de CV +334,820,060,96,mx,Mexico,52,SAI PCS +334,820,020,32,mx,Mexico,52,TelCel/America Movil +334,820,02,47,mx,Mexico,52,TelCel/America Movil +550,1360,01,31,fm,Micronesia,691,FSM Telecom +259,601,04,79,md,Moldova,373,Eventis Mobile +259,601,05,95,md,Moldova,373,IDC/Unite +259,601,99,2463,md,Moldova,373,IDC/Unite +259,601,03,63,md,Moldova,373,IDC/Unite +259,601,02,47,md,Moldova,373,Moldcell +259,601,01,31,md,Moldova,373,Orange/Voxtel +212,530,10,271,mc,Monaco,377,Monaco Telecom +212,530,01,31,mc,Monaco,377,Monaco Telecom +428,1064,98,2447,mn,Mongolia,976,G-Mobile Corporation Ltd +428,1064,99,2463,mn,Mongolia,976,Mobicom +428,1064,91,2335,mn,Mongolia,976,Skytel Co. Ltd +428,1064,00,15,mn,Mongolia,976,Skytel Co. Ltd +428,1064,88,2191,mn,Mongolia,976,Unitel +297,663,02,47,me,Montenegro,382,Monet/T-mobile +297,663,03,63,me,Montenegro,382,Mtel +297,663,01,31,me,Montenegro,382,Telenor/Promonte GSM +354,852,860,2144,ms,Montserrat,1664,Cable & Wireless +604,1540,01,31,ma,Morocco,212,IAM/Itissallat +604,1540,02,47,ma,Morocco,212,INWI/WANA +604,1540,00,15,ma,Morocco,212,Medi Telecom +643,1603,01,31,mz,Mozambique,258,mCel +643,1603,03,63,mz,Mozambique,258,Movitel +643,1603,04,79,mz,Mozambique,258,Vodacom +414,1044,01,31,mm,Myanmar (Burma),95,Myanmar Post & Teleco. +414,1044,05,95,mm,Myanmar (Burma),95,Oreedoo +414,1044,06,111,mm,Myanmar (Burma),95,Telenor +649,1609,03,63,na,Namibia,264,Leo / Orascom +649,1609,01,31,na,Namibia,264,MTC +649,1609,02,47,na,Namibia,264,Switch/Nam. Telec. +429,1065,02,47,np,Nepal,977,Ncell +429,1065,01,31,np,Nepal,977,NT Mobile / Namaste +429,1065,04,79,np,Nepal,977,Smart Cell +204,516,14,335,nl,Netherlands,31,6GMOBILE BV +204,516,23,575,nl,Netherlands,31,Aspider Solutions +204,516,05,95,nl,Netherlands,31,Elephant Talk Communications Premium Rate Services Netherlands BV +204,516,17,383,nl,Netherlands,31,Intercity Mobile Communications BV +204,516,08,143,nl,Netherlands,31,KPN Telecom B.V. +204,516,69,1695,nl,Netherlands,31,KPN Telecom B.V. +204,516,10,271,nl,Netherlands,31,KPN Telecom B.V. +204,516,12,303,nl,Netherlands,31,KPN/Telfort +204,516,28,655,nl,Netherlands,31,Lancelot BV +204,516,09,159,nl,Netherlands,31,Lycamobile Ltd +204,516,06,111,nl,Netherlands,31,Mundio/Vectone Mobile +204,516,21,543,nl,Netherlands,31,NS Railinfrabeheer B.V. +204,516,24,591,nl,Netherlands,31,Private Mobility Nederland BV +204,516,98,2447,nl,Netherlands,31,T-Mobile B.V. +204,516,16,367,nl,Netherlands,31,T-Mobile B.V. +204,516,20,527,nl,Netherlands,31,T-mobile/former Orange +204,516,02,47,nl,Netherlands,31,Tele2 +204,516,07,127,nl,Netherlands,31,Teleena Holding BV +204,516,68,1679,nl,Netherlands,31,Unify Mobile +204,516,18,399,nl,Netherlands,31,UPC Nederland BV +204,516,04,79,nl,Netherlands,31,Vodafone Libertel +204,516,03,63,nl,Netherlands,31,Voiceworks Mobile BV +204,516,15,351,nl,Netherlands,31,Ziggo BV +362,866,630,1584,an,Netherlands Antilles,599,Cingular Wireless +362,866,51,1311,an,Netherlands Antilles,599,TELCELL GSM +362,866,91,2335,an,Netherlands Antilles,599,SETEL GSM +362,866,951,2385,an,Netherlands Antilles,599,UTS Wireless +546,1350,01,31,nc,New Caledonia,687,OPT Mobilis +530,1328,28,655,nz,New Zealand,64,2degrees +530,1328,05,95,nz,New Zealand,64,Spark/NZ Telecom +530,1328,02,47,nz,New Zealand,64,Spark/NZ Telecom +530,1328,04,79,nz,New Zealand,64,Telstra +530,1328,24,591,nz,New Zealand,64,Two Degrees Mobile Ltd +530,1328,01,31,nz,New Zealand,64,Vodafone +530,1328,03,63,nz,New Zealand,64,Walker Wireless Ltd. +710,1808,21,543,ni,Nicaragua,505,Empresa Nicaraguense de Telecomunicaciones SA (ENITEL) +710,1808,30,783,ni,Nicaragua,505,Movistar +710,1808,73,1855,ni,Nicaragua,505,Claro +614,1556,03,63,ne,Niger,227,MOOV/TeleCel +614,1556,04,79,ne,Niger,227,Orange/Sahelc. +614,1556,01,31,ne,Niger,227,Orange/Sahelc. +614,1556,02,47,ne,Niger,227,Airtel/Zain/CelTel +621,1569,20,527,ng,Nigeria,234,Airtel/ZAIN/Econet +621,1569,60,1551,ng,Nigeria,234,ETISALAT +621,1569,50,1295,ng,Nigeria,234,Glo Mobile +621,1569,40,1039,ng,Nigeria,234,M-Tel/Nigeria Telecom. Ltd. +621,1569,30,783,ng,Nigeria,234,MTN +621,1569,99,2463,ng,Nigeria,234,Starcomms +621,1569,25,607,ng,Nigeria,234,Visafone +621,1569,01,31,ng,Nigeria,234,Visafone +555,1365,01,31,nu,Niue,683,Niue Telecom +242,578,09,159,no,Norway,47,Com4 AS +242,578,14,335,no,Norway,47,ICE Nordisk Mobiltelefon AS +242,578,21,543,no,Norway,47,Jernbaneverket (GSM-R) +242,578,20,527,no,Norway,47,Jernbaneverket (GSM-R) +242,578,23,575,no,Norway,47,Lycamobile Ltd +242,578,02,47,no,Norway,47,Netcom +242,578,22,559,no,Norway,47,Network Norway AS +242,578,05,95,no,Norway,47,Network Norway AS +242,578,06,111,no,Norway,47,ICE Nordisk Mobiltelefon AS +242,578,08,143,no,Norway,47,TDC Mobil A/S +242,578,04,79,no,Norway,47,Tele2 +242,578,01,31,no,Norway,47,Telenor +242,578,12,303,no,Norway,47,Telenor +242,578,03,63,no,Norway,47,Teletopia +242,578,07,127,no,Norway,47,Ventelo AS +242,578,017,23,no,Norway,47,Ventelo AS +422,1058,03,63,om,Oman,968,Nawras +422,1058,02,47,om,Oman,968,Oman Mobile/GTO +410,1040,08,143,pk,Pakistan,92,Instaphone +410,1040,01,31,pk,Pakistan,92,Mobilink +410,1040,06,111,pk,Pakistan,92,Telenor +410,1040,03,63,pk,Pakistan,92,UFONE/PAKTel +410,1040,07,127,pk,Pakistan,92,Warid Telecom +410,1040,04,79,pk,Pakistan,92,ZONG/CMPak +552,1362,80,2063,pw,Palau (Republic of),680,Palau Mobile Corp. (PMC) (Palau +552,1362,01,31,pw,Palau (Republic of),680,Palau National Communications Corp. (PNCC) (Palau +425,1061,05,95,ps,Palestinian Territory,970,Jawwal +425,1061,06,111,ps,Palestinian Territory,970,Wataniya Mobile +714,1812,01,31,pa,Panama,507,Cable & W./Mas Movil +714,1812,03,63,pa,Panama,507,Claro +714,1812,04,79,pa,Panama,507,Digicel +714,1812,02,47,pa,Panama,507,Movistar +714,1812,020,32,pa,Panama,507,Movistar +537,1335,03,63,pg,Papua New Guinea,675,Digicel +537,1335,02,47,pg,Papua New Guinea,675,GreenCom PNG Ltd +537,1335,01,31,pg,Papua New Guinea,675,Pacific Mobile +744,1860,02,47,py,Paraguay,595,Claro/Hutchison +744,1860,03,63,py,Paraguay,595,Compa +744,1860,01,31,py,Paraguay,595,Hola/VOX +744,1860,05,95,py,Paraguay,595,TIM/Nucleo/Personal +744,1860,04,79,py,Paraguay,595,Tigo/Telecel +716,1814,20,527,pe,Peru,51,Claro /Amer.Mov./TIM +716,1814,10,271,pe,Peru,51,Claro /Amer.Mov./TIM +716,1814,02,47,pe,Peru,51,GlobalStar +716,1814,01,31,pe,Peru,51,GlobalStar +716,1814,06,111,pe,Peru,51,Movistar +716,1814,17,383,pe,Peru,51,Nextel +716,1814,07,127,pe,Peru,51,Nextel +716,1814,15,351,pe,Peru,51,Viettel Mobile +515,1301,00,15,ph,Philippines,63,Fix Line +515,1301,01,31,ph,Philippines,63,Globe Telecom +515,1301,02,47,ph,Philippines,63,Globe Telecom +515,1301,88,2191,ph,Philippines,63,Next Mobile +515,1301,18,399,ph,Philippines,63,RED Mobile/Cure +515,1301,03,63,ph,Philippines,63,Smart +515,1301,05,95,ph,Philippines,63,SUN/Digitel +260,608,17,383,pl,Poland,48,Aero2 SP. +260,608,18,399,pl,Poland,48,AMD Telecom. +260,608,38,911,pl,Poland,48,CallFreedom Sp. z o.o. +260,608,12,303,pl,Poland,48,Cyfrowy POLSAT S.A. +260,608,08,143,pl,Poland,48,e-Telko +260,608,09,159,pl,Poland,48,Lycamobile +260,608,16,367,pl,Poland,48,Mobyland +260,608,36,879,pl,Poland,48,Mundio Mobile Sp. z o.o. +260,608,07,127,pl,Poland,48,Play/P4 +260,608,11,287,pl,Poland,48,NORDISK Polska +260,608,05,95,pl,Poland,48,Orange/IDEA/Centertel +260,608,03,63,pl,Poland,48,Orange/IDEA/Centertel +260,608,35,863,pl,Poland,48,PKP Polskie Linie Kolejowe S.A. +260,608,98,2447,pl,Poland,48,Play/P4 +260,608,06,111,pl,Poland,48,Play/P4 +260,608,01,31,pl,Poland,48,Polkomtel/Plus +260,608,14,335,pl,Poland,48,Sferia +260,608,13,319,pl,Poland,48,Sferia +260,608,10,271,pl,Poland,48,Sferia +260,608,34,847,pl,Poland,48,T-Mobile/ERA +260,608,02,47,pl,Poland,48,T-Mobile/ERA +260,608,15,351,pl,Poland,48,Tele2 +260,608,04,79,pl,Poland,48,Tele2 +268,616,04,79,pt,Portugal,351,Lycamobile +268,616,07,127,pt,Portugal,351,NOS/Optimus +268,616,03,63,pt,Portugal,351,NOS/Optimus +268,616,06,111,pt,Portugal,351,MEO/TMN +268,616,01,31,pt,Portugal,351,Vodafone +330,816,110,272,pr,Puerto Rico,,Puerto Rico Telephone Company Inc. (PRTC) +330,816,11,287,pr,Puerto Rico,,Puerto Rico Telephone Company Inc. (PRTC) +427,1063,01,31,qa,Qatar,974,Ooredoo/Qtel +427,1063,02,47,qa,Qatar,974,Vodafone +647,1607,00,15,re,Reunion,262,Orange +647,1607,02,47,re,Reunion,262,Outremer Telecom +647,1607,10,271,re,Reunion,262,SFR +226,550,03,63,ro,Romania,40,Cosmote +226,550,11,287,ro,Romania,40,Enigma Systems +226,550,16,367,ro,Romania,40,Lycamobile +226,550,10,271,ro,Romania,40,Orange +226,550,05,95,ro,Romania,40,RCS&RDS Digi Mobile +226,550,02,47,ro,Romania,40,Romtelecom SA +226,550,06,111,ro,Romania,40,Telemobil/Zapp +226,550,01,31,ro,Romania,40,Vodafone +226,550,04,79,ro,Romania,40,Telemobil/Zapp +250,592,12,303,ru,Russian Federation,79,Baykal Westcom +250,592,28,655,ru,Russian Federation,79,BeeLine/VimpelCom +250,592,10,271,ru,Russian Federation,79,DTC/Don Telecom +250,592,13,319,ru,Russian Federation,79,Kuban GSM +250,592,35,863,ru,Russian Federation,79,MOTIV/LLC Ekaterinburg-2000 +250,592,02,47,ru,Russian Federation,79,Megafon +250,592,01,31,ru,Russian Federation,79,MTS +250,592,03,63,ru,Russian Federation,79,NCC +250,592,16,367,ru,Russian Federation,79,NTC +250,592,19,415,ru,Russian Federation,79,OJSC Altaysvyaz +250,592,11,287,ru,Russian Federation,79,Orensot +250,592,92,2351,ru,Russian Federation,79,Printelefone +250,592,04,79,ru,Russian Federation,79,Sibchallenge +250,592,44,1103,ru,Russian Federation,79,StavTelesot +250,592,20,527,ru,Russian Federation,79,Tele2/ECC/Volgogr. +250,592,93,2367,ru,Russian Federation,79,Telecom XXL +250,592,39,927,ru,Russian Federation,79,UralTel +250,592,17,383,ru,Russian Federation,79,UralTel +250,592,99,2463,ru,Russian Federation,79,BeeLine/VimpelCom +250,592,05,95,ru,Russian Federation,79,Yenisey Telecom +250,592,15,351,ru,Russian Federation,79,ZAO SMARTS +250,592,07,127,ru,Russian Federation,79,ZAO SMARTS +635,1589,14,335,rw,Rwanda,250,Airtel +635,1589,10,271,rw,Rwanda,250,MTN/Rwandacell +635,1589,13,319,rw,Rwanda,250,TIGO +356,854,110,272,kn,Saint Kitts and Nevis,1869,Cable & Wireless +356,854,50,1295,kn,Saint Kitts and Nevis,1869,Digicel +356,854,70,1807,kn,Saint Kitts and Nevis,1869,UTS Cariglobe +358,856,110,272,lc,Saint Lucia,1758,Cable & Wireless +358,856,30,783,lc,Saint Lucia,1758,Cingular Wireless +358,856,50,1295,lc,Saint Lucia,1758,Digicel (St Lucia) Limited +549,1353,27,639,ws,Samoa,685,Samoatel Mobile +549,1353,01,31,ws,Samoa,685,Telecom Samoa Cellular Ltd. +292,658,01,31,sm,San Marino,378,Prima Telecom +626,1574,01,31,st,Sao Tome & Principe,239,CSTmovel +901,2305,14,335,n/a,Satellite Networks,870,AeroMobile +901,2305,11,287,n/a,Satellite Networks,870,InMarSAT +901,2305,12,303,n/a,Satellite Networks,870,Maritime Communications Partner AS +901,2305,05,95,n/a,Satellite Networks,870,Thuraya Satellite +420,1056,07,127,sa,Saudi Arabia,966,Zain +420,1056,03,63,sa,Saudi Arabia,966,Etihad/Etisalat/Mobily +420,1056,06,111,sa,Saudi Arabia,966,Lebara Mobile +420,1056,01,31,sa,Saudi Arabia,966,STC/Al Jawal +420,1056,05,95,sa,Saudi Arabia,966,Virgin Mobile +420,1056,04,79,sa,Saudi Arabia,966,Zain +608,1544,03,63,sn,Senegal,221,Expresso/Sudatel +608,1544,01,31,sn,Senegal,221,Orange/Sonatel +608,1544,02,47,sn,Senegal,221,TIGO/Sentel GSM +220,544,03,63,rs,Serbia,381,MTS/Telekom Srbija +220,544,01,31,rs,Serbia,381,Telenor/Mobtel +220,544,02,47,rs,Serbia,381,Telenor/Mobtel +220,544,05,95,rs,Serbia,381,VIP Mobile +633,1587,10,271,sc,Seychelles,248,Airtel +633,1587,01,31,sc,Seychelles,248,C&W +633,1587,02,47,sc,Seychelles,248,Smartcom +619,1561,03,63,sl,Sierra Leone,232,Africel +619,1561,01,31,sl,Sierra Leone,232,Airtel/Zain/Celtel +619,1561,04,79,sl,Sierra Leone,232,Comium +619,1561,05,95,sl,Sierra Leone,232,Africel +619,1561,02,47,sl,Sierra Leone,232,Tigo/Millicom +619,1561,25,607,sl,Sierra Leone,232,Mobitel +525,1317,12,303,sg,Singapore,65,GRID Communications Pte Ltd +525,1317,03,63,sg,Singapore,65,MobileOne Ltd +525,1317,02,47,sg,Singapore,65,Singtel +525,1317,01,31,sg,Singapore,65,Singtel +525,1317,07,127,sg,Singapore,65,Singtel +525,1317,06,111,sg,Singapore,65,Starhub +525,1317,05,95,sg,Singapore,65,Starhub +231,561,03,63,sk,Slovakia,421,4Ka +231,561,06,111,sk,Slovakia,421,O2 +231,561,01,31,sk,Slovakia,421,Orange +231,561,05,95,sk,Slovakia,421,Orange +231,561,15,351,sk,Slovakia,421,Orange +231,561,04,79,sk,Slovakia,421,T-Mobile +231,561,02,47,sk,Slovakia,421,T-Mobile +231,561,99,2463,sk,Slovakia,421,Zeleznice Slovenskej republiky (ZSR) +293,659,41,1055,si,Slovenia,386,Mobitel +293,659,40,1039,si,Slovenia,386,SI.Mobil +293,659,10,271,si,Slovenia,386,Slovenske zeleznice d.o.o. +293,659,64,1615,si,Slovenia,386,T-2 d.o.o. +293,659,70,1807,si,Slovenia,386,Telemach/TusMobil/VEGA +540,1344,02,47,sb,Solomon Islands,677,bemobile +540,1344,10,271,sb,Solomon Islands,677,BREEZE +540,1344,01,31,sb,Solomon Islands,677,BREEZE +637,1591,30,783,so,Somalia,252,Golis +637,1591,19,415,so,Somalia,252,HorTel +637,1591,60,1551,so,Somalia,252,Nationlink +637,1591,10,271,so,Somalia,252,Nationlink +637,1591,04,79,so,Somalia,252,Somafone +637,1591,71,1823,so,Somalia,252,Somtel +637,1591,82,2095,so,Somalia,252,Somtel +637,1591,01,31,so,Somalia,252,Telesom +655,1621,02,47,za,South Africa,27,8.ta +655,1621,21,543,za,South Africa,27,Cape Town Metropolitan +655,1621,07,127,za,South Africa,27,Cell C +655,1621,10,271,za,South Africa,27,MTN +655,1621,12,303,za,South Africa,27,MTN +655,1621,06,111,za,South Africa,27,Sentech +655,1621,01,31,za,South Africa,27,Vodacom +655,1621,19,415,za,South Africa,27,Wireless Business Solutions (Pty) Ltd +659,1625,03,63,ss,South Sudan (Republic of),,Gemtel Ltd (South Sudan +659,1625,02,47,ss,South Sudan (Republic of),,MTN South Sudan (South Sudan +659,1625,04,79,ss,South Sudan (Republic of),,Network of The World Ltd (NOW) (South Sudan +659,1625,06,111,ss,South Sudan (Republic of),,Zain South Sudan (South Sudan +214,532,23,575,es,Spain,34,Lycamobile SL +214,532,22,559,es,Spain,34,Digi Spain Telecom SL +214,532,15,351,es,Spain,34,BT Espana SAU +214,532,18,399,es,Spain,34,Cableuropa SAU (ONO) +214,532,08,143,es,Spain,34,Euskaltel SA +214,532,20,527,es,Spain,34,fonYou Wireless SL +214,532,32,815,es,Spain,34,ION Mobile +214,532,21,543,es,Spain,34,Jazz Telecom SAU +214,532,26,623,es,Spain,34,Lleida +214,532,25,607,es,Spain,34,Lycamobile SL +214,532,07,127,es,Spain,34,Movistar +214,532,05,95,es,Spain,34,Movistar +214,532,09,159,es,Spain,34,Orange +214,532,03,63,es,Spain,34,Orange +214,532,11,287,es,Spain,34,Orange +214,532,17,383,es,Spain,34,R Cable y Telec. Galicia SA +214,532,19,415,es,Spain,34,Simyo/KPN +214,532,16,367,es,Spain,34,Telecable de Asturias SA +214,532,27,639,es,Spain,34,Truphone +214,532,01,31,es,Spain,34,Vodafone +214,532,06,111,es,Spain,34,Vodafone Enabler Espana SL +214,532,04,79,es,Spain,34,Yoigo +413,1043,05,95,lk,Sri Lanka,94,Airtel +413,1043,03,63,lk,Sri Lanka,94,Etisalat/Tigo +413,1043,08,143,lk,Sri Lanka,94,H3G Hutchison +413,1043,01,31,lk,Sri Lanka,94,Mobitel Ltd. +413,1043,02,47,lk,Sri Lanka,94,MTN/Dialog +308,776,01,31,pm,St. Pierre & Miquelon,508,Ameris +360,864,110,272,vc,St. Vincent & Gren.,1784,C & W +360,864,100,256,vc,St. Vincent & Gren.,1784,Cingular +360,864,10,271,vc,St. Vincent & Gren.,1784,Cingular +360,864,050,80,vc,St. Vincent & Gren.,1784,Digicel +360,864,70,1807,vc,St. Vincent & Gren.,1784,Digicel +634,1588,00,15,sd,Sudan,249,Canar Telecom +634,1588,02,47,sd,Sudan,249,MTN +634,1588,22,559,sd,Sudan,249,MTN +634,1588,15,351,sd,Sudan,249,Sudani One +634,1588,07,127,sd,Sudan,249,Sudani One +634,1588,08,143,sd,Sudan,249,Vivacell +634,1588,05,95,sd,Sudan,249,Vivacell +634,1588,01,31,sd,Sudan,249,ZAIN/Mobitel +634,1588,06,111,sd,Sudan,249,ZAIN/Mobitel +746,1862,03,63,sr,Suriname,597,Digicel +746,1862,01,31,sr,Suriname,597,Telesur +746,1862,02,47,sr,Suriname,597,Telecommunicatiebedrijf Suriname (TELESUR) +746,1862,04,79,sr,Suriname,597,UNIQA +653,1619,10,271,sz,Swaziland,268,Swazi MTN +653,1619,01,31,sz,Swaziland,268,SwaziTelecom +240,576,35,863,se,Sweden,46,42 Telecom AB +240,576,16,367,se,Sweden,46,42 Telecom AB +240,576,26,623,se,Sweden,46,Beepsend +240,576,30,783,se,Sweden,46,NextGen Mobile Ltd (CardBoardFish) +240,576,28,655,se,Sweden,46,CoolTEL Aps +240,576,25,607,se,Sweden,46,Digitel Mobile Srl +240,576,22,559,se,Sweden,46,Eu Tel AB +240,576,27,639,se,Sweden,46,Fogg Mobile AB +240,576,18,399,se,Sweden,46,Generic Mobile Systems Sweden AB +240,576,17,383,se,Sweden,46,Gotalandsnatet AB +240,576,02,47,se,Sweden,46,H3G Access AB +240,576,04,79,se,Sweden,46,H3G Access AB +240,576,36,879,se,Sweden,46,ID Mobile +240,576,23,575,se,Sweden,46,Infobip Ltd. +240,576,11,287,se,Sweden,46,Lindholmen Science Park AB +240,576,12,303,se,Sweden,46,Lycamobile Ltd +240,576,29,671,se,Sweden,46,Mercury International Carrier Services +240,576,19,415,se,Sweden,46,Mundio Mobile (Sweden) Ltd +240,576,10,271,se,Sweden,46,Spring Mobil AB +240,576,05,95,se,Sweden,46,Svenska UMTS-N +240,576,14,335,se,Sweden,46,TDC Sverige AB +240,576,07,127,se,Sweden,46,Tele2 Sverige AB +240,576,06,111,se,Sweden,46,Telenor (Vodafone) +240,576,24,591,se,Sweden,46,Telenor (Vodafone) +240,576,08,143,se,Sweden,46,Telenor (Vodafone) +240,576,01,31,se,Sweden,46,Telia Mobile +240,576,13,319,se,Sweden,46,Ventelo Sverige AB +240,576,20,527,se,Sweden,46,Wireless Maingate AB +240,576,15,351,se,Sweden,46,Wireless Maingate Nordic AB +228,552,51,1311,ch,Switzerland,41,BebbiCell AG +228,552,09,159,ch,Switzerland,41,Comfone AG +228,552,05,95,ch,Switzerland,41,Comfone AG +228,552,07,127,ch,Switzerland,41,TDC Sunrise +228,552,54,1359,ch,Switzerland,41,Lycamobile AG +228,552,52,1327,ch,Switzerland,41,Mundio Mobile AG +228,552,03,63,ch,Switzerland,41,Salt/Orange +228,552,01,31,ch,Switzerland,41,Swisscom +228,552,12,303,ch,Switzerland,41,TDC Sunrise +228,552,02,47,ch,Switzerland,41,TDC Sunrise +228,552,08,143,ch,Switzerland,41,TDC Sunrise +228,552,53,1343,ch,Switzerland,41,upc cablecom GmbH +417,1047,02,47,sy,Syrian Arab Republic,963,MTN/Spacetel +417,1047,09,159,sy,Syrian Arab Republic,963,Syriatel Holdings +417,1047,01,31,sy,Syrian Arab Republic,963,Syriatel Holdings +466,1126,68,1679,tw,Taiwan,886,ACeS Taiwan - ACeS Taiwan Telecommunications Co Ltd +466,1126,05,95,tw,Taiwan,886,Asia Pacific Telecom Co. Ltd (APT) +466,1126,11,287,tw,Taiwan,886,Chunghwa Telecom LDM +466,1126,92,2351,tw,Taiwan,886,Chunghwa Telecom LDM +466,1126,01,31,tw,Taiwan,886,Far EasTone +466,1126,07,127,tw,Taiwan,886,Far EasTone +466,1126,06,111,tw,Taiwan,886,Far EasTone +466,1126,02,47,tw,Taiwan,886,Far EasTone +466,1126,03,63,tw,Taiwan,886,Far EasTone +466,1126,10,271,tw,Taiwan,886,Global Mobile Corp. +466,1126,56,1391,tw,Taiwan,886,International Telecom Co. Ltd (FITEL) +466,1126,88,2191,tw,Taiwan,886,KG Telecom +466,1126,99,2463,tw,Taiwan,886,TransAsia +466,1126,97,2431,tw,Taiwan,886,Taiwan Cellular +466,1126,93,2367,tw,Taiwan,886,Mobitai +466,1126,89,2207,tw,Taiwan,886,T-Star/VIBO +466,1126,09,159,tw,Taiwan,886,VMAX Telecom Co. Ltd +436,1078,04,79,tk,Tajikistan,992,Babilon-M +436,1078,05,95,tk,Tajikistan,992,Bee Line +436,1078,02,47,tk,Tajikistan,992,CJSC Indigo Tajikistan +436,1078,12,303,tk,Tajikistan,992,Tcell/JC Somoncom +436,1078,03,63,tk,Tajikistan,992,MLT/TT mobile +436,1078,01,31,tk,Tajikistan,992,Tcell/JC Somoncom +640,1600,08,143,tz,Tanzania,255,Benson Informatics Ltd +640,1600,06,111,tz,Tanzania,255,Dovetel (T) Ltd +640,1600,09,159,tz,Tanzania,255,Halotel/Viettel Ltd +640,1600,11,287,tz,Tanzania,255,Smile Communications Tanzania Ltd +640,1600,07,127,tz,Tanzania,255,Tanzania Telecommunications Company Ltd (TTCL) +640,1600,02,47,tz,Tanzania,255,TIGO/MIC +640,1600,01,31,tz,Tanzania,255,Tri Telecomm. Ltd. +640,1600,04,79,tz,Tanzania,255,Vodacom Ltd +640,1600,05,95,tz,Tanzania,255,Airtel/ZAIN/Celtel +640,1600,03,63,tz,Tanzania,255,Zantel/Zanzibar Telecom +520,1312,20,527,th,Thailand,66,ACeS Thailand - ACeS Regional Services Co Ltd +520,1312,15,351,th,Thailand,66,ACT Mobile +520,1312,03,63,th,Thailand,66,Advanced Wireless Networks/AWN +520,1312,01,31,th,Thailand,66,AIS/Advanced Info Service +520,1312,23,575,th,Thailand,66,Digital Phone Co. +520,1312,00,15,th,Thailand,66,Hutch/CAT CDMA +520,1312,05,95,th,Thailand,66,Total Access (DTAC) +520,1312,18,399,th,Thailand,66,Total Access (DTAC) +520,1312,99,2463,th,Thailand,66,True Move/Orange +520,1312,04,79,th,Thailand,66,True Move/Orange +514,1300,01,31,tp,Timor-Leste,670,Telin/ Telkomcel +514,1300,02,47,tp,Timor-Leste,670,Timor Telecom +615,1557,02,47,tg,Togo,228,Telecel/MOOV +615,1557,03,63,tg,Togo,228,Telecel/MOOV +615,1557,01,31,tg,Togo,228,Togo Telecom/TogoCELL +539,1337,43,1087,to,Tonga,676,Shoreline Communication +539,1337,01,31,to,Tonga,676,Tonga Communications +374,884,120,288,tt,Trinidad and Tobago,1868,Bmobile/TSTT +374,884,12,303,tt,Trinidad and Tobago,1868,Bmobile/TSTT +374,884,130,304,tt,Trinidad and Tobago,1868,Digicel +374,884,140,320,tt,Trinidad and Tobago,1868,LaqTel Ltd. +605,1541,01,31,tn,Tunisia,216,Orange +605,1541,03,63,tn,Tunisia,216,Oreedo/Orascom +605,1541,02,47,tn,Tunisia,216,TuniCell/Tunisia Telecom +605,1541,06,111,tn,Tunisia,216,TuniCell/Tunisia Telecom +286,646,04,79,tr,Turkey,90,AVEA/Aria +286,646,03,63,tr,Turkey,90,AVEA/Aria +286,646,01,31,tr,Turkey,90,Turkcell +286,646,02,47,tr,Turkey,90,Vodafone-Telsim +438,1080,01,31,tm,Turkmenistan,993,MTS/Barash Communication +438,1080,02,47,tm,Turkmenistan,993,Altyn Asyr/TM-Cell +376,886,350,848,tc,Turks and Caicos Islands,,Cable & Wireless (TCI) Ltd +376,886,050,80,tc,Turks and Caicos Islands,,Digicel TCI Ltd +376,886,352,850,tc,Turks and Caicos Islands,,IslandCom Communications Ltd. +553,1363,01,31,tv,Tuvalu,,Tuvalu Telecommunication Corporation (TTC) +641,1601,01,31,ug,Uganda,256,Airtel/Celtel +641,1601,66,1647,ug,Uganda,256,i-Tel Ltd +641,1601,30,783,ug,Uganda,256,K2 Telecom Ltd +641,1601,10,271,ug,Uganda,256,MTN Ltd. +641,1601,14,335,ug,Uganda,256,Orange +641,1601,33,831,ug,Uganda,256,Smile Communications Uganda Ltd +641,1601,18,399,ug,Uganda,256,Suretelecom Uganda Ltd +641,1601,11,287,ug,Uganda,256,Uganda Telecom Ltd. +641,1601,22,559,ug,Uganda,256,Airtel/Warid +255,597,06,111,ua,Ukraine,380,Astelit/LIFE +255,597,05,95,ua,Ukraine,380,Golden Telecom +255,597,39,927,ua,Ukraine,380,Golden Telecom +255,597,04,79,ua,Ukraine,380,Intertelecom Ltd (IT) +255,597,67,1663,ua,Ukraine,380,KyivStar +255,597,03,63,ua,Ukraine,380,KyivStar +255,597,21,543,ua,Ukraine,380,Telesystems Of Ukraine CJSC (TSU) +255,597,07,127,ua,Ukraine,380,TriMob LLC +255,597,50,1295,ua,Ukraine,380,UMC/MTS +255,597,02,47,ua,Ukraine,380,Beeline +255,597,01,31,ua,Ukraine,380,UMC/MTS +255,597,68,1679,ua,Ukraine,380,Beeline +424,1060,03,63,ae,United Arab Emirates,971,DU +431,1073,02,47,ae,United Arab Emirates,971,Etisalat +424,1060,02,47,ae,United Arab Emirates,971,Etisalat +430,1072,02,47,ae,United Arab Emirates,971,Etisalat +234,564,03,63,gb,United Kingdom,44,Airtel/Vodafone +234,564,77,1919,gb,United Kingdom,44,BT Group +234,564,76,1903,gb,United Kingdom,44,BT Group +234,564,92,2351,gb,United Kingdom,44,Cable and Wireless +234,564,07,127,gb,United Kingdom,44,Cable and Wireless +234,564,36,879,gb,United Kingdom,44,Cable and Wireless Isle of Man +234,564,18,399,gb,United Kingdom,44,Cloud9/wire9 Tel. +235,565,02,47,gb,United Kingdom,44,Everyth. Ev.wh. +234,564,17,383,gb,United Kingdom,44,FlexTel +234,564,55,1375,gb,United Kingdom,44,Guernsey Telecoms +234,564,14,335,gb,United Kingdom,44,HaySystems +234,564,94,2383,gb,United Kingdom,44,H3G Hutchinson +234,564,20,527,gb,United Kingdom,44,H3G Hutchinson +234,564,75,1887,gb,United Kingdom,44,Inquam Telecom Ltd +234,564,50,1295,gb,United Kingdom,44,Jersey Telecom +234,564,35,863,gb,United Kingdom,44,JSC Ingenicum +234,564,26,623,gb,United Kingdom,44,Lycamobile +234,564,58,1423,gb,United Kingdom,44,Manx Telecom +234,564,01,31,gb,United Kingdom,44,Mapesbury C. Ltd +234,564,28,655,gb,United Kingdom,44,Marthon Telecom +234,564,10,271,gb,United Kingdom,44,O2 Ltd. +234,564,02,47,gb,United Kingdom,44,O2 Ltd. +234,564,11,287,gb,United Kingdom,44,O2 Ltd. +234,564,08,143,gb,United Kingdom,44,OnePhone +234,564,16,367,gb,United Kingdom,44,Opal Telecom +234,564,34,847,gb,United Kingdom,44,Everyth. Ev.wh./Orange +234,564,33,831,gb,United Kingdom,44,Everyth. Ev.wh./Orange +234,564,19,415,gb,United Kingdom,44,PMN/Teleware +234,564,12,303,gb,United Kingdom,44,Railtrack Plc +234,564,22,559,gb,United Kingdom,44,Routotelecom +234,564,57,1407,gb,United Kingdom,44,Sky UK Limited +234,564,24,591,gb,United Kingdom,44,Stour Marine +234,564,37,895,gb,United Kingdom,44,Synectiv Ltd. +234,564,30,783,gb,United Kingdom,44,Everyth. Ev.wh./T-Mobile +234,564,31,799,gb,United Kingdom,44,Everyth. Ev.wh./T-Mobile +234,564,32,815,gb,United Kingdom,44,Everyth. Ev.wh./T-Mobile +234,564,27,639,gb,United Kingdom,44,Vodafone +234,564,09,159,gb,United Kingdom,44,Tismi +234,564,25,607,gb,United Kingdom,44,Truphone +234,564,51,1311,gb,United Kingdom,44,Jersey Telecom +234,564,23,575,gb,United Kingdom,44,Vectofone Mobile Wifi +234,564,91,2335,gb,United Kingdom,44,Vodafone +234,564,15,351,gb,United Kingdom,44,Vodafone +234,564,78,1935,gb,United Kingdom,44,Wave Telecom Ltd +310,784,050,80,us,United States,1, +310,784,880,2176,us,United States,1, +310,784,850,2128,us,United States,1,Aeris Comm. Inc. +310,784,640,1600,us,United States,1, +310,784,510,1296,us,United States,1,Airtel Wireless LLC +310,784,190,400,us,United States,1,Unknown +312,786,090,144,us,United States,1,Allied Wireless Communications Corporation +311,785,130,304,us,United States,1, +310,784,710,1808,us,United States,1,Arctic Slope Telephone Association Cooperative Inc. +310,784,680,1664,us,United States,1,AT&T Wireless Inc. +310,784,070,112,us,United States,1,AT&T Wireless Inc. +310,784,560,1376,us,United States,1,AT&T Wireless Inc. +310,784,410,1040,us,United States,1,AT&T Wireless Inc. +310,784,380,896,us,United States,1,AT&T Wireless Inc. +310,784,170,368,us,United States,1,AT&T Wireless Inc. +310,784,150,336,us,United States,1,AT&T Wireless Inc. +310,784,980,2432,us,United States,1,AT&T Wireless Inc. +311,785,810,2064,us,United States,1,Bluegrass Wireless LLC +311,785,800,2048,us,United States,1,Bluegrass Wireless LLC +311,785,440,1088,us,United States,1,Bluegrass Wireless LLC +310,784,900,2304,us,United States,1,Cable & Communications Corp. +311,785,590,1424,us,United States,1,California RSA No. 3 Limited Partnership +311,785,500,1280,us,United States,1,Cambridge Telephone Company Inc. +310,784,830,2096,us,United States,1,Caprock Cellular Ltd. +310,784,013,19,us,United States,1,Verizon Wireless +311,785,281,641,us,United States,1,Verizon Wireless +311,785,486,1158,us,United States,1,Verizon Wireless +311,785,270,624,us,United States,1,Verizon Wireless +311,785,286,646,us,United States,1,Verizon Wireless +311,785,275,629,us,United States,1,Verizon Wireless +311,785,480,1152,us,United States,1,Verizon Wireless +310,784,012,18,us,United States,1,Verizon Wireless +311,785,280,640,us,United States,1,Verizon Wireless +311,785,485,1157,us,United States,1,Verizon Wireless +311,785,110,272,us,United States,1,Verizon Wireless +311,785,285,645,us,United States,1,Verizon Wireless +311,785,274,628,us,United States,1,Verizon Wireless +311,785,390,912,us,United States,1,Verizon Wireless +310,784,010,16,us,United States,1,Verizon Wireless +311,785,279,633,us,United States,1,Verizon Wireless +311,785,484,1156,us,United States,1,Verizon Wireless +310,784,910,2320,us,United States,1,Verizon Wireless +311,785,284,644,us,United States,1,Verizon Wireless +311,785,489,1161,us,United States,1,Verizon Wireless +311,785,273,627,us,United States,1,Verizon Wireless +311,785,289,649,us,United States,1,Verizon Wireless +310,784,004,4,us,United States,1,Verizon Wireless +311,785,278,632,us,United States,1,Verizon Wireless +311,785,483,1155,us,United States,1,Verizon Wireless +310,784,890,2192,us,United States,1,Verizon Wireless +311,785,283,643,us,United States,1,Verizon Wireless +311,785,488,1160,us,United States,1,Verizon Wireless +311,785,272,626,us,United States,1,Verizon Wireless +311,785,288,648,us,United States,1,Verizon Wireless +311,785,277,631,us,United States,1,Verizon Wireless +311,785,482,1154,us,United States,1,Verizon Wireless +310,784,590,1424,us,United States,1,Verizon Wireless +311,785,282,642,us,United States,1,Verizon Wireless +311,785,487,1159,us,United States,1,Verizon Wireless +311,785,271,625,us,United States,1,Verizon Wireless +311,785,287,647,us,United States,1,Verizon Wireless +311,785,276,630,us,United States,1,Verizon Wireless +311,785,481,1153,us,United States,1,Verizon Wireless +312,786,270,624,us,United States,1,Cellular Network Partnership LLC +310,784,360,864,us,United States,1,Cellular Network Partnership LLC +312,786,280,640,us,United States,1,Cellular Network Partnership LLC +311,785,190,400,us,United States,1, +310,784,030,48,us,United States,1, +310,784,480,1152,us,United States,1,Choice Phone LLC +311,785,120,288,us,United States,1,Choice Phone LLC +310,784,630,1584,us,United States,1, +310,784,420,1056,us,United States,1,Cincinnati Bell Wireless LLC +310,784,180,384,us,United States,1,Cingular Wireless +310,784,620,1568,us,United States,1,Coleman County Telco /Trans TX +311,785,040,64,us,United States,1, +310,784,06,111,us,United States,1,Consolidated Telcom +310,784,60,1551,us,United States,1,Consolidated Telcom +310,784,26,623,us,United States,1, +312,786,380,896,us,United States,1, +310,784,930,2352,us,United States,1, +311,785,240,576,us,United States,1, +310,784,080,128,us,United States,1, +310,784,700,1792,us,United States,1,Cross Valliant Cellular Partnership +312,786,030,48,us,United States,1,Cross Wireless Telephone Co. +311,785,140,320,us,United States,1,Cross Wireless Telephone Co. +311,785,520,1312,us,United States,1, +312,786,040,64,us,United States,1,Custer Telephone Cooperative Inc. +310,784,440,1088,us,United States,1,Dobson Cellular Systems +310,784,990,2448,us,United States,1,E.N.M.R. Telephone Coop. +310,784,750,1872,us,United States,1,East Kentucky Network LLC +312,786,130,304,us,United States,1,East Kentucky Network LLC +312,786,120,288,us,United States,1,East Kentucky Network LLC +310,784,090,144,us,United States,1,Edge Wireless LLC +310,784,610,1552,us,United States,1,Elkhart TelCo. / Epic Touch Co. +311,785,210,528,us,United States,1, +311,785,311,785,us,United States,1,Farmers +311,785,460,1120,us,United States,1,Fisher Wireless Services Inc. +310,784,430,1072,us,United States,1,GCI Communication Corp. +311,785,370,880,us,United States,1,GCI Communication Corp. +310,784,920,2336,us,United States,1,Get Mobile Inc. +310,784,970,2416,us,United States,1, +311,785,340,832,us,United States,1,Illinois Valley Cellular RSA 2 Partnership +311,785,030,48,us,United States,1, +311,785,410,1040,us,United States,1,Iowa RSA No. 2 Limited Partnership +312,786,170,368,us,United States,1,Iowa RSA No. 2 Limited Partnership +310,784,770,1904,us,United States,1,Iowa Wireless Services LLC +310,784,650,1616,us,United States,1,Jasper +310,784,870,2160,us,United States,1,Kaplan Telephone Company Inc. +312,786,180,384,us,United States,1,Keystone Wireless LLC +310,784,690,1680,us,United States,1,Keystone Wireless LLC +311,785,310,784,us,United States,1,Lamar County Cellular +310,784,016,22,us,United States,1,Leap Wireless International Inc. +311,785,090,144,us,United States,1, +310,784,040,64,us,United States,1,Matanuska Tel. Assn. Inc. +310,784,780,1920,us,United States,1,Message Express Co. / Airlink PCS +311,785,660,1632,us,United States,1, +311,785,330,816,us,United States,1,Michigan Wireless LLC +311,785,000,0,us,United States,1, +310,784,400,1024,us,United States,1,Minnesota South. Wirel. Co. / Hickory +312,786,010,16,us,United States,1,Missouri RSA No 5 Partnership +311,785,920,2336,us,United States,1,Missouri RSA No 5 Partnership +311,785,020,32,us,United States,1,Missouri RSA No 5 Partnership +311,785,010,16,us,United States,1,Missouri RSA No 5 Partnership +312,786,220,544,us,United States,1,Missouri RSA No 5 Partnership +310,784,350,848,us,United States,1,Mohave Cellular LP +310,784,570,1392,us,United States,1,MTPCS LLC +310,784,290,656,us,United States,1,NEP Cellcorp Inc. +310,784,34,847,us,United States,1,Nevada Wireless LLC +311,785,380,896,us,United States,1, +310,784,600,1536,us,United States,1,New-Cell Inc. +311,785,100,256,us,United States,1, +311,785,300,768,us,United States,1,Nexus Communications Inc. +310,784,130,304,us,United States,1,North Carolina RSA 3 Cellular Tel. Co. +311,785,610,1552,us,United States,1,North Dakota Network Company +312,786,230,560,us,United States,1,North Dakota Network Company +310,784,450,1104,us,United States,1,Northeast Colorado Cellular Inc. +311,785,710,1808,us,United States,1,Northeast Wireless Networks LLC +310,784,670,1648,us,United States,1,Northstar +310,784,011,17,us,United States,1,Northstar +311,785,420,1056,us,United States,1,Northwest Missouri Cellular Limited Partnership +310,784,540,1344,us,United States,1, +310,784,760,1888,us,United States,1,Panhandle Telephone Cooperative Inc. +310,784,580,1408,us,United States,1,PCS ONE +311,785,170,368,us,United States,1,PetroCom +311,785,670,1648,us,United States,1,Pine Belt Cellular Inc. +311,785,080,128,us,United States,1, +310,784,790,1936,us,United States,1, +310,784,100,256,us,United States,1,Plateau Telecommunications Inc. +310,784,940,2368,us,United States,1,Poka Lambro Telco Ltd. +311,785,540,1344,us,United States,1, +311,785,730,1840,us,United States,1, +310,784,500,1280,us,United States,1,Public Service Cellular Inc. +312,786,160,352,us,United States,1,RSA 1 Limited Partnership +311,785,430,1072,us,United States,1,RSA 1 Limited Partnership +311,785,350,848,us,United States,1,Sagebrush Cellular Inc. +311,785,910,2320,us,United States,1, +310,784,46,1135,us,United States,1,SIMMETRY +311,785,260,608,us,United States,1,SLO Cellular Inc / Cellular One of San Luis +310,784,320,800,us,United States,1,Smith Bagley Inc. +310,784,15,351,us,United States,1,Unknown +316,790,011,17,us,United States,1,Southern Communications Services Inc. +312,786,530,1328,us,United States,1,Sprint Spectrum +311,785,490,1168,us,United States,1,Sprint Spectrum +310,784,120,288,us,United States,1,Sprint Spectrum +316,790,010,16,us,United States,1,Sprint Spectrum +312,786,190,400,us,United States,1,Sprint Spectrum +311,785,880,2176,us,United States,1,Sprint Spectrum +311,785,870,2160,us,United States,1,Sprint Spectrum +310,784,200,512,us,United States,1,T-Mobile +310,784,250,592,us,United States,1,T-Mobile +310,784,160,352,us,United States,1,T-Mobile +310,784,240,576,us,United States,1,T-Mobile +310,784,660,1632,us,United States,1,T-Mobile +310,784,230,560,us,United States,1,T-Mobile +310,784,31,799,us,United States,1,T-Mobile +310,784,220,544,us,United States,1,T-Mobile +310,784,270,624,us,United States,1,T-Mobile +310,784,210,528,us,United States,1,T-Mobile +310,784,260,608,us,United States,1,T-Mobile +310,784,330,816,us,United States,1,T-Mobile +310,784,800,2048,us,United States,1,T-Mobile +310,784,300,768,us,United States,1,T-Mobile +310,784,280,640,us,United States,1,T-Mobile +310,784,310,784,us,United States,1,T-Mobile +311,785,740,1856,us,United States,1, +310,784,740,1856,us,United States,1,Telemetrix Inc. +310,784,14,335,us,United States,1,Testing +310,784,950,2384,us,United States,1,Unknown +310,784,860,2144,us,United States,1,Texas RSA 15B2 Limited Partnership +311,785,830,2096,us,United States,1,Thumb Cellular Limited Partnership +311,785,050,80,us,United States,1,Thumb Cellular Limited Partnership +310,784,460,1120,us,United States,1,TMP Corporation +310,784,490,1168,us,United States,1,Triton PCS +312,786,290,656,us,United States,1,Uintah Basin Electronics Telecommunications Inc. +311,785,860,2144,us,United States,1,Uintah Basin Electronics Telecommunications Inc. +310,784,960,2400,us,United States,1,Uintah Basin Electronics Telecommunications Inc. +310,784,020,32,us,United States,1,Union Telephone Co. +311,785,220,544,us,United States,1,United States Cellular Corp. +310,784,730,1840,us,United States,1,United States Cellular Corp. +311,785,650,1616,us,United States,1,United Wireless Communications Inc. +310,784,38,911,us,United States,1,USA 3650 AT&T +310,784,520,1312,us,United States,1,VeriSign +310,784,003,3,us,United States,1,Unknown +310,784,23,575,us,United States,1,Unknown +310,784,24,591,us,United States,1,Unknown +310,784,25,607,us,United States,1,Unknown +310,784,530,1328,us,United States,1,West Virginia Wireless +310,784,26,623,us,United States,1,Unknown +310,784,340,832,us,United States,1,Westlink Communications LLC +311,785,150,336,us,United States,1, +311,785,070,112,us,United States,1,Wisconsin RSA #7 Limited Partnership +310,784,390,912,us,United States,1,Yorkville Telephone Cooperative +748,1864,01,31,uy,Uruguay,598,Ancel/Antel +748,1864,03,63,uy,Uruguay,598,Ancel/Antel +748,1864,10,271,uy,Uruguay,598,Claro/AM Wireless +748,1864,07,127,uy,Uruguay,598,MOVISTAR +434,1076,04,79,uz,Uzbekistan,998,Bee Line/Unitel +434,1076,01,31,uz,Uzbekistan,998,Buztel +434,1076,07,127,uz,Uzbekistan,998,MTS/Uzdunrobita +434,1076,05,95,uz,Uzbekistan,998,Ucell/Coscom +434,1076,02,47,uz,Uzbekistan,998,Uzmacom +541,1345,05,95,vu,Vanuatu,678,DigiCel +541,1345,01,31,vu,Vanuatu,678,SMILE +734,1844,03,63,ve,Venezuela,58,DigiTel C.A. +734,1844,02,47,ve,Venezuela,58,DigiTel C.A. +734,1844,01,31,ve,Venezuela,58,DigiTel C.A. +734,1844,06,111,ve,Venezuela,58,Movilnet C.A. +734,1844,04,79,ve,Venezuela,58,Movistar/TelCel +452,1106,07,127,vn,Viet Nam,84,Beeline +452,1106,01,31,vn,Viet Nam,84,Mobifone +452,1106,03,63,vn,Viet Nam,84,S-Fone/Telecom +452,1106,05,95,vn,Viet Nam,84,VietnaMobile +452,1106,08,143,vn,Viet Nam,84,Viettel Mobile +452,1106,06,111,vn,Viet Nam,84,Viettel Mobile +452,1106,04,79,vn,Viet Nam,84,Viettel Mobile +452,1106,02,47,vn,Viet Nam,84,Vinaphone +376,886,50,1295,vi,Virgin Islands U.S.,1340,Digicel +421,1057,04,79,ye,Yemen,967,HITS/Y Unitel +421,1057,02,47,ye,Yemen,967,MTN/Spacetel +421,1057,01,31,ye,Yemen,967,Sabaphone +421,1057,03,63,ye,Yemen,967,Yemen Mob. CDMA +645,1605,03,63,zm,Zambia,260,Zamtel/Cell Z/MTS +645,1605,02,47,zm,Zambia,260,MTN/Telecel +645,1605,01,31,zm,Zambia,260,Airtel/Zain/Celtel +648,1608,04,79,zw,Zimbabwe,263,Econet +648,1608,01,31,zw,Zimbabwe,263,Net One +648,1608,03,63,zw,Zimbabwe,263,Telecel diff --git a/config/client_config/onoff_huawei_hilink.sh b/config/client_config/onoff_huawei_hilink.sh new file mode 100644 index 00000000..9b3f8413 --- /dev/null +++ b/config/client_config/onoff_huawei_hilink.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# connect/disconnect Huawei mobile data stick in Hilink mode (e.g. E3372h) +# ======================================================================== +# +# options: -u, --user - user name (default "admin") +# -P, --password - password +# -h, --host - host ip address (default 192.168.8.1) +# -d, --devname - device name (IP is extracted using default route) +# -p, --pin - PIN of SIM card +# -c, --connect - connect 0/1 to set datamode off/on +# +# required software: curl, base64, sha256sum +# +# zbchristian 2021 + +# include the hilink API (defaults: hilink_user=admin, hilink_host=192.168.8.1) +source /usr/local/sbin/huawei_hilink_api.sh + +# include the raspap helper functions +source /usr/local/sbin/raspap_helpers.sh + +datamode="" +devname="" +while [ -n "$1" ]; do + case "$1" in + -u|--user) hilink_user="$2"; shift ;; + -P|--password) hilink_password="$2"; shift ;; + -p|--pin) if [[ $2 =~ ^[0-9]{4,8} ]]; then hilink_pin="$2"; fi; shift ;; + -h|--host) hilink_host="$2"; shift ;; + -d|--devname) devname="$2"; shift ;; + -c|--connect) if [ "$2" = "1" ]; then datamode=1; else datamode=0; fi; shift ;; + esac + shift +done + +if [ ! -z "$devname" ]; then # get host IP for given device name + gw=$(ip route list | sed -rn "s/default via (([0-9]{1,3}\.){3}[0-9]{1,3}).*dev $devname.*/\1/p") + if [ -z "$gw" ]; then exit; fi # device name not found in routing list -> abort + hilink_host="$gw" +fi + +if [ -z "$hilink_password" ] || [ -z "$hilink_pin" ]; then + _getAuthRouter + if [ ! -z "$raspap_user" ]; then hilink_user="$raspap_user"; fi + if [ ! -z "$raspap_password" ]; then hilink_password="$raspap_password"; fi + if [ ! -z "$raspap_pin" ]; then hilink_pin="$raspap_pin"; fi +fi + +echo "Hilink: switch device at $hilink_host to mode $datamode" | systemd-cat + +status="usage: -c 1/0 to disconnect/connect" +if [ -z "$datamode" ] || [ ! _initHilinkAPI ]; then echo "Hilink: failed - return status: $status"; exit; fi + +if ! _switchMobileData "$datamode"; then echo -n "Hilink: could not switch the data mode on/off . Error: ";_getErrorText; fi + +if ! _closeHilinkAPI; then echo -n "Hilink: failed - return status: $status . Error: ";_getErrorText; fi + + diff --git a/config/client_config/ppp0_route.sh b/config/client_config/ppp0_route.sh new file mode 100644 index 00000000..f1d6bc3d --- /dev/null +++ b/config/client_config/ppp0_route.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# get gateway and ip address of UTMS modem connected to ppp0 +# add a default route +# called by /etc/network/interfaces.d/ppp0, when device is coming up +# +ppp0rt="" +let i=1 +while [ -z "$ppp0rt" ] ; do + let i+=1 + if [ $i -gt 20 ]; then + exit 1 + fi + sleep 1 + ppp0rt=`ip route list | grep -m 1 ppp0` +done +gate=`echo $ppp0rt | sed -rn 's/(([0-9]{1,3}\.){3}[0-9]{1,3}).*ppp0.*src (([0-9]{1,3}\.){3}[0-9]{1,3})/\1/p'` +src=`echo $ppp0rt | sed -rn 's/(([0-9]{1,3}\.){3}[0-9]{1,3}).*ppp0.*src (([0-9]{1,3}\.){3}[0-9]{1,3})/\3/p'` + +ip route add default via $gate proto dhcp src $src metric 10 +exit 0 diff --git a/config/client_config/ppp0_setpin.sh b/config/client_config/ppp0_setpin.sh new file mode 100644 index 00000000..74c1b415 --- /dev/null +++ b/config/client_config/ppp0_setpin.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# in case /dev/ttyUSB0 does not exist, wait for it at most 30 seconds +let i=1 +while ! test -c /dev/ttyUSB0; do + let i+=1 + if [ $i -gt 2 ]; then + logger -s -t setpin "/dev/ttyUSB0 does not exist" + exit 3 + fi + logger -s -t setpin "waiting 3 seconds for /dev/ttyUSB0" + sleep 3 +done +# check for pin and set it if necessary +wvdial pinstatus 2>&1 | grep -q '^+CPIN: READY' +if [ $? -eq 0 ]; then + logger -s -t setpin "SIM card is ready to use :-)" +else + logger -s -t setpin "setting PIN" + wvdial pin 2>/dev/null +fi +exit 0 diff --git a/config/client_config/raspap_helpers.sh b/config/client_config/raspap_helpers.sh new file mode 100644 index 00000000..a20ba309 --- /dev/null +++ b/config/client_config/raspap_helpers.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# +# Helper functions to extract informations from RaspAP config/settings +# +# zbchristian 2021 +# +# get the values of a RaspAP config variable +# call: _getRaspapConfig RASPAP_MOBILEDATA_CONFIG + +raspap_webroot="/var/www/html" + +function _getWebRoot() { + local path + path=$(cat /etc/lighttpd/lighttpd.conf | sed -rn "s/server.document-root \s*= \"([^ \s]*)\"/\1/p") + if [ ! -z "$path" ]; then raspap_webroot="$path"; fi + if [ -z "$path" ]; then return 1; else return 0; fi +} + +# expand an RaspAP config variable utilizing PHP +function _getRaspapConfig() { + local conf var + raspap_config="" + var="$1" + if [ ! -z "$var" ]; then + if ! _getWebRoot; then return 1; fi + conf="$raspap_webroot/includes/config.php" + if [ -f "$conf" ]; then + conf=$(php -r 'include "'$conf'"; echo '$var';' 2> /dev/null) + if [ ! -z "$conf" ] && [ -d ${conf%/*} ]; then raspap_config="$conf"; fi + fi + fi + if [ -z "$raspap_config" ]; then return 1; else return 0; fi +} + +# Username and password for mobile data devices is stored in a file (RASPAP_MOBILEDATA_CONFIG) +function _getAuthRouter() { + local mfile mdata pin user pw + if ! _getRaspapConfig "RASPI_MOBILEDATA_CONFIG"; then return 1; fi + mfile="$raspap_config" + if [ -f $mfile ]; then + mdata=$(cat "$mfile") + pin=$(echo "$mdata" | sed -rn 's/pin = ([^ \s]*)/\1/ip') + if [ ! -z "$pin" ]; then raspap_pin="$pin"; fi + user=$(echo "$mdata" | sed -rn 's/router_user = ([^ \s]*)/\1/ip') + if [ ! -z "$user" ]; then raspap_user="$user"; fi + pw=$(echo "$mdata" | sed -rn 's/router_pw = ([^ \s]*)/\1/ip') + if [ ! -z "$pw" ]; then raspap_password="$pw"; fi + return 0 + fi + return 1 +} diff --git a/config/client_config/start_huawei_hilink@.service b/config/client_config/start_huawei_hilink@.service new file mode 100644 index 00000000..b735b1b1 --- /dev/null +++ b/config/client_config/start_huawei_hilink@.service @@ -0,0 +1,13 @@ +[Unit] +Description=Bring up HUAWEI mobile hilink device + +[Service] +Type=oneshot +RemainAfterExit=no +ExecStart=/bin/sleep 15 +ExecStart=/usr/local/sbin/onoff_huawei_hilink.sh -c 1 -d %i + +[Install] +Alias=start_ltemodem.service +WantedBy=multi-user.target + diff --git a/config/client_config/start_ppp0_device.service b/config/client_config/start_ppp0_device.service new file mode 100644 index 00000000..2fc88e5c --- /dev/null +++ b/config/client_config/start_ppp0_device.service @@ -0,0 +1,16 @@ +[Unit] +Description=Start ppp0 interface +BindsTo=dev-ttyUSB0.device +After=dev-ttyUSB0.device + +[Service] +Type=forking +RemainAfterExit=yes +ExecStart=/sbin/ifup ppp0 +ExecStop=/sbin/ifdown ppp0 + +[Install] +Alias=startppp0.service +WantedBy=multi-user.target + + diff --git a/config/client_config/wvdial.conf b/config/client_config/wvdial.conf new file mode 100644 index 00000000..8de5b3c6 --- /dev/null +++ b/config/client_config/wvdial.conf @@ -0,0 +1,21 @@ +[Dialer Defaults] +Modem Type = Analog Modem +ISDN = 0 +Baud = 9600 +Modem = /dev/ttyUSB0 + +[Dialer pin] +Init1 = AT+CPIN="XXXX" + +[Dialer connect] +Init1 = ATZ +Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 +Init3 = AT+CGDCONT=1,"IP","web.vodafone.de" +New PPPD = yes +Phone = *99# +Password = me +Username = vodafone +Stupid Mode = 1 + +[Dialer pinstatus] +Init1 = AT+CPIN? diff --git a/config/client_udev_prototypes.json b/config/client_udev_prototypes.json new file mode 100644 index 00000000..bd49f419 --- /dev/null +++ b/config/client_udev_prototypes.json @@ -0,0 +1,64 @@ +{ + "info": "UDEV rules for different client types. $...$ expressions will be replaces automatically ($MAC$, $IDVENDOR$, $IDPRODUCT$, $DEVNAME$)", + "udev_rules_file": "/etc/udev/rules.d/80-raspap-net-devices.rules", + "script_path": "/usr/local/sbin", + "network_devices": [ + { + "type": "eth", + "type_info": "ethernet port", + "clientid": 0, + "comment": "standard ethernet port", + "name_prefix": "eth", + "udev_rule": "SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"$MAC$\", NAME=\"$DEVNAME$\", ENV{raspapType}=\"eth\" " + }, + { + "type": "usb", + "type_info": "usb network interface", + "clientid": 1, + "comment": "network interface - e.g. USB tethering of an Android phone ", + "name_prefix": "usb", + "udev_rule": "SUBSYSTEM==\"net\", ACTION==\"add\", SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"$IDVENDOR$\", ATTRS{idProduct}==\"$IDPRODUCT$\", NAME=\"$DEVNAME$\", ENV{raspapType}=\"eth\" " + }, + { + "type": "wlan", + "type_info": "wireless adapter", + "clientid": 2, + "comment": "standard wireless interface", + "name_prefix": "wlan", + "udev_rule": "SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"$MAC$\", NAME=\"$DEVNAME$\", ENV{raspapType}=\"wlan\" " + }, + { + "type": "ppp", + "type_info": "mobile data modem", + "clientid": 3, + "name_prefix": "ppp", + "comment": "recognized mobile data modems are automatically named as ppp0-9. Renaming is not possible. Dialin service relies on the name", + "udev_rule": "SUBSYSTEM==\"tty\", KERNEL==\"ttyUSB0\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"start start_ppp0_device.service\" " + }, + { + "type": "hilink", + "type_info": "Huawei Hilink", + "clientid": 4, + "comment": "Huawei mobile data device in router mode. Control via HTTP. Device is connecting via service", + "name_prefix": "hilink", + "default_ip": "192.168.8.1", + "udev_rule": "SUBSYSTEM==\"net\", ACTION==\"add\", SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"$IDVENDOR$\", ATTRS{idProduct}==\"$IDPRODUCT$\", NAME=\"$DEVNAME$\", ENV{raspapType}=\"hilink\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"start start_huawei_hilink@hilink%n.service\" " + }, + { + "type": "phone", + "type_info": "USB tethered phone", + "clientid": 5, + "comment": "ethernet access provided by tethering from phone via USB", + "name_prefix": "phone", + "udev_rule": "SUBSYSTEM==\"net\", ACTION==\"add\", SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"$IDVENDOR$\", ATTRS{idProduct}==\"$IDPRODUCT$\", NAME=\"$DEVNAME$\", ENV{raspapType}=\"phone\" " + }, + { + "type": "tun", + "type_info": "tunnel device", + "clientid": -1, + "comment": "tunneling device used by OpenVPN", + "name_prefix": "tun" + } + ] +} + diff --git a/config/config.php b/config/config.php index 046e36a2..4589092d 100755 --- a/config/config.php +++ b/config/config.php @@ -1,33 +1,49 @@ - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [Installation](#installation) - - [CDN](#cdn) - - [Download](#download) - - [NPM](#npm) - - [Yarn](#yarn) -- [Usage](#usage) - - [Initialize With HTML](#initialize-with-html) - - [Initialize With Code](#initialize-with-code) -- [API](#api) - - [Options](#options) - - [Methods](#methods) -- [Events](#events) - - [Event Propagation](#event-propagation) - - [API vs Input](#api-vs-input) - - - -************************************************************************************************** - -# Installation - -## CDN -```html - - -``` - -## Download -[Latest GitHub Release](https://github.com/gitbrent/bootstrap4-toggle/releases/latest) - -## NPM -```ksh -npm install bootstrap4-toggle -``` - -## Yarn -```ksh -yarn add bootstrap4-toggle -``` - -# Usage - -## Initialize With HTML -Simply add `data-toggle="toggle"` to automatically convert a plain checkbox into a bootstrap 4 toggle. - -```html - -``` - -## Initialize With Code -Toggles can also be initialized via JavaScript code. - -EX: Initialize id `chkToggle` with a single line of JavaScript. -```html - - -``` - -# API - -## Options -* Options can be passed via data attributes or JavaScript -* For data attributes, append the option name to `data-` (ex: `data-on="Enabled"`) - -```html - - - -``` - -Name |Type |Default |Description | -----------|-----------|----------|----------------------------| -`on` |string/html|"On" |Text of the on toggle -`off` |string/html|"Off" |Text of the off toggle -`size` |string |"normal" |Size of the toggle. Possible values are: `large`, `normal`, `small`, `mini`. -`onstyle` |string |"primary" |Style of the on toggle. Possible values are: `primary`,`secondary`,`success`,`danger`,`warning`,`info`,`light`,`dark` -`offstyle`|string |"light" |Style of the off toggle. Possible values are: `primary`,`secondary`,`success`,`danger`,`warning`,`info`,`light`,`dark` -`style` |string | |Appends the value to the class attribute of the toggle. This can be used to apply custom styles. Refer to Custom Styles for reference. -`width` |integer |*null* |Sets the width of the toggle. if set to *null*, width will be auto-calculated. -`height` |integer |*null* |Sets the height of the toggle. if set to *null*, height will be auto-calculated. - -## Methods -Methods can be used to control toggles directly. - -```html - -``` - -Method |Example |Description ------------|------------------------------------------------|------------------------------------------ -initialize | `$('#toggle-demo').bootstrapToggle()` |Initializes the toggle plugin with options -destroy | `$('#toggle-demo').bootstrapToggle('destroy')` |Destroys the toggle -on | `$('#toggle-demo').bootstrapToggle('on')` |Sets the toggle to 'On' state -off | `$('#toggle-demo').bootstrapToggle('off')` |Sets the toggle to 'Off' state -toggle | `$('#toggle-demo').bootstrapToggle('toggle')` |Toggles the state of the toggle on/off -enable | `$('#toggle-demo').bootstrapToggle('enable')` |Enables the toggle -disable | `$('#toggle-demo').bootstrapToggle('disable')` |Disables the toggle - -# Events - -## Event Propagation -Note All events are propagated to and from input element to the toggle. - -You should listen to events from the `` directly rather than look for custom events. - -```html - -
- -``` - -## API vs Input -This also means that using the API or Input to trigger events will work both ways. - -```html - - - - - - -``` diff --git a/dist/bootstrap4-toggle/css/bootstrap4-toggle.min.css b/dist/bootstrap4-toggle/css/bootstrap4-toggle.min.css deleted file mode 100644 index dc10fe12..00000000 --- a/dist/bootstrap4-toggle/css/bootstrap4-toggle.min.css +++ /dev/null @@ -1,42 +0,0 @@ -/*\ -|*| ======================================================================== -|*| Bootstrap Toggle: bootstrap4-toggle.css v3.5.0 -|*| https://gitbrent.github.io/bootstrap-toggle/ -|*| ======================================================================== -|*| Copyright 2018-2019 Brent Ely -|*| Licensed under MIT -|*| ======================================================================== -\*/ -.btn-group-xs>.btn,.btn-xs{padding:.35rem .4rem .25rem;font-size:.875rem;line-height:.5;border-radius:.2rem} -.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-1.25rem;margin-right:.35rem} -.toggle{position:relative;overflow:hidden} -.toggle.btn.btn-light,.toggle.btn.btn-outline-light{border-color:rgba(0,0,0,.15)} -.toggle input[type=checkbox]{display:none} -.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none} -.toggle-group label,.toggle-group span{cursor:pointer} -.toggle.off .toggle-group{left:-100%} -.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0} -.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0;box-shadow:none} -.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px;background-color:#fff} -.toggle.btn-outline-primary .toggle-handle{background-color:var(--primary);border-color:var(--primary)} -.toggle.btn-outline-secondary .toggle-handle{background-color:var(--secondary);border-color:var(--secondary)} -.toggle.btn-outline-success .toggle-handle{background-color:var(--success);border-color:var(--success)} -.toggle.btn-outline-danger .toggle-handle{background-color:var(--danger);border-color:var(--danger)} -.toggle.btn-outline-warning .toggle-handle{background-color:var(--warning);border-color:var(--warning)} -.toggle.btn-outline-info .toggle-handle{background-color:var(--info);border-color:var(--info)} -.toggle.btn-outline-light .toggle-handle{background-color:var(--light);border-color:var(--light)} -.toggle.btn-outline-dark .toggle-handle{background-color:var(--dark);border-color:var(--dark)} -.toggle[class*=btn-outline]:hover .toggle-handle{background-color:var(--light);opacity:.5} -.toggle.btn{min-width:3.7rem;min-height:2.15rem} -.toggle-on.btn{padding-right:1.5rem} -.toggle-off.btn{padding-left:1.5rem} -.toggle.btn-lg{min-width:5rem;min-height:2.815rem} -.toggle-on.btn-lg{padding-right:2rem} -.toggle-off.btn-lg{padding-left:2rem} -.toggle-handle.btn-lg{width:2.5rem} -.toggle.btn-sm{min-width:3.125rem;min-height:1.938rem} -.toggle-on.btn-sm{padding-right:1rem} -.toggle-off.btn-sm{padding-left:1rem} -.toggle.btn-xs{min-width:2.19rem;min-height:1.375rem} -.toggle-on.btn-xs{padding-right:.8rem} -.toggle-off.btn-xs{padding-left:.8rem} diff --git a/dist/bootstrap4-toggle/js/bootstrap4-toggle.min.js b/dist/bootstrap4-toggle/js/bootstrap4-toggle.min.js deleted file mode 100644 index 7c982e9a..00000000 --- a/dist/bootstrap4-toggle/js/bootstrap4-toggle.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*\ -|*| ======================================================================== -|*| Bootstrap Toggle: bootstrap4-toggle.js v3.5.0 -|*| https://gitbrent.github.io/bootstrap-toggle/ -|*| ======================================================================== -|*| Copyright 2018-2019 Brent Ely -|*| Licensed under MIT -|*| ======================================================================== -\*/ -+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="3.5.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"light",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size||"lg"===this.options.size?"btn-lg":"small"===this.options.size||"sm"===this.options.size?"btn-sm":"mini"===this.options.size||"xs"===this.options.size?"btn-xs":"",c=a('
@@ -283,9 +321,6 @@ if ($_COOKIE['sidebarToggled'] == 'true' ) { - - - @@ -295,19 +330,15 @@ if ($_COOKIE['sidebarToggled'] == 'true' ) { - - - - ' , PHP_EOL; } - ?> + ?> diff --git a/installers/common.sh b/installers/common.sh index 74fee3e9..e35a37fd 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -1,54 +1,113 @@ #!/bin/bash # -# RaspAP installation functions. -# author: @billz -# license: GNU General Public License v3.0 +# RaspAP installation functions +# Author: @billz +# Author URI: https://github.com/billz/ +# License: GNU General Public License v3.0 +# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE -raspap_dir="/etc/raspap" -raspap_user="www-data" +# You are not obligated to bundle the LICENSE file with your RaspAP projects as long +# as you leave these references intact in the header comments of your source files. + +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +# set -o xtrace + +# Set defaults +readonly raspap_dir="/etc/raspap" +readonly raspap_user="www-data" +readonly raspap_sudoers="/etc/sudoers.d/090_raspap" +readonly raspap_default="/etc/dnsmasq.d/090_raspap.conf" +readonly raspap_wlan0="/etc/dnsmasq.d/090_wlan0.conf" +readonly raspap_adblock="/etc/dnsmasq.d/090_adblock.conf" +readonly raspap_sysctl="/etc/sysctl.d/90_raspap.conf" +readonly raspap_network="$raspap_dir/networking/" +readonly raspap_router="/etc/lighttpd/conf-available/50-raspap-router.conf" +readonly rulesv4="/etc/iptables/rules.v4" +readonly notracking_url="https://raw.githubusercontent.com/notracking/hosts-blocklists/master/" webroot_dir="/var/www/html" -version=`sed 's/\..*//' /etc/debian_version` -# Determine Raspbian version, set default home location for lighttpd and -# php package to install -if [ "$version" -eq "10" ]; then - version_msg="Raspbian 10.0 (Buster)" - php_package="php7.1-cgi" -elif [ "$version" -eq "9" ]; then - version_msg="Raspbian 9.0 (Stretch)" - php_package="php7.0-cgi" -elif [ "$version" -eq "8" ]; then - install_error "Raspbian 8.0 (Jessie) and php5 are deprecated. Please upgrade." -elif [ "$version" -lt "8" ]; then - install_error "Raspbian ${version} is unsupported. Please upgrade." +if [ "$insiders" == 1 ]; then + repo="RaspAP/raspap-insiders" + branch=${RASPAP_INSIDERS_LATEST} fi +git_source_url="https://github.com/$repo" -phpcgiconf="" -if [ "$php_package" = "php7.1-cgi" ]; then - phpcgiconf="/etc/php/7.1/cgi/php.ini" -elif [ "$php_package" = "php7.0-cgi" ]; then - phpcgiconf="/etc/php/7.0/cgi/php.ini" -fi +# NOTE: all the below functions are overloadable for system-specific installs +function _install_raspap() { + _display_welcome + _config_installation + _update_system_packages + _manage_systemd_services + _install_dependencies + _enable_php_lighttpd + _create_raspap_directories + _check_for_old_configs + _optimize_php + _download_latest_files + _change_file_ownership + _create_hostapd_scripts + _create_lighttpd_scripts + _install_lighttpd_configs + _move_config_file + _default_configuration + _configure_networking + _prompt_install_adblock + _prompt_install_openvpn + _install_mobile_clients + _prompt_install_wireguard + _patch_system_files + _install_complete +} -### NOTE: all the below functions are overloadable for system-specific installs +# search for optional installation files names install_feature_*.sh +function _install_mobile_clients() { + if [ "$insiders" == 1 ]; then + _install_log "Installing support for mobile data clients" + for feature in $(ls $webroot_dir/installers/install_feature_*.sh) ; do + source $feature + f=$(basename $feature) + func="_${f%.*}" + if declare -f -F $func > /dev/null; then + echo "Installing $func" + $func || _install_status 1 "Unable to install feature ($func)" + else + _install_status 1 "Install file $f is missing install function $func" + fi + done + fi +} -# Prompts user to set options for installation -function config_installation() { - install_log "Configure installation" - echo "Detected ${version_msg}" - echo "Install directory: ${raspap_dir}" - echo -n "Install to Lighttpd root directory: ${webroot_dir}? [Y/n]: " +# Prompts user to set installation options +function _config_installation() { + if [ "$upgrade" == 1 ]; then + opt=(Upgrade Upgrading upgrade) + else + opt=(Install Installing installation) + fi + _install_log "Configure ${opt[2]}" + _get_linux_distro + echo "Detected OS: ${DESC}" + echo "Using GitHub repository: ${repo} ${branch} branch" + echo "Configuration directory: ${raspap_dir}" + echo -n "lighttpd root: ${webroot_dir}? [Y/n]: " if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - read -e -p < /dev/tty "Enter alternate Lighttpd directory: " -i "/var/www/html" webroot_dir + read -e -p < /dev/tty "Enter alternate lighttpd directory: " -i "/var/www/html" webroot_dir fi else echo -e fi - echo "Install to Lighttpd directory: ${webroot_dir}" - - echo -n "Complete installation with these values? [Y/n]: " + echo "${opt[1]} lighttpd directory: ${webroot_dir}" + if [ "$upgrade" == 1 ]; then + echo "This will upgrade your existing install to version ${RASPAP_RELEASE}" + echo "Your configuration will NOT be changed" + fi + echo -n "Complete ${opt[2]} with these values? [Y/n]: " if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then @@ -60,388 +119,622 @@ function config_installation() { fi } +# Determines host Linux distribution details +function _get_linux_distro() { + if type lsb_release >/dev/null 2>&1; then # linuxbase.org + OS=$(lsb_release -si) + RELEASE=$(lsb_release -sr) + CODENAME=$(lsb_release -sc) + DESC=$(lsb_release -sd) + elif [ -f /etc/os-release ]; then # freedesktop.org + . /etc/os-release + OS=$ID + RELEASE=$VERSION_ID + CODENAME=$VERSION_CODENAME + DESC=$PRETTY_NAME + else + _install_status 1 "Unsupported Linux distribution" + fi +} + +# 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 + php_package="php7.4-cgi" + phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; + 10*|11*) + php_package="php7.3-cgi" + phpcgiconf="/etc/php/7.3/cgi/php.ini" ;; + 9*) + php_package="php7.0-cgi" + phpcgiconf="/etc/php/7.0/cgi/php.ini" ;; + 8) + _install_status 1 "${DESC} and php5 are not supported. Please upgrade." + exit 1 ;; + *) + _install_status 1 "${DESC} is unsupported. Please install on a supported distro." + exit 1 ;; + esac +} + +# Prompts the user to stop & disable Debian's systemd-networkd services. +# It isn't possible to mix Debian networking with dhcpcd. +# On Ubuntu 20.04 / Armbian 22, the systemd-resolved service uses port 53 +# by default which prevents dnsmasq from starting. +function _manage_systemd_services() { + _install_log "Checking for systemd network services" + + services=( "systemd-networkd" "systemd-resolved" ) + for svc in "${services[@]}"; do + # Prompt to disable systemd service + if systemctl is-active --quiet "$svc".service; then + echo -n "Stop and disable ${svc} service? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo -e + else + sudo systemctl stop "$svc".service || _install_status 1 "Unable to stop ${svc}.service" + sudo systemctl disable "$svc".service || _install_status 1 "Unable to disable ${svc}.service" + fi + else + sudo systemctl stop "$svc".service || _install_status 1 "Unable to stop ${svc}.service" + sudo systemctl disable "$svc".service || _install_status 1 "Unable to disable ${svc}.service" + fi + else + echo "${svc}.service is not running (ok)" + fi + done + _install_status 0 +} + # Runs a system software update to make sure we're using all fresh packages -function install_dependencies() { - install_log "Installing required packages" - sudo apt-get install $apt_option lighttpd $php_package git hostapd dnsmasq vnstat || install_error "Unable to install dependencies" +function _install_dependencies() { + _install_log "Installing required packages" + _set_php_package + 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 install $apt_option software-properties-common || _install_status 1 "Unable to install dependency" + sudo add-apt-repository $apt_option ppa:ondrej/php || _install_status 1 "Unable to add-apt-repository ppa:ondrej/php" + else + echo "${php_package} will be installed from the main deb sources list" + fi + if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then + dhcpcd_package="dhcpcd5" + 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 $apt_option lighttpd git hostapd dnsmasq iptables-persistent $php_package $dhcpcd_package vnstat qrencode || _install_status 1 "Unable to install dependencies" + _install_status 0 } # Enables PHP for lighttpd and restarts service for settings to take effect -function enable_php_lighttpd() { - install_log "Enabling PHP for lighttpd" - +function _enable_php_lighttpd() { + _install_log "Enabling PHP for lighttpd" sudo lighttpd-enable-mod fastcgi-php sudo service lighttpd force-reload - sudo systemctl restart lighttpd.service || install_error "Unable to restart lighttpd" + sudo systemctl restart lighttpd.service || _install_status 1 "Unable to restart lighttpd" } # Verifies existence and permissions of RaspAP directory -function create_raspap_directories() { - install_log "Creating RaspAP directories" - if [ -d "$raspap_dir" ]; then - sudo mv $raspap_dir "$raspap_dir.`date +%F-%R`" || install_error "Unable to move old '$raspap_dir' out of the way" +function _create_raspap_directories() { + if [ "$upgrade" == 1 ]; then + if [ -f $raspap_dir/raspap.auth ]; then + _install_log "Moving existing raspap.auth file to /tmp" + sudo mv $raspap_dir/raspap.auth /tmp || _install_status 1 "Unable to backup raspap.auth to /tmp" + fi fi - sudo mkdir -p "$raspap_dir" || install_error "Unable to create directory '$raspap_dir'" + + _install_log "Creating RaspAP directories" + if [ -d "$raspap_dir" ]; then + sudo mv $raspap_dir "$raspap_dir.`date +%F-%R`" || _install_status 1 "Unable to move old '$raspap_dir' out of the way" + fi + sudo mkdir -p "$raspap_dir" || _install_status 1 "Unable to create directory '$raspap_dir'" # Create a directory for existing file backups. sudo mkdir -p "$raspap_dir/backups" # Create a directory to store networking configs + echo "Creating $raspap_dir/networking" sudo mkdir -p "$raspap_dir/networking" # Copy existing dhcpcd.conf to use as base config - cat /etc/dhcpcd.conf | sudo tee -a /etc/raspap/networking/defaults - - sudo chown -R $raspap_user:$raspap_user "$raspap_dir" || install_error "Unable to change file ownership for '$raspap_dir'" + echo "Adding /etc/dhcpcd.conf as base configuration" + cat /etc/dhcpcd.conf | sudo tee -a /etc/raspap/networking/defaults > /dev/null + echo "Changing file ownership of $raspap_dir" + sudo chown -R $raspap_user:$raspap_user "$raspap_dir" || _install_status 1 "Unable to change file ownership for '$raspap_dir'" } # Generate hostapd logging and service control scripts -function create_hostapd_scripts() { - install_log "Creating hostapd logging & control scripts" - sudo mkdir $raspap_dir/hostapd || install_error "Unable to create directory '$raspap_dir/hostapd'" +function _create_hostapd_scripts() { + _install_log "Creating hostapd logging & control scripts" + sudo mkdir $raspap_dir/hostapd || _install_status 1 "Unable to create directory '$raspap_dir/hostapd'" # Move logging shell scripts - sudo cp "$webroot_dir/installers/"*log.sh "$raspap_dir/hostapd" || install_error "Unable to move logging scripts" + sudo cp "$webroot_dir/installers/"*log.sh "$raspap_dir/hostapd" || _install_status 1 "Unable to move logging scripts" # Move service control shell scripts - sudo cp "$webroot_dir/installers/"service*.sh "$raspap_dir/hostapd" || install_error "Unable to move service control scripts" + sudo cp "$webroot_dir/installers/"service*.sh "$raspap_dir/hostapd" || _install_status 1 "Unable to move service control scripts" # Make enablelog.sh and disablelog.sh not writable by www-data group. - sudo chown -c root:"$raspap_user" "$raspap_dir/hostapd/"*.sh || install_error "Unable change owner and/or group" - sudo chmod 750 "$raspap_dir/hostapd/"*.sh || install_error "Unable to change file permissions" + sudo chown -c root:root "$raspap_dir/hostapd/"*.sh || _install_status 1 "Unable change owner and/or group" + sudo chmod 750 "$raspap_dir/hostapd/"*.sh || _install_status 1 "Unable to change file permissions" + _install_status 0 } # Generate lighttpd service control scripts -function create_lighttpd_scripts() { - install_log "Creating lighttpd control scripts" - sudo mkdir $raspap_dir/lighttpd || install_error "Unable to create directory '$raspap_dir/lighttpd" +function _create_lighttpd_scripts() { + _install_log "Creating lighttpd control scripts" + sudo mkdir $raspap_dir/lighttpd || _install_status 1 "Unable to create directory '$raspap_dir/lighttpd" # Move service control shell scripts - sudo cp "$webroot_dir/installers/"configport.sh "$raspap_dir/lighttpd" || install_error "Unable to move service control scripts" + echo "Copying configport.sh to $raspap_dir/lighttpd" + sudo cp "$webroot_dir/installers/"configport.sh "$raspap_dir/lighttpd" || _install_status 1 "Unable to move service control scripts" # Make configport.sh writable by www-data group - sudo chown -c root:"$raspap_user" "$raspap_dir/lighttpd/"*.sh || install_error "Unable change owner and/or group" - sudo chmod 750 "$raspap_dir/lighttpd/"*.sh || install_error "Unable to change file permissions" + echo "Changing file ownership" + sudo chown -c root:root "$raspap_dir/lighttpd/"*.sh || _install_status 1 "Unable change owner and/or group" + sudo chmod 750 "$raspap_dir/lighttpd/"*.sh || _install_status 1 "Unable to change file permissions" + _install_status 0 +} + +# Copy extra config files required to configure lighttpd +function _install_lighttpd_configs() { + _install_log "Copying lighttpd extra config files" + + # Copy config files + echo "Copying 50-raspap-router.conf to /etc/lighttpd/conf-available" + + CONFSRC="$webroot_dir/config/50-raspap-router.conf" + LTROOT=$(grep "server.document-root" /etc/lighttpd/lighttpd.conf | awk -F '=' '{print $2}' | tr -d " \"") + + # Compare values and get difference + HTROOT=${webroot_dir/$LTROOT} + + # Remove trailing slash if present + HTROOT=$(echo "$HTROOT" | sed -e 's/\/$//') + + # Substitute values + awk "{gsub(\"/REPLACE_ME\",\"$HTROOT\")}1" $CONFSRC > /tmp/50-raspap-router.conf + + # Copy into place + sudo cp /tmp/50-raspap-router.conf /etc/lighttpd/conf-available/ || _install_status 1 "Unable to copy lighttpd config file into place." + + # Link into conf-enabled + echo "Creating link to /etc/lighttpd/conf-enabled" + if ! [ -L $raspap_router ]; then + echo "Existing 50-raspap-router.conf found. Unlinking." + sudo unlink "/etc/lighttpd/conf-enabled/50-raspap-router.conf" + fi + echo "Linking 50-raspap-router.conf to /etc/lighttpd/conf-enabled/" + sudo ln -s "/etc/lighttpd/conf-available/50-raspap-router.conf" "/etc/lighttpd/conf-enabled/50-raspap-router.conf" || _install_status 1 "Unable to symlink lighttpd config file (this is normal if the link already exists)." + sudo systemctl restart lighttpd.service || _install_status 1 "Unable to restart lighttpd" + _install_status 0 +} + +# Prompt to install ad blocking +function _prompt_install_adblock() { + _install_log "Configure ad blocking (Beta)" + echo -n "Install ad blocking and enable list management? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + _install_adblock + fi + elif [ "$adblock_option" == 1 ]; then + _install_adblock + else + echo "(Skipped)" + fi +} + +# Download notracking adblock lists and enable option +function _install_adblock() { + _install_log "Creating ad blocking base configuration (Beta)" + if [ ! -d "$raspap_dir/adblock" ]; then + echo "Creating $raspap_dir/adblock" + sudo mkdir -p "$raspap_dir/adblock" + fi + if [ ! -f /tmp/hostnames.txt ]; then + echo "Fetching latest hostnames list" + wget ${notracking_url}hostnames.txt -q --show-progress --progress=bar:force -O /tmp/hostnames.txt 2>&1 \ + || _install_status 1 "Unable to download notracking hostnames" + fi + if [ ! -f /tmp/domains.txt ]; then + echo "Fetching latest domains list" + wget ${notracking_url}domains.txt -q --show-progress --progress=bar:force -O /tmp/domains.txt 2>&1 \ + || _install_status 1 "Unable to download notracking domains" + fi + echo "Adding blocklists to $raspap_dir/adblock" + sudo cp /tmp/hostnames.txt $raspap_dir/adblock || _install_status 1 "Unable to move notracking hostnames" + sudo cp /tmp/domains.txt $raspap_dir/adblock || _install_status 1 "Unable to move notracking domains" + + echo "Moving and setting permissions for blocklist update script" + sudo cp "$webroot_dir/installers/"update_blocklist.sh "$raspap_dir/adblock" || _install_status 1 "Unable to move blocklist update script" + + # Make blocklists writable by www-data group, restrict update scripts to root + sudo chown -c root:"$raspap_user" "$raspap_dir/adblock/"*.txt || _install_status 1 "Unable to change owner/group" + sudo chown -c root:root "$raspap_dir/adblock/"*.sh || _install_status 1 "Unable to change owner/group" + sudo chmod 750 "$raspap_dir/adblock/"*.sh || install_error "Unable to change file permissions" + + # Create 090_adblock.conf and write values to /etc/dnsmasq.d + if [ ! -f "$raspap_adblock" ]; then + echo "Adding 090_addblock.conf to /etc/dnsmasq.d" + sudo touch "$raspap_adblock" + echo "conf-file=$raspap_dir/adblock/domains.txt" | sudo tee -a "$raspap_adblock" > /dev/null || _install_status 1 "Unable to write to $raspap_adblock" + echo "addn-hosts=$raspap_dir/adblock/hostnames.txt" | sudo tee -a "$raspap_adblock" > /dev/null || _install_status 1 "Unable to write to $raspap_adblock" + fi + + # Remove dhcp-option=6 in dnsmasq.d/090_wlan0.conf to force local DNS resolution for DHCP clients + echo "Enabling local DNS name resolution for DHCP clients" + sudo sed -i '/dhcp-option=6/d' $raspap_wlan0 || _install_status 1 "Unable to modify $raspap_dnsmasq" + + echo "Enabling ad blocking management option" + sudo sed -i "s/\('RASPI_ADBLOCK_ENABLED', \)false/\1true/g" "$webroot_dir/includes/config.php" || _install_status 1 "Unable to modify config.php" + _install_status 0 } # Prompt to install openvpn -function prompt_install_openvpn() { - install_log "Setting up OpenVPN support (beta)" +function _prompt_install_openvpn() { + _install_log "Configure OpenVPN support" echo -n "Install OpenVPN and enable client configuration? [Y/n]: " if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else - install_openvpn + _install_openvpn fi elif [ "$ovpn_option" == 1 ]; then - install_openvpn + _install_openvpn + else + echo "(Skipped)" fi } +# Prompt to install WireGuard +function _prompt_install_wireguard() { + _install_log "Configure WireGuard support" + echo -n "Install WireGuard and enable VPN tunnel configuration? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + _install_wireguard + fi + elif [ "$wg_option" == 1 ]; then + _install_wireguard + else + echo "(Skipped)" + fi +} + +# Install Wireguard from the Debian unstable distro +function _install_wireguard() { + _install_log "Configure WireGuard support" + if [ "$OS" == "Debian" ]; then + echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list || _install_status 1 "Unable to add Debian backports repo" + fi + echo "Installing wireguard from apt" + sudo apt-get install -y wireguard || _install_status 1 "Unable to install wireguard" + echo "Enabling wg-quick@wg0" + sudo systemctl enable wg-quick@wg0 || _install_status 1 "Failed to enable wg-quick service" + echo "Enabling WireGuard management option" + sudo sed -i "s/\('RASPI_WIREGUARD_ENABLED', \)false/\1true/g" "$webroot_dir/includes/config.php" || _install_status 1 "Unable to modify config.php" + _install_status 0 +} + # Install openvpn and enable client configuration option -function install_openvpn() { - install_log "Installing OpenVPN and enabling client configuration" - sudo apt-get install -y openvpn || install_error "Unable to install openvpn" - sudo sed -i "s/\('RASPI_OPENVPN_ENABLED', \)false/\1true/g" "$webroot_dir/includes/config.php" || install_error "Unable to modify config.php" +function _install_openvpn() { + _install_log "Installing OpenVPN and enabling client configuration" + echo "Adding packages via apt-get" + sudo apt-get install -y openvpn || _install_status 1 "Unable to install openvpn" + sudo sed -i "s/\('RASPI_OPENVPN_ENABLED', \)false/\1true/g" "$webroot_dir/includes/config.php" || _install_status 1 "Unable to modify config.php" echo "Enabling openvpn-client service on boot" - sudo systemctl enable openvpn-client@client || install_error "Unable to enable openvpn-client daemon" - create_openvpn_scripts || install_error "Unable to create openvpn control scripts" + sudo systemctl enable openvpn-client@client || _install_status 1 "Unable to enable openvpn-client daemon" + _create_openvpn_scripts || _install_status 1 "Unable to create openvpn control scripts" } # Generate openvpn logging and auth control scripts -function create_openvpn_scripts() { - install_log "Creating OpenVPN control scripts" - sudo mkdir $raspap_dir/openvpn || install_error "Unable to create directory '$raspap_dir/openvpn'" +function _create_openvpn_scripts() { + _install_log "Creating OpenVPN control scripts" + sudo mkdir $raspap_dir/openvpn || _install_status 1 "Unable to create directory '$raspap_dir/openvpn'" - # Move service auth control shell scripts - sudo cp "$webroot_dir/installers/"configauth.sh "$raspap_dir/openvpn" || install_error "Unable to move auth control script" - # Make configauth.sh writable by www-data group - sudo chown -c root:"$raspap_user" "$raspap_dir/openvpn/"*.sh || install_error "Unable change owner and/or group" - sudo chmod 750 "$raspap_dir/openvpn/"*.sh || install_error "Unable to change file permissions" + # Move service auth control & logging shell scripts + sudo cp "$webroot_dir/installers/"configauth.sh "$raspap_dir/openvpn" || _install_status 1 "Unable to move auth control script" + sudo cp "$webroot_dir/installers/"openvpnlog.sh "$raspap_dir/openvpn" || _install_status 1 "Unable to move logging script" + # Restrict script execution to root user + sudo chown -c root:root "$raspap_dir/openvpn/"*.sh || _install_status 1 "Unable change owner and/or group" + sudo chmod 750 "$raspap_dir/openvpn/"*.sh || _install_status 1 "Unable to change file permissions" + _install_status 0 } # Fetches latest files from github to webroot -function download_latest_files() { +function _download_latest_files() { if [ ! -d "$webroot_dir" ]; then - sudo mkdir -p $webroot_dir || install_error "Unable to create new webroot directory" + sudo mkdir -p $webroot_dir || _install_status 1 "Unable to create new webroot directory" fi if [ -d "$webroot_dir" ]; then - sudo mv $webroot_dir "$webroot_dir.`date +%F-%R`" || install_error "Unable to remove old webroot directory" + sudo mv $webroot_dir "$webroot_dir.`date +%F-%R`" || _install_status 1 "Unable to remove old webroot directory" fi - install_log "Cloning latest files from github" - git clone --depth 1 https://github.com/billz/raspap-webgui /tmp/raspap-webgui || install_error "Unable to download files from github" - sudo mv /tmp/raspap-webgui $webroot_dir || install_error "Unable to move raspap-webgui to web root" + _install_log "Cloning latest files from github" + 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" + + if [ "$upgrade" == 1 ]; then + _install_log "Applying existing configuration to ${webroot_dir}/includes" + sudo mv /tmp/config.php $webroot_dir/includes || _install_status 1 "Unable to move config.php to ${webroot_dir}/includes" + + if [ -f /tmp/raspap.auth ]; then + _install_log "Applying existing authentication file to ${raspap_dir}" + sudo mv /tmp/raspap.auth $raspap_dir || _install_status 1 "Unable to restore authentification credentials file to ${raspap_dir}" + fi + fi + + _install_status 0 } # Sets files ownership in web root directory -function change_file_ownership() { +function _change_file_ownership() { if [ ! -d "$webroot_dir" ]; then - install_error "Web root directory doesn't exist" + _install_status 1 "Web root directory doesn't exist" fi - install_log "Changing file ownership in web root directory" - sudo chown -R $raspap_user:$raspap_user "$webroot_dir" || install_error "Unable to change file ownership for '$webroot_dir'" + _install_log "Changing file ownership in web root directory" + sudo chown -R $raspap_user:$raspap_user "$webroot_dir" || _install_status 1 "Unable to change file ownership for '$webroot_dir'" } -# Check for existing /etc/network/interfaces and /etc/hostapd/hostapd.conf files -function check_for_old_configs() { - if [ -f /etc/network/interfaces ]; then - sudo cp /etc/network/interfaces "$raspap_dir/backups/interfaces.`date +%F-%R`" - sudo ln -sf "$raspap_dir/backups/interfaces.`date +%F-%R`" "$raspap_dir/backups/interfaces" - fi +# Check for existing configuration files +function _check_for_old_configs() { + if [ "$upgrade" == 1 ]; then + _install_log "Moving existing configuration to /tmp" + sudo mv $webroot_dir/includes/config.php /tmp || _install_status 1 "Unable to move config.php to /tmp" + else + _install_log "Backing up existing configs to ${raspap_dir}/backups" + if [ -f /etc/network/interfaces ]; then + sudo cp /etc/network/interfaces "$raspap_dir/backups/interfaces.`date +%F-%R`" + sudo ln -sf "$raspap_dir/backups/interfaces.`date +%F-%R`" "$raspap_dir/backups/interfaces" + fi - if [ -f /etc/hostapd/hostapd.conf ]; then - sudo cp /etc/hostapd/hostapd.conf "$raspap_dir/backups/hostapd.conf.`date +%F-%R`" - sudo ln -sf "$raspap_dir/backups/hostapd.conf.`date +%F-%R`" "$raspap_dir/backups/hostapd.conf" - fi + if [ -f /etc/hostapd/hostapd.conf ]; then + sudo cp /etc/hostapd/hostapd.conf "$raspap_dir/backups/hostapd.conf.`date +%F-%R`" + sudo ln -sf "$raspap_dir/backups/hostapd.conf.`date +%F-%R`" "$raspap_dir/backups/hostapd.conf" + fi - if [ -f /etc/dnsmasq.conf ]; then - sudo cp /etc/dnsmasq.conf "$raspap_dir/backups/dnsmasq.conf.`date +%F-%R`" - sudo ln -sf "$raspap_dir/backups/dnsmasq.conf.`date +%F-%R`" "$raspap_dir/backups/dnsmasq.conf" - fi + if [ -f $raspap_default ]; then + sudo cp $raspap_default "$raspap_dir/backups/090_raspap.conf.`date +%F-%R`" + sudo ln -sf "$raspap_dir/backups/090_raspap.conf.`date +%F-%R`" "$raspap_dir/backups/090_raspap.conf" + fi - if [ -f /etc/dhcpcd.conf ]; then - sudo cp /etc/dhcpcd.conf "$raspap_dir/backups/dhcpcd.conf.`date +%F-%R`" - sudo ln -sf "$raspap_dir/backups/dhcpcd.conf.`date +%F-%R`" "$raspap_dir/backups/dhcpcd.conf" - fi + if [ -f $raspap_wlan0 ]; then + sudo cp $raspap_wlan0 "$raspap_dir/backups/090_wlan0.conf.`date +%F-%R`" + sudo ln -sf "$raspap_dir/backups/090_wlan0.conf.`date +%F-%R`" "$raspap_dir/backups/090_wlan0.conf" + fi - if [ -f /etc/rc.local ]; then - sudo cp /etc/rc.local "$raspap_dir/backups/rc.local.`date +%F-%R`" - sudo ln -sf "$raspap_dir/backups/rc.local.`date +%F-%R`" "$raspap_dir/backups/rc.local" + if [ -f /etc/dhcpcd.conf ]; then + sudo cp /etc/dhcpcd.conf "$raspap_dir/backups/dhcpcd.conf.`date +%F-%R`" + sudo ln -sf "$raspap_dir/backups/dhcpcd.conf.`date +%F-%R`" "$raspap_dir/backups/dhcpcd.conf" + fi + + for file in /etc/systemd/network/raspap-*.net*; do + if [ -f "${file}" ]; then + filename=$(basename $file) + sudo cp "$file" "${raspap_dir}/backups/${filename}.`date +%F-%R`" + sudo ln -sf "${raspap_dir}/backups/${filename}.`date +%F-%R`" "${raspap_dir}/backups/${filename}" + fi + done fi + _install_status 0 } # Move configuration file to the correct location -function move_config_file() { +function _move_config_file() { if [ ! -d "$raspap_dir" ]; then - install_error "'$raspap_dir' directory doesn't exist" + _install_status 1 "'$raspap_dir' directory doesn't exist" fi - install_log "Moving configuration file to '$raspap_dir'" - sudo cp "$webroot_dir"/raspap.php "$raspap_dir" || install_error "Unable to move files to '$raspap_dir'" - sudo chown -R $raspap_user:$raspap_user "$raspap_dir" || install_error "Unable to change file ownership for '$raspap_dir'" + # Copy config file and make writable by www-data group + _install_log "Moving configuration file to $raspap_dir" + sudo cp "$webroot_dir"/raspap.php "$raspap_dir" || _install_status 1 "Unable to move files to '$raspap_dir'" + sudo chown -c $raspap_user:"$raspap_user" "$raspap_dir"/raspap.php || _install_status 1 "Unable change owner and/or group" } # Set up default configuration -function default_configuration() { - install_log "Setting up hostapd" - if [ -f /etc/default/hostapd ]; then - sudo mv /etc/default/hostapd /tmp/default_hostapd.old || install_error "Unable to remove old /etc/default/hostapd file" - fi - sudo cp $webroot_dir/config/default_hostapd /etc/default/hostapd || install_error "Unable to move hostapd defaults file" - sudo cp $webroot_dir/config/hostapd.conf /etc/hostapd/hostapd.conf || install_error "Unable to move hostapd configuration file" - sudo cp $webroot_dir/config/dnsmasq.conf /etc/dnsmasq.conf || install_error "Unable to move dnsmasq configuration file" - sudo cp $webroot_dir/config/dhcpcd.conf /etc/dhcpcd.conf || install_error "Unable to move dhcpcd configuration file" +function _default_configuration() { + if [ "$upgrade" == 0 ]; then + _install_log "Applying default configuration to installed services" - if [ ! -f "$webroot_dir/includes/config.php" ]; then - sudo cp "$webroot_dir/config/config.php" "$webroot_dir/includes/config.php" - fi + sudo cp $webroot_dir/config/hostapd.conf /etc/hostapd/hostapd.conf || _install_status 1 "Unable to move hostapd configuration file" + sudo cp $webroot_dir/config/090_raspap.conf $raspap_default || _install_status 1 "Unable to move dnsmasq default configuration file" + sudo cp $webroot_dir/config/090_wlan0.conf $raspap_wlan0 || _install_status 1 "Unable to move dnsmasq wlan0 configuration file" + sudo cp $webroot_dir/config/dhcpcd.conf /etc/dhcpcd.conf || _install_status 1 "Unable to move dhcpcd configuration file" + sudo cp $webroot_dir/config/defaults.json $raspap_network || _install_status 1 "Unable to move defaults.json settings" - # Generate required lines for Rasp AP to place into rc.local file. - # #RASPAP is for removal script - lines=( - 'echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward #RASPAP' - 'iptables -t nat -A POSTROUTING -j MASQUERADE #RASPAP' - 'iptables -t nat -A POSTROUTING -s 192.168.50.0\/24 ! -d 192.168.50.0\/24 -j MASQUERADE #RASPAP' - ) - - for line in "${lines[@]}"; do - if grep "$line" /etc/rc.local > /dev/null; then - echo "$line: Line already added" + echo "Changing file ownership of ${raspap_network}defaults.json" + sudo chown $raspap_user:$raspap_user "$raspap_network"/defaults.json || _install_status 1 "Unable to change file ownership for defaults.json" + + echo "Checking for existence of /etc/dnsmasq.d" + [ -d /etc/dnsmasq.d ] || sudo mkdir /etc/dnsmasq.d + + # Copy OS-specific bridge default config + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|19.10|18.04) ]]; then + echo "Copying bridged AP config to /etc/netplan" + sudo cp $webroot_dir/config/raspap-bridge-br0.netplan /etc/netplan/raspap-bridge-br0.netplan || _install_status 1 "Unable to move br0 netplan file" else - sudo sed -i "s/^exit 0$/$line\nexit 0/" /etc/rc.local - echo "Adding line $line" + echo "Copying bridged AP config to /etc/systemd/network" + sudo cp $webroot_dir/config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev || _install_status 1 "Unable to move br0 netdev file" + sudo cp $webroot_dir/config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network || _install_status 1 "Unable to move br0 member file" + fi + + echo "Copying primary RaspAP config to includes/config.php" + if [ ! -f "$webroot_dir/includes/config.php" ]; then + sudo cp "$webroot_dir/config/config.php" "$webroot_dir/includes/config.php" + fi + _install_status 0 + fi +} + +# Install and enable RaspAP daemon +function _enable_raspap_daemon() { + _install_log "Enabling RaspAP daemon" + echo "Disable with: sudo systemctl disable raspapd.service" + sudo cp $webroot_dir/installers/raspapd.service /lib/systemd/system/ || _install_status 1 "Unable to move raspap.service file" + sudo systemctl daemon-reload + sudo systemctl enable raspapd.service || _install_status 1 "Failed to enable raspap.service" +} + +# Configure IP forwarding, set IP tables rules, prompt to install RaspAP daemon +function _configure_networking() { + _install_log "Configuring networking" + echo "Enabling IP forwarding" + echo "net.ipv4.ip_forward=1" | sudo tee $raspap_sysctl > /dev/null || _install_status 1 "Unable to set IP forwarding" + sudo sysctl -p $raspap_sysctl || _install_status 1 "Unable to execute sysctl" + sudo /etc/init.d/procps restart || _install_status 1 "Unable to execute procps" + + echo "Checking iptables rules" + rules=( + "-A POSTROUTING -j MASQUERADE" + "-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE" + ) + for rule in "${rules[@]}"; do + if grep -- "$rule" $rulesv4 > /dev/null; then + echo "Rule already exits: ${rule}" + else + rule=$(sed -e 's/^\(-A POSTROUTING\)/-t nat \1/' <<< $rule) + echo "Adding rule: ${rule}" + sudo iptables $rule || _install_status 1 "Unable to execute iptables" + added=true fi done - - # Force a reload of new settings in /etc/rc.local - sudo systemctl restart rc-local.service - sudo systemctl daemon-reload + # Persist rules if added + if [ "$added" = true ]; then + echo "Persisting IP tables rules" + sudo iptables-save | sudo tee $rulesv4 > /dev/null || _install_status 1 "Unable to execute iptables-save" + fi # Prompt to install RaspAP daemon echo -n "Enable RaspAP control service (Recommended)? [Y/n]: " if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else - enable_raspap_daemon + _enable_raspap_daemon fi else echo -e - enable_raspap_daemon + _enable_raspap_daemon fi -} + _install_status 0 + } -# Install and enable RaspAP daemon -function enable_raspap_daemon() { - install_log "Enabling RaspAP daemon" - echo "Disable with: sudo systemctl disable raspap.service" - sudo cp $webroot_dir/installers/raspap.service /lib/systemd/system/ || install_error "Unable to move raspap.service file" - sudo systemctl enable raspap.service || install_error "Failed to enable raspap.service" -} +# Add sudoers file to /etc/sudoers.d/ and set file permissions +function _patch_system_files() { -# Add a single entry to the sudoers file -function sudo_add() { - sudo bash -c "echo \"$raspap_user ALL=(ALL) NOPASSWD:$1\" | (EDITOR=\"tee -a\" visudo)" \ - || install_error "Unable to patch /etc/sudoers" -} - -# Adds www-data user to the sudoers file with restrictions on what the user can execute -function patch_system_files() { - - # Set commands array - cmds=( - "/sbin/ifdown" - "/sbin/ifup" - "/bin/cat /etc/wpa_supplicant/wpa_supplicant.conf" - "/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf" - "/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant.conf" - "/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf" - "/sbin/wpa_cli -i wlan[0-9] scan_results" - "/sbin/wpa_cli -i wlan[0-9] scan" - "/sbin/wpa_cli -i wlan[0-9] reconfigure" - "/sbin/wpa_cli -i wlan[0-9] select_network" - "/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf" - "/bin/systemctl start hostapd.service" - "/bin/systemctl stop hostapd.service" - "/bin/systemctl start dnsmasq.service" - "/bin/systemctl stop dnsmasq.service" - "/bin/systemctl start openvpn-client@client" - "/bin/systemctl stop openvpn-client@client" - "/bin/cp /tmp/ovpnclient.ovpn /etc/openvpn/client/client.conf" - "/bin/cp /tmp/authdata /etc/openvpn/client/login.conf" - "/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.conf" - "/bin/cp /tmp/dhcpddata /etc/dhcpcd.conf" - "/sbin/shutdown -h now" - "/sbin/reboot" - "/sbin/ip link set wlan[0-9] down" - "/sbin/ip link set wlan[0-9] up" - "/sbin/ip -s a f label wlan[0-9]" - "/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf" - "/etc/raspap/hostapd/enablelog.sh" - "/etc/raspap/hostapd/disablelog.sh" - "/etc/raspap/hostapd/servicestart.sh" - "/etc/raspap/lighttpd/configport.sh" - "/etc/raspap/openvpn/configauth.sh" - ) - - # Check if sudoers needs patching - if [ $(sudo grep -c $raspap_user /etc/sudoers) -ne ${#cmds[@]} ] - then - # Sudoers file has incorrect number of commands. Wiping them out. - install_log "Cleaning system sudoers file" - sudo sed -i "/$raspap_user/d" /etc/sudoers - install_log "Patching system sudoers file" - # patch /etc/sudoers file - for cmd in "${cmds[@]}" - do - sudo_add $cmd - IFS=$'\n' - done - else - install_log "Sudoers file already patched" - fi + # Create sudoers + _install_log "Adding raspap.sudoers to ${raspap_sudoers}" + sudo cp "$webroot_dir/installers/raspap.sudoers" $raspap_sudoers || _install_status 1 "Unable to apply raspap.sudoers to $raspap_sudoers" + sudo chmod 0440 $raspap_sudoers || _install_status 1 "Unable to change file permissions for $raspap_sudoers" # Add symlink to prevent wpa_cli cmds from breaking with multiple wlan interfaces - install_log "Symlinked wpa_supplicant hooks for multiple wlan interfaces" + _install_log "Symlinked wpa_supplicant hooks for multiple wlan interfaces" if [ ! -f /usr/share/dhcpcd/hooks/10-wpa_supplicant ]; then sudo ln -s /usr/share/dhcpcd/hooks/10-wpa_supplicant /etc/dhcp/dhclient-enter-hooks.d/ fi # Unmask and enable hostapd.service - install_log "Unmasking and enabling hostapd service" + _install_log "Unmasking and enabling hostapd service" sudo systemctl unmask hostapd.service sudo systemctl enable hostapd.service + + # Set correct DAEMON_CONF path for hostapd (Ubuntu20 + Armbian22) + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|19.10|18.04) ]]; then + conf="/etc/default/hostapd" + key="DAEMON_CONF" + value="/etc/hostapd/hostapd.conf" + echo "Setting default ${key} path to ${value}" + sudo sed -i -E "/^#?$key/ { s/^#//; s%=.*%=\"$value\"%; }" "$conf" || _install_status 1 "Unable to set value in ${conf}" + fi + _install_status 0 } # Optimize configuration of php-cgi. -function optimize_php() { - install_log "Optimize PHP configuration" - if [ ! -f "$phpcgiconf" ]; then - install_warning "PHP configuration could not be found." - return - fi - - # Backup php.ini and create symlink for restoring. - datetimephpconf=$(date +%F-%R) - sudo cp "$phpcgiconf" "$raspap_dir/backups/php.ini.$datetimephpconf" - sudo ln -sf "$raspap_dir/backups/php.ini.$datetimephpconf" "$raspap_dir/backups/php.ini" - - echo -n "Enable HttpOnly for session cookies (Recommended)? [Y/n]: " - if [ "$assume_yes" == 0 ]; then - read answer < /dev/tty - if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e - else - php_session_cookie=1; +function _optimize_php() { + if [ "$upgrade" == 0 ]; then + _install_log "Optimize PHP configuration" + if [ ! -f "$phpcgiconf" ]; then + _install_status 2 "PHP configuration could not be found." + return fi - fi - if [ "$assume_yes" == 1 ] || [ "$php_session_cookie" == 1 ]; then - echo "Php-cgi enabling session.cookie_httponly." - sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' "$phpcgiconf" - fi + # Backup php.ini and create symlink for restoring. + datetimephpconf=$(date +%F-%R) + sudo cp "$phpcgiconf" "$raspap_dir/backups/php.ini.$datetimephpconf" + sudo ln -sf "$raspap_dir/backups/php.ini.$datetimephpconf" "$raspap_dir/backups/php.ini" - if [ "$php_package" = "php7.1-cgi" ]; then - echo -n "Enable PHP OPCache (Recommended)? [Y/n]: " + echo -n "Enable HttpOnly for session cookies (Recommended)? [Y/n]: " if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then echo -e else - php_opcache=1; + php_session_cookie=1; fi fi - if [ "$assume_yes" == 1 ] || [ "$phpopcache" == 1 ]; then - echo -e "Php-cgi enabling opcache.enable." - sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' "$phpcgiconf" - # Make sure opcache extension is turned on. - if [ -f "/usr/sbin/phpenmod" ]; then - sudo phpenmod opcache - else - install_warning "phpenmod not found." + if [ "$assume_yes" == 1 ] || [ "$php_session_cookie" == 1 ]; then + echo "Php-cgi enabling session.cookie_httponly." + sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' "$phpcgiconf" + fi + + if [ "$php_package" = "php7.1-cgi" ]; then + echo -n "Enable PHP OPCache (Recommended)? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo -e + else + php_opcache=1; + fi + fi + + if [ "$assume_yes" == 1 ] || [ "$phpopcache" == 1 ]; then + echo -e "Php-cgi enabling opcache.enable." + sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' "$phpcgiconf" + # Make sure opcache extension is turned on. + if [ -f "/usr/sbin/phpenmod" ]; then + sudo phpenmod opcache + else + _install_status 2 "phpenmod not found." + fi fi fi fi } -function install_complete() { - install_log "Installation completed!" - +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 [ "$assume_yes" == 0 ]; then # Prompt to reboot if wired ethernet (eth0) is connected. # With default_configuration this will create an active AP on restart. if ip a | grep -q ': eth0:.*state UP'; then - echo -n "The system needs to be rebooted as a final step. Reboot now? [y/N]: " + echo -n "The system needs to be rebooted as a final step. Reboot now? [Y/n]: " read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then echo "Installation reboot aborted." exit 0 fi - sudo shutdown -r now || install_error "Unable to execute shutdown" + sudo shutdown -r now || _install_status 1 "Unable to execute shutdown" fi fi } -function install_raspap() { - display_welcome - config_installation - update_system_packages - install_dependencies - enable_php_lighttpd - create_raspap_directories - optimize_php - check_for_old_configs - download_latest_files - change_file_ownership - create_hostapd_scripts - create_lighttpd_scripts - move_config_file - default_configuration - prompt_install_openvpn - patch_system_files - install_complete -} diff --git a/installers/configauth.sh b/installers/configauth.sh index 5fc6965a..e3cb8ccf 100755 --- a/installers/configauth.sh +++ b/installers/configauth.sh @@ -6,9 +6,17 @@ # @author billz # license: GNU General Public License v3.0 +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +#set -o xtrace + file=$1 auth=$2 interface=$3 +readonly rulesv4="/etc/iptables/rules.v4" if [ "$auth" = 1 ]; then echo "Enabling auth-user-pass in OpenVPN client.conf" @@ -22,25 +30,27 @@ if [ "$auth" = 1 ]; then fi fi -# Generate iptables entries to place into rc.local file. -# #RASPAP is for uninstall script -echo "Checking iptables rules for $interface" - -lines=( -"iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE #RASPAP" -"iptables -A FORWARD -i tun0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT #RASPAP" -"iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT #RASPAP" +# Configure NAT and forwarding with iptables +echo "Checking iptables rules" +rules=( +"-A POSTROUTING -o tun0 -j MASQUERADE" +"-A FORWARD -i tun0 -o ${interface} -m state --state RELATED,ESTABLISHED -j ACCEPT" +"-A FORWARD -i ${interface} -o tun0 -j ACCEPT" ) -for line in "${lines[@]}"; do - if grep "$line" /etc/rc.local > /dev/null; then - else - sudo sed -i "s/^exit 0$/$line\nexit 0/" /etc/rc.local - echo "Adding rule: $line" +for rule in "${rules[@]}"; do + if grep -- "$rule" $rulesv4 > /dev/null; then + echo "Rule already exits: ${rule}" + else + rule=$(sed -e 's/^\(-A POSTROUTING\)/-t nat \1/' <<< $rule) + echo "Adding rule: ${rule}" + sudo iptables $rule + added=true fi done -# Force a reload of new settings in /etc/rc.local -sudo systemctl restart rc-local.service -sudo systemctl daemon-reload +if [ "$added" = true ]; then + echo "Persisting IP tables rules" + sudo iptables-save | sudo tee $rulesv4 > /dev/null +fi diff --git a/installers/configport.sh b/installers/configport.sh index 999726ce..b4f44e33 100755 --- a/installers/configport.sh +++ b/installers/configport.sh @@ -1,12 +1,20 @@ #!/bin/bash # -# Updates lighttpd server.port and restarts the service +# Updates lighttpd config settings and restarts the service # @author billz # license: GNU General Public License v3.0 +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +#set -o xtrace + server_port=$1 -lighttpd_conf=$2 -host=$3 +server_bind=$2 +lighttpd_conf=$3 +host=$4 restart_service=0 while :; do @@ -25,11 +33,22 @@ if [ "$restart_service" = 1 ]; then echo "Restarting lighttpd in 3 seconds..." sleep 3 systemctl restart lighttpd.service -else - echo "Changing lighttpd server.port to $server_port..." +fi +if [ -n "$server_port" ]; then + echo "Changing lighttpd server.port to $server_port ..." sed -i "s/^\(server\.port *= *\)[0-9]*/\1$server_port/g" "$lighttpd_conf" - - echo "RaspAP will now be available at $host:$server_port" - echo "Restart lighttpd for new setting to take effect" + echo "RaspAP will now be available at port $server_port" + conf_change=1 +fi +if [ -n "$server_bind" ]; then + echo "Changing lighttpd server.bind to $server_bind ..." + grep -q 'server.bind' "$lighttpd_conf" && \ + sed -i "s/^\(server\.bind.*= \)\".*\"*/\1\"$server_bind\"/g" "$lighttpd_conf" || \ + printf "server.bind \t\t\t\t = \"$server_bind\"\n" >> "$lighttpd_conf" + echo "RaspAP will now be available at address $server_bind" + conf_change=1 +fi +if [ "$conf_change" == 1 ]; then + echo "Restart lighttpd for new settings to take effect" fi diff --git a/installers/enablelog.sh b/installers/enablelog.sh index 9985d626..84a714b8 100755 --- a/installers/enablelog.sh +++ b/installers/enablelog.sh @@ -1,4 +1,3 @@ #!/bin/bash /bin/sed -i 's|#DAEMON_OPTS=""|DAEMON_OPTS=" -f /tmp/hostapd.log"|' /etc/default/hostapd touch /tmp/hostapd.log -chmod o+r /tmp/hostapd.log diff --git a/installers/install_feature_clients.sh b/installers/install_feature_clients.sh new file mode 100644 index 00000000..e1a6ca92 --- /dev/null +++ b/installers/install_feature_clients.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# RaspAP feature installation: handling of mobile data clients and client configuration +# to be sources by the RaspAP installer script +# Author: @zbchristian +# Author URI: https://github.com/zbchristian/ +# License: GNU General Public License v3.0 +# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE + +# path for mobile modem scripts +readonly raspap_clients_scripts="/usr/local/sbin" +# +# table of mobile network operators - links the 5 digit operator code (from the modem) with a clear text operator name +readonly raspap_clients_operator_table="https://raw.githubusercontent.com/musalbas/mcc-mnc-table/master/mcc-mnc-table.csv" + +function _install_feature_clients() { + name="feature clients" + + _install_log "Install $name" + + _install_log " - required packages for mobile data clients" + sudo apt-get -y install wvdial socat bc || _install_status 1 "Unable to install dependencies for $name" + + _install_log " - copy configuration files and scripts" + # Move scripts + sudo cp "$webroot_dir/config/client_config/"*.sh "$raspap_clients_scripts/" || _install_status 1 "Unable to move client scripts ($name)" + sudo chmod a+rx "$raspap_clients_scripts/"*.sh || _install_status 1 "Unable to chmod client scripts ($name)" + # wget $raspap_clients_operator_table -o "$raspap_clients_scripts/"mcc-mnc-table.csv || _install_status 1 "Unable to wget operator table ($name)" + sudo cp "$webroot_dir/config/client_config/mcc-mnc-table.csv" "$raspap_clients_scripts/" || _install_status 1 "Unable to move client data ($name)" + # wvdial settings + sudo cp "$webroot_dir/config/client_config/wvdial.conf" "/etc/" || _install_status 1 "Unable to install client configuration ($name)" + sudo cp "$webroot_dir/config/client_config/interfaces" "/etc/network/interfaces" || _install_status 1 "Unable to install interface settings ($name)" + # udev rules/services to auto start mobile data services + sudo cp "$webroot_dir/config/client_config/70-mobile-data-sticks.rules" "/etc/udev/rules.d/" || _install_status 1 "Unable to install client udev rules ($name)" + sudo cp "$webroot_dir/config/client_config/80-raspap-net-devices.rules" "/etc/udev/rules.d/" || _install_status 1 "Unable to install client udev rules ($name)" + sudo cp "$webroot_dir/config/client_config/"*.service "/etc/systemd/system/" || _install_status 1 "Unable to install client startup services ($name)" + # client configuration and udev rule templates + sudo cp "$webroot_dir/config/client_udev_prototypes.json" "/etc/raspap/networking/" || _install_status 1 "Unable to install client configuration ($name)" + _install_status 0 +} diff --git a/installers/install_feature_firewall.sh b/installers/install_feature_firewall.sh new file mode 100644 index 00000000..a2eecdc7 --- /dev/null +++ b/installers/install_feature_firewall.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# RaspAP feature installation: Firewall +# to be sources by the RaspAP installer script +# Author: @zbchristian +# Author URI: https://github.com/zbchristian/ +# License: GNU General Public License v3.0 +# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE + +function _install_feature_firewall() { + name="feature firewall" + + _install_log "Install $name" + # create config dir + sudo mkdir "$raspap_network/firewall" || _install_status 1 "Unable to create firewall config directory" + # copy firewall configuration + sudo cp "$webroot_dir/config/iptables_rules.json" "$raspap_network/firewall/" || _install_status 1 "Unable to copy iptables templates" + sudo chown $raspap_user:$raspap_user -R "$raspap_network/firewall" || _install_status 1 "Unable to change ownership of firewall directory and files " + _install_status 0 +} diff --git a/installers/minwrite.sh b/installers/minwrite.sh new file mode 100755 index 00000000..b4b2df21 --- /dev/null +++ b/installers/minwrite.sh @@ -0,0 +1,179 @@ +#!/bin/bash +# +# RaspAP minimal microSD card write operation +# Original author: @zbchristian +# Original source URI: https://github.com/RaspAP/raspap-tools +# Modified by: @billz +# License: GNU General Public License v3.0 +# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE +# +# Limits microSD card write operation to a minimum by moving temporary and log files to RAM. +# Several packages are removed and the default logging service is replaced. +# The file system is still in read/write mode, so RaspAP settings can be saved. +# Write access can be checked with "iotop -aoP". +# Remaining access originates mainly from the ext4 journal update (process jbd2). + +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace + +# Set defaults +readonly bootcmd="/boot/cmdline.txt" + +function _install_minwrite() { + _display_welcome + _begin_install + _remove_packages + _disable_services + _install_logger + _disable_swap + _move_directories + _install_complete +} + +function _dirs2tmpfs() { + for dir in "${dirs[@]}"; do + echo "Moving $dir to RAM" + if ! grep -q " $dir " /etc/fstab; then + echo "tmpfs $dir tmpfs nosuid,nodev 0 0" | sudo tee -a /etc/fstab + fi + done +} + +# Determines host Linux distribution details +function _get_linux_distro() { + if type lsb_release >/dev/null 2>&1; then # linuxbase.org + OS=$(lsb_release -si) + RELEASE=$(lsb_release -sr) + CODENAME=$(lsb_release -sc) + DESC=$(lsb_release -sd) + elif [ -f /etc/os-release ]; then # freedesktop.org + . /etc/os-release + OS=$ID + RELEASE=$VERSION_ID + CODENAME=$VERSION_CODENAME + DESC=$PRETTY_NAME + else + _install_status 1 "Unsupported Linux distribution" + fi +} + +function _begin_install() { + _install_log "Modify the OS to minimize microSD card write operation" + _get_linux_distro + echo "Detected OS: ${DESC}" +} + +function _remove_packages() { + _install_log "Removing packages" + echo -e "The following packages will be removed: ${ANSI_YELLOW}dphys-swapfile logrotate${ANSI_RESET}" + echo -n "Proceed? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + sudo apt-get -y remove --purge dphys-swapfile logrotate || _install_status 1 "Unable to remove packages" + sudo apt-get -y autoremove --purge || _install_status 1 "Unable to autoremove packages" + _install_status 0 + fi + else + echo "(Skipped)" + fi +} + +function _disable_services() { + _install_log "Disabling services" + echo -e "The following services will be disabled: ${ANSI_YELLOW}bootlogd.service bootlogs console-setup apt-daily${ANSI_RESET}" + echo -n "Proceed? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + sudo systemctl unmask bootlogd.service || _install_status 2 "Service bootlogd.service does not exist" + sudo systemctl disable bootlogs || _install_status 2 "Service bootlogs does not exist" + sudo systemctl disable apt-daily.service apt-daily.timer apt-daily-upgrade.timer apt-daily-upgrade.service || _install_status 2 "Service apt-daily does not exist" + _install_status 0 + fi + else + echo "(Skipped)" + fi +} + +function _install_logger() { + _install_log "Installing new logger" + echo -e "The following new logger will be installed: ${ANSI_YELLOW}busybox-syslogd${ANSI_RESET}" + echo -n "Proceed? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + sudo apt-get -y install busybox-syslogd || _install_status 1 "Unable to install busybox-syslogd" + sudo dpkg --purge rsyslog || _install_status 1 "Unable to purge rsyslog" + _install_status 0 + fi + else + echo "(Skipped)" + fi +} + +function _disable_swap() { + _install_log "Modifying boot options to disable swap and filesystem check" + echo "The noswap option will be written to ${bootcmd}" + echo -n "Proceed? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + if ! grep -q "noswap" $bootcmd; then + sudo sed -i '1 s/$/ fsck.mode=skip noswap/' $bootcmd || _install_status 1 "Unable to write to ${bootcmd}" + echo "Modified ${bootcmd} with noswap option" + _install_status 0 + fi + fi + else + echo "(Skipped)" + fi +} + +function _move_directories() { + _install_log "Add tmpfs entries to /etc/fstab" + # move directories to RAM + dirs=( "/tmp" "/var/log" "/var/tmp" "/var/lib/misc" "/var/cache") + # special dirs used by vnstat and php + dirs+=( "/var/lib/vnstat" "/var/php/sessions" ) + echo "The following directories will be moved to RAM:" + echo -e "${ANSI_YELLOW}${dirs[*]}${ANSI_RESET}" + echo -n "Proceed? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + _install_status 0 "(Skipped)" + else + _dirs2tmpfs || _install_status 1 "Unable to call dirs2tmpfs" + _install_status 0 + fi + else + echo "(Skipped)" + fi +} + +function _install_complete() { + _install_log "Installation completed" + echo -e "${ANSI_RED}The system needs to be rebooted as a final step.${ANSI_RESET}" + echo -n "Reboot now? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo "Installation reboot aborted." + exit 0 + fi + echo "Rebooting..." + sudo reboot || _install_status 1 "Unable to execute reboot" + fi +} + diff --git a/installers/mkcert.sh b/installers/mkcert.sh index fe575faf..f583e775 100755 --- a/installers/mkcert.sh +++ b/installers/mkcert.sh @@ -1,18 +1,31 @@ #!/bin/bash # # RaspAP SSL certificate installation functions -# author: @billz -# license: GNU General Public License v3.0 +# Author: @billz +# License: GNU General Public License v3.0 +# +# You are not obligated to bundle the LICENSE file with your RaspAP projects as long +# as you leave these references intact in the header comments of your source files. +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +# set -o xtrace + +# Set defaults certname=$HOSTNAME."local" lighttpd_ssl="/etc/lighttpd/ssl" lighttpd_conf="/etc/lighttpd/lighttpd.conf" webroot_dir="/var/www/html" +readonly mkcert_version="1.4.1" +readonly git_source_url="https://github.com/FiloSottile/mkcert/releases/download/v${mkcert_version}" ### NOTE: all the below functions are overloadable for system-specific installs -function config_installation() { - install_log "Configure a new SSL certificate" +function _config_installation() { + _install_log "Configure a new SSL certificate" echo "Current system hostname is $HOSTNAME" echo -n "Create an SSL certificate for ${certname}? (Recommended) [y/N]" if [ $assume_yes == 0 ]; then @@ -34,10 +47,10 @@ function config_installation() { echo -e fi - install_divider + _install_divider echo "A new SSL certificate for: ${certname}" echo "will be installed to lighttpd SSL directory: ${lighttpd_ssl}" - install_divider + _install_divider echo -n "Complete installation with these values? [y/N]: " if [ $assume_yes == 0 ]; then read answer < /dev/tty @@ -51,43 +64,43 @@ function config_installation() { } # Installs pre-built mkcert binary for Arch Linux ARM -function install_mkcert() { - install_log "Fetching mkcert binary" - sudo wget -q https://github.com/FiloSottile/mkcert/releases/download/v1.3.0/mkcert-v1.3.0-linux-arm -O /usr/local/bin/mkcert || install_error "Unable to download mkcert" +function _install_mkcert() { + _install_log "Fetching mkcert binary" + sudo wget -q ${git_source_url}/mkcert-v${mkcert_version}-linux-arm -O /usr/local/bin/mkcert || _install_error "Unable to download mkcert" sudo chmod +x /usr/local/bin/mkcert - install_log "Installing mkcert" - mkcert -install || install_error "Failed to install mkcert" + _install_log "Installing mkcert" + mkcert -install || _install_error "Failed to install mkcert" } # Generate a certificate for host -function generate_certificate() { - install_log "Generating a new certificate for $certname" +function _generate_certificate() { + _install_log "Generating a new certificate for $certname" cd $HOME - mkcert $certname "*.${certname}.local" $certname || install_error "Failed to generate certificate for $certname" + mkcert $certname "*.${certname}.local" $certname || _install_error "Failed to generate certificate for $certname" - install_log "Combining private key and certificate" - cat $certname+2-key.pem $certname+2.pem > $certname.pem || install_error "Failed to combine key and certificate" + _install_log "Combining private key and certificate" + cat $certname+2-key.pem $certname+2.pem > $certname.pem || _install_error "Failed to combine key and certificate" echo "OK" } # Create a directory for the combined .pem file in lighttpd -function create_lighttpd_dir() { - install_log "Creating SLL directory for lighttpd" +function _create_lighttpd_dir() { + _install_log "Creating SLL directory for lighttpd" if [ ! -d "$lighttpd_ssl" ]; then - sudo mkdir -p "$lighttpd_ssl" || install_error "Failed to create lighttpd directory" + sudo mkdir -p "$lighttpd_ssl" || _install_error "Failed to create lighttpd directory" fi echo "OK" - install_log "Setting permissions and moving .pem file" - chmod 400 "$HOME/$certname".pem || install_error "Unable to set permissions for .pem file" - sudo mv "$HOME/$certname".pem /etc/lighttpd/ssl || install_error "Unable to move .pem file" + _install_log "Setting permissions and moving .pem file" + chmod 400 "$HOME/$certname".pem || _install_error "Unable to set permissions for .pem file" + sudo mv "$HOME/$certname".pem /etc/lighttpd/ssl || _install_error "Unable to move .pem file" echo "OK" } # Generate config to enable SSL in lighttpd -function configure_lighttpd() { - install_log "Configuring lighttpd for SSL" +function _configure_lighttpd() { + _install_log "Configuring lighttpd for SSL" lines=( 'server.modules += ("mod_openssl")' '$SERVER["socket"] == ":443" {' @@ -109,22 +122,22 @@ function configure_lighttpd() { } # Copy rootCA.pem to RaspAP web root -function copy_rootca() { - install_log "Copying rootCA.pem to RaspAP web root" - sudo cp ${HOME}/.local/share/mkcert/rootCA.pem ${webroot_dir} || install_error "Unable to copy rootCA.pem to ${webroot_dir}" +function _copy_rootca() { + _install_log "Copying rootCA.pem to RaspAP web root" + sudo cp ${HOME}/.local/share/mkcert/rootCA.pem ${webroot_dir} || _install_error "Unable to copy rootCA.pem to ${webroot_dir}" echo "OK" } # Restart lighttpd service -function restart_lighttpd() { - install_log "Restarting lighttpd service" - sudo systemctl restart lighttpd.service || install_error "Unable to restart lighttpd service" +function _restart_lighttpd() { + _install_log "Restarting lighttpd service" + sudo systemctl restart lighttpd.service || _install_error "Unable to restart lighttpd service" sudo systemctl status lighttpd.service } -function install_complete() { - install_log "SSL certificate install completed!" - install_divider +function _install_complete() { + _install_log "SSL certificate install completed!" + _install_divider printf '%s\n' \ "Open a browser and enter the address: http://$certname/rootCA.pem" \ "Download the root certificate to your client and add it to your system keychain." \ @@ -132,18 +145,18 @@ function install_complete() { "Finally, enter the address https://$certname in your browser." \ "Enjoy an encrypted SSL connection to RaspAP 🔒" \ "For advanced options, run mkcert -help" - install_divider + _install_divider } -function install_certificate() { - display_welcome - config_installation - install_mkcert - generate_certificate - create_lighttpd_dir - configure_lighttpd - copy_rootca - restart_lighttpd - install_complete +function _install_certificate() { + _display_welcome + _config_installation + _install_mkcert + _generate_certificate + _create_lighttpd_dir + _configure_lighttpd + _copy_rootca + _restart_lighttpd + _install_complete } diff --git a/installers/openvpnlog.sh b/installers/openvpnlog.sh new file mode 100755 index 00000000..d933d669 --- /dev/null +++ b/installers/openvpnlog.sh @@ -0,0 +1,3 @@ +#!/bin/bash +touch /tmp/openvpn.log +journalctl |grep -m 200 openvpn | sudo tee /tmp/openvpn.log diff --git a/installers/raspap.service b/installers/raspap.service deleted file mode 100644 index 32430b14..00000000 --- a/installers/raspap.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=RaspAP daemon -After=multi-user.target - -[Service] -Type=idle -ExecStart=/bin/bash /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3 - -[Install] -WantedBy=multi-user.target diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers new file mode 100644 index 00000000..8e7b3e72 --- /dev/null +++ b/installers/raspap.sudoers @@ -0,0 +1,66 @@ +www-data ALL=(ALL) NOPASSWD:/sbin/ifdown +www-data ALL=(ALL) NOPASSWD:/sbin/ifup +www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant.conf +www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf +www-data ALL=(ALL) NOPASSWD:/sbin/wpa_supplicant -B -Dnl80211 -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan[0-9] +www-data ALL=(ALL) NOPASSWD:/bin/rm /var/run/wpa_supplicant/wlan[0-9] +www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan_results +www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan +www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] reconfigure +www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] select_network [0-9]* +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf +www-data ALL=(ALL) NOPASSWD:/bin/systemctl start hostapd.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop hostapd.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl start dnsmasq.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop dnsmasq.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl restart dnsmasq.service +www-data ALL=(ALL) NOPASSWD:/bin/systemctl start openvpn-client@client +www-data ALL=(ALL) NOPASSWD:/bin/systemctl enable openvpn-client@client +www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop openvpn-client@client +www-data ALL=(ALL) NOPASSWD:/bin/systemctl disable openvpn-client@client +www-data ALL=(ALL) NOPASSWD:/bin/mv /tmp/ovpn/* /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/usr/bin/ln -s /etc/openvpn/client/*.conf /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_*.conf +www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/dnsmasq.d/090_*.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dhcpddata /etc/dhcpcd.conf +www-data ALL=(ALL) NOPASSWD:/sbin/shutdown -h now +www-data ALL=(ALL) NOPASSWD:/sbin/reboot +www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] down +www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] up +www-data ALL=(ALL) NOPASSWD:/sbin/ip -s a f label wlan[0-9] +www-data ALL=(ALL) NOPASSWD:/sbin/ifup * +www-data ALL=(ALL) NOPASSWD:/sbin/ifdown * +www-data ALL=(ALL) NOPASSWD:/sbin/iw +www-data ALL=(ALL) NOPASSWD:/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf +www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/enablelog.sh +www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/disablelog.sh +www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/servicestart.sh +www-data ALL=(ALL) NOPASSWD:/etc/raspap/lighttpd/configport.sh +www-data ALL=(ALL) NOPASSWD:/etc/raspap/openvpn/configauth.sh +www-data ALL=(ALL) NOPASSWD:/etc/raspap/openvpn/openvpnlog.sh +www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/hostapd.log +www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /var/log/dnsmasq.log +www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/wireguard.log +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_adblock.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasq_custom /etc/raspap/adblock/custom.txt +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wgdata /etc/wireguard/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/mv /tmp/wg-*.key /etc/wireguard/wg-*.key +www-data ALL=(ALL) NOPASSWD:/bin/mv /tmp/wg/* /etc/wireguard/*.conf +www-data ALL=(ALL) NOPASSWD:/etc/raspap/adblock/update_blocklist.sh +www-data ALL=(ALL) NOPASSWD:/usr/bin/socat - /dev/ttyUSB[0-9] +www-data ALL=(ALL) NOPASSWD:/usr/local/sbin/onoff_huawei_hilink.sh * +www-data ALL=(ALL) NOPASSWD:/bin/sed -i * /etc/wvdial.conf +www-data ALL=(ALL) NOPASSWD:/bin/sed -i * /etc/udev/rules.d/80-raspap-net-devices.rules +www-data ALL=(ALL) NOPASSWD:/usr/bin/tee -a /etc/udev/rules.d/80-raspap-net-devices.rules +www-data ALL=(ALL) NOPASSWD:/usr/bin/journalctl --identifier wg-quick +www-data ALL=(ALL) NOPASSWD:/bin/systemctl * wg-quick@wg0 +www-data ALL=(ALL) NOPASSWD:/usr/bin/wg +www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wireguard/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wireguard/wg-*.key +www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/wireguard/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/wireguard/wg-*.key +www-data ALL=(ALL) NOPASSWD:/usr/sbin/netplan +www-data ALL=(ALL) NOPASSWD:/bin/truncate -s 0 /tmp/*.log,/bin/truncate -s 0 /var/log/dnsmasq.log diff --git a/installers/raspapd.service b/installers/raspapd.service new file mode 100644 index 00000000..c5738465 --- /dev/null +++ b/installers/raspapd.service @@ -0,0 +1,24 @@ +### BEGIN INIT INFO +# Provides: raspapd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: S 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start RaspAP daemon at boot time +# Description: Enable service provided by daemon +### END INIT INFO +# Author: BillZ + +[Unit] +Description=RaspAP Service Daemon +DefaultDependencies=no +After=multi-user.target + +[Service] +Type=oneshot +ExecStart=/bin/bash /etc/raspap/hostapd/servicestart.sh --interface uap0 --seconds 3 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target + diff --git a/installers/raspbian.sh b/installers/raspbian.sh index 9e04fedf..91324d6e 100755 --- a/installers/raspbian.sh +++ b/installers/raspbian.sh @@ -1,96 +1,192 @@ #!/bin/bash # # RaspAP Quick Installer -# author: @billz -# license: GNU General Public License v3.0 +# Author: @billz +# Author URI: https://github.com/billz/ +# License: GNU General Public License v3.0 +# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE # -# Usage: +# Usage: raspbian.sh options # -# -y, --yes, --assume-yes -# Assume "yes" as answer to all prompts and run non-interactively -# c, --cert, --certficate -# Installs mkcert and generates an SSL certificate for lighttpd -# -o, --openvpn -# Used with -y, --yes, sets OpenVPN install option (0=no install) -# -r, --repo, --repository -# Overrides the default GitHub repo (billz/raspap-webgui) -# -b, --branch -# Overrides the default git branch (master) -# -h, --help -# Outputs usage notes and exits -# -v, --version -# Outputs release info and exits +# Installs an instance of RaspAP. +# +# OPTIONS: +# -y, --yes, --assume-yes Assume "yes" as answer to all prompts and run non-interactively +# -c, --cert, --certficate Installs mkcert and generates an SSL certificate for lighttpd +# -o, --openvpn Used with -y, --yes, sets OpenVPN install option (0=no install) +# -a, --adblock Used with -y, --yes, sets Adblock install option (0=no install) +# -c, --cert, --certificate Installs an SSL certificate with mkcert and configures lighttpd for HTTPS +# -r, --repo, --repository Overrides the default GitHub repo (RaspAP/raspap-webgui) +# -b, --branch Overrides the default git branch (master) +# -t, --token Specify a GitHub token to access a private repository +# -u, --upgrade Upgrades an existing installation to the latest release version +# -i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders) +# -m, --minwrite Configures a microSD card for minimum write operation +# -v, --version Outputs release info and exits +# -n, --uninstall Loads and executes the uninstaller +# -h, --help Outputs usage notes and exits +# +# NOTE +# Depending on options passed to the installer, ONE of the following +# additional shell scripts will be downloaded and sourced: +# +# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/common.sh +# - or - +# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/mkcert.sh +# - or - +# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/minwrite.sh +# - or - +# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/uninstall.sh +# +# You are not obligated to bundle the LICENSE file with your RaspAP projects as long +# as you leave these references intact in the header comments of your source files. -# Set defaults -repo="billz/raspap-webgui" -branch="master" -VERSION=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' ) -assume_yes=0 -ovpn_option=1 +set -eo pipefail + +function _main() { + # set defaults + repo="RaspAP/raspap-webgui" # override with -r, --repo option + repo_common="$repo" + _parse_params "$@" + _setup_colors + _log_output + _load_installer +} + +function _parse_params() { + # default option values + assume_yes=0 + upgrade=0 + ovpn_option=1 + adblock_option=1 + insiders=0 + minwrite=0 + acctoken="" + + while :; do + case "${1-}" in + -y|--yes|--assume-yes) + assume_yes=1 + apt_option="-y" + ;; + -o|--openvpn) + ovpn_option="$2" + shift + ;; + -a|--adblock) + adblock_option="$2" + shift + ;; + -c|--cert|--certificate) + install_cert=1 + ;; + -r|--repo|--repository) + repo="$2" + repo_common="$repo" + shift + ;; + -b|--branch) + branch="$2" + shift + ;; + -h|--help) + _usage + ;; + -u|--upgrade) + upgrade=1 + ;; + -i|--insiders) + insiders=1 + ;; + -m|--minwrite) + minwrite=1 + ;; + -t|--token) + acctoken="$2" + shift + ;; + -v|--version) + _version + ;; + -n|--uninstall) + uninstall=1 + ;; + -*|--*) + echo "Unknown option: $1" + _usage + exit 1 + ;; + *) + break + ;; + esac + shift + done +} + +function _setup_colors() { + ANSI_RED="\033[0;31m" + ANSI_GREEN="\033[0;32m" + ANSI_YELLOW="\033[0;33m" + ANSI_RASPBERRY="\033[0;35m" + ANSI_ERROR="\033[1;37;41m" + ANSI_RESET="\033[m" +} + +function _log_output() { + readonly LOGFILE_PATH="/tmp" + exec > >(tee -i $LOGFILE_PATH/raspap_install.log) + exec 2>&1 +} + +function _usage() { + cat << EOF +Usage: raspbian.sh options + +Installs an instance of RaspAP or a helper component. + +OPTIONS: +-y, --yes, --assume-yes Assumes "yes" as an answer to all prompts +-c, --cert, --certificate Installs an SSL certificate for lighttpd +-o, --openvpn Used with -y, --yes, sets OpenVPN install option (0=no install) +-a, --adblock Used with -y, --yes, sets Adblock install option (0=no install) +-c, --cert, --certificate Installs an SSL certificate with mkcert and configures lighttpd for HTTPS +-r, --repo, --repository Overrides the default GitHub repo (RaspAP/raspap-webgui) +-b, --branch Overrides the default git branch (latest release) +-t, --token Specify a GitHub token to access a private repository +-u, --upgrade Upgrades an existing installation to the latest release version +-i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders) +-m, --minwrite Configures a microSD card for minimum write operation +-v, --version Outputs release info and exits +-n, --uninstall Loads and executes the uninstaller +-h, --help Outputs usage notes and exits + +Examples: + Run locally specifying GitHub repo and branch: + raspbian.sh --repo foo/bar --branch my/branch + + Run locally requesting release info: + raspbian.sh --version + + Invoke installer remotely, run non-interactively with option flags: + curl -sL https://install.raspap.com | bash -s -- --yes --openvpn 1 --adblock 0 + + Invoke remotely, uprgrade an existing install to the Insiders Edition: + curl -sL https://install.raspap.com | bash -s -- --upgrade --insiders -# Define usage notes -usage=$(cat << EOF -Usage: raspbian.sh [OPTION]\n --y, --yes, --assume-yes\n\tAssumes "yes" as an answer to all prompts --c, --cert, --certificate\n\tInstalls an SSL certificate for lighttpd --o, --openvpn \n\tUsed with -y, --yes, sets OpenVPN install option (0=no install) --r, --repo, --repository \n\tOverrides the default GitHub repo (billz/raspap-webgui) --b, --branch \n\tOverrides the default git branch (master) --h, --help\n\tOutputs usage notes and exits --v, --version\n\tOutputs release info and exits\n EOF -) + exit +} -# Parse command-line options -while :; do - case $1 in - -y|--yes|--assume-yes) - assume_yes=1 - apt_option="-y" - ;; - -o|--openvpn) - ovpn_option="$2" - shift - ;; - -c|--cert|--certificate) - install_cert=1 - ;; - -r|--repo|--repository) - repo="$2" - shift - ;; - -b|--branch) - branch="$2" - shift - ;; - -h|--help) - printf "$usage" - exit 1 - ;; - -v|--version) - printf "RaspAP v${VERSION} - simple AP setup and wifi mangement for the RaspberryPi\n" - exit 1 - ;; - -*|--*) - echo "Unknown option: $1" - printf "$usage" - exit 1 - ;; - *) - break - ;; - esac - shift -done - -UPDATE_URL="https://raw.githubusercontent.com/$repo/$branch/" +function _version() { + _get_release + echo -e "RaspAP v${RASPAP_RELEASE} - Simple wireless AP setup & management for Debian-based devices" + exit +} # Outputs a welcome message -function display_welcome() { - raspberry='\033[0;35m' - green='\033[1;32m' - - echo -e "${raspberry}\n" +function _display_welcome() { + echo -e "${ANSI_RASPBERRY}\n" echo -e " 888888ba .d888888 888888ba" echo -e " 88 8b d8 88 88 8b" echo -e "a88aaaa8P' .d8888b. .d8888b. 88d888b. 88aaaaa88a a88aaaa8P" @@ -98,47 +194,101 @@ function display_welcome() { echo -e " 88 88 88. .88 88 88. .88 88 88 88" echo -e " dP dP 88888P8 88888P 88Y888P 88 88 dP" echo -e " 88" - echo -e " dP version ${VERSION}" - echo -e "${green}" - echo -e "The Quick Installer will guide you through a few easy steps\n\n" + echo -e " dP version ${RASPAP_RELEASE}" + echo -e "${ANSI_GREEN}" + echo -e "The Quick Installer will guide you through a few easy steps${ANSI_RESET}\n\n" +} + +# Fetch latest release from GitHub or RaspAP Installer API +function _get_release() { + readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' ) + if [ "$insiders" == 1 ]; then + repo="RaspAP/raspap-insiders" + repo_common="RaspAP/raspap-webgui" + readonly RASPAP_INSIDERS_LATEST=$(curl -s "https://api.raspap.com/repos/RaspAP/raspap-insiders/releases/latest/" | grep -Po '"tag_name": "\K.*?(?=")' ) + readonly RASPAP_RELEASE="${RASPAP_INSIDERS_LATEST} Insiders" + else + readonly RASPAP_RELEASE="${RASPAP_LATEST}" + fi } # Outputs a RaspAP Install log line -function install_log() { - echo -e "\033[1;32mRaspAP Install: $*\033[m" -} - -# Outputs a RaspAP Install Error log line and exits with status code 1 -function install_error() { - echo -e "\033[1;37;41mRaspAP Install Error: $*\033[m" - exit 1 -} - -# Outputs a RaspAP Warning line -function install_warning() { - echo -e "\033[1;33mWarning: $*\033[m" +function _install_log() { + echo -e "${ANSI_GREEN}RaspAP ${component}: $1${ANSI_RESET}" } # Outputs a RaspAP divider -function install_divider() { +function _install_divider() { echo -e "\033[1;32m***************************************************************$*\033[m" } -function update_system_packages() { - install_log "Updating sources" - sudo apt-get update || install_error "Unable to update package list" +# Outputs a RaspAP status indicator +function _install_status() { + case $1 in + 0) + echo -e "[$ANSI_GREEN \U2713 ok $ANSI_RESET] $2" + ;; + 1) + echo -e "[$ANSI_RED \U2718 error $ANSI_RESET] $ANSI_ERROR $2 $ANSI_RESET" + ;; + 2) + echo -e "[$ANSI_YELLOW \U26A0 warning $ANSI_RESET] $2" + ;; + esac +} + +function _update_system_packages() { + _install_log "Updating sources" + sudo apt-get update || _install_status 1 "Unable to update package list" } # Fetch required installer functions -if [ "${install_cert:-}" = 1 ]; then - source="mkcert" - wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh - source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh - install_certificate || install_error "Unable to install certificate" -else - source="common" - wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh - source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh - install_raspap || install_error "Unable to install RaspAP" -fi +function _load_installer() { + # fetch latest release tag + _get_release + # assign default branch if not defined with -b, --branch option + if [ -z ${branch} ]; then + branch=$RASPAP_LATEST + fi + + # add optional auth token header if defined with -t, --token option + header=() + if [[ ! -z "$acctoken" ]]; then + header=(--header "Authorization: token $acctoken") + fi + + UPDATE_URL="https://raw.githubusercontent.com/$repo_common/$branch/" + header=() + if [[ ! -z "$acctoken" ]]; then + header=(--header "Authorization: token $acctoken") + fi + + if [ "${install_cert:-}" = 1 ]; then + source="mkcert" + component="mkcert" + wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _install_certificate || _install_status 1 "Unable to install certificate" + elif [ "${minwrite}" = 1 ]; then + source="minwrite" + component="Minwrite" + wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _install_minwrite || _install_status 1 "Unable to execute minimal write install" + elif [ "${uninstall}" = 1 ]; then + source="uninstall" + component="Uninstall" + wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _remove_raspap || _install_status 1 "Unable to uninstall RaspAP" + else + source="common" + component="Install" + wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _install_raspap || _install_status 1 "Unable to install RaspAP" + fi +} + +_main "$@" diff --git a/installers/servicestart.sh b/installers/servicestart.sh index fa4dd446..377678ca 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -1,11 +1,13 @@ #!/bin/bash -# When wireless client AP mode is enabled, this script handles starting +# When wireless client AP or Bridge mode is enabled, this script handles starting # up network services in a specific order and timing to avoid race conditions. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -NAME=raspap +NAME=raspapd DESC="Service control for RaspAP" CONFIGFILE="/etc/raspap/hostapd.ini" +DAEMONPATH="/lib/systemd/system/raspapd.service" +OPENVPNENABLED=$(pidof openvpn | wc -l) positional=() while [[ $# -gt 0 ]] @@ -20,33 +22,84 @@ case $key in ;; -s|--seconds) seconds="$2" - shift # past argument - shift # past value + shift + shift + ;; + -a|--action) + action="$2" + shift + shift ;; esac done set -- "${positional[@]}" echo "Stopping network services..." +if [ $OPENVPNENABLED -eq 1 ]; then + systemctl stop openvpn-client@client +fi +systemctl stop systemd-networkd systemctl stop hostapd.service systemctl stop dnsmasq.service systemctl stop dhcpcd.service +if [ "${action}" = "stop" ]; then + echo "Services stopped. Exiting." + exit 0 +fi + +if [ -f "$DAEMONPATH" ] && [ ! -z "$interface" ]; then + echo "Changing RaspAP Daemon --interface to $interface" + sed -i "s/\(--interface \)[[:alnum:]]*/\1$interface/" "$DAEMONPATH" +fi + if [ -r "$CONFIGFILE" ]; then declare -A config while IFS=" = " read -r key value; do config["$key"]="$value" done < "$CONFIGFILE" - if [ "${config[WifiAPEnable]}" = 1 ]; then - if [ "${interface}" = "uap0" ]; then + if [ "${config[BridgedEnable]}" = 1 ]; then + if [ "${interface}" = "br0" ]; then + echo "Stopping systemd-networkd" + systemctl stop systemd-networkd + + echo "Restarting eth0 interface..." + ip link set down eth0 + ip link set up eth0 + echo "Removing uap0 interface..." iw dev uap0 del - - echo "Adding uap0 interface to ${config[WifiManaged]}" - iw dev ${config[WifiManaged]} interface add uap0 type __ap - # Bring up uap0 interface - ifconfig uap0 up + + echo "Enabling systemd-networkd" + systemctl start systemd-networkd + systemctl enable systemd-networkd + fi + else + echo "Disabling systemd-networkd" + systemctl disable systemd-networkd + + ip link ls up | grep -q 'br0' &> /dev/null + if [ $? == 0 ]; then + echo "Removing br0 interface..." + ip link set down br0 + ip link del dev br0 + fi + + if [ "${config[WifiAPEnable]}" = 1 ]; then + if [ "${interface}" = "uap0" ]; then + + ip link ls up | grep -q 'uap0' &> /dev/null + if [ $? == 0 ]; then + echo "Removing uap0 interface..." + iw dev uap0 del + fi + + echo "Adding uap0 interface to ${config[WifiManaged]}" + iw dev ${config[WifiManaged]} interface add uap0 type __ap + # Bring up uap0 interface + ifconfig uap0 up + fi fi fi fi @@ -61,5 +114,17 @@ sleep "${seconds}" systemctl start dnsmasq.service +if [ $OPENVPNENABLED -eq 1 ]; then + systemctl start openvpn-client@client +fi + +# @mp035 found that the wifi client interface would stop every 8 seconds +# for about 16 seconds. Reassociating seems to solve this +if [ "${config[WifiAPEnable]}" = 1 ]; then + echo "Reassociating wifi client interface..." + sleep "${seconds}" + wpa_cli -i ${config[WifiManaged]} reassociate +fi + echo "RaspAP service start DONE" diff --git a/installers/toggle-bridged-routed.sh b/installers/toggle-bridged-routed.sh new file mode 100755 index 00000000..5020bcfb --- /dev/null +++ b/installers/toggle-bridged-routed.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +function do_routed_mode() { + sudo systemctl disable systemd-networkd + + sudo sed -i "s/^.*#BRIDGED$/#&/" /etc/dhcpcd.conf + sudo sed -i "s/^bridge/#&/" /etc/hostapd/hostapd.conf + + sudo ip link set down br0 + sudo ip link del dev br0 +} + +function do_bridged_mode() { + sudo sed -i "s/^#\(.*#BRIDGED\)$/\1/" /etc/dhcpcd.conf + sudo sed -i "s/^#\(bridge\)/\1/" /etc/hostapd/hostapd.conf + + sudo ip link set down eth0 + sudo ip link set up eth0 + + sudo systemctl start systemd-networkd + sudo systemctl enable systemd-networkd +} + +sudo systemctl stop systemd-networkd +sudo systemctl stop hostapd +sudo systemctl stop dhcpcd +sudo systemctl stop dnsmasq + +if [ "$1" = "force-routed" ] +then do_routed_mode +elif [ "$1" = "force-bridged" ] +then do_bridged_mode +elif ip addr show br0 | grep 'inet ' > /dev/null +then do_routed_mode +elif ! ip addr show br0 | grep 'inet ' > /dev/null +then do_bridged_mode +fi + +sudo systemctl start hostapd +sudo systemctl start dhcpcd +sudo systemctl start dnsmasq diff --git a/installers/uninstall.sh b/installers/uninstall.sh index 802d1df7..06173755 100755 --- a/installers/uninstall.sh +++ b/installers/uninstall.sh @@ -1,66 +1,98 @@ #!/bin/bash -raspap_dir="/etc/raspap" -raspap_user="www-data" -version=`sed 's/\..*//' /etc/debian_version` +# +# RaspAP uninstall functions +# Author: @billz +# License: GNU General Public License v3.0 +# +# You are not obligated to bundle the LICENSE file with your RaspAP projects as long +# as you leave these references intact in the header comments of your source files. -# Determine Raspbian version and set default home location for lighttpd -webroot_dir="/var/www/html" -if [ $version -eq 10 ]; then - version_msg="Raspbian 10.0 (Buster)" - php_package="php7.1-cgi" -elif [ $version -eq 9 ]; then - version_msg="Raspbian 9.0 (Stretch)" - php_package="php7.0-cgi" -else - version_msg="Raspbian 8.0 (Jessie) or earlier" - webroot_dir="/var/www" - php_package="php5-cgi" -fi +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +# set -o xtrace -phpcgiconf="" -if [ "$php_package" = "php7.1-cgi" ]; then - phpcgiconf="/etc/php/7.1/cgi/php.ini" -elif [ "$php_package" = "php7.0-cgi" ]; then - phpcgiconf="/etc/php/7.0/cgi/php.ini" -elif [ "$php_package" = "php5-cgi" ]; then - phpcgiconf="/etc/php5/cgi/php.ini" -fi +# Set defaults +readonly raspap_dir="/etc/raspap" +readonly raspap_user="www-data" +readonly raspap_sudoers="/etc/sudoers.d/090_raspap" +readonly raspap_default="/etc/dnsmasq.d/090_raspap.conf" +readonly raspap_wlan0="/etc/dnsmasq.d/090_wlan0.conf" +readonly raspap_sysctl="/etc/sysctl.d/90_raspap.conf" +readonly raspap_adblock="/etc/dnsmasq.d/090_adblock.conf" +readonly raspap_network="/etc/systemd/network/" +readonly rulesv4="/etc/iptables/rules.v4" +webroot_dir="/var/www/html" + +# Determines host Linux distrubtion details +function _get_linux_distro() { + if type lsb_release >/dev/null 2>&1; then # linuxbase.org + OS=$(lsb_release -si) + RELEASE=$(lsb_release -sr) + CODENAME=$(lsb_release -sc) + DESC=$(lsb_release -sd) + elif [ -f /etc/os-release ]; then # freedesktop.org + . /etc/os-release + OS=$ID + RELEASE=$VERSION_ID + CODENAME=$VERSION_CODENAME + DESC=$PRETTY_NAME + else + _install_error "Unsupported Linux distribution" + fi +} + +# Sets php package option based on Linux version, abort if unsupported distro +function _set_php_package() { + case $RELEASE in + 18.04|19.10) # Ubuntu Server + php_package="php7.4-cgi" + phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; + 10*) + php_package="php7.3-cgi" + phpcgiconf="/etc/php/7.3/cgi/php.ini" ;; + 9*) + php_package="php7.0-cgi" + phpcgiconf="/etc/php/7.0/cgi/php.ini" ;; + esac +} # Outputs a RaspAP Install log line -function install_log() { - echo -e "\033[1;32mRaspAP Install: $*\033[m" +function _install_log() { + echo -e "\033[1;32mRaspAP Uninstall: $*\033[m" } # Outputs a RaspAP Install Error log line and exits with status code 1 -function install_error() { - echo -e "\033[1;37;41mRaspAP Install Error: $*\033[m" +function _install_error() { + echo -e "\033[1;37;41mRaspAP Uninstall Error: $*\033[m" exit 1 } # Checks to make sure uninstallation info is correct -function config_uninstallation() { - install_log "Configure installation" - echo "Detected ${version_msg}" - echo "Install directory: ${raspap_dir}" - echo "Lighttpd directory: ${webroot_dir}" - echo -n "Uninstall RaspAP with these values? [y/N]: " +function _config_uninstallation() { + _install_log "Configure uninstall of RaspAP" + _get_linux_distro + echo "Detected ${DESC}" + echo "RaspAP install directory: ${raspap_dir}" + echo -n "Lighttpd install directory: ${webroot_dir}? [Y/n]: " read answer - if [[ $answer != "y" ]]; then + if [ "$answer" != "${answer#[Nn]}" ]; then + read -e -p "Enter alternate lighttpd directory: " -i "/var/www/html" webroot_dir + fi + echo "Uninstall from lighttpd directory: ${webroot_dir}" + echo -n "Uninstall RaspAP with these values? [Y/n]: " + read answer + if [[ "$answer" != "${answer#[Nn]}" ]]; then echo "Installation aborted." exit 0 fi } # Checks for/restore backup files -function check_for_backups() { +function _check_for_backups() { if [ -d "$raspap_dir/backups" ]; then - if [ -f "$raspap_dir/backups/interfaces" ]; then - echo -n "Restore the last interfaces file? [y/N]: " - read answer - if [[ $answer -eq 'y' ]]; then - sudo cp "$raspap_dir/backups/interfaces" /etc/network/interfaces - fi - fi if [ -f "$raspap_dir/backups/hostapd.conf" ]; then echo -n "Restore the last hostapd configuration file? [y/N]: " read answer @@ -89,63 +121,128 @@ function check_for_backups() { sudo cp "$raspap_dir/backups/php.ini" "$phpcgiconf" fi fi - if [ -f "$raspap_dir/backups/rc.local" ]; then - echo -n "Restore the last rc.local file? [y/N]: " - read answer - if [[ $answer -eq 'y' ]]; then - sudo cp "$raspap_dir/backups/rc.local" /etc/rc.local - else - echo -n "Remove RaspAP Lines from /etc/rc.local? [Y/n]: " - if [[ $answer -ne 'n' ]]; then - sed -i '/#RASPAP/d' /etc/rc.local - fi - fi - fi fi } # Removes RaspAP directories -function remove_raspap_directories() { - install_log "Removing RaspAP Directories" +function _remove_raspap_directories() { + _install_log "Removing RaspAP Directories" if [ ! -d "$raspap_dir" ]; then - install_error "RaspAP Configuration directory not found. Exiting!" + _install_error "RaspAP Configuration directory not found. Exiting." fi if [ ! -d "$webroot_dir" ]; then - install_error "RaspAP Installation directory not found. Exiting!" + _install_error "RaspAP Installation directory not found. Exiting." fi + sudo rm -rf "$webroot_dir"/* || _install_error "Unable to remove $webroot_dir" + sudo rm -rf "$raspap_dir" || _install_error "Unable to remove $raspap_dir" +} - sudo rm -rf "$webroot_dir"/* - sudo rm -rf "$raspap_dir" +# Removes raspapd.service +function _remove_raspap_service() { + _install_log "Removing raspapd.service" + if [ -f /lib/systemd/system/raspapd.service ]; then + sudo rm /lib/systemd/system/raspapd.service || _install_error "Unable to remove raspap.service file" + fi + sudo systemctl daemon-reload + sudo systemctl disable raspapd.service || _install_error "Failed to disable raspap.service" + echo "Done." +} +# Restores networking config to pre-install defaults +function _restore_networking() { + _install_log "Restoring networking config to pre-install defaults" + echo "Disabling IP forwarding in $raspap_sysctl" + sudo rm "$raspap_sysctl" || _install_error "Unable to remove $raspap_sysctl" + sudo /etc/init.d/procps restart || _install_error "Unable to execute procps" + echo "Checking iptables rules" + rules=( + "-A POSTROUTING -j MASQUERADE" + "-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE" + ) + for rule in "${rules[@]}"; do + if grep -- "$rule" $rulesv4 > /dev/null; then + rule=$(sed -e 's/^\(-A POSTROUTING\)/-t nat -D POSTROUTING/' <<< $rule) + echo "Removing rule: ${rule}" + sudo iptables $rule || _install_error "Unable to execute iptables" + removed=true + fi + done + # Persist rules if removed + if [ "$removed" = true ]; then + echo "Removing persistent iptables rules" + sudo iptables-save | sudo tee $rulesv4 > /dev/null || _install_error "Unable to execute iptables-save" + fi + echo "Done." + # Remove dnsmasq and bridge configs + echo "Removing 090_raspap.conf from dnsmasq" + if [ -f $raspap_default ]; then + sudo rm "$raspap_default" || _install_error "Unable to remove $raspap_default" + fi + echo "Removing 090_wlan0.conf from dnsmasq" + if [ -f $raspap_wlan0 ]; then + sudo rm "$raspap_wlan0" || _install_error "Unable to remove $raspap_wlan0" + fi + echo "Removing raspap bridge configurations" + sudo rm "$raspap_network"/raspap* || _install_error "Unable to remove bridge config" + if [ -f $raspap_adblock ]; then + echo "Removing raspap adblock configuration" + sudo rm "$raspap_adblock" || _install_error "Unable to remove adblock config" + fi } # Removes installed packages -function remove_installed_packages() { - install_log "Removing installed packages" - echo -n "Remove the following installed packages? lighttpd $php_package git hostapd dnsmasq vnstat [y/N]: " +function _remove_installed_packages() { + _install_log "Removing installed packages" + _set_php_package + if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then + dhcpcd_package="dhcpcd5" + else + dhcpcd_package="dnsmasq" + fi + echo -n "Remove the following installed packages? lighttpd hostapd iptables-persistent $php_package $dhcpcd_package vnstat qrencode [y/N]: " read answer - if [ "$answer" != 'n' ] && [ "$answer" != 'N' ]; then + if [ "$answer" == 'y' ] || [ "$answer" == 'Y' ]; then echo "Removing packages." - sudo apt-get remove lighttpd $php_package git hostapd dnsmasq vnstat - sudo apt-get autoremove + sudo apt-get remove lighttpd hostapd iptables-persistent $php_package $dhcpcd_package vnstat qrencode || _install_error "Unable to remove installed packages" + sudo apt-get autoremove || _install_error "Unable to run apt autoremove" else echo "Leaving packages installed." fi } # Removes www-data from sudoers -function clean_sudoers() { - # should this check for only our commands? - sudo sed -i '/www-data/d' /etc/sudoers +function _remove_sudoers() { + _install_log "Removing sudoers permissions" + echo "Removing ${raspap_sudoers}" + sudo rm "$raspap_sudoers" || _install_error "Unable to remove $raspap_sudoers" + echo "Done." } -function remove_raspap() { - config_uninstallation - check_for_backups - remove_raspap_directories - remove_installed_packages - clean_sudoers +function _remove_lighttpd_config() { + echo "Unlinking 50-raspap-router.conf from /etc/lighttpd/conf-enabled/" + sudo unlink "/etc/lighttpd/conf-enabled/50-raspap-router.conf" || _install_error "Unable to unlink lighttpd config" + echo "Removing 50-raspap-router.conf from /etc/lighttpd/conf-available/" + sudo rm "/etc/lighttpd/conf-available/50-raspap-router.conf" || _install_error "Unable to remove lighttpd config" + sudo systemctl restart lighttpd.service || _install_status 1 "Unable to restart lighttpd" + echo "Done." } -remove_raspap +function _uninstall_complete() { + _install_log "Uninstall completed" + echo "It is recommended that you reboot your system as a final step." +} + +function _remove_raspap() { + _config_uninstallation + _check_for_backups + _remove_raspap_service + _restore_networking + _remove_raspap_directories + _remove_lighttpd_config + _remove_installed_packages + _remove_sudoers + _uninstall_complete +} + +_remove_raspap diff --git a/installers/update_blocklist.sh b/installers/update_blocklist.sh new file mode 100755 index 00000000..81e3d931 --- /dev/null +++ b/installers/update_blocklist.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# +# @author billz +# license: GNU General Public License v3.0 + +# Exit on error +set -o errexit +# Exit on error inside functions +set -o errtrace +# Turn on traces, disabled by default +#set -o xtrace + +update_url=$1 +file=$2 +destination=$3 + +wget -q ${update_url} -O ${destination}${file} &> /dev/null + +echo "$?" + diff --git a/installers/update_firewall.sh b/installers/update_firewall.sh new file mode 100644 index 00000000..2a7d9212 --- /dev/null +++ b/installers/update_firewall.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# include the raspap helper functions +source /usr/local/sbin/raspap_helpers.sh + +_getWebRoot + +echo -n "Update firewall ... " + +cat << EOF > /tmp/updateFirewall.php + +EOF + +sudo php -d include_path=$raspap_webroot /tmp/updateFirewall.php +rm /tmp/updateFirewall.php +echo "done." diff --git a/locale/cs_CZ/LC_MESSAGES/messages.mo b/locale/cs_CZ/LC_MESSAGES/messages.mo index 88aad30f..7c0ce6c6 100644 Binary files a/locale/cs_CZ/LC_MESSAGES/messages.mo and b/locale/cs_CZ/LC_MESSAGES/messages.mo differ diff --git a/locale/cs_CZ/LC_MESSAGES/messages.po b/locale/cs_CZ/LC_MESSAGES/messages.po index d739e0eb..40c56ab7 100644 --- a/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/locale/cs_CZ/LC_MESSAGES/messages.po @@ -1,22 +1,19 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Rudolf Vallo \n" -"Language-Team: \n" +"PO-Revision-Date: 2020-04-17 06:37\n" +"Last-Translator: Jiri Brejcha \n" +"Language-Team: Czech\n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -26,31 +23,37 @@ msgid "Toggle navigation" msgstr "Přepni navigaci" msgid "RaspAP Wifi Portal" -msgstr "RaspAP Wifi Portál" +msgstr "RaspAP Wi-Fi Portál" msgid "Dashboard" msgstr "Přehled" -msgid "Configure WiFi client" -msgstr "Nastavení WiFi klienta" +msgid "WiFi client" +msgstr "Wi-Fi klient" -msgid "Configure hotspot" -msgstr "Nastavení hotspot(u)" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Nastavení sítě" +msgid "Memory Use" +msgstr "Využití paměti" -msgid "Configure DHCP Server" -msgstr "Nastavení DHCP Serveru" +msgid "CPU Temp" +msgstr "Teplota procesoru" -msgid "Configure OpenVPN" -msgstr "Nastavení OpenVPN" +msgid "Networking" +msgstr "Sítě" -msgid "Configure TOR proxy" -msgstr "Nastavení TOR proxy" +msgid "DHCP Server" +msgstr "DHCP server" -msgid "Configure Auth" -msgstr "Nastavení Autentifikace" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR proxy" + +msgid "Authentication" +msgstr "Autentizace" msgid "Change Theme" msgstr "Změnit vzhled" @@ -63,7 +66,7 @@ msgstr "Info o RaspAP" #: includes/admin.php msgid "Authentication settings" -msgstr "Nastavení ověřování" +msgstr "Nastavení přístupu" msgid "New passwords do not match" msgstr "Nová hesla se neshodují" @@ -109,19 +112,19 @@ msgid "Passphrase" msgstr "Heslo" msgid "Wifi settings updated successfully" -msgstr "Wifi nastavení úspěšně aktualizováno" +msgstr "Wi-Fi nastavení úspěšně aktualizováno" msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" -msgstr "Wifi nastavení aktualizováno, ale nerestartováno (nemohu spustit 'wpa_cli reconfigure')" +msgstr "Wi-Fi nastavení aktualizováno, ale nerestartováno (nemohu spustit 'wpa_cli reconfigure')" msgid "Wifi settings failed to be updated" -msgstr "Wifi nastavení se nepodařilo aktualizovat" +msgstr "Wi-Fi nastavení se nepodařilo aktualizovat" msgid "Failed to update wifi settings" -msgstr "Failed nastavení se nepodařilo aktualizovat" +msgstr "Nepodařilo se aktualizovat nastavení Wi-Fi" msgid "Rescan" -msgstr "Prohledat" +msgstr "Vyhledat sítě" msgid "Update" msgstr "Aktualizovat" @@ -139,7 +142,7 @@ msgid "Hide" msgstr "Skrýt" msgid "Not configured" -msgstr "Not configured" +msgstr "Není nakonfigurováno" msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Poznámka: WEP přístupový bod je zobrazen jako 'bez zabezpečení' ''. RaspAP zatím nepodporuje připojení k WEP sítím" @@ -152,16 +155,16 @@ msgid "Interface Name" msgstr "Jméno rozhraní" msgid "IPv4 Address" -msgstr "IPv4 Adresa" +msgstr "IPv4 adresa" msgid "IPv6 Address" -msgstr "IPv6 Adresa" +msgstr "IPv6 adresa" msgid "Subnet Mask" -msgstr "Subnet Maska" +msgstr "Maska podsítě" msgid "Mac Address" -msgstr "Mac Adresa" +msgstr "MAC Adresa" msgid "Interface Statistics" msgstr "Statistiky rozhraní" @@ -178,20 +181,20 @@ msgstr "Odeslané Pakety" msgid "Transferred Bytes" msgstr "Odeslané Bajty" -msgid "Wireless Information" -msgstr "Bezdrátové informace" +msgid "Wireless Client" +msgstr "Bezdrátový klient" msgid "Connected To" -msgstr "Připojeno K" +msgstr "Připojeno k" msgid "AP Mac Address" -msgstr "AP Mac Adresa" +msgstr "MAC adresa AP" msgid "Bitrate" -msgstr "Bitrate" +msgstr "Datový tok" msgid "Signal Level" -msgstr "Signal Level" +msgstr "Úroveň signálu" msgid "Transmit Power" msgstr "Vysílací výkon" @@ -200,19 +203,19 @@ msgid "Frequency" msgstr "Frekvence" msgid "Link Quality" -msgstr "Kvalita Linky" +msgstr "Kvalita spojení" msgid "Information provided by ip and iw and from system" -msgstr "Informace získány od ip, iw a systému" +msgstr "Informace získány z ip, iw a systému" msgid "No MAC Address Found" msgstr "Žádná MAC Adresa Nenalezena" msgid "No IP Address Found" -msgstr "Žádná IP Adresa Nenalezena" +msgstr "IP adresa nenalezena" msgid "No Subnet Mask Found" -msgstr "Žádná maska nenalezena" +msgstr "Nenalezena žádná maska podsítě" msgid "No Data" msgstr "Žádná Data" @@ -230,10 +233,10 @@ msgid "Interface already down" msgstr "Rozhraní je už vypnuté" msgid "Start wlan0" -msgstr "Start wlan0" +msgstr "Spustit wlan0" msgid "Stop wlan0" -msgstr "Stop wlan0" +msgstr "Zastavit wlan0" msgid "Connected Devices" msgstr "Připojená zařízení" @@ -248,26 +251,29 @@ msgstr "Seznam zařízení" msgid "Interface" msgstr "Rozhraní" +msgid "DNS Server" +msgstr "DNS server" + msgid "Starting IP Address" msgstr "Počáteční IP Adresa" msgid "Ending IP Address" -msgstr "Konečná IP Adresa" +msgstr "Konečná IP adresa" msgid "Static Leases" -msgstr "Statická zapůjčení" +msgstr "Staticky přidělené adresy" msgid "Add static DHCP lease" -msgstr "Přidat statický zapůjčení DHCP" +msgstr "Přidělit statickou IP adresu pomocí DHCP serveru" msgid "Lease Time" -msgstr "Čas Zápujčky" +msgstr "Délka zápůjčky IP adresy" msgid "Interval" msgstr "Interval" msgid "Active DHCP leases" -msgstr "Aktivní DHCP zápujčky" +msgstr "IP adresy přidělené DHCP serverem" msgid "Expire time" msgstr "Čas Expirace" @@ -276,7 +282,7 @@ msgid "MAC Address" msgstr "MAC Adresa" msgid "Host name" -msgstr "Název klienta" +msgstr "Klient" msgid "Client ID" msgstr "Klient ID" @@ -317,6 +323,33 @@ msgstr "Dnsmasq beží" msgid "Dnsmasq is not running" msgstr "Dnsmasq neběží" +msgid "Upstream DNS servers" +msgstr "Upstream servery DNS" + +msgid "Only ever query DNS servers configured below" +msgstr "Použít pouze DNS servery nakonfigurované níže" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Povolte tuto možnost, pokud chcete, aby RaspAP odesílalo DNS dotazy pouze na servery nakonfigurované níže. Ve výchozím nastavení RaspAP používá upstream DNS servery přidělené DHCP serverem." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Tato volba přidává do konfigurace dnsmasq no-resolv." + +msgid "Add upstream DNS server" +msgstr "Přidat upstream DNS server" + +msgid "Format" +msgstr "Formát" + +msgid "Choose a hosted server" +msgstr "Veřejný DNS server" + +msgid "Log DHCP requests" +msgstr "Logovat DHCP požadavky" + +msgid "Log DNS queries" +msgstr "Logovat DNS dotazy" + #: includes/hostapd.php msgid "Basic" msgstr "Základní" @@ -328,7 +361,7 @@ msgid "Basic settings" msgstr "Základní nastavení" msgid "Wireless Mode" -msgstr "Bezdrátový mód" +msgstr "Bezdrátový režim" msgid "Security settings" msgstr "Nastavení Zabezpečení" @@ -340,13 +373,13 @@ msgid "Encryption Type" msgstr "Typ šifrování" msgid "PSK" -msgstr "PSK" +msgstr "Heslo" msgid "Advanced settings" msgstr "Pokročilé nastavení" msgid "Country Code" -msgstr "Kód země" +msgstr "Země" msgid "Information provided by hostapd" msgstr "Zdroj informací hostapd" @@ -370,16 +403,16 @@ msgid "WPA passphrase must be between 8 and 63 characters" msgstr "WPA heslo musí být mezi 8 a 63 znaky" msgid "Unknown interface" -msgstr "Neznáme rozhraní" +msgstr "Neznámé rozhraní" msgid "Country code must be blank or two characters" msgstr "Kód země musí být prázdný nebo obsahovat dva znaky" msgid "Wifi Hotspot settings saved" -msgstr "Nastavení Wifi Hotspotu uloženo" +msgstr "Nastavení Wi-Fi Hotspotu uloženo" msgid "Unable to save wifi hotspot settings" -msgstr "Nemohu uložit nastavení wifi hotspotu" +msgstr "Nemohu uložit nastavení Wi-Fi hotspotu" msgid "Start hotspot" msgstr "Spustit hotspot" @@ -387,17 +420,23 @@ msgstr "Spustit hotspot" msgid "Stop hotspot" msgstr "Zastavit hotspot" +msgid "Restart hotspot" +msgstr "Restartovat hotspot" + msgid "Enable logging" msgstr "Zapnout logování" msgid "Logfile output" -msgstr "Výstop logu" +msgstr "Logovat do souboru" msgid "WiFi client AP mode" -msgstr "AP režim WiFi klienta" +msgstr "AP v klientském Wi-Fi režimu" + +msgid "Bridged AP mode" +msgstr "Bridged AP režim" msgid "Hide SSID in broadcast" -msgstr "Skrýt ve vysílání SSID" +msgstr "Skrýt SSID" msgid "Maximum number of clients" msgstr "Maximální počet klientů" @@ -407,7 +446,7 @@ msgstr "Konfiguruje max_num_sta volbu hostapd. Výchozí a maximální hodnota j #: includes/networking.php msgid "Summary" -msgstr "Shrnutí" +msgstr "Přehled" msgid "Current settings" msgstr "Aktuální nastavení" @@ -415,9 +454,6 @@ msgstr "Aktuální nastavení" msgid "Default Gateway" msgstr "Výchozí brána" -msgid "DNS Server" -msgstr "DNS Server" - msgid "Alternate DNS Server" msgstr "Alternativní DNS Server" @@ -425,10 +461,10 @@ msgid "Adapter IP Address Settings" msgstr "Nastavení IP Adresy adaptéru" msgid "Enable Fallback to Static Option" -msgstr "Povolit Záložní nastavení Statické IP" +msgstr "Použít statickou IP adresu pokud není přidělena DHCP serverem" msgid "Static IP" -msgstr "Statická IP" +msgstr "Statická IP adresa" msgid "Enabled" msgstr "Zapnuto" @@ -440,10 +476,10 @@ msgid "Static IP Options" msgstr "Možnosti statické IP" msgid "Apply settings" -msgstr "Aplikovat nastavení" +msgstr "Použít nastavení" msgid "Information provided by /sys/class/net" -msgstr "Informace získány od /sys/class/net" +msgstr "Informace získány z /sys/class/net" #: includes/system.php msgid "System Information" @@ -465,13 +501,13 @@ msgid "Console" msgstr "Konzole" msgid "Hostname" -msgstr "Hostname" +msgstr "Název počítače" msgid "Pi Revision" msgstr "Pi Revize" msgid "Uptime" -msgstr "Doba využití" +msgstr "V provozu" msgid "Memory Used" msgstr "Využití paměti" @@ -480,23 +516,23 @@ msgid "CPU Load" msgstr "Vytížení procesoru" msgid "Reboot" -msgstr "Rebootovat" +msgstr "Restartovat" msgid "Shutdown" msgstr "Vypnout" msgid "System Rebooting Now!" -msgstr "Systém nyní rebootuje!" +msgstr "Systém je restartován!" msgid "System Shutting Down Now!" msgstr "Systém se nyní vypíná!" #: includes/themes.php msgid "Theme settings" -msgstr "Nastavení témat" +msgstr "Nastavení vzhledu" msgid "Select a theme" -msgstr "Vybrat téma" +msgstr "Vybrat šablonu" #: includes/data_usage.php msgid "Data usage" @@ -506,13 +542,13 @@ msgid "Data usage monitoring" msgstr "Sledování využití dat" msgid "Hourly traffic amount" -msgstr "Hodinový objem návštěvnosti" +msgstr "Hodinový provoz" msgid "Daily traffic amount" -msgstr "Denní objem návštěvnosti" +msgstr "Denní provoz" msgid "Monthly traffic amount" -msgstr "Měsíční objem návštěvnosti" +msgstr "Měsíční provoz" msgid "Hourly" msgstr "Hodinový" @@ -536,7 +572,7 @@ msgid "Receive MB" msgstr "Přijato MB" msgid "Information provided by vnstat" -msgstr "Informace získány od vnstat" +msgstr "Informace získány z vnstat" msgid "Loading {0} bandwidth chart" msgstr "Načítám {0} graf šířky pásma" @@ -558,7 +594,7 @@ msgid "Select OpenVPN configuration file (.ovpn)" msgstr "Vyberte konfigurační soubor OpenVPN (.ovpn)" msgid "Client Log" -msgstr "Protokol klienta" +msgstr "Klientský log" msgid "Port" msgstr "Port" @@ -567,7 +603,7 @@ msgid "Protocol" msgstr "Protokol" msgid "Root CA certificate" -msgstr "Root CA certifikát" +msgstr "Kořenový certifikát CA" msgid "Server certificate" msgstr "Certifikát serveru" @@ -598,16 +634,16 @@ msgstr "Pokus o zastavení openvpn" #: includes/torproxy.php msgid "TOR is not running" -msgstr "TOR není spuštěno" +msgstr "TOR není spuštěn" msgid "TOR is running" msgstr "TOR není spuštěn" msgid "Relay" -msgstr "Přepínač" +msgstr "Relay" msgid "Relay settings" -msgstr "Nastavení přepínače" +msgstr "Nastavení TOR Relay" msgid "Nickname" msgstr "Přezdívka" @@ -630,6 +666,10 @@ msgstr "Pokus o spuštění TOR" msgid "Attempting to stop TOR" msgstr "Pokus o zastavení TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Bridged AP režim je povolen. Název a IP adresu najdete ve webovém rozhraní vašeho routeru." + #: common form controls msgid "Save settings" msgstr "Uložit nastavení" @@ -651,3 +691,46 @@ msgstr "nahoru" msgid "down" msgstr "dolů" + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "Blokování reklam" + +msgid "Start Ad Blocking" +msgstr "Povolit blokování reklam" + +msgid "Restart Ad Blocking" +msgstr "Restartovat blokování reklam" + +msgid "Blocklist settings" +msgstr "Nastavení blocklistu" + +msgid "Enable blocklists" +msgstr "Blokovat obsah" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Povolte tuto možnost, pokud chcete, aby RaspAP blokovalo DNS požadavky na reklamy, sledování a další virtuální havěť. Blocklisty jsou shromažďovány z více aktivně udržovaných zdrojů a automaticky aktualizovány, čištěny, optimalizovány a denně moderovány." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Tato funkce přidává conf-file a addn-hosts do konfigurace dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Vyberte poskytovatele blocklistu" + +msgid "Hostnames blocklist last updated" +msgstr "Seznam blokovaných hostitelů naposledy aktualizován" + +msgid "Domains blocklist last updated" +msgstr "Seznam blokovaných domén naposledy aktualizován" + +msgid "Update now" +msgstr "Aktualizovat nyní" + +msgid "Statistics" +msgstr "Statistiky" + +msgid "Information provided by adblock" +msgstr "Informace jsou poskytované službou adblock" + diff --git a/locale/da_DK/LC_MESSAGES/messages.mo b/locale/da_DK/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..98094dad Binary files /dev/null and b/locale/da_DK/LC_MESSAGES/messages.mo differ diff --git a/locale/da_DK/LC_MESSAGES/messages.po b/locale/da_DK/LC_MESSAGES/messages.po new file mode 100644 index 00000000..7edbab58 --- /dev/null +++ b/locale/da_DK/LC_MESSAGES/messages.po @@ -0,0 +1,736 @@ +msgid "" +msgstr "" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" +"POT-Creation-Date: 2017-10-19 08:56+0000\n" +"PO-Revision-Date: 2020-04-14 08:51\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Danish\n" +"Language: da_DK\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: da\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" + +#: index.php +msgid "RaspAP Wifi Configuration Portal" +msgstr "RaspAP Wifi Konfigurationsportal" + +msgid "Toggle navigation" +msgstr "Skift navigation" + +msgid "RaspAP Wifi Portal" +msgstr "RaspAP Wifi Portal" + +msgid "Dashboard" +msgstr "Oversigt" + +msgid "WiFi client" +msgstr "WiFi-klient" + +msgid "Hotspot" +msgstr "Hotspot" + +msgid "Memory Use" +msgstr "Brugt hukommelse" + +msgid "CPU Temp" +msgstr "CPU Temperatur" + +msgid "Networking" +msgstr "Netværk" + +msgid "DHCP Server" +msgstr "DHCP Server" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR proxy" + +msgid "Authentication" +msgstr "Godkendelse" + +msgid "Change Theme" +msgstr "Skift tema" + +msgid "System" +msgstr "System" + +msgid "About RaspAP" +msgstr "Om RaspAP" + +#: includes/admin.php +msgid "Authentication settings" +msgstr "Godkendelsesindstillinger" + +msgid "New passwords do not match" +msgstr "Nye adgangskoder matcher ikke" + +msgid "Username must not be empty" +msgstr "Brugernavn må ikke være tomt" + +msgid "Admin password updated" +msgstr "Administratorkodeord opdateret" + +msgid "Failed to update admin password" +msgstr "Opdatering af administratorkodeord mislykkedes" + +msgid "Old password does not match" +msgstr "Gammelt kodeord ikke korrekt" + +msgid "Username" +msgstr "Brugernavn" + +msgid "Old password" +msgstr "Gammel adgangskode" + +msgid "New password" +msgstr "Ny adgangskode" + +msgid "Repeat new password" +msgstr "Gentag ny adgangskode" + +#: includes/configure_client.php +msgid "Client settings" +msgstr "Klientindstilinger" + +msgid "SSID" +msgstr "SSID" + +msgid "Channel" +msgstr "Kanal" + +msgid "Security" +msgstr "Sikkerhed" + +msgid "Passphrase" +msgstr "Adgangskode" + +msgid "Wifi settings updated successfully" +msgstr "Wifi-indstillinger opdateret" + +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Wifi-indstillinger opdateret, men kan ikke genstarte (kan ikke køre 'wpa_cli reconfigure')" + +msgid "Wifi settings failed to be updated" +msgstr "Wifi-indstillinger kunne ikke opdateres" + +msgid "Failed to update wifi settings" +msgstr "Opdatering af Wifi-indstillinger mislykkedes" + +msgid "Rescan" +msgstr "Scan igen" + +msgid "Update" +msgstr "Opdatér" + +msgid "Add" +msgstr "Tilføj" + +msgid "Delete" +msgstr "Slet" + +msgid "Show" +msgstr "Vis" + +msgid "Hide" +msgstr "Skjul" + +msgid "Not configured" +msgstr "Ikke konfigureret" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "Note: WEP access points vises som 'Åben'. RaspAP understøtter i øjeblikket ikke forbindelser til WEP" + +#: includes/dashboard.php +msgid "Interface Information" +msgstr "Interfaceinformation" + +msgid "Interface Name" +msgstr "Interfacenavn" + +msgid "IPv4 Address" +msgstr "IPv4 adresse" + +msgid "IPv6 Address" +msgstr "IPv6 adresse" + +msgid "Subnet Mask" +msgstr "Undernetmaske" + +msgid "Mac Address" +msgstr "Mac-adresse" + +msgid "Interface Statistics" +msgstr "Interfacestatistik" + +msgid "Received Packets" +msgstr "Modtagne pakker" + +msgid "Received Bytes" +msgstr "Modtagne bytes" + +msgid "Transferred Packets" +msgstr "Overførte pakker" + +msgid "Transferred Bytes" +msgstr "Overførte bytes" + +msgid "Wireless Client" +msgstr "Trådløs klient" + +msgid "Connected To" +msgstr "Forbundet til" + +msgid "AP Mac Address" +msgstr "AP Mac-adresse" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Signal Level" +msgstr "Signalniveau" + +msgid "Transmit Power" +msgstr "Sendeeffekt" + +msgid "Frequency" +msgstr "Frekvens" + +msgid "Link Quality" +msgstr "Link-kvalitet" + +msgid "Information provided by ip and iw and from system" +msgstr "Oplysninger leveret af ip og iw og fra system" + +msgid "No MAC Address Found" +msgstr "Ingen MAC-adresse fundet" + +msgid "No IP Address Found" +msgstr "Ingen IP-adresse fundet" + +msgid "No Subnet Mask Found" +msgstr "Ingen undernetmaske fundet" + +msgid "No Data" +msgstr "Ingen data" + +msgid "Not connected" +msgstr "Ikke forbundet" + +msgid "Interface is up" +msgstr "Interface kører" + +msgid "Interface is down" +msgstr "Interface kører ikke" + +msgid "Interface already down" +msgstr "Interface allerede nede" + +msgid "Start wlan0" +msgstr "Start wlan0" + +msgid "Stop wlan0" +msgstr "Stop wlan0" + +msgid "Connected Devices" +msgstr "Forbundne enheder" + +#: includes/dhcp.php +msgid "DHCP server settings" +msgstr "DHCP-serverindstillinger" + +msgid "Client list" +msgstr "Klientliste" + +msgid "Interface" +msgstr "Interface" + +msgid "DNS Server" +msgstr "DNS-server" + +msgid "Starting IP Address" +msgstr "Start IP-adresse" + +msgid "Ending IP Address" +msgstr "Slut IP-adresse" + +msgid "Static Leases" +msgstr "Statiske Leases" + +msgid "Add static DHCP lease" +msgstr "Tilføj statisk DHCP-lease" + +msgid "Lease Time" +msgstr "Lease-tid" + +msgid "Interval" +msgstr "Interval" + +msgid "Active DHCP leases" +msgstr "Aktive DHCP-leases" + +msgid "Expire time" +msgstr "Udløbstid" + +msgid "MAC Address" +msgstr "MAC-adresse" + +msgid "Host name" +msgstr "Hostnavn" + +msgid "Client ID" +msgstr "Klient-ID" + +msgid "Information provided by Dnsmasq" +msgstr "Oplysninger leveret af Dnsmasq" + +msgid "Stop dnsmasq" +msgstr "Stop dnsmasq" + +msgid "Start dnsmasq" +msgstr "Start dnsmasq" + +msgid "Dnsmasq configuration updated successfully" +msgstr "Dnsmasq-konfiguration blev opdateret" + +msgid "dnsmasq already running" +msgstr "dnsmasq kører allerede" + +msgid "Successfully started dnsmasq" +msgstr "dnsmasq blev startet" + +msgid "Failed to start dnsmasq" +msgstr "Kunne ikke starte dnsmasq" + +msgid "Successfully stopped dnsmasq" +msgstr "Dnsmasq blev stoppet" + +msgid "Failed to stop dnsmasq" +msgstr "Kunne ikke stoppe dnsmasq" + +msgid "dnsmasq already stopped" +msgstr "dnsmasq er allerede stoppet" + +msgid "Dnsmasq is running" +msgstr "Dnsmasq kører" + +msgid "Dnsmasq is not running" +msgstr "Dnsmasq kører ikke" + +msgid "Upstream DNS servers" +msgstr "Upstream DNS-servere" + +msgid "Only ever query DNS servers configured below" +msgstr "Spørg kun følgende DNS-servere" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Aktivér denne indstilling, hvis du vil have RaspAP til udelukkende at sende DNS-forespørgsler til serverne, der er konfigureret nedenfor . Som standard bruger RaspAP også navneservere på den originale DHCP-server." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Denne mulighed tilføjer no-resolv til dnsmasq konfigurationen." + +msgid "Add upstream DNS server" +msgstr "Tilføj upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Vælg en hostet server" + +msgid "Log DHCP requests" +msgstr "Log DHCP anmodninger" + +msgid "Log DNS queries" +msgstr "Log DNS-forespørgsler" + +#: includes/hostapd.php +msgid "Basic" +msgstr "Grundindst" + +msgid "Advanced" +msgstr "Avanceret" + +msgid "Basic settings" +msgstr "Grundindstillinger" + +msgid "Wireless Mode" +msgstr "Trådløs tilstand" + +msgid "Security settings" +msgstr "Sikkerhedsindstillinger" + +msgid "Security type" +msgstr "Sikkerhedstype" + +msgid "Encryption Type" +msgstr "Krypteringstype" + +msgid "PSK" +msgstr "PSK" + +msgid "Advanced settings" +msgstr "Avancerede indstillinger" + +msgid "Country Code" +msgstr "Landekode" + +msgid "Information provided by hostapd" +msgstr "Oplysninger leveret af hostapd" + +msgid "Attempting to start hotspot" +msgstr "Forsøger at starte hotspot" + +msgid "Attempting to stop hotspot" +msgstr "Forsøger at standse hotspot" + +msgid "HostAPD is not running" +msgstr "HostAPD kører ikke" + +msgid "HostAPD is running" +msgstr "HostAPD kører" + +msgid "SSID must be between 1 and 32 characters" +msgstr "SSID skal være mellem 1 og 32 tegn" + +msgid "WPA passphrase must be between 8 and 63 characters" +msgstr "WPA kode skal være mellem 8 og 63 tegn" + +msgid "Unknown interface" +msgstr "Ukendt interface" + +msgid "Country code must be blank or two characters" +msgstr "Landekode skal være tomt, eller have to tegn" + +msgid "Wifi Hotspot settings saved" +msgstr "Wifi Hotspot-indstillinger gemt" + +msgid "Unable to save wifi hotspot settings" +msgstr "Kunne ikke gemme wifi-hotspot-indstillinger" + +msgid "Start hotspot" +msgstr "Start hotspot" + +msgid "Stop hotspot" +msgstr "Stop hotspot" + +msgid "Restart hotspot" +msgstr "Genstart hotspot" + +msgid "Enable logging" +msgstr "Aktivér logning" + +msgid "Logfile output" +msgstr "Logfil output" + +msgid "WiFi client AP mode" +msgstr "WiFi klient AP-tilstand" + +msgid "Bridged AP mode" +msgstr "Bridged AP-tilstand" + +msgid "Hide SSID in broadcast" +msgstr "Skjul SSID" + +msgid "Maximum number of clients" +msgstr "Maksimal klientantal" + +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Konfigurerer max_num_sta i hostapd. Standard og maksimum er 2007. Hvis tom eller 0, bruges standard." + +#: includes/networking.php +msgid "Summary" +msgstr "Oversigt" + +msgid "Current settings" +msgstr "Nuværende indstillinger" + +msgid "Default Gateway" +msgstr "Standard-gateway" + +msgid "Alternate DNS Server" +msgstr "Alternativ DNS-server" + +msgid "Adapter IP Address Settings" +msgstr "Adapter IP-adresseindstillinger" + +msgid "Enable Fallback to Static Option" +msgstr "Aktivér Fallback til statisk mulighed" + +msgid "Static IP" +msgstr "Statisk IP" + +msgid "Enabled" +msgstr "Aktiveret" + +msgid "Disabled" +msgstr "Deaktiveret" + +msgid "Static IP Options" +msgstr "Statiske IP-indstillinger" + +msgid "Apply settings" +msgstr "Anvend indstillinger" + +msgid "Information provided by /sys/class/net" +msgstr "Oplysninger leveret af /sys/class/net" + +#: includes/system.php +msgid "System Information" +msgstr "Systemoplysninger" + +msgid "Language" +msgstr "Sprog" + +msgid "Language settings" +msgstr "Sprogindstillinger" + +msgid "Select a language" +msgstr "Vælg et sprog" + +msgid "Language setting saved" +msgstr "Sprogindstillinger gemt" + +msgid "Console" +msgstr "Konsol" + +msgid "Hostname" +msgstr "Hostnavn" + +msgid "Pi Revision" +msgstr "Pi-revision" + +msgid "Uptime" +msgstr "Oppetid" + +msgid "Memory Used" +msgstr "Brugt hukommelse" + +msgid "CPU Load" +msgstr "CPU-belasting" + +msgid "Reboot" +msgstr "Genstart" + +msgid "Shutdown" +msgstr "Luk ned" + +msgid "System Rebooting Now!" +msgstr "Systemet genstarter nu!" + +msgid "System Shutting Down Now!" +msgstr "Systemet lukker ned nu!" + +#: includes/themes.php +msgid "Theme settings" +msgstr "Temaindstillinger" + +msgid "Select a theme" +msgstr "Vælg et tema" + +#: includes/data_usage.php +msgid "Data usage" +msgstr "Dataforbrug" + +msgid "Data usage monitoring" +msgstr "Overvågning af dataforbrug" + +msgid "Hourly traffic amount" +msgstr "Timevis trafikmængde" + +msgid "Daily traffic amount" +msgstr "Daglig trafikmængde" + +msgid "Monthly traffic amount" +msgstr "Månedsvis trafikmængde" + +msgid "Hourly" +msgstr "Timevis" + +msgid "Daily" +msgstr "Daglig" + +msgid "Monthly" +msgstr "Månedlig" + +msgid "interface" +msgstr "Interface" + +msgid "date" +msgstr "Dato" + +msgid "Send MB" +msgstr "Sendte MB" + +msgid "Receive MB" +msgstr "Modtagne MB" + +msgid "Information provided by vnstat" +msgstr "Oplysninger leveret af vnstat" + +msgid "Loading {0} bandwidth chart" +msgstr "Indlæser {0} båndbreddediagram" + +msgid "Showing {0} to {1} of {2} entries" +msgstr "Viser {0} til {1} ​​af {2} poster" + +#: includes/openvpn.php +msgid "OpenVPN is not running" +msgstr "OpenVPN kører ikke" + +msgid "OpenVPN is running" +msgstr "OpenVPN kører" + +msgid "Server settings" +msgstr "Serverindstillinger" + +msgid "Select OpenVPN configuration file (.ovpn)" +msgstr "Vælg OpenVPN-konfigurationsfil (.ovpn)" + +msgid "Client Log" +msgstr "Klientlog" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protokol" + +msgid "Root CA certificate" +msgstr "Root-CA-certifikat" + +msgid "Server certificate" +msgstr "Servercertifikat" + +msgid "Diffie Hellman parameters" +msgstr "Diffie Hellman-parametre" + +msgid "KeepAlive" +msgstr "KeepAlive" + +msgid "Server log" +msgstr "Serverlog" + +msgid "Start OpenVPN" +msgstr "Start OpenVPN" + +msgid "Stop OpenVPN" +msgstr "Stop OpenVPN" + +msgid "Information provided by openvpn" +msgstr "Oplysninger leveret af OpenVPN" + +msgid "Attempting to start openvpn" +msgstr "Forsøger at starte OpenVPN" + +msgid "Attempting to stop openvpn" +msgstr "Forsøger at stoppe OpenVPN" + +#: includes/torproxy.php +msgid "TOR is not running" +msgstr "TOR kører ikke" + +msgid "TOR is running" +msgstr "TOR kører" + +msgid "Relay" +msgstr "Relæ" + +msgid "Relay settings" +msgstr "Relæindstillinger" + +msgid "Nickname" +msgstr "Kaldenavn" + +msgid "Address" +msgstr "Adresse" + +msgid "Start TOR" +msgstr "Start TOR" + +msgid "Stop TOR" +msgstr "Stop TOR" + +msgid "Information provided by tor" +msgstr "Oplysninger leveret af TOR" + +msgid "Attempting to start TOR" +msgstr "Forsøger at starte TOR" + +msgid "Attempting to stop TOR" +msgstr "Forsøger at stoppe TOR" + +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Bridged AP-tilstand er aktiveret. For værtsnavn og IP, se din routers administratorside." + +#: common form controls +msgid "Save settings" +msgstr "Gem indstillinger" + +msgid "Refresh" +msgstr "Opdater" + +msgid "running" +msgstr "Kører" + +msgid "stopped" +msgstr "stoppet" + +msgid "Remove" +msgstr "Fjern" + +msgid "up" +msgstr "oppe" + +msgid "down" +msgstr "nede" + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "Annonceblokering" + +msgid "Start Ad Blocking" +msgstr "Start annonceblokering" + +msgid "Restart Ad Blocking" +msgstr "Genstart annonceblokering" + +msgid "Blocklist settings" +msgstr "Blokeringslisteindstillinger" + +msgid "Enable blocklists" +msgstr "Aktivér blokeringsliste" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Aktivér denne indstilling, hvis du vil have RaspAP til at blokere DNS-anmodninger om annoncer, sporing og andet virtuelt affald . Blokeringslister samles fra flere, aktivt vedligeholdte kilder og opdateres, renses, optimeres og modereres automatisk dagligt." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Denne mulighed tilføjer conf-file og addn-hosts til dnsmasq-konfigurationen." + +msgid "Choose a blocklist provider" +msgstr "Vælg en blokeringslisteudbyder" + +msgid "Hostnames blocklist last updated" +msgstr "Hostnames blokeringsliste senest opdateret" + +msgid "Domains blocklist last updated" +msgstr "Domæneblokeringsliste senest opdateret" + +msgid "Update now" +msgstr "Opdater nu" + +msgid "Statistics" +msgstr "Statistikker" + +msgid "Information provided by adblock" +msgstr "Information leveret af adblock" + diff --git a/locale/de_DE/LC_MESSAGES/messages.mo b/locale/de_DE/LC_MESSAGES/messages.mo index 207406b6..18e2ce99 100644 Binary files a/locale/de_DE/LC_MESSAGES/messages.mo and b/locale/de_DE/LC_MESSAGES/messages.mo differ diff --git a/locale/de_DE/LC_MESSAGES/messages.po b/locale/de_DE/LC_MESSAGES/messages.po index 0aaf9ddb..ca08abb8 100644 --- a/locale/de_DE/LC_MESSAGES/messages.po +++ b/locale/de_DE/LC_MESSAGES/messages.po @@ -1,26 +1,25 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Tino Undeutsch\n" -"Language-Team: \n" +"PO-Revision-Date: 2023-02-22 08:17\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: de\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" -msgstr "RaspAP WLAN Konfiguration Portal" +msgstr "RaspAP Wifi Konfigurationsportal" msgid "Toggle navigation" msgstr "Navigation umschalten" @@ -31,26 +30,32 @@ msgstr "RaspAP WLAN Portal" msgid "Dashboard" msgstr "Übersicht" -msgid "Configure WiFi client" -msgstr "WLAN Client einrichten" +msgid "WiFi client" +msgstr "WLAN Client" -msgid "Configure hotspot" -msgstr "Hotspot einrichten" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Netzwerk einrichten" +msgid "Memory Use" +msgstr "Arbeitsspeichernutzung" -msgid "Configure DHCP Server" -msgstr "DHCP Server einrichten" +msgid "CPU Temp" +msgstr "CPU Temp" -msgid "Configure OpenVPN" -msgstr "OpenVPN einrichten" +msgid "Networking" +msgstr "Netzwerk" -msgid "Configure TOR proxy" -msgstr "TOR Proxy einrichten" +msgid "DHCP Server" +msgstr "DHCP-Server" -msgid "Configure Auth" -msgstr "Authentifizierung einrichten" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR Proxy" + +msgid "Authentication" +msgstr "Authentifizierung" msgid "Change Theme" msgstr "Oberflächendesign ändern" @@ -72,10 +77,10 @@ msgid "Username must not be empty" msgstr "Benutzername darf nicht leer sein" msgid "Admin password updated" -msgstr "Administrator Passwort aktualisiert" +msgstr "Admin-Passwort aktualisiert" msgid "Failed to update admin password" -msgstr "Aktualisierung Admin Password fehlgeschlagen" +msgstr "Fehler beim Aktualisieren des Admin-Passwortes" msgid "Old password does not match" msgstr "Altes Passwort nicht korrekt" @@ -84,7 +89,7 @@ msgid "Username" msgstr "Benutzername" msgid "Old password" -msgstr "Altes Passwort" +msgstr "Altes Password" msgid "New password" msgstr "Neues Passwort" @@ -106,7 +111,7 @@ msgid "Security" msgstr "Sicherheit" msgid "Passphrase" -msgstr "Passphrase" +msgstr "Passwort" msgid "Wifi settings updated successfully" msgstr "WLAN Einstellungen erfolgreich aktualisert" @@ -141,9 +146,33 @@ msgstr "Ausblenden" msgid "Not configured" msgstr "Nicht konfiguriert" +msgid "Connected" +msgstr "Verbunden" + +msgid "Known" +msgstr "Bekannt" + +msgid "Nearby" +msgstr "In der Nähe" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Hinweis: WEP access points erscheinen als 'Offen'. RaspAP unterstützt derzeit keine Verbindungen zu WEP" +msgid "No Wifi stations found" +msgstr "Keine WLAN-Sender gefunden" + +msgid "Reinitializing wpa_supplicant" +msgstr "Reinitialisierung von wpa_supplicant" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "Auf „Rescan“ klicken, um nach WLAN-Sendern in der Nähe zu suchen." + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "Auf „Reinitialisierung“ klicken, um wpa_supplicant neu zu initialisieren." + +msgid "Reinitialize" +msgstr "Reinitialisieren" + #: includes/dashboard.php msgid "Interface Information" msgstr "Schnittstelle Informationen" @@ -178,8 +207,8 @@ msgstr "Übertragene Pakete" msgid "Transferred Bytes" msgstr "Übertragene Bytes" -msgid "Wireless Information" -msgstr "Informationen Funknetz" +msgid "Wireless Client" +msgstr "Drahtlosschnittstelle" msgid "Connected To" msgstr "Verbunden mit" @@ -191,7 +220,7 @@ msgid "Bitrate" msgstr "Bitrate" msgid "Signal Level" -msgstr "Signalstärke" +msgstr "Signalpegel" msgid "Transmit Power" msgstr "Sendeleistung" @@ -230,14 +259,68 @@ msgid "Interface already down" msgstr "Schnittstelle bereits aus" msgid "Start wlan0" -msgstr "Start wlan0" +msgstr "wlan0 starten" msgid "Stop wlan0" -msgstr "Stop wlan0" +msgstr "wlan0 beenden" msgid "Connected Devices" msgstr "Verbundene Geräte" +msgid "Client: Ethernet cable" +msgstr "Client: Ethernet-Kabel" + +msgid "Ethernet" +msgstr "Ethernet" + +msgid "Client: Smartphone (USB tethering)" +msgstr "Client: Smartphone (USB-Tethering)" + +msgid "Smartphone" +msgstr "Smartphone" + +msgid "WiFi" +msgstr "WLAN" + +msgid "Mobile Data Client" +msgstr "Mobile-Daten-Client" + +msgid "Mobile Data" +msgstr "Mobile Daten" + +msgid "No information available" +msgstr "Keine Informationen verfügbar" + +msgid "Interface name invalid" +msgstr "Name der Schnittstelle ungültig" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "Die erforderliche exec-Funktion ist deaktiviert. Bitte prüfen, ob exec nicht zu PHP disable_functions hinzugefügt wurde." + +msgid "Waiting for the interface to start ..." +msgstr "Warten auf den Start der Schnittstelle …" + +msgid "Stop the Interface" +msgstr "Interface stoppen" + +msgid "Connection mode" +msgstr "Verbindungsmodus" + +msgid "Signal quality" +msgstr "Signalqualität" + +msgid "WAN IP" +msgstr "WAN-IP" + +msgid "Web-GUI" +msgstr "Web-GUI" + +msgid "Signal strength" +msgstr "Signalstärke" + +msgid "No Client device or not yet configured" +msgstr "Kein Clientgerät oder noch nicht konfiguriert" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "DHCP-Servereinstellungen" @@ -248,6 +331,15 @@ msgstr "Client Liste" msgid "Interface" msgstr "Schnittstelle" +msgid "Enable DHCP for this interface" +msgstr "Aktiviere DHCP für diese Oberfläche" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Aktivieren Sie diese Option, wenn Sie möchten, dass RaspAP IP-Adressen auf der ausgewählten Schnittstelle zuweisen soll." + +msgid "DNS Server" +msgstr "DNS-Server" + msgid "Starting IP Address" msgstr "Erste IP Addresse" @@ -275,20 +367,23 @@ msgstr "Ablaufzeit" msgid "MAC Address" msgstr "MAC Addresse" +msgid "Optional comment" +msgstr "Optionaler Kommentar" + msgid "Host name" msgstr "Rechnername" msgid "Client ID" -msgstr "Client ID" +msgstr "Client-ID" msgid "Information provided by Dnsmasq" msgstr "Informationen von 'Dnsmasq'" msgid "Stop dnsmasq" -msgstr "Stop dnsmasq" +msgstr "dnsmasq beenden" msgid "Start dnsmasq" -msgstr "Start dnsmasq" +msgstr "dnsmasq starten" msgid "Dnsmasq configuration updated successfully" msgstr "Dnsmasq Konfiguration erfolgreich übernommen" @@ -317,6 +412,57 @@ msgstr "Dnsmasq läuft" msgid "Dnsmasq is not running" msgstr "Dnsmasq läuft nicht" +msgid "Upstream DNS servers" +msgstr "Upstream DNS-Server" + +msgid "Only ever query DNS servers configured below" +msgstr "Nur folgende DNS-Server abfragen" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Aktivieren Sie diese Option, wenn Sie möchten, dass RaspAP DNS-Abfragen an die unten konfigurierten Server sendet.Standardmäßig verwendet RaspAP auch die Nameserver des ursprünglichen DHCP-Servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Diese Option fügt no-resolv zur dnsmasq-Konfiguration hinzu." + +msgid "Add upstream DNS server" +msgstr "Upstream DNS-Server hinzufügen" + +msgid "Format" +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 "Log DHCP requests" +msgstr "DHCP-Anfragen protokollieren" + +msgid "Log DNS queries" +msgstr "DNS-Anfragen protokollieren" + +msgid "Restrict access" +msgstr "Zugriff beschränken" + +msgid "Limit network access to static clients" +msgstr "Netzwerkzugriff auf statische Clients beschränken" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Diese Option aktivieren, wenn der RaspAP alle Clients ignorieren soll, die nicht in der Liste der statischen Leases aufgeführt sind." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "Diese Option fügt dhcp-ignore zur dnsmasq-Konfiguration hinzu." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "Clients mit einer bestimmten Hardware-MAC-Adresse kann immer dieselbe IP-Adresse zugewiesen werden." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "Diese Option fügt dhcp-host-Einträge zur dnsmasq-Konfiguration hinzu." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "Dies schaltet die Option gateway/nogateway für diese Schnittstelle in der DHCPCD-Konfiguration um." + #: includes/hostapd.php msgid "Basic" msgstr "Basis" @@ -339,8 +485,8 @@ msgstr "Sicherheitstyp" msgid "Encryption Type" msgstr "Verschlüsselungstyp" -msgid "PSK" -msgstr "PSK" +msgid "Pre-shared key (PSK)" +msgstr "Pre-Shared-Key (PSK)" msgid "Advanced settings" msgstr "Erweiterte Einstellungen" @@ -387,6 +533,9 @@ msgstr "Hotspot starten" msgid "Stop hotspot" msgstr "Hotspot anhalten" +msgid "Restart hotspot" +msgstr "Neustart hotspot" + msgid "Enable logging" msgstr "Aktiviere Protokoll" @@ -396,28 +545,91 @@ msgstr "Logfile Ausgabe" msgid "WiFi client AP mode" msgstr "AP-Modus von WiFI-Client" +msgid "Bridged AP mode" +msgstr "Bridge-AP-Modus" + msgid "Hide SSID in broadcast" msgstr "SSID in der Übertragung ausblenden" msgid "Maximum number of clients" msgstr "Maximale Anzahl an Clients" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Konfiguriert die maximale Anzahl an statischen Optionen der hostapd. Die Standardeinstellung und das Maximum betragen 2007. Wenn das Feld leer ist oder den Wert 0 besitzt, wird die Standardeinstellung angewendet." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Konfiguriert die Option max_num_sta von hostapd. Der Standard und das Maximum ist 2007. Falls leer oder 0, gilt der Standardwert." + +msgid "Beacon interval" +msgstr "Beacon Intervall" + +msgid "Disable disassoc_low_ack" +msgstr "Deaktiviert disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Verbindungsstationen aufgrund von übermäßigen Übertragungsausfällen nicht trennen." + +msgid "Executing RaspAP service start" +msgstr "Starten des RaspAP Dienstes ausführen" + +msgid "Close" +msgstr "Schließen" + +msgid "Enable this option to log hostapd activity." +msgstr "Aktivieren Sie diese Option, um hostapd Aktivitäten zu protokollieren." + +msgid "Transmit power (dBm)" +msgstr "Sendeleistung (dBm)" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "Legt die Option txpower für die AP-Schnittstelle und das konfigurierte Land fest." + +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 "dBm ist eine Maßeinheit für das Leistungsverhältnis, die in Dezibel (dB) bezogen auf ein Milliwatt (mW) angegeben wird. 30 dBm entsprechen 1000 mW, während 0 dBm 1,25 mW entspricht." + +msgid "WPA and WPA2" +msgstr "WPA und WPA2" + +msgid "WPA2 and WPA3-Personal (transitional mode)" +msgstr "WPA2- und WPA3-Personal (Übergangsmodus)" + +msgid "WPA3-Personal (required)" +msgstr "WPA3-Personal (erforderlich)" + +msgid "Enabled (for supported clients)" +msgstr "Aktiviert (für unterstützte Clients)" + +msgid "Required (for supported clients)" +msgstr "Erforderlich (für unterstützte Clients)" + +msgid "802.11w extends strong cryptographic protection to a select set of robust management frames, including Deauthentication, Disassociation and certain categories of Action Management frames. Collectively, this is known as Management Frame Protection (MFP)." +msgstr "802.11w erweitert den Verschlüsselungsschutz auf ausgewählte robuste Management-Frames wie Deauthentifizierung, DisAssoziation und bestimmte Kategorien von Action-Management-Frames. Zusammen wird dies als „Management Frame Protection“ (MFP) bezeichnet." + +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 "" + +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." + +msgid "For other devices, use the login credentials below." +msgstr "Für andere Geräte die Anmeldedaten unten verwenden." + +msgid "Network" +msgstr "Netzwerk" #: includes/networking.php msgid "Summary" msgstr "Zusammenfassung" +msgid "Internet connection" +msgstr "Internetverbindung" + msgid "Current settings" msgstr "Aktuelle Einstellungen" msgid "Default Gateway" msgstr "Standardgateway" -msgid "DNS Server" -msgstr "DNS Server" - msgid "Alternate DNS Server" msgstr "DNS-Server wechseln" @@ -439,12 +651,66 @@ msgstr "Deaktiviert" msgid "Static IP Options" msgstr "Statische IP Optionen" +msgid "Metric" +msgstr "Metrisch" + msgid "Apply settings" msgstr "Einstellungen übernehmen" msgid "Information provided by /sys/class/net" msgstr "Information aus /sys/class/net" +msgid "Network Devices" +msgstr "Netzwerkgeräte" + +msgid "Mobile Data Settings" +msgstr "Einstellungen für mobile Daten" + +msgid "Properties of network devices" +msgstr "Eigenschaften der Netzwerkgeräte" + +msgid "Device" +msgstr "Gerät" + +msgid "MAC" +msgstr "MAC" + +msgid "USB vid/pid" +msgstr "USB-vid/pid" + +msgid "Device type" +msgstr "Gerätetyp" + +msgid "Fixed name" +msgstr "Fester Name" + +msgid "Change" +msgstr "Ändern" + +msgid "Settings for Mobile Data Devices" +msgstr "Einstellungen für mobile Datengeräte" + +msgid "PIN of SIM card" +msgstr "PIN der SIM-Karte" + +msgid "APN Settings (Modem device ppp0)" +msgstr "APN-Einstellungen (Modemgerät ppp0)" + +msgid "Access Point Name (APN)" +msgstr "Access Point Name (APN)" + +msgid "Password" +msgstr "Passwort" + +msgid "Successfully Updated Network Configuration" +msgstr "Netzwerkkonfiguration erfolgreich aktualisiert" + +msgid "Error saving network configuration to file" +msgstr "Fehler beim Speichern der Netzwerkkonfiguration" + +msgid "Unable to detect interface" +msgstr "Schnittstelle kann nicht gefunden werden" + #: includes/system.php msgid "System Information" msgstr "Systeminformationen" @@ -491,6 +757,12 @@ msgstr "System wird jetzt neugestartet!" msgid "System Shutting Down Now!" msgstr "Das System wird jetzt heruntergefahren!" +msgid "Web server port" +msgstr "Port des Webservers" + +msgid "Web server bind address" +msgstr "Webserver Bindungsadresse" + #: includes/themes.php msgid "Theme settings" msgstr "Oberflächendesign Einstellungen" @@ -498,6 +770,9 @@ msgstr "Oberflächendesign Einstellungen" msgid "Select a theme" msgstr "Oberflächendesign auswählen" +msgid "Color" +msgstr "Farbe" + #: includes/data_usage.php msgid "Data usage" msgstr "Datennutzung" @@ -576,7 +851,7 @@ msgid "Diffie Hellman parameters" msgstr "Diffie-Hellman-Parameter" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "Am Leben halten" msgid "Server log" msgstr "Serverprotokoll" @@ -596,6 +871,66 @@ msgstr "Versuch, OpenVPN zu starten" msgid "Attempting to stop openvpn" msgstr "Versuch, OpenVPN zu stoppen" +msgid "Configurations" +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 openvpn-client service." +msgstr "Die Aktivierung einer Konfiguration startet den Dienst openvpn-client neu." + +msgid "Delete OpenVPN client" +msgstr "OpenVPN-Client löschen" + +msgid "Delete client configuration? This cannot be undone." +msgstr "Client-Konfiguration löschen? Dies kann nicht rückgängig gemacht werden." + +msgid "Activate OpenVPN client" +msgstr "OpenVPN-Client aktivieren" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "Client-Konfiguration aktivieren? Der OpenVPN-Client-Dienst wird neu gestartet." + +msgid "Activate" +msgstr "Aktivieren" + +msgid "Cancel" +msgstr "Verwerfen" + +msgid "Enable this option to log openvpn activity." +msgstr "Diese Option aktivieren, um openvpn-Aktivitäten zu protokollieren." + +msgid "Authentification Method" +msgstr "Authentifizierungsmethode" + +msgid "Username and password" +msgstr "Benutzername und Passwort" + +msgid "Certificates" +msgstr "Zertifikate" + +msgid "Enter username and password" +msgstr "Benutzername und Passwort eingeben" + +msgid "Certificates in the configuration file" +msgstr "Zertifikate in der Konfigurationsdatei" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP unterstützt Zertifikate, indem sie in die Konfigurationsdatei aufgenommen werden." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "Signierende-Zertifizierungsstellen(CA)-Zertifikate (z. B. ca.crt): in <ca> ... </ca>-Tags eingeschlossen." + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "Clientzertifikat (öffentlicher Schlüssel) (z. B. client.crt): in <cert> ... </cert>-Tags eingeschlossen." + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "Privater Schlüssel des Clientzertifikats (z. B. client.key): in <key> ... </key>-Tags eingeschlossen." + +msgid "Configuration File" +msgstr "Konfigurationsdatei" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR ist nicht aktiv" @@ -630,6 +965,10 @@ msgstr "Versuch, TOR zu starten" msgid "Attempting to stop TOR" msgstr "Versuch, TOR zu stoppen" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Bridged-AP-Modus ist aktiviert. Für Hostname und IP schauen Sie auf die Admin-Seite Ihres Routers." + #: common form controls msgid "Save settings" msgstr "Einstellungen speichern" @@ -652,3 +991,249 @@ msgstr "oben" msgid "down" msgstr "unten" +msgid "adblock" +msgstr "Werbesperre" + +msgid "Ad Blocking" +msgstr "Werbeblocker" + +msgid "Start Ad Blocking" +msgstr "Anzeigenblockierung starten" + +msgid "Restart Ad Blocking" +msgstr "Anzeigenblockierung neustarten" + +msgid "Blocklist settings" +msgstr "Sperrlisteneinstellungen" + +msgid "Enable blocklists" +msgstr "Blockierliste aktivieren" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Aktivieren Sie diese Option, wenn RaspAP DNS-Anfragen für Werbung, Tracking und anderen virtuellen Müll blockieren soll. Blockierlisten werden aus mehreren Quellen gesammelt und automatisch täglich aktualisiert, bereinigt, optimiert und moderiert." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Diese Option fügt conf-file und addn-hosts zur dnsmasq-Konfiguration hinzu." + +msgid "Choose a blocklist provider" +msgstr "Wählen Sie einen Blockierlistenanbieter" + +msgid "Hostnames blocklist last updated" +msgstr "Letztes Update der Hostnameblockierliste" + +msgid "Domains blocklist last updated" +msgstr "Letztes Update der Domainblockierliste" + +msgid "Update now" +msgstr "Jetzt aktualisieren" + +msgid "Statistics" +msgstr "Statistiken" + +msgid "Information provided by adblock" +msgstr "Informationen zur Verfügung gestellt von adblock" + +msgid "Enable custom blocklist" +msgstr "Eigene Sperrliste aktivieren" + +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 "Definieren Sie benutzerdefinierte Hosts durch Eingabe einer IPv4- oder IPv6-Adresse, gefolgt von Leerzeichen (Leerzeichen oder Tabs) und dem Hostnamen." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "IPv4 Beispiel: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Diese Option fügt conf-file und addn-hosts zur dnsmasq-Konfiguration hinzu." + +msgid "Custom blocklist not defined" +msgstr "Benutzerdefinierte Sperrliste nicht definiert" + +msgid "Invalid custom IP address found on line " +msgstr "Ungültige benutzerdefinierte IP-Adresse gefunden " + +msgid "Invalid custom host found on line " +msgstr "Ungültige benutzerdefinierte IP-Adresse gefunden " + +msgid "Tunnel settings" +msgstr "Tunneleinstellungen" + +msgid "Configuration Method" +msgstr "Konfigurationsmethode" + +msgid "Upload file" +msgstr "Datei hochladen" + +msgid "Create manually" +msgstr "Manuell erstellen" + +msgid "Upload a WireGuard config" +msgstr "WireGuard Konfiguration hochladen" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "Diese Option lädt und installiert eine vorhandene WireGuard .conf-Datei auf dieses Gerät." + +msgid "Apply iptables rules for AP interface" +msgstr "iptables-Regeln auf AP-Schnittstelle anwenden" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "Empfohlen, wenn der Netzwerkverkehr von der wg0-Schnittstelle an Clients weitergeleitet werden soll, die mit der AP-Schnittstelle verbunden sind." + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "Diese Option fügt iptables-Regeln Postup und PostDown für die konfigurierte AP-Schnittstelle (%s) hinzu." + +msgid "Select WireGuard configuration file (.conf)" +msgstr "WireGuard-Konfigurationsdatei auswählen (.conf)" + +msgid "Create a local WireGuard config" +msgstr "Lokale WireGuard-Konfiguration erstellen" + +msgid "Enable server" +msgstr "Server aktivieren" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "Diese Option aktivieren, um den Netzverkehr zu schützen, indem ein verschlüsselter Tunnel zwischen RaspAP und den konfigurierten Gegenstellen erstellt wird." + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "Diese Einstellung erzeugt eine neue WireGuard .conf-Datei auf diesem Gerät." + +msgid "Local public key" +msgstr "Lokaler öffentlicher Schlüssel" + +msgid "Local Port" +msgstr "Lokaler Port" + +msgid "IP Address" +msgstr "IP-Adresse" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Peer" + +msgid "Enable peer" +msgstr "Peer aktivieren" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Diese Option aktivieren, um den Datenverkehr zu verschlüsseln, indem ein Tunnel zwischen RaspAP und dieser Gegenstelle erstellt wird." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "Diese Option fügt client.conf der WireGuard-Konfiguration hinzu." + +msgid "Peer public key" +msgstr "Öffentlicher Schlüssel der Gegenstelle" + +msgid "Endpoint address" +msgstr "Endpunktadresse" + +msgid "Allowed IPs" +msgstr "Erlaubte IPs" + +msgid "Persistent keepalive" +msgstr "Dauerhaftes Keepalive" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "Diese Option aktivieren, um ein aktualisiertes wg-quick-Debug-Protokoll anzuzeigen." + +msgid "WireGuard debug log updated" +msgstr "WireGuard Debug-Log aktualisiert" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Diesen QR-Code mit dem eigenen Client scannen, um eine Verbindung zu diesem Tunnel herzustellen" + +msgid "or download the client.conf file to your device." +msgstr "oder die Datei client.conf auf das eigene Gerät herunterladen." + +msgid "Download" +msgstr "Herunterladen" + +msgid "Start WireGuard" +msgstr "WireGuard starten" + +msgid "Stop WireGuard" +msgstr "WireGuard beenden" + +msgid "Information provided by wireguard" +msgstr "Informationen von Wireguard" + +msgid "Attempting to start WireGuard" +msgstr "Es wird versucht, WireGuard zu starten" + +msgid "Attempting to stop WireGuard" +msgstr "Es wird versucht, WireGuard zu stoppen" + +msgid "WireGuard configuration updated successfully" +msgstr "WireGuard-Konfiguration erfolgreich aktualisiert" + +msgid "WireGuard configuration failed to be updated" +msgstr "WireGuard-Konfiguration konnte nicht aktualisiert werden" + +msgid "Client Firewall" +msgstr "Client-Firewall" + +msgid "Firewall is ENABLED" +msgstr "Firewall ist AKTIV" + +msgid "Firewall is OFF" +msgstr "Firewall ist AUS" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "Die Standard-Firewall erlaubt nur ausgehende und bereits hergestellte Verbindungen." + +msgid "No incoming UDP traffic is allowed." +msgstr "Es sind keine eingehenden UDP-Verbindungen erlaubt." + +msgid "There are no restrictions for the access point %s." +msgstr "Es gibt keine Einschränkungen für den Accesspoint %s." + +msgid "Exception: Service" +msgstr "Ausnahme: Dienst" + +msgid "allow SSH access on port 22" +msgstr "SSH-Zugriff auf Port 22 erlauben" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "Zugriff auf die RaspAP-Oberfläche auf Port 80 oder 443 erlauben" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "Eingehende Verbindungen für einige Dienste aus dem Internet zulassen." + +msgid "Exception: network device" +msgstr "Ausnahme: Netzwerkgerät" + +msgid "Exclude device(s)" +msgstr "Gerät(e) ausschließen" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "Angegebene Netzwerkgeräte (durch Leerzeichen oder Komma getrennt) von Firewall-Regeln ausschließen." + +msgid "Current client devices: %s" +msgstr "Aktuelle Clientgeräte: %s" + +msgid "The access point %s is per default excluded." +msgstr "Der Accesspoint %s ist standardmäßig ausgenommen." + +msgid "Exception: IP-Address" +msgstr "Ausnahme: IP-Adresse" + +msgid "Allow incoming connections from" +msgstr "Eingehende Verbindungen erlauben von" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "Für die angegebenen IP-Adressen (durch Leerzeichen oder Komma getrennt) wird die eingehende Verbindung (über TCP und UDP) akzeptiert." + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "Dies wird für ein OpenVPN über UDP oder WireGuard-Verbindung benötigt." + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "Liste der konfigurierten VPN-Server-IP-Adressen: %s" + +msgid "Disable Firewall" +msgstr "Firewall deaktivieren" + +msgid "Enable Firewall" +msgstr "Firewall aktivieren" + +msgid "Apply changes" +msgstr "Änderungen übernehmen" + diff --git a/locale/el_GR/LC_MESSAGES/messages.mo b/locale/el_GR/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..4ba31595 Binary files /dev/null and b/locale/el_GR/LC_MESSAGES/messages.mo differ diff --git a/locale/el_GR/LC_MESSAGES/messages.po b/locale/el_GR/LC_MESSAGES/messages.po new file mode 100644 index 00000000..02fb5339 --- /dev/null +++ b/locale/el_GR/LC_MESSAGES/messages.po @@ -0,0 +1,682 @@ +# RaspAP Portable Object file # Project home: https://github.com/billz/raspap-webgui +# Licensed under the GNU General Public License v3.0 +# This file is distributed under the same license as the RaspAP package +# FIRST AUTHOR billzimmerman@gmail.com, 2017 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.2.1\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" +"POT-Creation-Date: 2017-10-19 08:56+0000\n" +"PO-Revision-Date: 2020-01-14 17:15+0000\n" +"Last-Translator: Chris K \n" +"Language-Team: \n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: index.php +msgid "RaspAP Wifi Configuration Portal" +msgstr "Σελίδα ρυθμίσεων RaspAP WiFi" + +msgid "Toggle navigation" +msgstr "Εναλλαγή πλοήγησης" + +msgid "RaspAP Wifi Portal" +msgstr "Πύλη RaspAP WiFi" + +msgid "Dashboard" +msgstr "Πίνακας" + +msgid "WiFi client" +msgstr "WiFi client" + +msgid "Hotspot" +msgstr "Hotspot" + +msgid "Networking" +msgstr "Δικτύωση" + +msgid "DHCP Server" +msgstr "Διακομιστή DHCP" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Μεσολαβητή TOR" + +msgid "Authentication" +msgstr "Διαμόρφωση Auth" + +msgid "Change Theme" +msgstr "Αλλαγή Θέματος" + +msgid "System" +msgstr "Σύστημα" + +msgid "About RaspAP" +msgstr "Περί RaspAP" + +#: includes/admin.php +msgid "Authentication settings" +msgstr "Ρυθμίσεις πιστοποίησης" + +msgid "New passwords do not match" +msgstr "Οι νέοι κωδικοί πρόσβασης δεν ταιριάζουν" + +msgid "Username must not be empty" +msgstr "Το όνομα χρήστη δεν πρέπει να είναι κενό" + +msgid "Admin password updated" +msgstr "Ο κωδικός πρόσβασης διαχειριστή ενημερώθηκε" + +msgid "Failed to update admin password" +msgstr "Αποτυχία ενημέρωσης του κωδικού πρόσβασης διαχειριστή" + +msgid "Old password does not match" +msgstr "Ο παλιός κωδικός πρόσβασης δεν ταιριάζει" + +msgid "Username" +msgstr "Όνομα χρήστη" + +msgid "Old password" +msgstr "Παλιός κωδικός πρόσβασης" + +msgid "New password" +msgstr "Νέος κωδικός πρόσβασης" + +msgid "Repeat new password" +msgstr "Επανάληψη νέου κωδικού πρόσβασης" + +#: includes/configure_client.php +msgid "Client settings" +msgstr "Ρυθμίσεις client" + +msgid "SSID" +msgstr "SSID" + +msgid "Channel" +msgstr "Κανάλι" + +msgid "Security" +msgstr "Ασφάλεια" + +msgid "Passphrase" +msgstr "Φράση πρόσβασης" + +msgid "Wifi settings updated successfully" +msgstr "Οι ρυθμίσεις WiFi ενημερώθηκαν με επιτυχία" + +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Οι ρυθμίσεις WiFi ενημερώθηκαν αλλά δεν είναι δυνατή η επανεκκίνηση (δεν είναι δυνατή η εκτέλεση του 'wpa_cli reconfigure')" + +msgid "Wifi settings failed to be updated" +msgstr "Οι ρυθμίσεις WiFi δεν ενημερώθηκαν" + +msgid "Failed to update wifi settings" +msgstr "Δεν ήταν δυνατή η ενημέρωση των ρυθμίσεων WiFi" + +msgid "Rescan" +msgstr "Σάρωση ξανά" + +msgid "Update" +msgstr "Ενημέρωση" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "Delete" +msgstr "Διαγραφή" + +msgid "Show" +msgstr "Προβολή" + +msgid "Hide" +msgstr "Απόκρυψη" + +msgid "Not configured" +msgstr "Δεν έχει ρυθμιστεί" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "Σημείωση: Τα σημεία πρόσβασης WEP εμφανίζονται ως 'Ανοιχτά'. Το RaspAP δεν υποστηρίζει αυτήν τη στιγμή τη σύνδεση με WEP" + +#: includes/dashboard.php +msgid "Interface Information" +msgstr "Πληροφορίες διεπαφής" + +msgid "Interface Name" +msgstr "Όνομα διεπαφής" + +msgid "IPv4 Address" +msgstr "Διεύθυνση IPv4" + +msgid "IPv6 Address" +msgstr "Διεύθυνση IPv6" + +msgid "Subnet Mask" +msgstr "Μάσκα υποδικτύου" + +msgid "Mac Address" +msgstr "Διεύθυνση Mac" + +msgid "Interface Statistics" +msgstr "Στατιστικά διεπαφής" + +msgid "Received Packets" +msgstr "Ληφθέντα πακέτα" + +msgid "Received Bytes" +msgstr "Ληφθέντα Byte" + +msgid "Transferred Packets" +msgstr "Μεταφερθέντα πακέτα" + +msgid "Transferred Bytes" +msgstr "Μεταφερθέντα Byte" + +msgid "Wireless Information" +msgstr "Πληροφορίες ασύρματου" + +msgid "Connected To" +msgstr "Συνδεδεμένο με" + +msgid "AP Mac Address" +msgstr "Διεύθυνση Mac σημείου πρόσβασης" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Signal Level" +msgstr "Επίπεδο σήματος" + +msgid "Transmit Power" +msgstr "Ισχύς μετάδοσης" + +msgid "Frequency" +msgstr "Συχνότητα" + +msgid "Link Quality" +msgstr "Ποιότητα συνδέσμου" + +msgid "Information provided by ip and iw and from system" +msgstr "Πληροφορίες που παρέχονται από ip και iw και από το σύστημα" + +msgid "No MAC Address Found" +msgstr "Δε βρέθηκε διεύθυνση MAC" + +msgid "No IP Address Found" +msgstr "Δε βρέθηκε διεύθυνση IP" + +msgid "No Subnet Mask Found" +msgstr "Δε βρέθηκε μάσκα υποδικτύου" + +msgid "No Data" +msgstr "Χωρίς δεδομένα" + +msgid "Not connected" +msgstr "Μη συνδεδεμένο" + +msgid "Interface is up" +msgstr "Η διεπαφή λειτουργεί" + +msgid "Interface is down" +msgstr "Η διεπαφή δε λειτουργεί" + +msgid "Interface already down" +msgstr "Η διεπαφή είναι ήδη εκτός λειτουργίας" + +msgid "Start wlan0" +msgstr "Εκκίνηση wlan0" + +msgid "Stop wlan0" +msgstr "Παύση wlan0" + +msgid "Connected Devices" +msgstr "Συνδεδεμένες συσκευές" + +#: includes/dhcp.php +msgid "DHCP server settings" +msgstr "Ρυθμίσεις διακομιστή DHCP" + +msgid "Client list" +msgstr "Λίστα client" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "DNS Server" +msgstr "Διακομιστής DNS" + +msgid "Starting IP Address" +msgstr "Αρχική διεύθυνση IP" + +msgid "Ending IP Address" +msgstr "Τελική διεύθυνση IP" + +msgid "Static Leases" +msgstr "Στατικές μισθώσεις" + +msgid "Add static DHCP lease" +msgstr "Προσθήκη στατικής μίσθωσης DHCP" + +msgid "Lease Time" +msgstr "Χρόνος μίσθωσης" + +msgid "Interval" +msgstr "Διάρκεια" + +msgid "Active DHCP leases" +msgstr "Ενεργές μισθώσεις DHCP" + +msgid "Expire time" +msgstr "Χρόνος λήξης" + +msgid "MAC Address" +msgstr "Διεύθυνση MAC" + +msgid "Host name" +msgstr "Όνομα κεντρικού υπολογιστή" + +msgid "Client ID" +msgstr "Client ID" + +msgid "Information provided by Dnsmasq" +msgstr "Οι πληροφορίες παρέχονται από το Dnsmasq" + +msgid "Stop dnsmasq" +msgstr "Παύση dnsmasq" + +msgid "Start dnsmasq" +msgstr "Εκκίνηση dnsmasq" + +msgid "Dnsmasq configuration updated successfully" +msgstr "Η ρύθμιση του dnsmasq ενημερώθηκε με επιτυχία" + +msgid "dnsmasq already running" +msgstr "Το dnsmasq εκτελείται ήδη" + +msgid "Successfully started dnsmasq" +msgstr "Επιτυχής εκκίνηση του dnsmasq" + +msgid "Failed to start dnsmasq" +msgstr "Αποτυχία εκκίνησης του dnsmasq" + +msgid "Successfully stopped dnsmasq" +msgstr "Επιτυχής παύση του dnsmasq" + +msgid "Failed to stop dnsmasq" +msgstr "Αποτυχία παύσης του dnsmasq" + +msgid "dnsmasq already stopped" +msgstr "Το dnsmasq έχει ήδη σταματήσει" + +msgid "Dnsmasq is running" +msgstr "Το dnsmasq εκτελείται" + +msgid "Dnsmasq is not running" +msgstr "Το dnsmasq δεν εκτελείται" + +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + +#: includes/hostapd.php +msgid "Basic" +msgstr "Βασικό" + +msgid "Advanced" +msgstr "Προχωρημένο" + +msgid "Basic settings" +msgstr "Βασικές ρυθμίσεις" + +msgid "Wireless Mode" +msgstr "Ασύρματη λειτουργία" + +msgid "Security settings" +msgstr "Ρυθμίσεις ασφαλείας" + +msgid "Security type" +msgstr "Τύπος ασφάλειας" + +msgid "Encryption Type" +msgstr "Τύπος κρυπτογράφησης" + +msgid "PSK" +msgstr "PSK" + +msgid "Advanced settings" +msgstr "Προχωρημένες ρυθμίσεις" + +msgid "Country Code" +msgstr "Κωδικός χώρας" + +msgid "Information provided by hostapd" +msgstr "Οι πληροφορίες παρέχονται από το hostapd" + +msgid "Attempting to start hotspot" +msgstr "Προσπάθεια εκκίνησης του hotspot" + +msgid "Attempting to stop hotspot" +msgstr "Προσπάθεια παύσης του hotspot" + +msgid "HostAPD is not running" +msgstr "Το hostapd δεν εκτελείται" + +msgid "HostAPD is running" +msgstr "Το hostapd εκτελείται" + +msgid "SSID must be between 1 and 32 characters" +msgstr "Το SSID πρέπει να είναι μεταξύ 1 και 32 χαρακτήρων" + +msgid "WPA passphrase must be between 8 and 63 characters" +msgstr "Η φράση πρόσβασης WPA πρέπει να είναι μεταξύ 8 και 63 χαρακτήρων" + +msgid "Unknown interface" +msgstr "Άγνωστη διεπαφή" + +msgid "Country code must be blank or two characters" +msgstr "Ο κωδικός χώρας πρέπει να είναι κενός ή δύο χαρακτήρες" + +msgid "Wifi Hotspot settings saved" +msgstr "Οι ρυθμίσεις WiFi hotspot αποθηκεύτηκαν" + +msgid "Unable to save wifi hotspot settings" +msgstr "Αδύνατη η αποθήκευση ρυθμίσεων wifi hotspot" + +msgid "Start hotspot" +msgstr "Εκκίνηση hotspot" + +msgid "Stop hotspot" +msgstr "Παύση hotspot" + +msgid "Restart hotspot" +msgstr "Επανεκκινήστε hotspot" + +msgid "Enable logging" +msgstr "Ενεργοποίηση καταγραφής" + +msgid "Logfile output" +msgstr "Απόδοση αρχείου καταγραφής" + +msgid "WiFi client AP mode" +msgstr "Λειτουργία WiFi client σημείου πρόσβασης" + +msgid "Hide SSID in broadcast" +msgstr "Απόκρυψη εκπομπής SSID" + +msgid "Maximum number of clients" +msgstr "Μέγιστος αριθμός client" + +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Ρυθμίζει την επιλογή max_num_sta του hostapd. Το προεπιλεγμένο και το μέγιστο είναι το 2007. Εάν είναι κενό ή 0, ισχύει η προεπιλογή." + +#: includes/networking.php +msgid "Summary" +msgstr "Επισκόπηση" + +msgid "Current settings" +msgstr "Τρέχουσες ρυθμίσεις" + +msgid "Default Gateway" +msgstr "Προεπιλεγμένη πύλη" + +msgid "Alternate DNS Server" +msgstr "Εναλλακτικός διακομιστής DNS" + +msgid "Adapter IP Address Settings" +msgstr "Ρυθμίσεις διεύθυνσης IP προσαρμογέα" + +msgid "Enable Fallback to Static Option" +msgstr "Ενεργοποίση επαναφοράς σε στατική επιλογή" + +msgid "Static IP" +msgstr "Στατική IP" + +msgid "Enabled" +msgstr "Ενεργοποιήθηκε" + +msgid "Disabled" +msgstr "Απενεργοποιήθηκε" + +msgid "Static IP Options" +msgstr "Επιλογές στατικής IP" + +msgid "Apply settings" +msgstr "Εφαρμογή ρυθμίσεων" + +msgid "Information provided by /sys/class/net" +msgstr "Οι πληροφορίες παρέχονται από το /sys/class/net" + +#: includes/system.php +msgid "System Information" +msgstr "Πληροφορίες συστήματος" + +msgid "Language" +msgstr "Γλώσσα" + +msgid "Language settings" +msgstr "Ρυθμίσεις γλώσσας" + +msgid "Select a language" +msgstr "Επιλογή γλώσσας" + +msgid "Language setting saved" +msgstr "Οι ρυθμίσεις γλώσσας αποθηκεύτηκαν" + +msgid "Console" +msgstr "Κονσόλα" + +msgid "Hostname" +msgstr "Όνομα κεντρικού υπολογιστή" + +msgid "Pi Revision" +msgstr "Pi Revision" + +msgid "Uptime" +msgstr "Χρόνος λειτουργίας" + +msgid "Memory Used" +msgstr "Χρησιμοποιημένη μνήμη" + +msgid "CPU Load" +msgstr "Φόρτος CPU" + +msgid "Reboot" +msgstr "Επανεκκίνηση" + +msgid "Shutdown" +msgstr "Απενεργοποίηση" + +msgid "System Rebooting Now!" +msgstr "Το σύστημα επανεκκινείται τώρα!" + +msgid "System Shutting Down Now!" +msgstr "Το σύστημα απενεργοποιείται τώρα!" + +#: includes/themes.php +msgid "Theme settings" +msgstr "Ρυθμίσεις θέματος" + +msgid "Select a theme" +msgstr "Επιλογή θέματος" + +#: includes/data_usage.php +msgid "Data usage" +msgstr "Χρήση δεδομένων" + +msgid "Data usage monitoring" +msgstr "Παρακολούθηση χρήσης δεδομένων" + +msgid "Hourly traffic amount" +msgstr "Ωριαίος όγκος δεδομένων" + +msgid "Daily traffic amount" +msgstr "Ημερήσιος όγκος δεδομένων" + +msgid "Monthly traffic amount" +msgstr "Μηνιαίος όγκος δεδομένων" + +msgid "Hourly" +msgstr "Ωριαίο" + +msgid "Daily" +msgstr "Ημερήσιο" + +msgid "Monthly" +msgstr "Μηνιαίο" + +msgid "interface" +msgstr "Διεπαφή" + +msgid "date" +msgstr "ημερομηνία" + +msgid "Send MB" +msgstr "Αποστολή MB" + +msgid "Receive MB" +msgstr "Λήψη MB" + +msgid "Information provided by vnstat" +msgstr "Οι πληροφορίες παρέχονται από το vnstat" + +msgid "Loading {0} bandwidth chart" +msgstr "Φόρτωση γραφήματος εύρους ζώνης {0}" + +msgid "Showing {0} to {1} of {2} entries" +msgstr "Προβολή {0} έως {1} από {2} καταχωρήσεις" + +#: includes/openvpn.php +msgid "OpenVPN is not running" +msgstr "Το OpenVPN δεν εκτελείται" + +msgid "OpenVPN is running" +msgstr "Το OpenVPN εκτελείται" + +msgid "Server settings" +msgstr "Ρυθμίσεις διακομιστή" + +msgid "Select OpenVPN configuration file (.ovpn)" +msgstr "Επιλογή αρχείου ρυθμίσεων OpenVPN (.ovpn)" + +msgid "Client Log" +msgstr "Μητρώο client" + +msgid "Port" +msgstr "Πόρτα" + +msgid "Protocol" +msgstr "Πρωτόκολο" + +msgid "Root CA certificate" +msgstr "Πιστοποιητικό CA Root" + +msgid "Server certificate" +msgstr "Πιστοποιητικό διακομιστή" + +msgid "Diffie Hellman parameters" +msgstr "Παράμετροι Diffie Hellman" + +msgid "KeepAlive" +msgstr "KeepAlive" + +msgid "Server log" +msgstr "Μητρώο διακομιστή" + +msgid "Start OpenVPN" +msgstr "Εκκίνηση OpenVPN" + +msgid "Stop OpenVPN" +msgstr "Παύση OpenVPN" + +msgid "Information provided by openvpn" +msgstr "Οι πληροφορίες παρέχονται από το openvpn" + +msgid "Attempting to start openvpn" +msgstr "Προσπάθεια εκκίνησης του openvpn" + +msgid "Attempting to stop openvpn" +msgstr "Προσπάθεια παύσης του openvpn" + +#: includes/torproxy.php +msgid "TOR is not running" +msgstr "Το TOR δεν εκτελείται" + +msgid "TOR is running" +msgstr "TOR εκτελείται" + +msgid "Relay" +msgstr "Αναμετάδοση" + +msgid "Relay settings" +msgstr "Ρυθμίσεις αναμετάδοσης" + +msgid "Nickname" +msgstr "Ψευδώνυμο" + +msgid "Address" +msgstr "Διεύθυνση" + +msgid "Start TOR" +msgstr "Εκκίνηση TOR" + +msgid "Stop TOR" +msgstr "Παύση TOR" + +msgid "Information provided by tor" +msgstr "Οι πληροφορίες παρέχονται από το TOR" + +msgid "Attempting to start TOR" +msgstr "Προσπάθεια εκκίνησης του TOR" + +msgid "Attempting to stop TOR" +msgstr "Προσπάθεια παύσης του TOR" + +#: common form controls +msgid "Save settings" +msgstr "Αποθήκευση ρυθμίσεων" + +msgid "Refresh" +msgstr "Ανανέωση" + +msgid "running" +msgstr "εκτελείται" + +msgid "stopped" +msgstr "διακόπηκε" + +msgid "Remove" +msgstr "Αφαίρεση" + +msgid "up" +msgstr "πάνω" + +msgid "down" +msgstr "κάτω" diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index 79c90776..a534b424 100644 Binary files a/locale/en_US/LC_MESSAGES/messages.mo and b/locale/en_US/LC_MESSAGES/messages.mo differ diff --git a/locale/en_US/LC_MESSAGES/messages.po b/locale/en_US/LC_MESSAGES/messages.po index e527cfe7..2a4672c8 100644 --- a/locale/en_US/LC_MESSAGES/messages.po +++ b/locale/en_US/LC_MESSAGES/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: 1.2.1\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2018-05-17 17:15+0000\n" +"PO-Revision-Date: 2021-08-04 00:35+0000\n" "Last-Translator: Bill Zimmerman \n" "Language-Team: \n" "Language: en_US\n" @@ -31,26 +31,32 @@ msgstr "RaspAP Wifi Portal" msgid "Dashboard" msgstr "Dashboard" -msgid "Configure WiFi client" -msgstr "Configure WiFi client" +msgid "WiFi client" +msgstr "WiFi client" -msgid "Configure hotspot" -msgstr "Configure hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Configure networking" +msgid "Memory Use" +msgstr "Memory Use" -msgid "Configure DHCP Server" -msgstr "Configure DHCP Server" +msgid "CPU Temp" +msgstr "CPU Temp" -msgid "Configure OpenVPN" -msgstr "Configure OpenVPN" +msgid "Networking" +msgstr "Networking" -msgid "Configure TOR proxy" -msgstr "Configure TOR proxy" +msgid "DHCP Server" +msgstr "DHCP Server" -msgid "Configure Auth" -msgstr "Configure Auth" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR proxy" + +msgid "Authentication" +msgstr "Authentication" msgid "Change Theme" msgstr "Change Theme" @@ -141,9 +147,33 @@ msgstr "Hide" msgid "Not configured" msgstr "Not configured" +msgid "Connected" +msgstr "Connected" + +msgid "Known" +msgstr "Known" + +msgid "Nearby" +msgstr "Nearby" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgid "No Wifi stations found" +msgstr "No Wifi stations found" + +msgid "Reinitializing wpa_supplicant" +msgstr "Reinitializing wpa_supplicant" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "Click 'Rescan' to search for nearby Wifi stations." + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "Click 'Reinitialize' to force reinitialize wpa_supplicant." + +msgid "Reinitialize" +msgstr "Reinitialize" + #: includes/dashboard.php msgid "Interface Information" msgstr "Interface Information" @@ -178,8 +208,8 @@ msgstr "Transferred Packets" msgid "Transferred Bytes" msgstr "Transferred Bytes" -msgid "Wireless Information" -msgstr "Wireless Information" +msgid "Wireless Client" +msgstr "Wireless Client" msgid "Connected To" msgstr "Connected To" @@ -238,6 +268,60 @@ msgstr "Stop wlan0" msgid "Connected Devices" msgstr "Connected Devices" +msgid "Client: Ethernet cable" +msgstr "Client: Ethernet cable" + +msgid "Ethernet" +msgstr "Ethernet" + +msgid "Client: Smartphone (USB tethering)" +msgstr "Client: Smartphone (USB tethering)" + +msgid "Smartphone" +msgstr "Smartphone" + +msgid "WiFi" +msgstr "WiFi" + +msgid "Mobile Data Client" +msgstr "Mobile Data Client" + +msgid "Mobile Data" +msgstr "Mobile Data" + +msgid "No information available" +msgstr "No information available" + +msgid "Interface name invalid" +msgstr "Interface name invalid" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "Required exec function is disabled. Check if exec is not added to php disable_functions." + +msgid "Waiting for the interface to start ..." +msgstr "Waiting for the interface to start ..." + +msgid "Stop the Interface" +msgstr "Stop the Interface" + +msgid "Connection mode" +msgstr "Connection mode" + +msgid "Signal quality" +msgstr "Signal quality" + +msgid "WAN IP" +msgstr "WAN IP" + +msgid "Web-GUI" +msgstr "Web-GUI" + +msgid "Signal strength" +msgstr "Signal strength" + +msgid "No Client device or not yet configured" +msgstr "No Client device or not yet configured" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "DHCP server settings" @@ -248,6 +332,12 @@ msgstr "Client list" msgid "Interface" msgstr "Interface" +msgid "Enable DHCP for this interface" +msgstr "Enable DHCP for this interface" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Enable this option if you want RaspAP to assign IP addresses on the selected interface." + msgid "DNS Server" msgstr "DNS Server" @@ -278,6 +368,9 @@ msgstr "Expire time" msgid "MAC Address" msgstr "MAC Address" +msgid "Optional comment" +msgstr "Optional comment" + msgid "Host name" msgstr "Host name" @@ -320,6 +413,57 @@ msgstr "Dnsmasq is running" msgid "Dnsmasq is not running" msgstr "Dnsmasq is not running" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Enable these options to log dhcpcd and dnsmasq activity." +msgstr "Enable these options to log dhcpcd and dnsmasq activity." + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + +msgid "Restrict access" +msgstr "Restrict access" + +msgid "Limit network access to static clients" +msgstr "Limit network access to static clients" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "This option adds dhcp-ignore to the dnsmasq configuration." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "Clients with a particular hardware MAC address can always be allocated the same IP address." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "This option adds dhcp-host entries to the dnsmasq configuration." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." + #: includes/hostapd.php msgid "Basic" msgstr "Basic" @@ -390,6 +534,9 @@ msgstr "Start hotspot" msgid "Stop hotspot" msgstr "Stop hotspot" +msgid "Restart hotspot" +msgstr "Restart hotspot" + msgid "Enable logging" msgstr "Enable logging" @@ -399,19 +546,67 @@ msgstr "Logfile output" msgid "WiFi client AP mode" msgstr "WiFi client AP mode" +msgid "Bridged AP mode" +msgstr "Bridged AP mode" + msgid "Hide SSID in broadcast" msgstr "Hide SSID in broadcast" msgid "Maximum number of clients" msgstr "Maximum number of clients" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." + +msgid "Beacon interval" +msgstr "Beacon interval" + +msgid "Disable disassoc_low_ack" +msgstr "Disable disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Do not disassociate stations based on excessive transmission failures." + +msgid "Executing RaspAP service start" +msgstr "Executing RaspAP service start" + +msgid "Close" +msgstr "Close" + +msgid "Enable this option to log hostapd activity." +msgstr "Enable this option to log hostapd activity." + +msgid "Transmit power (dBm)" +msgstr "Transmit power (dBm)" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "Sets the txpower option for the AP interface and the configured country." + +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 "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." + +msgid "The selected interface (%s) has support for the 2.4 GHz wireless band only." +msgstr "The selected interface (%s) has support for the 2.4 GHz wireless band only." + +msgid "The selected interface (%s) has support for the 2.5 GHz wireless band only." +msgstr "The selected interface (%s) has support for the 2.5 GHz wireless band only." + +msgid "The selected interface (%s) has support for both the 2.4 and 5 GHz wireless bands." +msgstr "The selected interface (%s) has support for both the 2.4 and 5 GHz wireless bands." + +msgid "The selected interface (%s) does not support wireless mode operation." +msgstr "The selected interface (%s) does not support wireless mode operation." + +msgid "The 802.11ac 5 GHz option is disabled until a compatible wireless regulatory domain is set." +msgstr "The 802.11ac 5 GHz option is disabled until a compatible wireless regulatory domain is set." #: includes/networking.php msgid "Summary" msgstr "Summary" +msgid "Internet connection" +msgstr "Internet connection" + msgid "Current settings" msgstr "Current settings" @@ -439,12 +634,72 @@ msgstr "Disabled" msgid "Static IP Options" msgstr "Static IP Options" +msgid "Metric" +msgstr "Metric" + msgid "Apply settings" msgstr "Apply settings" msgid "Information provided by /sys/class/net" msgstr "Information provided by /sys/class/net" +msgid "Network Devices" +msgstr "Network Devices" + +msgid "Mobile Data Settings" +msgstr "Mobile Data Settings" + +msgid "Properties of network devices" +msgstr "Properties of network devices" + +msgid "Device" +msgstr "Device" + +msgid "MAC" +msgstr "MAC" + +msgid "USB vid/pid" +msgstr "USB vid/pid" + +msgid "Device type" +msgstr "Device type" + +msgid "Fixed name" +msgstr "Fixed name" + +msgid "Change" +msgstr "Change" + +msgid "Settings for Mobile Data Devices" +msgstr "Settings for Mobile Data Devices" + +msgid "PIN of SIM card" +msgstr "PIN of SIM card" + +msgid "APN Settings (Modem device ppp0)" +msgstr "APN Settings (Modem device ppp0)" + +msgid "Access Point Name (APN)" +msgstr "Access Point Name (APN)" + +msgid "Password" +msgstr "Password" + +msgid "Successfully Updated Network Configuration" +msgstr "Successfully Updated Network Configuration" + +msgid "Error saving network configuration to file" +msgstr "Error saving network configuration to file" + +msgid "Unable to detect interface" +msgstr "Unable to detect interface" + +msgid "Routing table" +msgstr "Routing table" + +msgid "raw output" +msgstr "raw output" + #: includes/system.php msgid "System Information" msgstr "System Information" @@ -491,13 +746,57 @@ msgstr "System Rebooting Now!" msgid "System Shutting Down Now!" msgstr "System Shutting Down Now!" -#: includes/themes.php +msgid "Web server port" +msgstr "Web server port" + +msgid "Web server bind address" +msgstr "Web server bind address" + +msgid "OS" +msgstr "OS" + +msgid "Kernel" +msgstr "Kernel" + +msgid "System reset" +msgstr "System reset" + +msgid "Reset RaspAP to its initial configuration? This action cannot be undone." +msgstr "Reset RaspAP to its initial configuration? This action cannot be undone." + +msgid "Reset complete. Restart the hotspot for the changes to take effect." +msgstr "Reset complete. Restart the hotspot for the changes to take effect." + +msgid "System reset in progress..." +msgstr "System reset in progress..." + +msgid "Reset" +msgstr "Reset" + +msgid "Restore settings" +msgstr "Restore settings" + +msgid "To reset RaspAP to its initial configuration, click or tap the button below." +msgstr "To reset RaspAP to its initial configuration, click or tap the button below." + +msgid "Custom files for optional components such as Ad Blocking, WireGuard or OpenVPN will remain on the system." +msgstr "Custom files for optional components such as Ad Blocking, WireGuard or OpenVPN will remain on the system." + +msgid "Perform reset" +msgstr "Perform reset" + +msgid "Restores all access point (AP) service settings to their default values. This applies to hostapd, dhcpcd and dnsmasq." +msgstr "Restores all access point (AP) service settings to their default values. This applies to hostapd, dhcpcd and dnsmasq." + msgid "Theme settings" msgstr "Theme settings" msgid "Select a theme" msgstr "Select a theme" +msgid "Color" +msgstr "Color" + #: includes/data_usage.php msgid "Data usage" msgstr "Data usage" @@ -596,6 +895,66 @@ msgstr "Attempting to start openvpn" msgid "Attempting to stop openvpn" msgstr "Attempting to stop openvpn" +msgid "Configurations" +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 openvpn-client service." +msgstr "Activating a configuraton will restart the openvpn-client service." + +msgid "Delete OpenVPN client" +msgstr "Delete OpenVPN client" + +msgid "Delete client configuration? This cannot be undone." +msgstr "Delete client configuration? This cannot be undone." + +msgid "Activate OpenVPN client" +msgstr "Activate OpenVPN client" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "Activate client configuration? This will restart the openvpn-client service." + +msgid "Activate" +msgstr "Activate" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Enable this option to log openvpn activity." +msgstr "Enable this option to log openvpn activity." + +msgid "Authentification Method" +msgstr "Authentification Method" + +msgid "Username and password" +msgstr "Username and password" + +msgid "Certificates" +msgstr "Certificates" + +msgid "Enter username and password" +msgstr "Enter username and password" + +msgid "Certificates in the configuration file" +msgstr "Certificates in the configuration file" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP supports certificates by including them in the configuration file." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." + +msgid "Configuration File" +msgstr "Configuration File" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR is not running" @@ -630,6 +989,10 @@ msgstr "Attempting to start TOR" msgid "Attempting to stop TOR" msgstr "Attempting to stop TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." + #: common form controls msgid "Save settings" msgstr "Save settings" @@ -651,3 +1014,258 @@ msgstr "up" msgid "down" msgstr "down" + +msgid "Clear log" +msgstr "Clear log" + +#: includes/adblock.php + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "Ad Blocking" + +msgid "Start Ad Blocking" +msgstr "Start Ad Blocking" + +msgid "Restart Ad Blocking" +msgstr "Restart Ad Blocking" + +msgid "Blocklist settings" +msgstr "Blocklist settings" + +msgid "Enable blocklists" +msgstr "Enable blocklists" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "This option adds conf-file and addn-hosts to the dnsmasq configuration." + +msgid "Choose a blocklist provider" +msgstr "Choose a blocklist provider" + +msgid "Hostnames blocklist last updated" +msgstr "Hostnames blocklist last updated" + +msgid "Domains blocklist last updated" +msgstr "Domains blocklist last updated" + +msgid "Update now" +msgstr "Update now" + +msgid "Statistics" +msgstr "Statistics" + +msgid "Information provided by adblock" +msgstr "Information provided by adblock" + +msgid "Enable custom blocklist" +msgstr "Enable custom blocklist" + +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 "Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "IPv4 example: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "This option adds an addn-hosts directive to the dnsmasq configuration." + +msgid "Custom blocklist not defined" +msgstr "Custom blocklist not defined" + +msgid "Invalid custom IP address found on line " +msgstr "Invalid custom IP address found on line " + +msgid "Invalid custom host found on line " +msgstr "Invalid custom host found on line " + +#: includes/wireguard.php + +msgid "Tunnel settings" +msgstr "Tunnel settings" + +msgid "Configuration Method" +msgstr "Configuration Method" + +msgid "Upload file" +msgstr "Upload file" + +msgid "Create manually" +msgstr "Create manually" + +msgid "Upload a WireGuard config" +msgstr "Upload a WireGuard config" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "This option uploads and installs an existing WireGuard .conf file on this device." + +msgid "Apply iptables rules for AP interface" +msgstr "Apply iptables rules for AP interface" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." + +msgid "Select WireGuard configuration file (.conf)" +msgstr "Select WireGuard configuration file (.conf)" + +msgid "Create a local WireGuard config" +msgstr "Create a local WireGuard config" + +msgid "Enable server" +msgstr "Enable server" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "This setting generates a new WireGuard .conf file on this device." + +msgid "Local public key" +msgstr "Local public key" + +msgid "Local Port" +msgstr "Local Port" + +msgid "IP Address" +msgstr "IP Address" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Peer" + +msgid "Enable peer" +msgstr "Enable peer" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "This option adds client.conf to the WireGuard configuration." + +msgid "Peer public key" +msgstr "Peer public key" + +msgid "Endpoint address" +msgstr "Endpoint address" + +msgid "Allowed IPs" +msgstr "Allowed IPs" + +msgid "Persistent keepalive" +msgstr "Persistent keepalive" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "Enable this option to display an updated wg-quick debug log." + +msgid "WireGuard debug log updated" +msgstr "WireGuard debug log updated" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Scan this QR code with your client to connect to this tunnel" + +msgid "or download the client.conf file to your device." +msgstr "or download the client.conf file to your device." + +msgid "Download" +msgstr "Download" + +msgid "Start WireGuard" +msgstr "Start WireGuard" + +msgid "Stop WireGuard" +msgstr "Stop WireGuard" + +msgid "Information provided by wireguard" +msgstr "Information provided by wireguard" + +msgid "Attempting to start WireGuard" +msgstr "Attempting to start WireGuard" + +msgid "Attempting to stop WireGuard" +msgstr "Attempting to stop WireGuard" + +msgid "WireGuard configuration updated successfully" +msgstr "WireGuard configuration updated successfully" + +msgid "WireGuard configuration failed to be updated" +msgstr "WireGuard configuration failed to be updated" + +#: templates/firewall.php + +msgid "Client Firewall" +msgstr "Client Firewall" + +msgid "Firewall is ENABLED" +msgstr "Firewall is ENABLED" + +msgid "Firewall is OFF" +msgstr "Firewall is OFF" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "The default firewall will only allow outgoing and already established traffic." + +msgid "No incoming UDP traffic is allowed." +msgstr "No incoming UDP traffic is allowed." + +msgid "There are no restrictions for the access point %s." +msgstr "There are no restrictions for the access point %s." + +msgid "Exception: Service" +msgstr "Exception: Service" + +msgid "allow SSH access on port 22" +msgstr "allow SSH access on port 22" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "allow access to the RaspAP GUI on port 80 or 443" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "Allow incoming connections for some services from the internet side." + +msgid "Exception: network device" +msgstr "Exception: network device" + +msgid "Exclude device(s)" +msgstr "Exclude device(s)" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." + +msgid "Current client devices: %s" +msgstr "Current client devices: %s" + +msgid "The access point %s is per default excluded." +msgstr "The access point %s is per default excluded." + +msgid "Exception: IP-Address" +msgstr "Exception: IP-Address" + +msgid "Allow incoming connections from" +msgstr "Allow incoming connections from" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "This is required for an OpenVPN via UDP or Wireguard connection." + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "The list of configured VPN server IP addresses: %s" + +msgid "Disable Firewall" +msgstr "Disable Firewall" + +msgid "Enable Firewall" +msgstr "Enable Firewall" + +msgid "Apply changes" +msgstr "Apply changes" diff --git a/locale/es_MX/LC_MESSAGES/messages.mo b/locale/es_MX/LC_MESSAGES/messages.mo index a167b590..e4714928 100644 Binary files a/locale/es_MX/LC_MESSAGES/messages.mo and b/locale/es_MX/LC_MESSAGES/messages.mo differ diff --git a/locale/es_MX/LC_MESSAGES/messages.po b/locale/es_MX/LC_MESSAGES/messages.po index 4f713e06..56c7fccf 100644 --- a/locale/es_MX/LC_MESSAGES/messages.po +++ b/locale/es_MX/LC_MESSAGES/messages.po @@ -1,22 +1,21 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Luis Franco \n" -"Language-Team: \n" -"Language: es_MX\n" +"PO-Revision-Date: 2022-01-05 11:43\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Spanish\n" +"Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: es-ES\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -31,26 +30,32 @@ msgstr "Portal de RaspAP wifi" msgid "Dashboard" msgstr "Tablero" -msgid "Configure WiFi client" -msgstr "Configurar cliente wiFi" +msgid "WiFi client" +msgstr "Cliente wiFi" -msgid "Configure hotspot" -msgstr "Configurar hotspot" +msgid "Hotspot" +msgstr "Punto de acceso" -msgid "Configure networking" -msgstr "Configurar red de trabajo" +msgid "Memory Use" +msgstr "Uso de memoria" -msgid "Configure DHCP Server" -msgstr "Configurar servidor DHCP" +msgid "CPU Temp" +msgstr "Temp de CPU" -msgid "Configure OpenVPN" -msgstr "Configurar OpenVPN" +msgid "Networking" +msgstr "Red de trabajo" -msgid "Configure TOR proxy" -msgstr "Configurar TOR proxy" +msgid "DHCP Server" +msgstr "Servidor DHCP" -msgid "Configure Auth" -msgstr "Configurar autentificacion" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Autentificacion" msgid "Change Theme" msgstr "Cambiar tema" @@ -141,9 +146,33 @@ msgstr "Ocultar" msgid "Not configured" msgstr "No configurado" +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Nota: Punto de acceso WEP aparece como 'Abierto'. RaspAP actualmente no soporta conecciones WEP" +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" +msgstr "" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informacion de interfaz" @@ -178,8 +207,8 @@ msgstr "Paquetes Trasnferidos" msgid "Transferred Bytes" msgstr "Bytes Trasnferidos" -msgid "Wireless Information" -msgstr "Informacion Inalambrica" +msgid "Wireless Client" +msgstr "Cliente WiFi" msgid "Connected To" msgstr "Conectado a" @@ -238,6 +267,60 @@ msgstr "Detener wlan0" msgid "Connected Devices" msgstr "Dispositivos conectados" +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Ajustes de servidor DHCP" @@ -248,6 +331,15 @@ msgstr "Lista de Clientes" msgid "Interface" msgstr "Interfaz" +msgid "Enable DHCP for this interface" +msgstr "Habilitar DHCP para esta interfaz" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Habilitar esta opción si desea que RaspAP asigne direcciones IP en la interfaz seleccionada." + +msgid "DNS Server" +msgstr "Servidor DNS" + msgid "Starting IP Address" msgstr "Dirección IP de incio" @@ -275,6 +367,9 @@ msgstr "Tiempo de Expiracion" msgid "MAC Address" msgstr "Dirección MAC" +msgid "Optional comment" +msgstr "" + msgid "Host name" msgstr "Nombre de Host" @@ -317,6 +412,57 @@ msgstr "Dnsmasq esta iniciado" msgid "Dnsmasq is not running" msgstr "Dnsmasq no esta iniciado" +msgid "Upstream DNS servers" +msgstr "Servidores DNS Upstream" + +msgid "Only ever query DNS servers configured below" +msgstr "Sólo consultar los servidores DNS configurados a continuación" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Active esta opción si desea que RaspAP envíe consultas DNS a los servidores configurados a continuación exclusivamente. Por defecto, RaspAP también utiliza los DNS del servidor DHCP." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Está opción añade no-resolv a la configuración dnsmasq." + +msgid "Add upstream DNS server" +msgstr "Añadir servidor DNS upstream" + +msgid "Format" +msgstr "Formato" + +msgid "Choose a hosted server" +msgstr "Elija un servidor alojado" + +msgid "Enable these options to log DHCP server activity." +msgstr "Habilitar estas opciones para registrar la actividad del servidor DHCP." + +msgid "Log DHCP requests" +msgstr "Registrar peticiones DHCP" + +msgid "Log DNS queries" +msgstr "Registrar consultas DNS" + +msgid "Restrict access" +msgstr "Restringir Acceso" + +msgid "Limit network access to static clients" +msgstr "Limitar el acceso a la red a clientes estáticos" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Habilite esta opción si desea que RaspAP ignore a cualquier cliente que no se encuentre en la lista de asignaciones estáticas." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "Esta opción añade no-resolv a la configuración dnsmasq." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "Los clientes con una determinada dirección MAC hardware siempre pueden ser asignados la misma dirección IP." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "Esta opción añade entradas dhcp-host a la configuración dnsmasq." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "Esto activa la opción gateway/nogateway para esta interfaz en la configuración DHCPCD." + #: includes/hostapd.php msgid "Basic" msgstr "Basico" @@ -387,6 +533,9 @@ msgstr "Iniciar hotspot" msgid "Stop hotspot" msgstr "Detener hotspot" +msgid "Restart hotspot" +msgstr "Reiniciar hotspot" + msgid "Enable logging" msgstr "Habilitar registro" @@ -396,28 +545,58 @@ msgstr "Salida del archivo de registro" msgid "WiFi client AP mode" msgstr "Modo AP de WiFi de cliente" +msgid "Bridged AP mode" +msgstr "Modo AP Bridged" + msgid "Hide SSID in broadcast" msgstr "Ocultar SSID en la transmisión" msgid "Maximum number of clients" msgstr "Máximo número de clientes" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configura la opción max_num_sta de hostapd. El valor por defecto y máximo es 2007. Si se deja en blanco o si es 0, se aplica el valor por defecto." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "Intervalo de beacons" + +msgid "Disable disassoc_low_ack" +msgstr "Desactivar disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "No desconectar estaciones basado en fallos de transmisión excesivos." + +msgid "Executing RaspAP service start" +msgstr "Ejecutando inicio del servicio RaspAP" + +msgid "Close" +msgstr "Cerrar" + +msgid "Enable this option to log hostapd activity." +msgstr "Habilitar esta opción para registrar la actividad de hostapd." + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +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 "" #: includes/networking.php msgid "Summary" msgstr "Resumen" +msgid "Internet connection" +msgstr "Conexión a Internet" + msgid "Current settings" msgstr "Configuracion Actual" msgid "Default Gateway" msgstr "Puerta de Enlace predeterminada" -msgid "DNS Server" -msgstr "Servidor DNS" - msgid "Alternate DNS Server" msgstr "Servidor DNS Alterno" @@ -439,12 +618,66 @@ msgstr "Deshabilitado" msgid "Static IP Options" msgstr "Opciones de IP estática" +msgid "Metric" +msgstr "Métrica" + msgid "Apply settings" msgstr "Aplicar configuraciones" msgid "Information provided by /sys/class/net" msgstr "Información ofrecida por /sys/class/net" +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + #: includes/system.php msgid "System Information" msgstr "Información del sistema" @@ -491,6 +724,12 @@ msgstr "¡El sistema se está reiniciando ahora!" msgid "System Shutting Down Now!" msgstr "¡El sistema se está apagando ahora!" +msgid "Web server port" +msgstr "Puerto del servidor Web" + +msgid "Web server bind address" +msgstr "Dirección de enlace del servidor web" + #: includes/themes.php msgid "Theme settings" msgstr "Configuracion de tema" @@ -498,6 +737,9 @@ msgstr "Configuracion de tema" msgid "Select a theme" msgstr "Seleccionar un tema" +msgid "Color" +msgstr "Color" + #: includes/data_usage.php msgid "Data usage" msgstr "Uso de datos" @@ -576,7 +818,7 @@ msgid "Diffie Hellman parameters" msgstr "Parámetros Diffie Hellman" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "Mantener activo" msgid "Server log" msgstr "Registro del servidor" @@ -596,6 +838,66 @@ msgstr "Intentando iniciar openvpn" msgid "Attempting to stop openvpn" msgstr "Intentando detener openvpn" +msgid "Configurations" +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 openvpn-client service." +msgstr "Al activar una configuración, se reiniciará el servicio openvpn-client." + +msgid "Delete OpenVPN client" +msgstr "Eliminar cliente OpenVPN" + +msgid "Delete client configuration? This cannot be undone." +msgstr "¿Borrar configuración del cliente? Esta acción no se puede deshacer." + +msgid "Activate OpenVPN client" +msgstr "Activar cliente OpenVPN" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "¿Activar configuración del cliente? Esta operación reiniciará el servicio openvpn-client." + +msgid "Activate" +msgstr "Activar" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Enable this option to log openvpn activity." +msgstr "Habilitar esta opción para registrar la actividad de openvpn." + +msgid "Authentification Method" +msgstr "Método de Autenticación" + +msgid "Username and password" +msgstr "Nombre de usuario y contraseña" + +msgid "Certificates" +msgstr "Certificados" + +msgid "Enter username and password" +msgstr "Introduzca su nombre de usuario y contraseña" + +msgid "Certificates in the configuration file" +msgstr "Certificados en el archivo de configuración" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP soporta certificados al incluirlos en el archivo de configuración." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "Certificado de la autoridad de certificación de firmas (e.g. ca.crt): insertado en las etiquetas <ca> ... </ca>." + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "Certificado de cliente (clave pública) (e.g. client.crt): insertado en las etiquetas <cert> ... </cert>." + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "Clave privada del certificado del cliente (e.g. client.key): insertado en las etiquetas <key> ... </key>." + +msgid "Configuration File" +msgstr "Archivo de Configuración" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR no está funcionando" @@ -630,6 +932,10 @@ msgstr "Intentando iniciar TOR" msgid "Attempting to stop TOR" msgstr "Intentando detener TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Modo AP Bridged habilitado. Para Hostname e IP, consulte la página de administración de su router." + #: common form controls msgid "Save settings" msgstr "Guardar Configuraciones" @@ -652,3 +958,249 @@ msgstr "arriba" msgid "down" msgstr "abajo" +msgid "adblock" +msgstr "Bloqueador de anuncios" + +msgid "Ad Blocking" +msgstr "Bloqueo de anuncios" + +msgid "Start Ad Blocking" +msgstr "Iniciar bloqueo de anuncios" + +msgid "Restart Ad Blocking" +msgstr "Reiniciar bloqueo de anuncios" + +msgid "Blocklist settings" +msgstr "Ajustes de lista de bloqueo" + +msgid "Enable blocklists" +msgstr "Habilitar listas de bloqueo" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Habilitar esta opción si desea que RaspAP bloquee peticiones DNS para publicidad, seguimiento y otra basura virtual. Las listas de bloqueo se unen desde múltiples fuentes mantenidas activamente y automáticamente actualizadas, filtradas y optimizadas diariamente." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Esta opción añade conf-file y addn-hosts a la configuración de dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Elegir un proveedor de listas de bloqueo" + +msgid "Hostnames blocklist last updated" +msgstr "Última actualización de la lista de bloque de hostnames" + +msgid "Domains blocklist last updated" +msgstr "Última actualización de la lista de bloqueo de dominios" + +msgid "Update now" +msgstr "Actualizar ahora" + +msgid "Statistics" +msgstr "Estatísticas" + +msgid "Information provided by adblock" +msgstr "Información obtenida de adblock" + +msgid "Enable custom blocklist" +msgstr "Habilitar lista de bloqueo 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 "Definir hosts personalizados para ser bloqueados introduciendo una dirección IPv4 o IPv6 seguida de cualquier espacio en blanco (espacios o tabulación) y el nombre del host." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "Ejemplo IPv4: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Esta opción añade una directiva addn-hosts a la configuración dnsmasq." + +msgid "Custom blocklist not defined" +msgstr "Lista de bloqueo personalizada no definida" + +msgid "Invalid custom IP address found on line " +msgstr "Encontrada una dirección IP personalizada no válida " + +msgid "Invalid custom host found on line " +msgstr "Encontrado un servidor personalizado no válido " + +msgid "Tunnel settings" +msgstr "Ajustes del túnel" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "Habilitar servidor" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "Clave pública local" + +msgid "Local Port" +msgstr "Puerto local" + +msgid "IP Address" +msgstr "Dirección IP" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Contacto (peer)" + +msgid "Enable peer" +msgstr "Habilitar contactos (peer)" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Activar esta opción para encriptar el tráfico creando un túnel entre RaspAP y este contacto (peer)." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "Está opción añade client.conf a la configuración WireGuard." + +msgid "Peer public key" +msgstr "Clave pública de contacto (peer)" + +msgid "Endpoint address" +msgstr "Dirección de punto final" + +msgid "Allowed IPs" +msgstr "IPs permitidas" + +msgid "Persistent keepalive" +msgstr "Mantener activo de forma persistente" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "" + +msgid "WireGuard debug log updated" +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Escanee este código QR con tu dispositivo para conectarte a este túnel" + +msgid "or download the client.conf file to your device." +msgstr "o descargue el archivo client.conf en su dispositivo." + +msgid "Download" +msgstr "Descargar" + +msgid "Start WireGuard" +msgstr "Iniciar WireGuard" + +msgid "Stop WireGuard" +msgstr "Detener WireGuard" + +msgid "Information provided by wireguard" +msgstr "Información obtenida de wireguard" + +msgid "Attempting to start WireGuard" +msgstr "Intenando iniciar WireGuard" + +msgid "Attempting to stop WireGuard" +msgstr "Intentando detener WireGuard" + +msgid "WireGuard configuration updated successfully" +msgstr "Configuración de WireGuard actualizada correctamente" + +msgid "WireGuard configuration failed to be updated" +msgstr "No se pudo actualizar la configuración de WireGuard" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + diff --git a/locale/fi_FI/LC_MESSAGES/messages.mo b/locale/fi_FI/LC_MESSAGES/messages.mo index 17a01842..4f373949 100644 Binary files a/locale/fi_FI/LC_MESSAGES/messages.mo and b/locale/fi_FI/LC_MESSAGES/messages.mo differ diff --git a/locale/fi_FI/LC_MESSAGES/messages.po b/locale/fi_FI/LC_MESSAGES/messages.po index 55775d28..63fae134 100644 --- a/locale/fi_FI/LC_MESSAGES/messages.po +++ b/locale/fi_FI/LC_MESSAGES/messages.po @@ -31,26 +31,26 @@ msgstr "RaspAP Wifi portaali" msgid "Dashboard" msgstr "Ohjauspaneeli" -msgid "Configure WiFi client" -msgstr "Konfiguroi WiFi asiakas" +msgid "WiFi client" +msgstr "WiFi asiakas" -msgid "Configure hotspot" -msgstr "Konfiguroi yhteyspiste" +msgid "Hotspot" +msgstr "Yhteyspiste" -msgid "Configure networking" -msgstr "Konfiguroi yhteyksia" +msgid "Networking" +msgstr "Yhteyksia" -msgid "Configure DHCP Server" -msgstr "Konfiguroi DHCP palvelinta" +msgid "DHCP Server" +msgstr "DHCP palvelinta" -msgid "Configure OpenVPN" -msgstr "Konfiguroi OpenVPN" +msgid "OpenVPN" +msgstr "OpenVPN" -msgid "Configure TOR proxy" -msgstr "Konfiguroi TOR välitypalvelinta" +msgid "TOR proxy" +msgstr "TOR välitypalvelinta" -msgid "Configure Auth" -msgstr "Konfiguroi Auth" +msgid "Authentication" +msgstr "Authentication" msgid "Change Theme" msgstr "Vaihda teema" @@ -317,6 +317,33 @@ msgstr "Dnsmasq on käynnissä" msgid "Dnsmasq is not running" msgstr "Dnsmasq ei ole käynnissä" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + #: includes/hostapd.php msgid "Basic" msgstr "Perus" @@ -387,6 +414,9 @@ msgstr "Käynnistä yhteyspiste" msgid "Stop hotspot" msgstr "Pysäytä yhteyspiste" +msgid "Restart hotspot" +msgstr "Käynnistä yhteyspiste uudelleen" + msgid "Enable logging" msgstr "Salli lokikirjaus" diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index 7e197245..3073b13a 100644 Binary files a/locale/fr_FR/LC_MESSAGES/messages.mo and b/locale/fr_FR/LC_MESSAGES/messages.mo differ diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 62c57022..4072a743 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -1,56 +1,61 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" +"PO-Revision-Date: 2022-06-28 09:13\n" "Last-Translator: Bill Zimmerman \n" -"Language-Team: Bastien STEVENOOT\n" +"Language-Team: French\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: fr\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" -msgstr "RaspAP Wifi Portail de Configuration" +msgstr "RaspAP Configuration de Portail Wifi" msgid "Toggle navigation" msgstr "Basculer la navigation" msgid "RaspAP Wifi Portal" -msgstr "RaspAP Wifi Portail" +msgstr "RaspAP Portail Wifi" msgid "Dashboard" msgstr "Tableau de bord" -msgid "Configure WiFi client" -msgstr "Configurer client WiFi" +msgid "WiFi client" +msgstr "Client WiFi" -msgid "Configure hotspot" -msgstr "Configurer hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Configurer réseau" +msgid "Memory Use" +msgstr "Mémoire utilisée" -msgid "Configure DHCP Server" -msgstr "Configurer server DHCP" +msgid "CPU Temp" +msgstr "Temp du CPU" -msgid "Configure OpenVPN" -msgstr "Configurer OpenVPN" +msgid "Networking" +msgstr "Réseau" -msgid "Configure TOR proxy" -msgstr "Configurer proxy TOR" +msgid "DHCP Server" +msgstr "Serveur DHCP" -msgid "Configure Auth" -msgstr "Configurer Auth" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Authentification" msgid "Change Theme" msgstr "Change Thème" @@ -117,8 +122,8 @@ msgstr "Les paramètres Wifi sont mis à jour mais ne peuvent pas redémarrer (i msgid "Wifi settings failed to be updated" msgstr "Les paramètres Wifi n'ont pas été mis à jour" -msgid "Failed to updated wifi settings" -msgstr "Erreur durant la mise à jour des paramètres Wifi" +msgid "Failed to update wifi settings" +msgstr "échec de la mise a jour des paramètres wifi" msgid "Rescan" msgstr "Actualiser" @@ -141,9 +146,33 @@ msgstr "Dissimuler" msgid "Not configured" msgstr "Pas configuré" +msgid "Connected" +msgstr "Connecté" + +msgid "Known" +msgstr "Connu" + +msgid "Nearby" +msgstr "À proximité" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Remarque: Les points d'accès WEP apparaissent comme 'ouverts'. RaspAP ne prend actuellement pas en charge la connexion via WEP" +msgid "No Wifi stations found" +msgstr "Aucune station Wi-Fi trouvée" + +msgid "Reinitializing wpa_supplicant" +msgstr "Réinitialisation de wpa_supplicant" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "Cliquez sur « Re-scanner » pour rechercher les stations Wifi à proximité." + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "Cliquez sur \"Réinitialiser\" pour forcer la réinitialisation de wpa_supplicant." + +msgid "Reinitialize" +msgstr "Réinitialiser" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informations d'interface" @@ -178,8 +207,8 @@ msgstr "Paquets transférés" msgid "Transferred Bytes" msgstr "Octets transférés" -msgid "Wireless Information" -msgstr "Informations sans fil" +msgid "Wireless Client" +msgstr "Client sans fil" msgid "Connected To" msgstr "Connecté à" @@ -188,7 +217,7 @@ msgid "AP Mac Address" msgstr "AP Mac Adresse" msgid "Bitrate" -msgstr "Bitrate" +msgstr "Débit binaire" msgid "Signal Level" msgstr "Niveau du signal" @@ -238,6 +267,60 @@ msgstr "Arrêtez wlan0" msgid "Connected Devices" msgstr "Appareils connectés" +msgid "Client: Ethernet cable" +msgstr "Client : câble Ethernet" + +msgid "Ethernet" +msgstr "Ethernet" + +msgid "Client: Smartphone (USB tethering)" +msgstr "Client : Smartphone (partage de connexion USB)" + +msgid "Smartphone" +msgstr "Smartphone" + +msgid "WiFi" +msgstr "Wi-Fi" + +msgid "Mobile Data Client" +msgstr "Client de données mobiles" + +msgid "Mobile Data" +msgstr "Données mobiles" + +msgid "No information available" +msgstr "Pas d'information disponible" + +msgid "Interface name invalid" +msgstr "Nom d'interface invalide" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "La fonction exec requise est désactivée. Vérifiez si exec n'est pas ajouté à php disable_functions." + +msgid "Waiting for the interface to start ..." +msgstr "En attente du démarrage de l'interface..." + +msgid "Stop the Interface" +msgstr "Arrêter l'interface" + +msgid "Connection mode" +msgstr "Mode de connexion" + +msgid "Signal quality" +msgstr "Qualité du signal" + +msgid "WAN IP" +msgstr "IP WAN" + +msgid "Web-GUI" +msgstr "Interface web" + +msgid "Signal strength" +msgstr "Intensité du signal" + +msgid "No Client device or not yet configured" +msgstr "Aucun appareil client ou pas encore configuré" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Paramètres du serveur DHCP" @@ -248,6 +331,15 @@ msgstr "Liste des clients" msgid "Interface" msgstr "Interface" +msgid "Enable DHCP for this interface" +msgstr "Activer le DHCP pour cette interface" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Activez cette option si vous souhaitez que le RaspAP attribue des adresses IP sur l'interface sélectionnée." + +msgid "DNS Server" +msgstr "Serveur DNS" + msgid "Starting IP Address" msgstr "Adresse IP de départ" @@ -275,6 +367,9 @@ msgstr "Temps d'expiration" msgid "MAC Address" msgstr "Adresse Mac" +msgid "Optional comment" +msgstr "Commentaire optionnel" + msgid "Host name" msgstr "Nom d'hôte" @@ -290,6 +385,9 @@ msgstr "Arrêtez dnsmasq" msgid "Start dnsmasq" msgstr "Démarrer dnsmasq" +msgid "Dnsmasq configuration updated successfully" +msgstr "Configuration de Dnsmasq mise à jour avec succès" + msgid "dnsmasq already running" msgstr "Dnsmasq est déjà en cours d'exécution" @@ -314,6 +412,57 @@ msgstr "Dnsmasq est en cours d'exécution" msgid "Dnsmasq is not running" msgstr "Dnsmasq n'est pas en fonctionnement" +msgid "Upstream DNS servers" +msgstr "Serveurs DNS amont" + +msgid "Only ever query DNS servers configured below" +msgstr "Uniquement les serveurs DNS de requête configurés ci-dessous" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Activer cette option si vous voulez que RaspAP envoie des requêtes DNS aux serveurs configurés ci-dessous exclusivement. Par défaut, RaspAP utilise aussi les serveurs de noms du serveur DHCP amont." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Cette option ajoute no-resolv à la configuration dnsmasq." + +msgid "Add upstream DNS server" +msgstr "Ajouter un serveur DNS amont" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choisissez un serveur hébergé" + +msgid "Enable these options to log DHCP server activity." +msgstr "Activer ces options pour enregistrer l'activité du serveur DHCP." + +msgid "Log DHCP requests" +msgstr "Journaliser les requêtes DHCP" + +msgid "Log DNS queries" +msgstr "Journaliser les requêtes DNS" + +msgid "Restrict access" +msgstr "Accès restreint" + +msgid "Limit network access to static clients" +msgstr "Limiter l'accès au réseau aux clients baux statiques" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Activer cette option si tu veux que RaspAP ignore les clients qui ne sont pas spécifiés dans la liste des baux statiques." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "Cette option ajoute no-resolv à la configuration dnsmasq." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "Les clients avec une adresse MAC identifiée peuvent toujours être alloués à la même adresse IP." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "Cette option ajoute no-resolv à la configuration Dnsmasq." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "Cela bascule l'option gateway/nogateway pour cette interface dans la configuration de DHCPCD." + #: includes/hostapd.php msgid "Basic" msgstr "De base" @@ -336,8 +485,8 @@ msgstr "Type de sécurité" msgid "Encryption Type" msgstr "Type de chiffrement" -msgid "PSK" -msgstr "PSK" +msgid "Pre-shared key (PSK)" +msgstr "Clé pré-partagée (PSK)" msgid "Advanced settings" msgstr "Réglages avancés" @@ -349,7 +498,7 @@ msgid "Information provided by hostapd" msgstr "Informations fournies par hostapd" msgid "Attempting to start hotspot" -msgstr "Tentative de démarrage du hotspot" +msgstr "Tentative de démarrage du point d'accès" msgid "Attempting to stop hotspot" msgstr "Tentative d'arrêt du hotspot" @@ -373,7 +522,7 @@ msgid "Country code must be blank or two characters" msgstr "Le code du pays doit être vide ou deux caractères" msgid "Wifi Hotspot settings saved" -msgstr "Paramètres de hotspot WI-FI enregistrés" +msgstr "Paramètres de point d'accès WI-FI enregistrés" msgid "Unable to save wifi hotspot settings" msgstr "Impossible d'enregistrer le réglage du hotspot Wi-Fi" @@ -384,6 +533,9 @@ msgstr "Démarrer le point d'accès" msgid "Stop hotspot" msgstr "Arrêté le point d'accès" +msgid "Restart hotspot" +msgstr "Redémarrer le point d'accès" + msgid "Enable logging" msgstr "Activer la journalisation" @@ -393,28 +545,91 @@ msgstr "Sortie de journal" msgid "WiFi client AP mode" msgstr "Mode AP client WiFi" +msgid "Bridged AP mode" +msgstr "Mode AP ponté" + msgid "Hide SSID in broadcast" msgstr "Masquer le SSID en diffusion" msgid "Maximum number of clients" msgstr "Nombre maximum de clients" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configure l'option max_num_sta de hostapd. La valeur par défaut et maximum est 2007. Si vide ou 0, la valeur par défaut s'applique." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Configure l'option max_num_sta de hostapd. La valeur par défaut et maximum est 2007. Si vide ou 0, la valeur par défaut s'applique." + +msgid "Beacon interval" +msgstr "intervalle balise Beacon" + +msgid "Disable disassoc_low_ack" +msgstr "Désactiver disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Ne pas dissocier les points d'acces sur la base de défaillances de transmission excessives." + +msgid "Executing RaspAP service start" +msgstr "Démarrage du service RaspAP" + +msgid "Close" +msgstr "Fermer" + +msgid "Enable this option to log hostapd activity." +msgstr "Activer les logs d'activité avec l'option hostapd" + +msgid "Transmit power (dBm)" +msgstr "Puissance de transmission (dBm)" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "Définit l'option txpower pour le point d'accès et le pays configuré." + +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 "dBm est une unité de mesure utilisée pour indiquer qu'un rapport de puissance est exprimé en décibels (dB) avec une référence à un milliwatt (mW). 30 dBm est égal à 1000 mW, tandis que 0 dBm équivaut à 1,25 mW." + +msgid "WPA and WPA2" +msgstr "WPA et WPA2" + +msgid "WPA2 and WPA3-Personal (transitional mode)" +msgstr "WPA2 et WPA3-Personal (mode transitoire)" + +msgid "WPA3-Personal (required)" +msgstr "WPA3-Personnel (obligatoire)" + +msgid "Enabled (for supported clients)" +msgstr "Activé (pour les clients pris en charge)" + +msgid "Required (for supported clients)" +msgstr "Requis (pour les clients pris en charge)" + +msgid "802.11w extends strong cryptographic protection to a select set of robust management frames, including Deauthentication, Disassociation and certain categories of Action Management frames. Collectively, this is known as Management Frame Protection (MFP)." +msgstr "La norme 802.11w étend la protection cryptographique forte à un ensemble sélectionné de trames de gestion robustes, notamment la désauthentification, la dissociation et certaines catégories de trames de gestion d'action. L'ensemble de ces éléments est connu sous le nom de Management Frame Protection (MFP)." + +msgid "Scan this QR code directly or %s %sprint a sign%s for your users." +msgstr "Scannez ce code QR directement ou %s %simprimez un panneau%s pour vos utilisateurs." + +msgid "Printable Wi-Fi sign" +msgstr "Panneau Wi-Fi imprimable" + +msgid "To connect with your phone or tablet, scan the QR code above with your camera app." +msgstr "Pour vous connecter à votre téléphone ou tablette, scannez le QR code ci-dessus avec votre application caméra." + +msgid "For other devices, use the login credentials below." +msgstr "Pour les autres appareils, utilisez les identifiants ci-dessous." + +msgid "Network" +msgstr "Réseau" #: includes/networking.php msgid "Summary" msgstr "Sommaire" +msgid "Internet connection" +msgstr "Connections Internet" + msgid "Current settings" msgstr "Paramètres actuels" msgid "Default Gateway" msgstr "Passerelle par défaut" -msgid "DNS Server" -msgstr "Serveur DNS" - msgid "Alternate DNS Server" msgstr "Serveur DNS alternatif" @@ -436,12 +651,66 @@ msgstr "Désactivée" msgid "Static IP Options" msgstr "Options d'IP statique" +msgid "Metric" +msgstr "Métrique" + msgid "Apply settings" msgstr "Appliquer les paramètres" msgid "Information provided by /sys/class/net" msgstr "Informations fournies par /sys/class/net" +msgid "Network Devices" +msgstr "Périphériques réseau" + +msgid "Mobile Data Settings" +msgstr "Paramètres des données mobiles" + +msgid "Properties of network devices" +msgstr "Propriétés des périphériques réseau" + +msgid "Device" +msgstr "Appareil" + +msgid "MAC" +msgstr "MAC" + +msgid "USB vid/pid" +msgstr "USB vid/pid" + +msgid "Device type" +msgstr "Type d'appareil" + +msgid "Fixed name" +msgstr "Nom fixe" + +msgid "Change" +msgstr "Modifier" + +msgid "Settings for Mobile Data Devices" +msgstr "Paramètres pour les périphériques de données mobiles" + +msgid "PIN of SIM card" +msgstr "PIN de la carte SIM" + +msgid "APN Settings (Modem device ppp0)" +msgstr "Paramètres APN (modem ppp0)" + +msgid "Access Point Name (APN)" +msgstr "Nom du point d'accès (APN)" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Successfully Updated Network Configuration" +msgstr "Configuration réseau mise à jour" + +msgid "Error saving network configuration to file" +msgstr "Erreur lors de l'enregistrement du fichier de configuration réseau" + +msgid "Unable to detect interface" +msgstr "Impossible de détecter l'interface" + #: includes/system.php msgid "System Information" msgstr "Informations du système" @@ -488,6 +757,12 @@ msgstr "Redémarrage du système maintenant !" msgid "System Shutting Down Now!" msgstr "Arrêt du système maintenant !" +msgid "Web server port" +msgstr "Port du serveur Web" + +msgid "Web server bind address" +msgstr "Adresse de liaison (Bind) du serveur web" + #: includes/themes.php msgid "Theme settings" msgstr "Paramètres des thèmes" @@ -495,6 +770,9 @@ msgstr "Paramètres des thèmes" msgid "Select a theme" msgstr "Sélectionnez un thème" +msgid "Color" +msgstr "Couleur" + #: includes/data_usage.php msgid "Data usage" msgstr "Utilisation des données" @@ -573,7 +851,7 @@ msgid "Diffie Hellman parameters" msgstr "Paramètres Diffie Hellman" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "Maintenir en vie" msgid "Server log" msgstr "Journal du serveur" @@ -593,6 +871,66 @@ msgstr "Essai de démarrage d'openvpn" msgid "Attempting to stop openvpn" msgstr "Essai d'arrêt d'openvpn" +msgid "Configurations" +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 openvpn-client service." +msgstr "L'activation d'une configuration redémarrera le service openvpn-client." + +msgid "Delete OpenVPN client" +msgstr "Supprimer le fichier client OpenVPN" + +msgid "Delete client configuration? This cannot be undone." +msgstr "Supprimer ce fichier ? Opération irréversible." + +msgid "Activate OpenVPN client" +msgstr "Activer le fichier OpenVPN" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "L'activation d'une configuration redémarrera le service openvpn-client." + +msgid "Activate" +msgstr "Activer" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Enable this option to log openvpn activity." +msgstr "Activer cette option pour enregistrer l'activité openvpn." + +msgid "Authentification Method" +msgstr "Méthode d'identification" + +msgid "Username and password" +msgstr "Nom d'utilisateur et mot de passe" + +msgid "Certificates" +msgstr "Certificats" + +msgid "Enter username and password" +msgstr "Entrez votre nom d'utilisateur et votre mot de passe" + +msgid "Certificates in the configuration file" +msgstr "Certificats dans le fichier de configuration" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP prend en charge les certificats en les incluant dans le fichier de configuration." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "Certificat d'autorité de certification (CA) de signature (par exemple ca.crt) : joint dans <ca> ... </ca> balises." + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "Certificat client (clé publique) (par exemple client.crt) : inclus dans <cert> ... </cert> balises." + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "Clé privée du certificat client (par exemple client.key) : entourée de balises <clé> ... </key>." + +msgid "Configuration File" +msgstr "Fichier de configuration" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR n'est pas en cours d'exécution" @@ -627,6 +965,10 @@ msgstr "Essai de démarrage de TOR" msgid "Attempting to stop TOR" msgstr "Essai d'arrêt de TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Le mode AP ponté est activé. Pour le nom d'hôte et l'IP, consultez la page d'administration de votre routeur." + #: common form controls msgid "Save settings" msgstr "Enregistrer les paramètres" @@ -648,3 +990,250 @@ msgstr "vers le haut" msgid "down" msgstr "vers le bas" + +msgid "adblock" +msgstr "AdBlock" + +msgid "Ad Blocking" +msgstr "Blocage de la pub" + +msgid "Start Ad Blocking" +msgstr "Lancer le blocage des publicités" + +msgid "Restart Ad Blocking" +msgstr "Redémarrer le blocage des publicités" + +msgid "Blocklist settings" +msgstr "Paramètres anti-spam" + +msgid "Enable blocklists" +msgstr "Activer les listes noires" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Activer cette option si tu veux que RaspAP bloque les requêtes DNS pour les publicités, le suivi et d'autres déchets virtuels. Les listes de blocage sont rassemblées à partir de sources multiples, activement maintenues et mises à jour automatiquement, nettoyées, optimisées et modérées quotidiennement." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Cette option ajoute conf-file et addn-hosts à la configuration de dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Choisir un fournisseur de liste noire" + +msgid "Hostnames blocklist last updated" +msgstr "Dernière mise à jour de la liste de blocage des noms d'hôtes" + +msgid "Domains blocklist last updated" +msgstr "Dernière mise à jour de la liste de blocage des noms d'hôtes" + +msgid "Update now" +msgstr "Mettre à jour" + +msgid "Statistics" +msgstr "Statistiques" + +msgid "Information provided by adblock" +msgstr "Informations fournies par adblock" + +msgid "Enable custom blocklist" +msgstr "Activer l'Antipub personnel" + +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 "Définissez les Hosts personnalisés à bloquer en entrant une adresse IPv4 ou IPv6 suivie d'un espace (espace ou tabulation) et du nom de l'hôte." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "IPv4 exemple: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Cette option ajoute une directive addn-hosts à la configuration de dnsmasq." + +msgid "Custom blocklist not defined" +msgstr "Liste de blocage personnalisée non définie" + +msgid "Invalid custom IP address found on line " +msgstr "Une adresse IP personnalisée non valide a été trouvée sur la ligne " + +msgid "Invalid custom host found on line " +msgstr "Un Host personnalisée non valide a été trouvée sur la ligne " + +msgid "Tunnel settings" +msgstr "Paramètres du tunnel" + +msgid "Configuration Method" +msgstr "Méthode de configuration" + +msgid "Upload file" +msgstr "Charger un fichier" + +msgid "Create manually" +msgstr "Créer manuellement" + +msgid "Upload a WireGuard config" +msgstr "Charger une configuration WireGuard" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "Cette option télécharge et installe un fichier WireGuard .conf existant sur cet appareil." + +msgid "Apply iptables rules for AP interface" +msgstr "Appliquer les règles iptables au point d'accès" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "Recommandé si vous souhaitez transférer le trafic réseau de l'interface wg0 aux clients connectés au point d'accès." + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "Cette option ajoute des règles iptables Postup et PostDown pour l'interface AP configurée (%s)." + +msgid "Select WireGuard configuration file (.conf)" +msgstr "Sélectionner le fichier de configuration WireGuard (.conf)" + +msgid "Create a local WireGuard config" +msgstr "Créer une configuration locale WireGuard" + +msgid "Enable server" +msgstr "Activer le serveur" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "Activer cette option pour sécuriser le trafic réseau en créant un tunnel chiffré entre RaspAP et les pairs configurés." + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "Ce paramètre génère un nouveau fichier WireGuard .conf sur cet appareil." + +msgid "Local public key" +msgstr "Clé publique locale" + +msgid "Local Port" +msgstr "Port local" + +msgid "IP Address" +msgstr "Adresse IP" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Pair" + +msgid "Enable peer" +msgstr "Activer le pair" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Active cette option pour chiffrer le trafic en créant un tunnel entre RaspAP et ce pair." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "Cette option ajoute client.conf à la configuration de WireGuard." + +msgid "Peer public key" +msgstr "Clé publique du pair" + +msgid "Endpoint address" +msgstr "Adresse de terminaison" + +msgid "Allowed IPs" +msgstr "Adresses IP autorisées" + +msgid "Persistent keepalive" +msgstr "Keepalive persistant" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "Activer cette option pour afficher un journal de débogage de wg-quick." + +msgid "WireGuard debug log updated" +msgstr "Journal de débogage WireGuard mis à jour" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Scannez ce code QR avec votre client pour vous connecter à ce tunnel" + +msgid "or download the client.conf file to your device." +msgstr "ou téléchargez le fichier client.conf sur votre appareil." + +msgid "Download" +msgstr "Télécharger" + +msgid "Start WireGuard" +msgstr "Démarrer WireGuard" + +msgid "Stop WireGuard" +msgstr "Arrêter WireGuard" + +msgid "Information provided by wireguard" +msgstr "Informations fournies par WireGuard" + +msgid "Attempting to start WireGuard" +msgstr "Tentative de démarrage de WireGuard" + +msgid "Attempting to stop WireGuard" +msgstr "Tentative d’arrêt de WireGuard" + +msgid "WireGuard configuration updated successfully" +msgstr "Configuration de WireGuard mise à jour avec succès" + +msgid "WireGuard configuration failed to be updated" +msgstr "La configuration WireGuard n'a pas pu être mise à jour" + +msgid "Client Firewall" +msgstr "Pare-feu client" + +msgid "Firewall is ENABLED" +msgstr "Le pare-feu est activé" + +msgid "Firewall is OFF" +msgstr "Le pare-feu est désactivé" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "Le pare-feu par défaut n'autorisera que le trafic sortant et déjà établi." + +msgid "No incoming UDP traffic is allowed." +msgstr "Aucun trafic UDP entrant n'est autorisé." + +msgid "There are no restrictions for the access point %s." +msgstr "Il n'y a pas de restrictions pour le point d'accès %s." + +msgid "Exception: Service" +msgstr "Exception : service" + +msgid "allow SSH access on port 22" +msgstr "Autoriser l'accès SSH sur le port 22" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "Autoriser l'accès à l'interface RaspAP sur le port 80 ou 443" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "Autoriser les connexions entrantes pour certains services Internet." + +msgid "Exception: network device" +msgstr "Exception : périphérique réseau" + +msgid "Exclude device(s)" +msgstr "Exclure le(s) appareil(s)" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "Exclure le(s) périphérique(s) réseau (séparés par un vide ou une virgule) des règles de pare-feu." + +msgid "Current client devices: %s" +msgstr "Périphériques clients actuels : %s" + +msgid "The access point %s is per default excluded." +msgstr "Le point d'accès %s est exclu par défaut." + +msgid "Exception: IP-Address" +msgstr "Exception : adresse IP" + +msgid "Allow incoming connections from" +msgstr "Autoriser les connexions entrantes depuis" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "Pour les adresses IP fournies (séparées par un vide ou une virgule) la connexion entrante (via TCP et UDP) est acceptée." + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "Ceci est requis pour une connexion OpenVPN via UDP ou Wireguard." + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "La liste des adresses IP du serveur VPN configurées : %s" + +msgid "Disable Firewall" +msgstr "Désactiver le pare-feu" + +msgid "Enable Firewall" +msgstr "Activer le pare-feu" + +msgid "Apply changes" +msgstr "Appliquer les modifications" + diff --git a/locale/id_ID/LC_MESSAGES/messages.mo b/locale/id_ID/LC_MESSAGES/messages.mo index 5a727699..2b545397 100644 Binary files a/locale/id_ID/LC_MESSAGES/messages.mo and b/locale/id_ID/LC_MESSAGES/messages.mo differ diff --git a/locale/id_ID/LC_MESSAGES/messages.po b/locale/id_ID/LC_MESSAGES/messages.po index c92f4fb2..65a1c3ba 100644 --- a/locale/id_ID/LC_MESSAGES/messages.po +++ b/locale/id_ID/LC_MESSAGES/messages.po @@ -35,26 +35,26 @@ msgstr "Portal Wifi RaspAP" msgid "Dashboard" msgstr "Dasbor" -msgid "Configure WiFi client" -msgstr "Atur klien WiFi" +msgid "WiFi client" +msgstr "Klien WiFi" -msgid "Configure hotspot" -msgstr "Atur hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Atur jaringan" +msgid "Networking" +msgstr "Jaringan" -msgid "Configure DHCP Server" -msgstr "Atur Server DHCP" +msgid "DHCP Server" +msgstr "Server DHCP" -msgid "Configure OpenVPN" -msgstr "Atur OpenVPN" +msgid "OpenVPN" +msgstr "OpenVPN" -msgid "Configure TOR proxy" -msgstr "Konfigurasikan proxy TOR" +msgid "TOR proxy" +msgstr "Proxy TOR" -msgid "Configure Auth" -msgstr "Konfigurasi Auth" +msgid "Authentication" +msgstr "Autentikasi" msgid "Change Theme" msgstr "Ganti Tema" @@ -332,6 +332,33 @@ msgstr "Dnsmasq sedang berjalan" msgid "Dnsmasq is not running" msgstr "Dnsmasq tidak berjalan" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + #: includes/hostapd.php msgid "Basic" msgstr "Dasar" @@ -400,7 +427,10 @@ msgid "Start hotspot" msgstr "Mulai hotspot" msgid "Stop hotspot" -msgstr "Stop hotspot" +msgstr "Hentikan hotspot" + +msgid "Restart hotspot" +msgstr "Mulai ulang hotspot" msgid "Enable logging" msgstr "Aktifkan logging" diff --git a/locale/it_IT/LC_MESSAGES/messages.mo b/locale/it_IT/LC_MESSAGES/messages.mo index 6236ef62..ff642cb1 100644 Binary files a/locale/it_IT/LC_MESSAGES/messages.mo and b/locale/it_IT/LC_MESSAGES/messages.mo differ diff --git a/locale/it_IT/LC_MESSAGES/messages.po b/locale/it_IT/LC_MESSAGES/messages.po index 0de1f21c..3eb000ff 100644 --- a/locale/it_IT/LC_MESSAGES/messages.po +++ b/locale/it_IT/LC_MESSAGES/messages.po @@ -1,22 +1,21 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR Simone Rizzo , 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Simone Rizzo \n" -"Language-Team: \n" -"Language: en_US\n" +"PO-Revision-Date: 2022-01-05 11:43\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Italian\n" +"Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: it\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -26,31 +25,37 @@ msgid "Toggle navigation" msgstr "Mostra/nascondi navigazione" msgid "RaspAP Wifi Portal" -msgstr "RaspAP Wifi Portal" +msgstr "Portale RaspAP WiFi" msgid "Dashboard" msgstr "Dashboard" -msgid "Configure WiFi client" -msgstr "Configura client WiFi" +msgid "WiFi client" +msgstr "Client WiFi" -msgid "Configure hotspot" -msgstr "Configura hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Configura rete" +msgid "Memory Use" +msgstr "Memoria utilizzata" -msgid "Configure DHCP Server" -msgstr "Configura server DHCP" +msgid "CPU Temp" +msgstr "Temperatura CPU" -msgid "Configure OpenVPN" -msgstr "Configura OpenVPN" +msgid "Networking" +msgstr "Rete" -msgid "Configure TOR proxy" -msgstr "Configura proxy TOR" +msgid "DHCP Server" +msgstr "Server DHCP" -msgid "Configure Auth" -msgstr "Configura Auth" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Autenticazione" msgid "Change Theme" msgstr "Cambia tema" @@ -111,8 +116,8 @@ msgstr "Chiave di sicurezza" msgid "Wifi settings updated successfully" msgstr "Impostazioni Wifi aggiornate con successo" -msgid "Wifi settings updated but cannot restart (cannon execute 'wpa_cli reconfigure')" -msgstr "Impostazioni Wifi aggiornate ma impossibile riavviare (impossibile eseguire 'wpa_cli reconfigure')" +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Impostazioni WiFi aggiornate, ma non è stato possibile riavviare (impossibile eseguire 'wpa_cli reconfigure')" msgid "Wifi settings failed to be updated" msgstr "Non è stato possibile aggiornare le impostazioni Wifi" @@ -141,9 +146,33 @@ msgstr "Nascondi" msgid "Not configured" msgstr "Non configurato" +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Nota: gli access points WEP appaiono come 'Aperti' . RaspAP non supporta attualmente la connessione WEP" +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" +msgstr "" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informazioni interfaccia" @@ -178,8 +207,8 @@ msgstr "Pacchetti trasmessi" msgid "Transferred Bytes" msgstr "Bytes trasmessi" -msgid "Wireless Information" -msgstr "Informazioni wireless" +msgid "Wireless Client" +msgstr "Client Wireless" msgid "Connected To" msgstr "Connesso a" @@ -238,6 +267,60 @@ msgstr "Ferma wlan0" msgid "Connected Devices" msgstr "Dispositivi Connessi" +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Impostazioni del server DHCP" @@ -248,6 +331,15 @@ msgstr "Lista client" msgid "Interface" msgstr "Interfaccia" +msgid "Enable DHCP for this interface" +msgstr "Abilita DHCP per questa interfaccia" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Abilita questa opzione se vuoi che RaspAP assegni gli indirizzi IP nell'interfaccia selezionata." + +msgid "DNS Server" +msgstr "Server DNS" + msgid "Starting IP Address" msgstr "Indirizzo IP iniziale" @@ -275,6 +367,9 @@ msgstr "Tempo di scadenza" msgid "MAC Address" msgstr "Indirizzo MAC" +msgid "Optional comment" +msgstr "" + msgid "Host name" msgstr "Nome host" @@ -317,6 +412,57 @@ msgstr "Dnsmasq è in esecuzione" msgid "Dnsmasq is not running" msgstr "Dnsmasq non è in esecuzione" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Cerca sempre soltanto i server DNS configurati qui sotto" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Abilita questa opzione se desideri che RaspAP invii query DNS esclusivamente ai server configurati di seguito. Per impostazione predefinita RaspAP utilizza anche i nomi degli upstream DHCP server." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Questa opzione aggiunge no-resolv alla configurazione dnsmasq." + +msgid "Add upstream DNS server" +msgstr "Aggiungi server DNS upstream" + +msgid "Format" +msgstr "Formato" + +msgid "Choose a hosted server" +msgstr "Scegli un hosted server" + +msgid "Enable these options to log DHCP server activity." +msgstr "Abilita queste opzioni per registrare l'attività del server DHCP." + +msgid "Log DHCP requests" +msgstr "Registra le richieste DHCP" + +msgid "Log DNS queries" +msgstr "Registra query DNS" + +msgid "Restrict access" +msgstr "Limita l'accesso" + +msgid "Limit network access to static clients" +msgstr "Limita l'accesso di rete ai client statici" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Abilita questa opzione se vuoi che RaspAP ignori qualsiasi client non sono specificato nell'elenco dei lease statici." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "Questa opzione aggiunge dhcp-ignore alla configurazione di dnsmasq." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "I client con un particolare indirizzo MAC possono essere assegnati sempre allo stesso indirizzo IP." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "Questa opzione aggiunge dhcp-host alla configurazione dnsmasq." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "Base" @@ -387,6 +533,9 @@ msgstr "Avvia l'hotspot" msgid "Stop hotspot" msgstr "Ferma l'hotspot" +msgid "Restart hotspot" +msgstr "Riavvia l'hotspot" + msgid "Enable logging" msgstr "Abilita la registrazione" @@ -396,28 +545,58 @@ msgstr "File di log in uscita" msgid "WiFi client AP mode" msgstr "AP WiFi modalità client" +msgid "Bridged AP mode" +msgstr "Modalità AP Bridged" + msgid "Hide SSID in broadcast" msgstr "Nascondere la trasmissione del SSID" msgid "Maximum number of clients" msgstr "Numero massimo di client" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configura l'opzione max_num_sta di hostapd. Il valore predefinito e massimo è 2007. Se vuoto o 0, viene applicato il valore predefinito." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "Intervallo del faro" + +msgid "Disable disassoc_low_ack" +msgstr "Disabilita disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Non dissociare le stazioni sulla base di guasti di trasmissione eccessivi." + +msgid "Executing RaspAP service start" +msgstr "Esecuzione avvio del servizio RaspAP" + +msgid "Close" +msgstr "Chiudi" + +msgid "Enable this option to log hostapd activity." +msgstr "Abilita questa opzione per registrare l'attività hostapd." + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +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 "" #: includes/networking.php msgid "Summary" msgstr "Sommario" +msgid "Internet connection" +msgstr "Connessione Internet" + msgid "Current settings" msgstr "Impostazioni attuali" msgid "Default Gateway" msgstr "Gateway predefinito" -msgid "DNS Server" -msgstr "Server DNS" - msgid "Alternate DNS Server" msgstr "Server DNS alternativo" @@ -439,18 +618,72 @@ msgstr "Disabilitato" msgid "Static IP Options" msgstr "Opzioni IP statiche" +msgid "Metric" +msgstr "Metrico" + msgid "Apply settings" msgstr "Applica le impostazioni" msgid "Information provided by /sys/class/net" msgstr "Informazioni fornite da /sys/class/net" +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + #: includes/system.php msgid "System Information" msgstr "Informazioni di sistema" msgid "Language" -msgstr "Linguaggio" +msgstr "Lingua" msgid "Language settings" msgstr "Impostazioni lingua" @@ -491,6 +724,12 @@ msgstr "Il sistema si sta riavviando ora!" msgid "System Shutting Down Now!" msgstr "Il sistema si sta spegnendo ora!" +msgid "Web server port" +msgstr "Porta del web server" + +msgid "Web server bind address" +msgstr "Indirizzo di bind del server Web" + #: includes/themes.php msgid "Theme settings" msgstr "Impostazioni tema" @@ -498,6 +737,9 @@ msgstr "Impostazioni tema" msgid "Select a theme" msgstr "Seleziona un tema" +msgid "Color" +msgstr "Colore" + #: includes/data_usage.php msgid "Data usage" msgstr "Utilizzo dei dati" @@ -576,7 +818,7 @@ msgid "Diffie Hellman parameters" msgstr "Parametri Diffie Hellman" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "Keep Alive" msgid "Server log" msgstr "Log del server" @@ -596,6 +838,66 @@ msgstr "Tentativo di avviare openvpn in corso" msgid "Attempting to stop openvpn" msgstr "Tentativo di arrestare openvpn in corso" +msgid "Configurations" +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 openvpn-client service." +msgstr "Attivando la configurazione si riavvierà il servizio openvpn-client." + +msgid "Delete OpenVPN client" +msgstr "Elimina client OpenVPN" + +msgid "Delete client configuration? This cannot be undone." +msgstr "Eliminare la configurazione del client? Questa operazione non può essere annullata." + +msgid "Activate OpenVPN client" +msgstr "Attiva client OpenVPN" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "Attivare la configurazione del client? Questo riavvierà il servizio openvpn-client." + +msgid "Activate" +msgstr "Attiva" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Enable this option to log openvpn activity." +msgstr "Abilita questa opzione per registrare l'attività di openvpn." + +msgid "Authentification Method" +msgstr "Metodo di autentificazione" + +msgid "Username and password" +msgstr "Nome utente e password" + +msgid "Certificates" +msgstr "Certificati" + +msgid "Enter username and password" +msgstr "Inserisci nome utente e password" + +msgid "Certificates in the configuration file" +msgstr "" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP supporta i certificati includendoli nel file di configurazione." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "" + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "" + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "" + +msgid "Configuration File" +msgstr "File di Configurazione" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR non è in esecuzione" @@ -610,7 +912,7 @@ msgid "Relay settings" msgstr "Impostazioni di inoltro" msgid "Nickname" -msgstr "Nickname" +msgstr "Soprannome" msgid "Address" msgstr "Indirizzo" @@ -630,6 +932,10 @@ msgstr "Tentativo di avviare TOR in corso" msgid "Attempting to stop TOR" msgstr "Tentativo di arrestare TOR in corso" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "La modalità AP Bridged è abilitata. Per l'hostname e l'IP, consulta la pagina di amministrazione del router." + #: common form controls msgid "Save settings" msgstr "Salva impostazioni" @@ -652,3 +958,249 @@ msgstr "su" msgid "down" msgstr "giù" +msgid "adblock" +msgstr "AdBlock" + +msgid "Ad Blocking" +msgstr "Blocco degli annunci" + +msgid "Start Ad Blocking" +msgstr "Avvia blocco degli annunci" + +msgid "Restart Ad Blocking" +msgstr "Riavvia blocco degli annunci" + +msgid "Blocklist settings" +msgstr "Impostazioni Blocklist" + +msgid "Enable blocklists" +msgstr "Abilita blocklist" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Abilita questa opzione se vuoi che RaspAP blocchi le richieste DNS per pubblicità, tracciamento e altra spazzatura virtuale. Le Blocklist sono raccolte da fonti multiple, gestite attivamente e automaticamente aggiornate, pulite, ottimizzate e moderate su base quotidiana." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Questa opzione aggiunge conf-file e addn-host alla configurazione dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Scegli un provider di blocklist" + +msgid "Hostnames blocklist last updated" +msgstr "Ultimo aggiornamento blocklist hostnames" + +msgid "Domains blocklist last updated" +msgstr "Ultimo aggiornamento blocklist domini" + +msgid "Update now" +msgstr "Aggiorna adesso" + +msgid "Statistics" +msgstr "Statistiche" + +msgid "Information provided by adblock" +msgstr "Informazioni fornite da Adblock" + +msgid "Enable custom blocklist" +msgstr "Abilita blocklist personalizzata" + +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 "Definisci gli host personalizzati per essere bloccati inserendo un indirizzo IPv4 o IPv6 seguito da qualsiasi spazio bianco (spazi o schede) e il nome dell'host." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "Esempio IPv4: 0.0.0.0 host_da_bloccare.ext" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Questa opzione aggiunge conf-file e addn-host alla configurazione dnsmasq." + +msgid "Custom blocklist not defined" +msgstr "Blocklist personalizzata non definita" + +msgid "Invalid custom IP address found on line " +msgstr "Host personalizzato non valido trovato sulla riga " + +msgid "Invalid custom host found on line " +msgstr "Host personalizzato non valido trovato sulla riga " + +msgid "Tunnel settings" +msgstr "Impostazioni del tunnel" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "Abilita il server" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "Chiave pubblica locale" + +msgid "Local Port" +msgstr "Porta locale" + +msgid "IP Address" +msgstr "Indirizzo IP" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Peer" + +msgid "Enable peer" +msgstr "Abilita peer" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Abilita questa opzione per cifrare il traffico creando un tunnel tra RaspAP e questo peer." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "Questa opzione aggiunge client.conf alla configurazione di WireGuard." + +msgid "Peer public key" +msgstr "Chiave pubblica del peer" + +msgid "Endpoint address" +msgstr "Indirizzo di endpoint" + +msgid "Allowed IPs" +msgstr "IP consentiti" + +msgid "Persistent keepalive" +msgstr "Keepalive permanente" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "" + +msgid "WireGuard debug log updated" +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Scansiona questo codice QR con il tuo client per connetterti a questo tunnel" + +msgid "or download the client.conf file to your device." +msgstr "o scarica il file client.conf sul tuo dispositivo." + +msgid "Download" +msgstr "Scarica" + +msgid "Start WireGuard" +msgstr "Avvia WireGuard" + +msgid "Stop WireGuard" +msgstr "Ferma WireGuard" + +msgid "Information provided by wireguard" +msgstr "Informazioni fornite da wireguard" + +msgid "Attempting to start WireGuard" +msgstr "Tentativo di avviare WireGuard in corso" + +msgid "Attempting to stop WireGuard" +msgstr "Tentativo di arrestare WireGuard in corso" + +msgid "WireGuard configuration updated successfully" +msgstr "Configurazione WireGuard aggiornata con successo" + +msgid "WireGuard configuration failed to be updated" +msgstr "Impossibile aggiornare la configurazione di WireGuard" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + diff --git a/locale/ja_JP/LC_MESSAGES/messages.mo b/locale/ja_JP/LC_MESSAGES/messages.mo index dbea547e..1298711a 100644 Binary files a/locale/ja_JP/LC_MESSAGES/messages.mo and b/locale/ja_JP/LC_MESSAGES/messages.mo differ diff --git a/locale/ja_JP/LC_MESSAGES/messages.po b/locale/ja_JP/LC_MESSAGES/messages.po index 51c22f27..439ec8b4 100644 --- a/locale/ja_JP/LC_MESSAGES/messages.po +++ b/locale/ja_JP/LC_MESSAGES/messages.po @@ -1,26 +1,19 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -# Translators: -# William Zimmerman , 2019 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-25 17:42+0000\n" -"Last-Translator: William Zimmerman , 2019\n" -"Language-Team: Japanese (https://www.transifex.com/na-360/teams/104285/ja/)\n" +"PO-Revision-Date: 2020-04-17 06:37\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Japanese\n" +"Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: ja\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -35,25 +28,31 @@ msgstr "RaspAP Wifiポータル" msgid "Dashboard" msgstr "ダッシュボード" -msgid "Configure WiFi client" -msgstr "WiFiクライアントを設定" +msgid "WiFi client" +msgstr "WiFiクライアント" -msgid "Configure hotspot" -msgstr "ホットスポットを設定" +msgid "Hotspot" +msgstr "ホットスポット" -msgid "Configure networking" -msgstr "ネットワークを設定" +msgid "Memory Use" +msgstr "メモリ使用率" -msgid "Configure DHCP Server" -msgstr "DHCPサーバーを構成" +msgid "CPU Temp" +msgstr "CPU温度" -msgid "Configure OpenVPN" -msgstr "OpenVPNを設定" +msgid "Networking" +msgstr "ネットワーク" -msgid "Configure TOR proxy" -msgstr "TORプロキシを設定" +msgid "DHCP Server" +msgstr "DHCPサーバー" -msgid "Configure Auth" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TORプロキシ" + +msgid "Authentication" msgstr "認証を構成する" msgid "Change Theme" @@ -115,9 +114,7 @@ msgstr "パスフレーズ" msgid "Wifi settings updated successfully" msgstr "Wifi設定が正常に更新されました" -msgid "" -"Wifi settings updated but cannot restart (cannot execute 'wpa_cli " -"reconfigure')" +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" msgstr "Wifi設定は更新されましたが、再起動できません(「wpa_cli reconfigure」を実行できません)" msgid "Wifi settings failed to be updated" @@ -147,11 +144,8 @@ msgstr "隠す" msgid "Not configured" msgstr "設定されていません" -msgid "" -"Note: WEP access points appear as 'Open'. RaspAP does not " -"currently support connecting to WEP" -msgstr "" -"注: WEPアクセスポイントは「オープン」と表示されます。RaspAPは現在、WEPへの接続をサポートしていません" +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "注: WEPアクセスポイントは「オープン」と表示されます。RaspAPは現在、WEPへの接続をサポートしていません" #: includes/dashboard.php msgid "Interface Information" @@ -187,8 +181,8 @@ msgstr "転送されたパケット" msgid "Transferred Bytes" msgstr "転送されたバイト" -msgid "Wireless Information" -msgstr "ワイヤレスの情報" +msgid "Wireless Client" +msgstr "無線クライアント" msgid "Connected To" msgstr "接続" @@ -329,6 +323,33 @@ msgstr "Dnsmasqが実行されています" msgid "Dnsmasq is not running" msgstr "Dnsmasqが実行されていません" +msgid "Upstream DNS servers" +msgstr "アップストリームDNSサーバー" + +msgid "Only ever query DNS servers configured below" +msgstr "" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "" + +msgid "Add upstream DNS server" +msgstr "アップストリームDNSサーバーを追加" + +msgid "Format" +msgstr "" + +msgid "Choose a hosted server" +msgstr "" + +msgid "Log DHCP requests" +msgstr "" + +msgid "Log DNS queries" +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "基本" @@ -399,6 +420,9 @@ msgstr "ホットスポットを開始" msgid "Stop hotspot" msgstr "ホットスポットを停止" +msgid "Restart hotspot" +msgstr "ホットスポットを再起動" + msgid "Enable logging" msgstr "ロギングを有効にする" @@ -408,17 +432,17 @@ msgstr "ログファイル出力" msgid "WiFi client AP mode" msgstr "WiFiクライアントAPモード" +msgid "Bridged AP mode" +msgstr "" + msgid "Hide SSID in broadcast" msgstr "ブロードキャストでSSIDを非表示" msgid "Maximum number of clients" msgstr "クライアントの最大数" -msgid "" -"Configures the max_num_sta option of hostapd. The default and maximum is " -"2007. If empty or 0, the default applies." -msgstr "" -"hostapdのmax_num_staオプションを構成します。 デフォルトおよび最大値は2007です。空欄または0の場合、デフォルトが適用されます。" +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "hostapdのmax_num_staオプションを構成します。 デフォルトおよび最大値は2007です。空欄または0の場合、デフォルトが適用されます。" #: includes/networking.php msgid "Summary" @@ -642,6 +666,10 @@ msgstr "TORを実行しようとしています" msgid "Attempting to stop TOR" msgstr "TORを停止しようとしています" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "設定を保存" @@ -663,3 +691,46 @@ msgstr "上" msgid "down" msgstr "下" + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "広告ブロック" + +msgid "Start Ad Blocking" +msgstr "広告ブロックを開始する" + +msgid "Restart Ad Blocking" +msgstr "広告ブロックを再開する" + +msgid "Blocklist settings" +msgstr "" + +msgid "Enable blocklists" +msgstr "" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "今すぐ更新する" + +msgid "Statistics" +msgstr "統計" + +msgid "Information provided by adblock" +msgstr "" + diff --git a/locale/ko_KR/LC_MESSAGES/messages.mo b/locale/ko_KR/LC_MESSAGES/messages.mo index 5c0c8c12..72660d8c 100644 Binary files a/locale/ko_KR/LC_MESSAGES/messages.mo and b/locale/ko_KR/LC_MESSAGES/messages.mo differ diff --git a/locale/ko_KR/LC_MESSAGES/messages.po b/locale/ko_KR/LC_MESSAGES/messages.po index abffcd5e..5bf210ad 100644 --- a/locale/ko_KR/LC_MESSAGES/messages.po +++ b/locale/ko_KR/LC_MESSAGES/messages.po @@ -1,26 +1,21 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -# Translators: -# William Zimmerman , 2019 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-25 17:42+0000\n" -"Last-Translator: William Zimmerman , 2019\n" -"Language-Team: Korean (https://www.transifex.com/na-360/teams/104285/ko/)\n" +"PO-Revision-Date: 2022-01-05 11:43\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Korean\n" +"Language: ko_KR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: ko\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -35,26 +30,32 @@ msgstr "RaspAP WiFi 포탈" msgid "Dashboard" msgstr "대시보드 " -msgid "Configure WiFi client" -msgstr "WiFi 클라이언트 환경설정" +msgid "WiFi client" +msgstr "WiFi 클라이언트" -msgid "Configure hotspot" -msgstr "핫스팟 환경설정" +msgid "Hotspot" +msgstr "핫스팟" -msgid "Configure networking" -msgstr "네트워킹 환경설정" +msgid "Memory Use" +msgstr "메모리 사용량" -msgid "Configure DHCP Server" -msgstr "DHCP 서버 구성" +msgid "CPU Temp" +msgstr "CPU 온도" -msgid "Configure OpenVPN" +msgid "Networking" +msgstr "네트워킹" + +msgid "DHCP Server" +msgstr "DHCP 서버" + +msgid "OpenVPN" msgstr "OpenVPN 환경설정" -msgid "Configure TOR proxy" +msgid "TOR proxy" msgstr "TOR 프록시 구성" -msgid "Configure Auth" -msgstr "Auth 구성 " +msgid "Authentication" +msgstr "입증" msgid "Change Theme" msgstr "테마 변경 " @@ -101,7 +102,7 @@ msgid "Client settings" msgstr "클라이언트 설정 " msgid "SSID" -msgstr "SSID" +msgstr "네트워크 이름 (SSID)" msgid "Channel" msgstr "채널 " @@ -115,9 +116,7 @@ msgstr "암호 " msgid "Wifi settings updated successfully" msgstr "Wifi 설정이 성공적으로 업데이트되었습니다" -msgid "" -"Wifi settings updated but cannot restart (cannot execute 'wpa_cli " -"reconfigure')" +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" msgstr "Wifi 설정이 업데이트되었지만 재시작할 수 없습니다('wpa_cli reconfigure'를 실행할 수 없습니다)" msgid "Wifi settings failed to be updated" @@ -147,11 +146,32 @@ msgstr "숨기기 " msgid "Not configured" msgstr "환결설정 안됨" -msgid "" -"Note: WEP access points appear as 'Open'. RaspAP does not " -"currently support connecting to WEP" +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "주의: WEP 접근점은 'Open'으로 표시됩니다. RaspAP은 현재 WEP 연결을 지원하지 않습니다" + +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" msgstr "" -"주의: WEP 접근점은 'Open'으로 표시됩니다. RaspAP은 현재 WEP 연결을 지원하지 않습니다" #: includes/dashboard.php msgid "Interface Information" @@ -187,8 +207,8 @@ msgstr "전송된 패킷" msgid "Transferred Bytes" msgstr "전송된 바이트량" -msgid "Wireless Information" -msgstr "무선 정보" +msgid "Wireless Client" +msgstr "무선 클라이언트" msgid "Connected To" msgstr "연결" @@ -247,6 +267,60 @@ msgstr "wlan0 중지" msgid "Connected Devices" msgstr "연결된 디바이스 " +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "DHCP 서버 설정 " @@ -257,6 +331,12 @@ msgstr "클라이언트 목록 " msgid "Interface" msgstr "인터페이스 " +msgid "Enable DHCP for this interface" +msgstr "이 인터페이스에 대해 DHCP 활성화" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "RaspAP가 선택한 인터페이스에 IP 주소를 할당하도록하려면 이 옵션을 활성화합니다." + msgid "DNS Server" msgstr "DNS 서버" @@ -287,6 +367,9 @@ msgstr "만료 시간 " msgid "MAC Address" msgstr "MAC 주소" +msgid "Optional comment" +msgstr "" + msgid "Host name" msgstr "호스트명" @@ -329,6 +412,57 @@ msgstr "Dnsmasq가 실행 중입니다" msgid "Dnsmasq is not running" msgstr "Dnsmasq가 실행 중이 아닙니다 " +msgid "Upstream DNS servers" +msgstr "업스트림(Upstream) DNS 서버" + +msgid "Only ever query DNS servers configured below" +msgstr "아래에 구성된 DNS 서버 만 쿼리합니다." + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "" + +msgid "Add upstream DNS server" +msgstr "" + +msgid "Format" +msgstr "규격" + +msgid "Choose a hosted server" +msgstr "" + +msgid "Enable these options to log DHCP server activity." +msgstr "" + +msgid "Log DHCP requests" +msgstr "" + +msgid "Log DNS queries" +msgstr "" + +msgid "Restrict access" +msgstr "" + +msgid "Limit network access to static clients" +msgstr "" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "" + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "" + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "" + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "" + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "베이직" @@ -352,7 +486,7 @@ msgid "Encryption Type" msgstr "암호화 유형" msgid "PSK" -msgstr "PSK" +msgstr "PSK (암호키)" msgid "Advanced settings" msgstr "고급 설정 " @@ -399,6 +533,9 @@ msgstr "핫스팟 시작 " msgid "Stop hotspot" msgstr "핫스팟 중지" +msgid "Restart hotspot" +msgstr "핫스팟 재시작" + msgid "Enable logging" msgstr "로깅 사용하기" @@ -408,23 +545,52 @@ msgstr "로그파일 출력" msgid "WiFi client AP mode" msgstr "WiFi 클라이언트 AP 모드 " +msgid "Bridged AP mode" +msgstr "브릿지 AP 모드" + msgid "Hide SSID in broadcast" msgstr "방송 중에 SSID 숨기기 " msgid "Maximum number of clients" msgstr "클라이언트 최대 개수" -msgid "" -"Configures the max_num_sta option of hostapd. The default and maximum is " -"2007. If empty or 0, the default applies." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "" + +msgid "Disable disassoc_low_ack" +msgstr "" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "" + +msgid "Executing RaspAP service start" +msgstr "" + +msgid "Close" +msgstr "닫기" + +msgid "Enable this option to log hostapd activity." +msgstr "" + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +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 "" -"hostapd의 max_num_sta option을 구성합니다. 기본값 및 최대값은 2007입니다. 비었거나 0인 경우 기본값이 " -"적용됩니다." #: includes/networking.php msgid "Summary" msgstr "요약 " +msgid "Internet connection" +msgstr "" + msgid "Current settings" msgstr "현재 설정" @@ -452,12 +618,66 @@ msgstr "비활성화 " msgid "Static IP Options" msgstr "고정 IP 옵션" +msgid "Metric" +msgstr "" + msgid "Apply settings" msgstr "설정 적용" msgid "Information provided by /sys/class/net" msgstr "/sys/class/net이 제공한 정보 " +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + #: includes/system.php msgid "System Information" msgstr "시스템 정보" @@ -504,6 +724,12 @@ msgstr "지금 시스템을 재부팅합니다!" msgid "System Shutting Down Now!" msgstr "시스템이 지금 정지됩니다!" +msgid "Web server port" +msgstr "웹서버 포트" + +msgid "Web server bind address" +msgstr "웹서버 바인드 주소" + #: includes/themes.php msgid "Theme settings" msgstr "테마 설정" @@ -511,6 +737,9 @@ msgstr "테마 설정" msgid "Select a theme" msgstr "테마 선택 " +msgid "Color" +msgstr "색상" + #: includes/data_usage.php msgid "Data usage" msgstr "데이터 사용량 " @@ -609,6 +838,66 @@ msgstr "openvpn 시작 시도 중입니다 " msgid "Attempting to stop openvpn" msgstr "openvpn 중지 시도 중입니다 " +msgid "Configurations" +msgstr "환경설정" + +msgid "Currently available OpenVPN client configurations are displayed below." +msgstr "" + +msgid "Activating a configuraton will restart the openvpn-client service." +msgstr "" + +msgid "Delete OpenVPN client" +msgstr "" + +msgid "Delete client configuration? This cannot be undone." +msgstr "" + +msgid "Activate OpenVPN client" +msgstr "" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "" + +msgid "Activate" +msgstr "활성화" + +msgid "Cancel" +msgstr "취소" + +msgid "Enable this option to log openvpn activity." +msgstr "" + +msgid "Authentification Method" +msgstr "" + +msgid "Username and password" +msgstr "" + +msgid "Certificates" +msgstr "인증서" + +msgid "Enter username and password" +msgstr "사용자 이름과 암호를 입력하십시오" + +msgid "Certificates in the configuration file" +msgstr "인증서의 구성파일" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "" + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "" + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "" + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "" + +msgid "Configuration File" +msgstr "설정 파일" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR는 실행 중이 아닙니다 " @@ -643,6 +932,10 @@ msgstr "TOR 시작 시도 중입니다 " msgid "Attempting to stop TOR" msgstr "TOR 중지 시도 중입니다 " +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "설정 저장" @@ -664,3 +957,250 @@ msgstr "작동" msgid "down" msgstr "다운" + +msgid "adblock" +msgstr "광고차단(adblock)" + +msgid "Ad Blocking" +msgstr "광고(Ad) 차단중" + +msgid "Start Ad Blocking" +msgstr "광고(Ad)차단 시작" + +msgid "Restart Ad Blocking" +msgstr "광고(Ad)차단 재시작" + +msgid "Blocklist settings" +msgstr "차단리스트 설정" + +msgid "Enable blocklists" +msgstr "차단리스트 활성화" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "지금 업데이트 시작" + +msgid "Statistics" +msgstr "통계" + +msgid "Information provided by adblock" +msgstr "" + +msgid "Enable custom blocklist" +msgstr "" + +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 "" + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "" + +msgid "Custom blocklist not defined" +msgstr "" + +msgid "Invalid custom IP address found on line " +msgstr "" + +msgid "Invalid custom host found on line " +msgstr "" + +msgid "Tunnel settings" +msgstr "" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "활성화된 서버" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "로컬 공개키(public Key)" + +msgid "Local Port" +msgstr "로컬 포트" + +msgid "IP Address" +msgstr "IP 주소" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "피어" + +msgid "Enable peer" +msgstr "활성화된 피어" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "" + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "" + +msgid "Peer public key" +msgstr "피어 공개키(Public Key)" + +msgid "Endpoint address" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "Persistent keepalive" +msgstr "" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "" + +msgid "WireGuard debug log updated" +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "" + +msgid "or download the client.conf file to your device." +msgstr "" + +msgid "Download" +msgstr "다운로드" + +msgid "Start WireGuard" +msgstr "WireGuard 시작" + +msgid "Stop WireGuard" +msgstr "WireGuard 정지" + +msgid "Information provided by wireguard" +msgstr "" + +msgid "Attempting to start WireGuard" +msgstr "" + +msgid "Attempting to stop WireGuard" +msgstr "" + +msgid "WireGuard configuration updated successfully" +msgstr "" + +msgid "WireGuard configuration failed to be updated" +msgstr "" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + diff --git a/locale/nl_NL/LC_MESSAGES/messages.mo b/locale/nl_NL/LC_MESSAGES/messages.mo index eb481353..265bcf1d 100644 Binary files a/locale/nl_NL/LC_MESSAGES/messages.mo and b/locale/nl_NL/LC_MESSAGES/messages.mo differ diff --git a/locale/nl_NL/LC_MESSAGES/messages.po b/locale/nl_NL/LC_MESSAGES/messages.po index 8a1cc0b8..4b21a39e 100644 --- a/locale/nl_NL/LC_MESSAGES/messages.po +++ b/locale/nl_NL/LC_MESSAGES/messages.po @@ -1,22 +1,19 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Tom\n" -"Language-Team: \n" -"Language: nl\n" +"PO-Revision-Date: 2020-04-14 08:51\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Dutch\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: nl\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -31,26 +28,32 @@ msgstr "RaspAP Wi-fi portaal" msgid "Dashboard" msgstr "Dashboard" -msgid "Configure WiFi client" -msgstr "Configureer WiFi apparaat" +msgid "WiFi client" +msgstr "WiFi apparaat" -msgid "Configure hotspot" -msgstr "Configureer hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Configureer netwerk" +msgid "Memory Use" +msgstr "" -msgid "Configure DHCP Server" -msgstr "Configureer DHCP server" +msgid "CPU Temp" +msgstr "" -msgid "Configure OpenVPN" -msgstr "Configureer OpenVPN" +msgid "Networking" +msgstr "Netwerk" -msgid "Configure TOR proxy" -msgstr "Configureer TOR proxy" +msgid "DHCP Server" +msgstr "DHCP server" -msgid "Configure Auth" -msgstr "Configureer autenticatie" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR proxy" + +msgid "Authentication" +msgstr "Autenticatie" msgid "Change Theme" msgstr "Verander thema" @@ -178,8 +181,8 @@ msgstr "Verzonden pakketen" msgid "Transferred Bytes" msgstr "Verzonden Bytes" -msgid "Wireless Information" -msgstr "Draadloze informatie" +msgid "Wireless Client" +msgstr "" msgid "Connected To" msgstr "Verbinden met" @@ -224,7 +227,7 @@ msgid "Interface is up" msgstr "Interface is up" msgid "Interface is down" -msgstr "Interface is down" +msgstr "" msgid "Interface already down" msgstr "Interface reeds down" @@ -248,6 +251,9 @@ msgstr "Clienten lijst" msgid "Interface" msgstr "Interface" +msgid "DNS Server" +msgstr "DNS server" + msgid "Starting IP Address" msgstr "Beginnend ip adres" @@ -279,16 +285,16 @@ msgid "Host name" msgstr "Hostnaam" msgid "Client ID" -msgstr "Client ID" +msgstr "Klant ID" msgid "Information provided by Dnsmasq" msgstr "Informatie gegeven door Dnsmasq" msgid "Stop dnsmasq" -msgstr "Stop dnsmasq" +msgstr "" msgid "Start dnsmasq" -msgstr "Start dnsmasq" +msgstr "" msgid "Dnsmasq configuration updated successfully" msgstr "Dnsmasq configuratie succesvol geupdate" @@ -317,6 +323,33 @@ msgstr "Dnsmasq draait" msgid "Dnsmasq is not running" msgstr "Dnsmasq is gestopt" +msgid "Upstream DNS servers" +msgstr "" + +msgid "Only ever query DNS servers configured below" +msgstr "" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "" + +msgid "Add upstream DNS server" +msgstr "" + +msgid "Format" +msgstr "Formaat" + +msgid "Choose a hosted server" +msgstr "" + +msgid "Log DHCP requests" +msgstr "" + +msgid "Log DNS queries" +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "Basisch" @@ -382,11 +415,14 @@ msgid "Unable to save wifi hotspot settings" msgstr "Mislukt om Wi-FI Hotspot instellen op te slaan" msgid "Start hotspot" -msgstr "Start hotspot" +msgstr "" msgid "Stop hotspot" msgstr "Stop hotstop" +msgid "Restart hotspot" +msgstr "Restart hotstop" + msgid "Enable logging" msgstr "Logboek inschakelen" @@ -396,6 +432,9 @@ msgstr "Logboek uitvoer" msgid "WiFi client AP mode" msgstr "WiFi-client AP-modus" +msgid "Bridged AP mode" +msgstr "" + msgid "Hide SSID in broadcast" msgstr "Verberg SSID in uitzending" @@ -415,9 +454,6 @@ msgstr "Huidige instellingen" msgid "Default Gateway" msgstr "Standaard Gateway" -msgid "DNS Server" -msgstr "DNS Server" - msgid "Alternate DNS Server" msgstr "Alternatieve DNS-server" @@ -462,7 +498,7 @@ msgid "Language setting saved" msgstr "Taalinstellingen opgeslagen" msgid "Console" -msgstr "Console" +msgstr "" msgid "Hostname" msgstr "Hostnaam" @@ -471,7 +507,7 @@ msgid "Pi Revision" msgstr "Pi-Revisie" msgid "Uptime" -msgstr "Uptime" +msgstr "" msgid "Memory Used" msgstr "Geheugen gebruik" @@ -524,7 +560,7 @@ msgid "Monthly" msgstr "Per maand" msgid "interface" -msgstr "interface" +msgstr "" msgid "date" msgstr "datum" @@ -604,7 +640,7 @@ msgid "TOR is running" msgstr "TOR draait" msgid "Relay" -msgstr "Relay" +msgstr "" msgid "Relay settings" msgstr "Relay-instellingen" @@ -630,6 +666,10 @@ msgstr "We proberen TOR op te starten" msgid "Attempting to stop TOR" msgstr "We proberen TOR te stoppen" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "Instellingen opslaan" @@ -651,3 +691,46 @@ msgstr "omhoog" msgid "down" msgstr "omlaag" + +msgid "adblock" +msgstr "" + +msgid "Ad Blocking" +msgstr "" + +msgid "Start Ad Blocking" +msgstr "" + +msgid "Restart Ad Blocking" +msgstr "" + +msgid "Blocklist settings" +msgstr "" + +msgid "Enable blocklists" +msgstr "" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Information provided by adblock" +msgstr "Informatie verstrekt door adblock" + diff --git a/locale/pl_PL/LC_MESSAGES/messages.mo b/locale/pl_PL/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..67fc5d22 Binary files /dev/null and b/locale/pl_PL/LC_MESSAGES/messages.mo differ diff --git a/locale/pl_PL/LC_MESSAGES/messages.po b/locale/pl_PL/LC_MESSAGES/messages.po new file mode 100644 index 00000000..e4fbcb75 --- /dev/null +++ b/locale/pl_PL/LC_MESSAGES/messages.po @@ -0,0 +1,780 @@ +msgid "" +msgstr "" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" +"POT-Creation-Date: 2017-10-19 08:56+0000\n" +"PO-Revision-Date: 2020-10-01 09:45\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Polish\n" +"Language: pl_PL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" + +#: index.php +msgid "RaspAP Wifi Configuration Portal" +msgstr "RaspAP Wifi Portal Konfiguracyjny" + +msgid "Toggle navigation" +msgstr "Przełącz tryb nawigacji" + +msgid "RaspAP Wifi Portal" +msgstr "RaspAP Portal Wifi" + +msgid "Dashboard" +msgstr "Pulpit nawigacyjny" + +msgid "WiFi client" +msgstr "Klient WiFi" + +msgid "Hotspot" +msgstr "Punkt dostępu" + +msgid "Memory Use" +msgstr "Użycie pamięci" + +msgid "CPU Temp" +msgstr "Temp CPU" + +msgid "Networking" +msgstr "Sieci" + +msgid "DHCP Server" +msgstr "Serwer DHCP" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Uwierzytelnianie" + +msgid "Change Theme" +msgstr "Zmień motyw" + +msgid "System" +msgstr "System" + +msgid "About RaspAP" +msgstr "O RaspAP" + +#: includes/admin.php +msgid "Authentication settings" +msgstr "Ustawienia uwierzytelniania" + +msgid "New passwords do not match" +msgstr "Nowe hasła nie pasują do siebie" + +msgid "Username must not be empty" +msgstr "Nazwa użytkownika nie może być pusta" + +msgid "Admin password updated" +msgstr "Hasło administratora zostało zaktualizowane" + +msgid "Failed to update admin password" +msgstr "Nie można zaktualizować hasła administratora" + +msgid "Old password does not match" +msgstr "Stare hasło jest niepoprawne" + +msgid "Username" +msgstr "Nazwa użytkownika" + +msgid "Old password" +msgstr "Stare hasło" + +msgid "New password" +msgstr "Nowe hasło" + +msgid "Repeat new password" +msgstr "Powtórz nowe hasło" + +#: includes/configure_client.php +msgid "Client settings" +msgstr "Ustawienia klienta" + +msgid "SSID" +msgstr "SSID" + +msgid "Channel" +msgstr "Kanał" + +msgid "Security" +msgstr "Bezpieczeństwo" + +msgid "Passphrase" +msgstr "Hasło" + +msgid "Wifi settings updated successfully" +msgstr "Ustawienia WiFi zostały pomyślnie zaktualizowane" + +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Ustawienia Wifi zostały zaktualizowane, ale restart nie przebiegł pomyślnie (nie można wykonać 'wpa_cli reconfigure')" + +msgid "Wifi settings failed to be updated" +msgstr "Ustawienia Wifi nie mogły zostać zaktualizowane" + +msgid "Failed to update wifi settings" +msgstr "Nie udało się zaktualizować ustawień wifi" + +msgid "Rescan" +msgstr "Ponowne skanowanie" + +msgid "Update" +msgstr "Aktualizacja" + +msgid "Add" +msgstr "Dodaj" + +msgid "Delete" +msgstr "Usuń" + +msgid "Show" +msgstr "Pokaż" + +msgid "Hide" +msgstr "Ukryj" + +msgid "Not configured" +msgstr "Nieskonfigurowany" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "Notka: Punkt dostępu WEP wydaje się być 'Otwarty'. RaspAP aktualnie nie wspiera podłączania do WEP" + +#: includes/dashboard.php +msgid "Interface Information" +msgstr "Informacje na temat interfejsu" + +msgid "Interface Name" +msgstr "Nazwa interfejsu" + +msgid "IPv4 Address" +msgstr "Adres IPv4" + +msgid "IPv6 Address" +msgstr "Adres IPv6" + +msgid "Subnet Mask" +msgstr "Adres podsieci" + +msgid "Mac Address" +msgstr "Adres Mac" + +msgid "Interface Statistics" +msgstr "Statystyki Interfejsu" + +msgid "Received Packets" +msgstr "Otrzymane Pakiety" + +msgid "Received Bytes" +msgstr "Otrzymane Bajty" + +msgid "Transferred Packets" +msgstr "Przesłane Pakiety" + +msgid "Transferred Bytes" +msgstr "Przesłane Bajty" + +msgid "Wireless Client" +msgstr "Klient sieci bezprzewodowej" + +msgid "Connected To" +msgstr "Podłączony do" + +msgid "AP Mac Address" +msgstr "AP Adres Mac" + +msgid "Bitrate" +msgstr "Szybkość transmisji" + +msgid "Signal Level" +msgstr "Poziom sygnału" + +msgid "Transmit Power" +msgstr "Siła sygnału" + +msgid "Frequency" +msgstr "Częstotliwość" + +msgid "Link Quality" +msgstr "Jakość połączenia" + +msgid "Information provided by ip and iw and from system" +msgstr "Informacje dostarczone przez IP, IW oraz z systemu" + +msgid "No MAC Address Found" +msgstr "MAC Address nie został odnaleziony" + +msgid "No IP Address Found" +msgstr "Adres IP nie został odnaleziony" + +msgid "No Subnet Mask Found" +msgstr "Maska podsieci nie została odnaleziona" + +msgid "No Data" +msgstr "Brak danych" + +msgid "Not connected" +msgstr "Nie podłączony" + +msgid "Interface is up" +msgstr "Interfejs jest włączony" + +msgid "Interface is down" +msgstr "Interfejs jest wyłączony" + +msgid "Interface already down" +msgstr "Interfejs już jest wyłączony" + +msgid "Start wlan0" +msgstr "Uruchom wlan0" + +msgid "Stop wlan0" +msgstr "Zatrzymaj wlan0" + +msgid "Connected Devices" +msgstr "Podłączone urządzenia" + +#: includes/dhcp.php +msgid "DHCP server settings" +msgstr "Ustawienia serwera DHCP" + +msgid "Client list" +msgstr "Lista klientów" + +msgid "Interface" +msgstr "Interfejs" + +msgid "DNS Server" +msgstr "Serwer DNS" + +msgid "Starting IP Address" +msgstr "Startowanie adresu IP" + +msgid "Ending IP Address" +msgstr "Kończenie adresu IP" + +msgid "Static Leases" +msgstr "Leasing Statyczny" + +msgid "Add static DHCP lease" +msgstr "Dodaj statyczną dzierżawę DHCP" + +msgid "Lease Time" +msgstr "Czas wynajęcia (Lease Time)" + +msgid "Interval" +msgstr "Interwał" + +msgid "Active DHCP leases" +msgstr "Aktywne wynajęcia DHCP" + +msgid "Expire time" +msgstr "Czas wygaśnięcia" + +msgid "MAC Address" +msgstr "Adres MAC" + +msgid "Host name" +msgstr "Nazwa gospodarza" + +msgid "Client ID" +msgstr "ID Klienta" + +msgid "Information provided by Dnsmasq" +msgstr "Informacje dostarczone przez Dnsmasq" + +msgid "Stop dnsmasq" +msgstr "Zatrzymaj dnsmasq" + +msgid "Start dnsmasq" +msgstr "Uruchom dnsmasq" + +msgid "Dnsmasq configuration updated successfully" +msgstr "Konfiguracja Dnsmasq zaktualizowana pomyślnie" + +msgid "dnsmasq already running" +msgstr "dnsmasq jest już odpalony" + +msgid "Successfully started dnsmasq" +msgstr "Pomyślnie wystartowano dnsmasq" + +msgid "Failed to start dnsmasq" +msgstr "Nie można wystartować dnsmasq" + +msgid "Successfully stopped dnsmasq" +msgstr "Pomyślnie zatrzymano dnsmasq" + +msgid "Failed to stop dnsmasq" +msgstr "Nie udało się zatrzymać dnsmasq" + +msgid "dnsmasq already stopped" +msgstr "dnsmasq już jest zatrzymany" + +msgid "Dnsmasq is running" +msgstr "Dnsmasq jest odpalony" + +msgid "Dnsmasq is not running" +msgstr "Dnsmasq nie jest odpalony" + +msgid "Upstream DNS servers" +msgstr "Niestandardowe serwery DNS" + +msgid "Only ever query DNS servers configured below" +msgstr "Tylko serwery DNS skonfigurowane poniżej" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Włącz tę opcję, jeśli chcesz aby, RaspAP wysyłał zapytania DNS wyłącznie do serwerów wymienionych poniżej. Domyślnie RaspAP używa również serwerów DNS otrzymanych z DHCP." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Ta opcja dodaje no-resolv do konfiguracji dnsmasq." + +msgid "Add upstream DNS server" +msgstr "Dodaj niestandardowy serwer DNS" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Wybierz serwer hostujący" + +msgid "Log DHCP requests" +msgstr "Logowanie zapytań DHCP" + +msgid "Log DNS queries" +msgstr "Logowanie zapytań DNS" + +#: includes/hostapd.php +msgid "Basic" +msgstr "Podstawowe" + +msgid "Advanced" +msgstr "Zaawansowane" + +msgid "Basic settings" +msgstr "Podstawowe ustawienia" + +msgid "Wireless Mode" +msgstr "Tryb Bezprzewodowy" + +msgid "Security settings" +msgstr "Ustawienia bezpieczeństwa" + +msgid "Security type" +msgstr "Tyb zabezpieczeń" + +msgid "Encryption Type" +msgstr "Typ szyfrowania" + +msgid "PSK" +msgstr "PSK" + +msgid "Advanced settings" +msgstr "Zaawansowane ustawienia" + +msgid "Country Code" +msgstr "Kod kraju" + +msgid "Information provided by hostapd" +msgstr "Informacje dostarczone przez hostapd" + +msgid "Attempting to start hotspot" +msgstr "Próba wystartowania punktu dostępowego hotspot" + +msgid "Attempting to stop hotspot" +msgstr "Próba zatrzymania punktu dostępowego hotspot" + +msgid "HostAPD is not running" +msgstr "HostAPD nie jest odpalony" + +msgid "HostAPD is running" +msgstr "HostAPD jest już odpalony" + +msgid "SSID must be between 1 and 32 characters" +msgstr "SSID musi zawierać między 1 a 32 znaków" + +msgid "WPA passphrase must be between 8 and 63 characters" +msgstr "Hasło WPA musi zawierać między 8 a 63 znaków" + +msgid "Unknown interface" +msgstr "Nieznany interfejs" + +msgid "Country code must be blank or two characters" +msgstr "Kod kraju musi być pusty lub zawierać dwa znaki" + +msgid "Wifi Hotspot settings saved" +msgstr "Ustawienia Wifi Hotspot zostały zapisane" + +msgid "Unable to save wifi hotspot settings" +msgstr "Nie można zapisać ustawień wifi hotspot" + +msgid "Start hotspot" +msgstr "Odpal hotspot" + +msgid "Stop hotspot" +msgstr "Zatrzymaj hotspot" + +msgid "Restart hotspot" +msgstr "Uruchom ponownie punkt dostępu" + +msgid "Enable logging" +msgstr "Włącz logowanie" + +msgid "Logfile output" +msgstr "Plik wyjściowy logów" + +msgid "WiFi client AP mode" +msgstr "Tryb AP klienta WiFi" + +msgid "Bridged AP mode" +msgstr "Tryb pomostowania AP" + +msgid "Hide SSID in broadcast" +msgstr "Ukryj SSID w transmisji typu broadcast" + +msgid "Maximum number of clients" +msgstr "Maksymalna liczba klientów" + +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Konfiguruje opcję max_num_sta w hostapd. Domyślna i największa możliwa wartość to 2007. Jeśli pole jest puste lub wynosi 0, używana jest domyślna wartość." + +msgid "Beacon interval" +msgstr "Częstotliwość znacznika" + +msgid "Disable disassoc_low_ack" +msgstr "Wyłącz disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Nie odłączaj stacji na podstawie nadmiernych awarii transmisji." + +#: includes/networking.php +msgid "Summary" +msgstr "Podsumowanie" + +msgid "Internet connection" +msgstr "Połączenie internetowe" + +msgid "Current settings" +msgstr "Aktualne ustawienia" + +msgid "Default Gateway" +msgstr "Domyślna brama" + +msgid "Alternate DNS Server" +msgstr "Alternatywny serwer DNS" + +msgid "Adapter IP Address Settings" +msgstr "Ustawienia adresu IP adaptera" + +msgid "Enable Fallback to Static Option" +msgstr "Ustaw opcję statyczną jako wyjście awaryjne" + +msgid "Static IP" +msgstr "Statyczne IP" + +msgid "Enabled" +msgstr "Włączony" + +msgid "Disabled" +msgstr "Wyłączony" + +msgid "Static IP Options" +msgstr "Opcje statycznego IP" + +msgid "Apply settings" +msgstr "Zapisz ustawienia" + +msgid "Information provided by /sys/class/net" +msgstr "Informacje dostarczone przez /sys/class/net" + +#: includes/system.php +msgid "System Information" +msgstr "Informacje systemowe" + +msgid "Language" +msgstr "Język" + +msgid "Language settings" +msgstr "Ustawienia języka" + +msgid "Select a language" +msgstr "Wybierz język" + +msgid "Language setting saved" +msgstr "Ustawienia języka zapisane" + +msgid "Console" +msgstr "Konsola" + +msgid "Hostname" +msgstr "Nazwa gospodarza" + +msgid "Pi Revision" +msgstr "wersja PI" + +msgid "Uptime" +msgstr "Czas działania" + +msgid "Memory Used" +msgstr "Użyta pamięć" + +msgid "CPU Load" +msgstr "Obciążenie CPU" + +msgid "Reboot" +msgstr "Restart" + +msgid "Shutdown" +msgstr "Wyłącz" + +msgid "System Rebooting Now!" +msgstr "System jest uruchamiany ponownie!" + +msgid "System Shutting Down Now!" +msgstr "System jest wyłączany!" + +msgid "Web server port" +msgstr "Port serwera sieci Web" + +msgid "Web server bind address" +msgstr "Adres powiązania serwera WWW" + +#: includes/themes.php +msgid "Theme settings" +msgstr "Ustawienia motywu" + +msgid "Select a theme" +msgstr "Wybierz motyw" + +msgid "Color" +msgstr "Kolor" + +#: includes/data_usage.php +msgid "Data usage" +msgstr "Użycie danych" + +msgid "Data usage monitoring" +msgstr "Monitorowanie zużycia danych" + +msgid "Hourly traffic amount" +msgstr "Godzinowy przepływ danych" + +msgid "Daily traffic amount" +msgstr "Dzienny przepływ danych" + +msgid "Monthly traffic amount" +msgstr "Miesięczny przepływ danych" + +msgid "Hourly" +msgstr "Godzinowo" + +msgid "Daily" +msgstr "Dziennie" + +msgid "Monthly" +msgstr "Miesięcznie" + +msgid "interface" +msgstr "interfejs" + +msgid "date" +msgstr "data" + +msgid "Send MB" +msgstr "Wysłane MB" + +msgid "Receive MB" +msgstr "Otrzymane MB" + +msgid "Information provided by vnstat" +msgstr "Informacje dostarczone przez vnstat" + +msgid "Loading {0} bandwidth chart" +msgstr "Wczytywanie {0} wykresu bandwidth" + +msgid "Showing {0} to {1} of {2} entries" +msgstr "Pokazywanie wpisów od {0} do {1} z {2}" + +#: includes/openvpn.php +msgid "OpenVPN is not running" +msgstr "OpenVPN nie jest uruchomiony" + +msgid "OpenVPN is running" +msgstr "OpenVPN jest uruchomiony" + +msgid "Server settings" +msgstr "Ustawienia serwera" + +msgid "Select OpenVPN configuration file (.ovpn)" +msgstr "Wybierz plik konfiguracyjny OpenVPN (.ovpn)" + +msgid "Client Log" +msgstr "Logowanie klienta" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protokół" + +msgid "Root CA certificate" +msgstr "Główny certyfikat CA" + +msgid "Server certificate" +msgstr "Certyfikat serwera" + +msgid "Diffie Hellman parameters" +msgstr "Parametry Diffie Hellman" + +msgid "KeepAlive" +msgstr "KeepAlive" + +msgid "Server log" +msgstr "Logowanie serwera" + +msgid "Start OpenVPN" +msgstr "Uruchom OpenVPN" + +msgid "Stop OpenVPN" +msgstr "Zatrzymaj OpenVPN" + +msgid "Information provided by openvpn" +msgstr "Informacje dostarczone przez openvpn" + +msgid "Attempting to start openvpn" +msgstr "Próba wystartowania OpenVPN" + +msgid "Attempting to stop openvpn" +msgstr "Próba zatrzymania OpenVPN" + +#: includes/torproxy.php +msgid "TOR is not running" +msgstr "TOR nie jest uruchomiony" + +msgid "TOR is running" +msgstr "TOR jest uruchomiony" + +msgid "Relay" +msgstr "Przekaźnik" + +msgid "Relay settings" +msgstr "Ustawienia przekaźnika" + +msgid "Nickname" +msgstr "Nazwa użytkownika" + +msgid "Address" +msgstr "Adres" + +msgid "Start TOR" +msgstr "Uruchom TOR" + +msgid "Stop TOR" +msgstr "Zatrzymaj TOR" + +msgid "Information provided by tor" +msgstr "Informacje dostarczone przez tor" + +msgid "Attempting to start TOR" +msgstr "Próba uruchomienia TOR" + +msgid "Attempting to stop TOR" +msgstr "Próba zatrzymania TOR" + +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Tryb pomostu AP jest włączony. Aby poznać nazwę oraz IP gospodarza, odwiedź stronę administracyjną routera." + +#: common form controls +msgid "Save settings" +msgstr "Zapisz ustawienia" + +msgid "Refresh" +msgstr "Odśwież" + +msgid "running" +msgstr "uruchomiony" + +msgid "stopped" +msgstr "zatrzymany" + +msgid "Remove" +msgstr "Usuń" + +msgid "up" +msgstr "aktywny" + +msgid "down" +msgstr "nieaktywny" + +msgid "adblock" +msgstr "Adblock" + +msgid "Ad Blocking" +msgstr "Blokowanie reklam" + +msgid "Start Ad Blocking" +msgstr "Rozpocznij blokowanie reklam" + +msgid "Restart Ad Blocking" +msgstr "Uruchom ponownie blokowanie reklam" + +msgid "Blocklist settings" +msgstr "Ustawienia listy zablokowanych" + +msgid "Enable blocklists" +msgstr "Włącz listę blokowanych" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Włącz tę opcję, jeśli chcesz, aby RaspAP blokował żądania DNS dla reklam, śledzenia i innych wirtualnych śmieci. Listy blokowe są zbierane z wielu aktywnie utrzymywanych źródeł oraz automatycznie aktualizowane, czyszczenia, zoptymalizowane i moderowane codziennie." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Ta opcja dodaje conf-file i addn-hosts do konfiguracji dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Wybierz dostawcę listy zablokowanych" + +msgid "Hostnames blocklist last updated" +msgstr "Ostatnia aktualizacja listy zablokowanych nazw gospodarzy" + +msgid "Domains blocklist last updated" +msgstr "Ostatnia aktualizacja list zablokowanych domen" + +msgid "Update now" +msgstr "Zaktualizuj teraz" + +msgid "Statistics" +msgstr "Statystyki" + +msgid "Information provided by adblock" +msgstr "Informacje dostarczone przez AdBlock" + +msgid "Enable custom blocklist" +msgstr "Włącz własną listę zablokowanych" + +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 "Zdefiniuj własne adresy gospodarzów do zablokowania poprzez wprowadzenie adresu IPv4 lub IPv6 wraz z nazwą domeny po spacji lub tabulatorze." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "IPv4 przykład: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Ta opcja dodaje dyrektywę addn-hosts do konfiguracji dnsmasq." + +msgid "Custom blocklist not defined" +msgstr "Własna lista zablokowanych nie została zdefiniowana" + +msgid "Invalid custom IP address found on line " +msgstr "Niepoprawny niestandardowy adres IP znaleziony w linii " + +msgid "Invalid custom host found on line " +msgstr "Niepoprawny niestandardowy adres gospodarza znaleziony w linii " + diff --git a/locale/pocompile.sh b/locale/pocompile.sh index 50795c28..f727cac2 100755 --- a/locale/pocompile.sh +++ b/locale/pocompile.sh @@ -2,11 +2,11 @@ # Compiles portable object (.po) files into machine object (.mo) files # Requires GNU gettext +# Install with: apt-get install gettext arrLocales=($PWD/*/); # compiles message catalogs to binary format -# requires GNU gettext for f in "${arrLocales[@]}"; do echo -n `msgfmt -o ${f}LC_MESSAGES/messages.mo ${f}LC_MESSAGES/messages.po` echo "Compiled ${f}LC_MESSAGES/messages.po" diff --git a/locale/pt_BR/LC_MESSAGES/messages.mo b/locale/pt_BR/LC_MESSAGES/messages.mo index 0bf5b812..48ed7d1a 100644 Binary files a/locale/pt_BR/LC_MESSAGES/messages.mo and b/locale/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/messages.po b/locale/pt_BR/LC_MESSAGES/messages.po index bacb0a4a..b991711c 100644 --- a/locale/pt_BR/LC_MESSAGES/messages.po +++ b/locale/pt_BR/LC_MESSAGES/messages.po @@ -1,22 +1,21 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-27 15:30-0300\n" -"Last-Translator: Matheus Dal Mago \n" -"Language-Team: \n" +"PO-Revision-Date: 2022-01-05 11:43\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -31,26 +30,32 @@ msgstr "Portal WiFi RaspAP" msgid "Dashboard" msgstr "Painel" -msgid "Configure WiFi client" -msgstr "Configurar Cliente WiFi" +msgid "WiFi client" +msgstr "Cliente WiFi" -msgid "Configure hotspot" -msgstr "Configurar ponto de acesso" +msgid "Hotspot" +msgstr "Ponto de acesso" -msgid "Configure networking" -msgstr "Configurar networking" +msgid "Memory Use" +msgstr "Uso da memória" -msgid "Configure DHCP Server" -msgstr "Configurar Servidor DHCP" +msgid "CPU Temp" +msgstr "Temperatura do CPU" -msgid "Configure OpenVPN" -msgstr "Configurar OpenVPN" +msgid "Networking" +msgstr "Rede" -msgid "Configure TOR proxy" -msgstr "Configurar proxy TOR" +msgid "DHCP Server" +msgstr "Servidor DHCP" -msgid "Configure Auth" -msgstr "Configurar Autenticação" +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Autenticação" msgid "Change Theme" msgstr "Alterar Tema" @@ -141,9 +146,33 @@ msgstr "Esconder" msgid "Not configured" msgstr "Não configurado" +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Nota: pontos de acesso WEP aparecem como 'Open'. Atualmente, o RaspAP não suporta conexão com WEP" +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" +msgstr "" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informação da Interface" @@ -178,8 +207,8 @@ msgstr "Pacotes Transferidos" msgid "Transferred Bytes" msgstr "Bytes Transferidos" -msgid "Wireless Information" -msgstr "Informação de Wireless" +msgid "Wireless Client" +msgstr "Cliente WiFi" msgid "Connected To" msgstr "Conectado em" @@ -238,6 +267,60 @@ msgstr "Parar wlan0" msgid "Connected Devices" msgstr "Dispositivos Conectados" +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Configurações do servidor DHCP" @@ -246,7 +329,16 @@ msgid "Client list" msgstr "Lista de Clientes" msgid "Interface" -msgstr "Interface" +msgstr "Inteface" + +msgid "Enable DHCP for this interface" +msgstr "" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "" + +msgid "DNS Server" +msgstr "Servidor DNS" msgid "Starting IP Address" msgstr "Endereço IP Inicial" @@ -275,6 +367,9 @@ msgstr "Tempo para expirar" msgid "MAC Address" msgstr "Endereço MAC" +msgid "Optional comment" +msgstr "" + msgid "Host name" msgstr "Nome de host" @@ -317,6 +412,57 @@ msgstr "Dnsmasq executando" msgid "Dnsmasq is not running" msgstr "Dnsmasq não executando" +msgid "Upstream DNS servers" +msgstr "" + +msgid "Only ever query DNS servers configured below" +msgstr "" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "" + +msgid "Add upstream DNS server" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Choose a hosted server" +msgstr "" + +msgid "Enable these options to log DHCP server activity." +msgstr "" + +msgid "Log DHCP requests" +msgstr "" + +msgid "Log DNS queries" +msgstr "" + +msgid "Restrict access" +msgstr "" + +msgid "Limit network access to static clients" +msgstr "" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "" + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "" + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "" + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "" + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "Básico" @@ -340,7 +486,7 @@ msgid "Encryption Type" msgstr "Tipo de Criptografia" msgid "PSK" -msgstr "PSK" +msgstr "" msgid "Advanced settings" msgstr "Configurações avançadas" @@ -387,6 +533,9 @@ msgstr "Iniciar ponto de acesso" msgid "Stop hotspot" msgstr "Parar ponto de acesso" +msgid "Restart hotspot" +msgstr "Reinicie ponto de acesso" + msgid "Enable logging" msgstr "Habilitar Logs" @@ -396,28 +545,58 @@ msgstr "Arquivo de Log" msgid "WiFi client AP mode" msgstr "WiFi modo cliente AP" +msgid "Bridged AP mode" +msgstr "" + msgid "Hide SSID in broadcast" msgstr "Esconder SSID em transmissão" msgid "Maximum number of clients" msgstr "Número máximo de clientes" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configura a opção max_num_sta do hostapd. O valor padrão e máximo é 2007. Se deixado vazio ou 0, o valor padrão é aplicado." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "" + +msgid "Disable disassoc_low_ack" +msgstr "" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "" + +msgid "Executing RaspAP service start" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Enable this option to log hostapd activity." +msgstr "" + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +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 "" #: includes/networking.php msgid "Summary" msgstr "Sumário" +msgid "Internet connection" +msgstr "" + msgid "Current settings" msgstr "Configurações atuais" msgid "Default Gateway" msgstr "Gateway Padrão" -msgid "DNS Server" -msgstr "Servidor DNS" - msgid "Alternate DNS Server" msgstr "Servidor DNS Alternativo" @@ -439,12 +618,66 @@ msgstr "Desabilitado" msgid "Static IP Options" msgstr "Opções de IP Estático" +msgid "Metric" +msgstr "" + msgid "Apply settings" msgstr "Aplicar Configurações" msgid "Information provided by /sys/class/net" msgstr "Informação Provida por /sys/class/net" +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + #: includes/system.php msgid "System Information" msgstr "Informação do sistema" @@ -462,10 +695,10 @@ msgid "Language setting saved" msgstr "Configuração de idioma salva" msgid "Console" -msgstr "Console" +msgstr "" msgid "Hostname" -msgstr "Hostname" +msgstr "" msgid "Pi Revision" msgstr "Revisão do Pi" @@ -491,6 +724,12 @@ msgstr "Sistema Reiniciando Agora!" msgid "System Shutting Down Now!" msgstr "Sistema Desligando Agora!" +msgid "Web server port" +msgstr "" + +msgid "Web server bind address" +msgstr "" + #: includes/themes.php msgid "Theme settings" msgstr "Configurações de tema" @@ -498,6 +737,9 @@ msgstr "Configurações de tema" msgid "Select a theme" msgstr "Selecione um tema" +msgid "Color" +msgstr "" + #: includes/data_usage.php msgid "Data usage" msgstr "Uso de dados" @@ -524,7 +766,7 @@ msgid "Monthly" msgstr "Por mês" msgid "interface" -msgstr "interface" +msgstr "" msgid "date" msgstr "data" @@ -576,7 +818,7 @@ msgid "Diffie Hellman parameters" msgstr "Parâmetros Diffie Hellman" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "" msgid "Server log" msgstr "Log do servidor" @@ -596,6 +838,66 @@ msgstr "Tentando iniciar openvpn" msgid "Attempting to stop openvpn" msgstr "Tentando parar openvpn" +msgid "Configurations" +msgstr "" + +msgid "Currently available OpenVPN client configurations are displayed below." +msgstr "" + +msgid "Activating a configuraton will restart the openvpn-client service." +msgstr "" + +msgid "Delete OpenVPN client" +msgstr "" + +msgid "Delete client configuration? This cannot be undone." +msgstr "" + +msgid "Activate OpenVPN client" +msgstr "" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "" + +msgid "Activate" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Enable this option to log openvpn activity." +msgstr "" + +msgid "Authentification Method" +msgstr "" + +msgid "Username and password" +msgstr "" + +msgid "Certificates" +msgstr "" + +msgid "Enter username and password" +msgstr "" + +msgid "Certificates in the configuration file" +msgstr "" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "" + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "" + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "" + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "" + +msgid "Configuration File" +msgstr "" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR não está sendo executado" @@ -604,7 +906,7 @@ msgid "TOR is running" msgstr "TOR está sendo executado" msgid "Relay" -msgstr "Relay" +msgstr "" msgid "Relay settings" msgstr "Configurações de relay" @@ -630,6 +932,10 @@ msgstr "Tentando iniciar TOR" msgid "Attempting to stop TOR" msgstr "Tentando parar TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "Salvar configurações" @@ -651,3 +957,250 @@ msgstr "cima" msgid "down" msgstr "baixo" + +msgid "adblock" +msgstr "" + +msgid "Ad Blocking" +msgstr "" + +msgid "Start Ad Blocking" +msgstr "" + +msgid "Restart Ad Blocking" +msgstr "" + +msgid "Blocklist settings" +msgstr "" + +msgid "Enable blocklists" +msgstr "" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Information provided by adblock" +msgstr "" + +msgid "Enable custom blocklist" +msgstr "" + +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 "" + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "" + +msgid "Custom blocklist not defined" +msgstr "" + +msgid "Invalid custom IP address found on line " +msgstr "" + +msgid "Invalid custom host found on line " +msgstr "" + +msgid "Tunnel settings" +msgstr "" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "Peer" +msgstr "" + +msgid "Enable peer" +msgstr "" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "" + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "" + +msgid "Peer public key" +msgstr "" + +msgid "Endpoint address" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "Persistent keepalive" +msgstr "" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "" + +msgid "WireGuard debug log updated" +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "" + +msgid "or download the client.conf file to your device." +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Start WireGuard" +msgstr "" + +msgid "Stop WireGuard" +msgstr "" + +msgid "Information provided by wireguard" +msgstr "" + +msgid "Attempting to start WireGuard" +msgstr "" + +msgid "Attempting to stop WireGuard" +msgstr "" + +msgid "WireGuard configuration updated successfully" +msgstr "" + +msgid "WireGuard configuration failed to be updated" +msgstr "" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + diff --git a/locale/ro_RO/LC_MESSAGES/messages.mo b/locale/ro_RO/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..13768252 Binary files /dev/null and b/locale/ro_RO/LC_MESSAGES/messages.mo differ diff --git a/locale/ro_RO/LC_MESSAGES/messages.po b/locale/ro_RO/LC_MESSAGES/messages.po new file mode 100644 index 00000000..3003a48f --- /dev/null +++ b/locale/ro_RO/LC_MESSAGES/messages.po @@ -0,0 +1,1206 @@ +msgid "" +msgstr "" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" +"POT-Creation-Date: 2017-10-19 08:56+0000\n" +"PO-Revision-Date: 2021-12-31 14:29\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Romanian\n" +"Language: ro_RO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: ro\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" + +#: index.php +msgid "RaspAP Wifi Configuration Portal" +msgstr "Portal de configurare RaspAP Wi-Fi" + +msgid "Toggle navigation" +msgstr "Comută navigarea" + +msgid "RaspAP Wifi Portal" +msgstr "Portal Wifi RaspAP" + +msgid "Dashboard" +msgstr "Tablou de bord" + +msgid "WiFi client" +msgstr "Client Wi-Fi" + +msgid "Hotspot" +msgstr "Hotspot" + +msgid "Memory Use" +msgstr "Memorie utilizată" + +msgid "CPU Temp" +msgstr "Temp CPU" + +msgid "Networking" +msgstr "Reţele" + +msgid "DHCP Server" +msgstr "Serverul DHCP" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "Proxy TOR" + +msgid "Authentication" +msgstr "Autentificare" + +msgid "Change Theme" +msgstr "Schimbare temă" + +msgid "System" +msgstr "Sistem" + +msgid "About RaspAP" +msgstr "Despre RaspAP" + +#: includes/admin.php +msgid "Authentication settings" +msgstr "Setări de autentificare" + +msgid "New passwords do not match" +msgstr "Parolele noi nu coincid" + +msgid "Username must not be empty" +msgstr "Numele de utilizator trebuie să fie completat" + +msgid "Admin password updated" +msgstr "Parolă de administrare actualizată" + +msgid "Failed to update admin password" +msgstr "Actualizarea parolei de administrare a eșuat" + +msgid "Old password does not match" +msgstr "Parola anterioară nu se potrivește" + +msgid "Username" +msgstr "Nume de utilizator" + +msgid "Old password" +msgstr "Parola anterioară" + +msgid "New password" +msgstr "Parola nouă" + +msgid "Repeat new password" +msgstr "Reintroduceți parola nouă" + +#: includes/configure_client.php +msgid "Client settings" +msgstr "Setările clientului" + +msgid "SSID" +msgstr "SSID" + +msgid "Channel" +msgstr "Canal" + +msgid "Security" +msgstr "Securitate" + +msgid "Passphrase" +msgstr "Parolă" + +msgid "Wifi settings updated successfully" +msgstr "Setările Wi-Fi actualizate cu succes" + +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Setările Wi-Fi actualizate dar nu pot reporni (nu se poate executa 'wpa_cli reconfigurare')" + +msgid "Wifi settings failed to be updated" +msgstr "Setările Wi-Fi nu au putut fi actualizate" + +msgid "Failed to update wifi settings" +msgstr "Actualizarea setărilor Wi-Fi a eșuat" + +msgid "Rescan" +msgstr "Scanează din nou" + +msgid "Update" +msgstr "Actualizare" + +msgid "Add" +msgstr "Adaugă" + +msgid "Delete" +msgstr "Șterge" + +msgid "Show" +msgstr "Afișează" + +msgid "Hide" +msgstr "Ascunde" + +msgid "Not configured" +msgstr "Neconfigurat" + +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "Notă: Punctele de acces WEP apar ca 'Open'. RaspAP nu acceptă conectarea la WEP" + +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" +msgstr "" + +#: includes/dashboard.php +msgid "Interface Information" +msgstr "Informaţii Interfaţă" + +msgid "Interface Name" +msgstr "Numele interfeței" + +msgid "IPv4 Address" +msgstr "Adresă IPv4" + +msgid "IPv6 Address" +msgstr "Adresă IPv6" + +msgid "Subnet Mask" +msgstr "Mască subrețea" + +msgid "Mac Address" +msgstr "Adresa Mac" + +msgid "Interface Statistics" +msgstr "Statistici interfață" + +msgid "Received Packets" +msgstr "Pachete primite" + +msgid "Received Bytes" +msgstr "Octeți primiți" + +msgid "Transferred Packets" +msgstr "Pachete transferate" + +msgid "Transferred Bytes" +msgstr "Octeți transferați" + +msgid "Wireless Client" +msgstr "Client wireless" + +msgid "Connected To" +msgstr "Conectat la" + +msgid "AP Mac Address" +msgstr "Adresă Mac a AP" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Signal Level" +msgstr "Nivelul semnalului" + +msgid "Transmit Power" +msgstr "Putere de transmisie" + +msgid "Frequency" +msgstr "Frecvența" + +msgid "Link Quality" +msgstr "Calitate legătură" + +msgid "Information provided by ip and iw and from system" +msgstr "Informaţii furnizate de ip, iw şi de sistem" + +msgid "No MAC Address Found" +msgstr "Nu s-a găsit nicio adresă MAC" + +msgid "No IP Address Found" +msgstr "Nu s-a găsit nicio adresă IP" + +msgid "No Subnet Mask Found" +msgstr "Nu s-a găsit nicio mască de subrețea" + +msgid "No Data" +msgstr "Nu există date" + +msgid "Not connected" +msgstr "Neconectat" + +msgid "Interface is up" +msgstr "Interfață activă" + +msgid "Interface is down" +msgstr "Interfață inactivă" + +msgid "Interface already down" +msgstr "Interfața era inactivă" + +msgid "Start wlan0" +msgstr "Pornire wlan0" + +msgid "Stop wlan0" +msgstr "Oprire wlan0" + +msgid "Connected Devices" +msgstr "Dispozitive conectate" + +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + +#: includes/dhcp.php +msgid "DHCP server settings" +msgstr "Setări server DHCP" + +msgid "Client list" +msgstr "Listă clienți" + +msgid "Interface" +msgstr "Interfață" + +msgid "Enable DHCP for this interface" +msgstr "Activează DHCP pentru această interfață" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "Activați această opțiune dacă doriți ca RaspAP să atribuie adrese IP pe interfața selectată." + +msgid "DNS Server" +msgstr "Server DNS" + +msgid "Starting IP Address" +msgstr "Adresă IP de început" + +msgid "Ending IP Address" +msgstr "Adresă IP finală" + +msgid "Static Leases" +msgstr "Adrese atribuite static" + +msgid "Add static DHCP lease" +msgstr "Adaugă adrese statice serverului DHCP" + +msgid "Lease Time" +msgstr "Timp de atribuire" + +msgid "Interval" +msgstr "Interval" + +msgid "Active DHCP leases" +msgstr "Adrese atribuite DHCP" + +msgid "Expire time" +msgstr "Timp de expirare" + +msgid "MAC Address" +msgstr "Adresă MAC" + +msgid "Optional comment" +msgstr "" + +msgid "Host name" +msgstr "Denumire client" + +msgid "Client ID" +msgstr "Identitatea clientului" + +msgid "Information provided by Dnsmasq" +msgstr "Informații furnizate de Dnsmasq" + +msgid "Stop dnsmasq" +msgstr "Oprire dnsmasq" + +msgid "Start dnsmasq" +msgstr "Pornire Dnsmasq" + +msgid "Dnsmasq configuration updated successfully" +msgstr "Configurarea dnsmasq actualizată cu succes" + +msgid "dnsmasq already running" +msgstr "dnsmasq este pornit" + +msgid "Successfully started dnsmasq" +msgstr "Dnsmasq pornit cu succes" + +msgid "Failed to start dnsmasq" +msgstr "Pornirea dnsmasq a eșuat" + +msgid "Successfully stopped dnsmasq" +msgstr "Dnsmasq oprit cu succes" + +msgid "Failed to stop dnsmasq" +msgstr "Oprirea dnsmasq a eșuat" + +msgid "dnsmasq already stopped" +msgstr "dnsmasq deja oprit" + +msgid "Dnsmasq is running" +msgstr "Dnsmasq rulează" + +msgid "Dnsmasq is not running" +msgstr "Dnsmasq nu rulează" + +msgid "Upstream DNS servers" +msgstr "Servere DNS upstream" + +msgid "Only ever query DNS servers configured below" +msgstr "Numai serverele DNS configurate mai jos" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Activați această opțiune dacă doriți ca RaspAP să trimită interogări DNS la serverele configurate mai jos exclusiv. În mod implicit, RaspAP folosește și serverele sale DHCP upstream." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Această opțiune adaugă no-resolv la configurația dnsmasq." + +msgid "Add upstream DNS server" +msgstr "Adaugă server DNS upstream" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Alege un server" + +msgid "Enable these options to log DHCP server activity." +msgstr "Activați aceste opțiuni pentru a înregistra activitatea serverului DHCP." + +msgid "Log DHCP requests" +msgstr "Înregistrează cererile DHCP" + +msgid "Log DNS queries" +msgstr "Înregistrează interogările DNS" + +msgid "Restrict access" +msgstr "Restricționare acces" + +msgid "Limit network access to static clients" +msgstr "Limitează accesul la rețea pentru clienții statici" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "Activați această opțiune dacă doriți ca RaspAP să ignore orice clienți care nu sunt specificați în lista de leasing static." + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "Această opțiune adaugă dhcp-ignore la configurația dnsmasq." + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "Clienților cu o anumită adresă MAC hardware li se poate atribui întotdeauna aceeași adresă IP." + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "Această opţiune adaugă dhcp-host intrărilor la configuraţia dnsmasq." + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "Comută între gateway/nogateway pentru această interfaţă în configuraţia DHCPCD." + +#: includes/hostapd.php +msgid "Basic" +msgstr "Setări de bază" + +msgid "Advanced" +msgstr "Setări avansate" + +msgid "Basic settings" +msgstr "Setări de bază" + +msgid "Wireless Mode" +msgstr "Standard" + +msgid "Security settings" +msgstr "Setări de securitate" + +msgid "Security type" +msgstr "Tipul de securitate" + +msgid "Encryption Type" +msgstr "Tipul de criptare" + +msgid "PSK" +msgstr "PSK" + +msgid "Advanced settings" +msgstr "Setări avansate" + +msgid "Country Code" +msgstr "Codul țării" + +msgid "Information provided by hostapd" +msgstr "Informații furnizate de hostapd" + +msgid "Attempting to start hotspot" +msgstr "Se încearcă pornirea hotspot-ului" + +msgid "Attempting to stop hotspot" +msgstr "Se încearcă oprirea hotspot-ului" + +msgid "HostAPD is not running" +msgstr "HostAPD nu rulează" + +msgid "HostAPD is running" +msgstr "HostAPD rulează" + +msgid "SSID must be between 1 and 32 characters" +msgstr "SSID trebuie să aibă între 1 și 32 de caractere" + +msgid "WPA passphrase must be between 8 and 63 characters" +msgstr "Parola WPA trebuie să aibă între 8 şi 63 de caractere" + +msgid "Unknown interface" +msgstr "Interfață necunoscută" + +msgid "Country code must be blank or two characters" +msgstr "Codul țării trebuie să fie necompletat sau format din două caractere" + +msgid "Wifi Hotspot settings saved" +msgstr "Setările punctului de acces Wi-Fi sunt salvate" + +msgid "Unable to save wifi hotspot settings" +msgstr "Nu s-au putut salva setările pentru punctul de acces Wi-Fi" + +msgid "Start hotspot" +msgstr "Pornește punctul de acces" + +msgid "Stop hotspot" +msgstr "Oprește punctul de acces" + +msgid "Restart hotspot" +msgstr "Restarteaza punctul de acces" + +msgid "Enable logging" +msgstr "Activează înregistrarea" + +msgid "Logfile output" +msgstr "Jurnal" + +msgid "WiFi client AP mode" +msgstr "Mod AP al clientului Wi-Fi" + +msgid "Bridged AP mode" +msgstr "Mod bridged AP" + +msgid "Hide SSID in broadcast" +msgstr "Ascunde transmiterea SSID" + +msgid "Maximum number of clients" +msgstr "Număr maxim de clienți" + +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "Interval semnalizator" + +msgid "Disable disassoc_low_ack" +msgstr "Dezactivează disassoc_low_ack" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "Nu disocia stațiile pe baza erorilor de transmisie excesive." + +msgid "Executing RaspAP service start" +msgstr "Pornire serviciu RaspAP" + +msgid "Close" +msgstr "Închide" + +msgid "Enable this option to log hostapd activity." +msgstr "Activează această opţiune pentru a înregistra activitatea hostapd." + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +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 "" + +#: includes/networking.php +msgid "Summary" +msgstr "Sumar" + +msgid "Internet connection" +msgstr "Conexiune la internet" + +msgid "Current settings" +msgstr "Setările curente" + +msgid "Default Gateway" +msgstr "Gateway implicit" + +msgid "Alternate DNS Server" +msgstr "Server DNS alternativ" + +msgid "Adapter IP Address Settings" +msgstr "Setări adresă IP adaptor" + +msgid "Enable Fallback to Static Option" +msgstr "Utilizați o adresă statică dacă serverul nu răspunde" + +msgid "Static IP" +msgstr "IP static" + +msgid "Enabled" +msgstr "Activat" + +msgid "Disabled" +msgstr "Dezactivat" + +msgid "Static IP Options" +msgstr "Opțiuni IP static" + +msgid "Metric" +msgstr "Metric" + +msgid "Apply settings" +msgstr "Aplicare setări" + +msgid "Information provided by /sys/class/net" +msgstr "Informații furnizate de /sys/class/net" + +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + +#: includes/system.php +msgid "System Information" +msgstr "Informații Sistem" + +msgid "Language" +msgstr "Limbă" + +msgid "Language settings" +msgstr "Setări limbă" + +msgid "Select a language" +msgstr "Selectați limba" + +msgid "Language setting saved" +msgstr "Setarea limbii salvată" + +msgid "Console" +msgstr "Consolă" + +msgid "Hostname" +msgstr "Nume gazdă" + +msgid "Pi Revision" +msgstr "Model Pi" + +msgid "Uptime" +msgstr "Timp de funcționare" + +msgid "Memory Used" +msgstr "Memorie utilizată" + +msgid "CPU Load" +msgstr "Încărcare procesor" + +msgid "Reboot" +msgstr "Restartează" + +msgid "Shutdown" +msgstr "Inchide" + +msgid "System Rebooting Now!" +msgstr "Sistemul reporneşte acum!" + +msgid "System Shutting Down Now!" +msgstr "Sistemul se închide acum!" + +msgid "Web server port" +msgstr "Portul serverului web" + +msgid "Web server bind address" +msgstr "Adresă de legătură server web" + +#: includes/themes.php +msgid "Theme settings" +msgstr "Setări temă" + +msgid "Select a theme" +msgstr "Selectaţi o temă" + +msgid "Color" +msgstr "Culoare" + +#: includes/data_usage.php +msgid "Data usage" +msgstr "Utilizarea datelor" + +msgid "Data usage monitoring" +msgstr "Monitorizare utilizare date" + +msgid "Hourly traffic amount" +msgstr "Trafic pe oră" + +msgid "Daily traffic amount" +msgstr "Trafic zilnic" + +msgid "Monthly traffic amount" +msgstr "Trafic lunar" + +msgid "Hourly" +msgstr "Pe oră" + +msgid "Daily" +msgstr "Zilnic" + +msgid "Monthly" +msgstr "Lunar" + +msgid "interface" +msgstr "interfață" + +msgid "date" +msgstr "dată" + +msgid "Send MB" +msgstr "MO trimiși" + +msgid "Receive MB" +msgstr "MO recepționați" + +msgid "Information provided by vnstat" +msgstr "Informaţii furnizate de vnstat" + +msgid "Loading {0} bandwidth chart" +msgstr "Se încarcă {0} graficul lățimii de bandă" + +msgid "Showing {0} to {1} of {2} entries" +msgstr "Se afișează {0} la {1} din {2} intrări" + +#: includes/openvpn.php +msgid "OpenVPN is not running" +msgstr "OpenVPN nu funcționează" + +msgid "OpenVPN is running" +msgstr "OpenVPN rulează" + +msgid "Server settings" +msgstr "Setări server" + +msgid "Select OpenVPN configuration file (.ovpn)" +msgstr "Selectaţi fişierul de configurare OpenVPN (.ovpn)" + +msgid "Client Log" +msgstr "Jurnal client" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Root CA certificate" +msgstr "Certificat Root CA" + +msgid "Server certificate" +msgstr "Certificat server" + +msgid "Diffie Hellman parameters" +msgstr "Parametrii Diffie Hellman" + +msgid "KeepAlive" +msgstr "Ține activ" + +msgid "Server log" +msgstr "Jurnal server" + +msgid "Start OpenVPN" +msgstr "Pornește OpenVPN" + +msgid "Stop OpenVPN" +msgstr "Oprește OpenVPN" + +msgid "Information provided by openvpn" +msgstr "Informaţii furnizate de openvpn" + +msgid "Attempting to start openvpn" +msgstr "Se încearcă pornirea openvpn" + +msgid "Attempting to stop openvpn" +msgstr "Se încearcă oprirea openvpn" + +msgid "Configurations" +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 openvpn-client service." +msgstr "Activarea unei configurații va reporni serviciul openvpn-client." + +msgid "Delete OpenVPN client" +msgstr "Ștergere client OpenVPN" + +msgid "Delete client configuration? This cannot be undone." +msgstr "Ștergeți configurarea clientului? Această acțiune nu poate fi anulată." + +msgid "Activate OpenVPN client" +msgstr "Activare client OpenVPN" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "Activați configurarea clientului? Aceasta va reporni serviciul openvpn-client." + +msgid "Activate" +msgstr "Activează" + +msgid "Cancel" +msgstr "Anulează" + +msgid "Enable this option to log openvpn activity." +msgstr "Activați această opțiune pentru a înregistra activitatea openvpn." + +msgid "Authentification Method" +msgstr "Metoda de autentificare" + +msgid "Username and password" +msgstr "Nume utilizator și parolă" + +msgid "Certificates" +msgstr "Certificate" + +msgid "Enter username and password" +msgstr "Introduceți numele utilizator și parola" + +msgid "Certificates in the configuration file" +msgstr "Certificate în fișierul de configurare" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "RaspAP acceptă certificate prin includerea lor în fișierul de configurare." + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "Se semnează certificatul 'certification authority' (CA) (de ex. ca.crt): inclus în etichetele <ca> ... </ca>." + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "Certificatul clientului (cheie publică) (de ex. client.crt): inclus în etichetele <cert> ... </cert>." + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "Cheia privată a certificatului clientului (de ex. client.key): inclus în etichetele <key> ... </key>." + +msgid "Configuration File" +msgstr "Fișier de configurare" + +#: includes/torproxy.php +msgid "TOR is not running" +msgstr "TOR nu rulează" + +msgid "TOR is running" +msgstr "TOR rulează" + +msgid "Relay" +msgstr "Releu" + +msgid "Relay settings" +msgstr "Setări releu" + +msgid "Nickname" +msgstr "Pseudonim" + +msgid "Address" +msgstr "Adresă" + +msgid "Start TOR" +msgstr "Pornește TOR" + +msgid "Stop TOR" +msgstr "Oprește TOR" + +msgid "Information provided by tor" +msgstr "Informaţii furnizate de tor" + +msgid "Attempting to start TOR" +msgstr "Se încearcă pornirea TOR" + +msgid "Attempting to stop TOR" +msgstr "Se încearcă oprirea TOR" + +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "Modul AP punte este activat. Pentru Nume gazdă și IP, vedeți pagina de administrare a routerului." + +#: common form controls +msgid "Save settings" +msgstr "Salvare setări" + +msgid "Refresh" +msgstr "Reîmprospătare" + +msgid "running" +msgstr "rulează" + +msgid "stopped" +msgstr "oprit" + +msgid "Remove" +msgstr "Șterge" + +msgid "up" +msgstr "activ" + +msgid "down" +msgstr "inactiv" + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "Blocare reclame" + +msgid "Start Ad Blocking" +msgstr "Pornește Blocarea Reclamelor" + +msgid "Restart Ad Blocking" +msgstr "Repornește Blocarea Reclamelor" + +msgid "Blocklist settings" +msgstr "Setari lista de blocați" + +msgid "Enable blocklists" +msgstr "Activare lista de blocați" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "Activați această opțiune dacă doriți ca RaspAP să blocheze cererile DNS pentru reclame, urmărire și alte gunoaie virtuale. Listele de blocați sunt colectate din surse multiple, întreținute în mod activ și actualizate automat, curățate, optimizate și moderate zilnic." + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "Această opțiune adaugă conf-file și addn-hosts la configurația dnsmasq." + +msgid "Choose a blocklist provider" +msgstr "Alegeți un furnizor de lista de blocați" + +msgid "Hostnames blocklist last updated" +msgstr "Lista numelor gazdă blocate ultima dată actualizată" + +msgid "Domains blocklist last updated" +msgstr "Ultima actualizare a listei de domenii blocate" + +msgid "Update now" +msgstr "Actualizați acum" + +msgid "Statistics" +msgstr "Statistici" + +msgid "Information provided by adblock" +msgstr "Informaţie furnizateă de adblock" + +msgid "Enable custom blocklist" +msgstr "Activează lista de blocare personalizată" + +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 "Definiţi gazdele personalizate care să fie blocate prin introducerea unei adrese IPv4 sau IPv6 urmată de orice spaţiu alb (spaţii sau taburi) şi numele gazdei." + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "exemplu IPv4: 0.0.0.0 badhost.com" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "Această opțiune adaugă o directivă addn-hosts la configurația dnsmasq." + +msgid "Custom blocklist not defined" +msgstr "Lista de blocati personalizată nu este definită" + +msgid "Invalid custom IP address found on line " +msgstr "Adresă IP particularizată nevalidă găsită în linie " + +msgid "Invalid custom host found on line " +msgstr "Gazdă personalizată nevalidă în linie " + +msgid "Tunnel settings" +msgstr "Setări tunel" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "Activează serverul" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "Cheie publică locală" + +msgid "Local Port" +msgstr "Port local" + +msgid "IP Address" +msgstr "Adresă IP" + +msgid "DNS" +msgstr "DNS" + +msgid "Peer" +msgstr "Partener" + +msgid "Enable peer" +msgstr "Activare partener" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "Activați această opțiune pentru a cripta traficul prin crearea unui tunel între RaspAP și acest partener." + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "Această opţiune adaugă client.conf la configuraţia WireGuard." + +msgid "Peer public key" +msgstr "Cheie publică partener" + +msgid "Endpoint address" +msgstr "Adresă punct final" + +msgid "Allowed IPs" +msgstr "IP-uri permise" + +msgid "Persistent keepalive" +msgstr "Persistent keepalive" + +msgid "Display WireGuard debug log" +msgstr "" + +msgid "Enable this option to display an updated WireGuard debug log." +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "Scanați acest cod QR cu clientul pentru a vă conecta la acest tunel" + +msgid "or download the client.conf file to your device." +msgstr "sau descărcați fișierul client.conf pe dispozitivul dvs." + +msgid "Download" +msgstr "Descărcare" + +msgid "Start WireGuard" +msgstr "Pornește WireGuard" + +msgid "Stop WireGuard" +msgstr "Oprește WireGuard" + +msgid "Information provided by wireguard" +msgstr "Informaţii oferite de wireguard" + +msgid "Attempting to start WireGuard" +msgstr "Se încearcă pornirea WireGuard" + +msgid "Attempting to stop WireGuard" +msgstr "Se încearcă oprirea WireGuard" + +msgid "WireGuard configuration updated successfully" +msgstr "Configurarea WireGuard actualizată cu succes" + +msgid "WireGuard configuration failed to be updated" +msgstr "Configurarea WireGuard nu a putut fi actualizată" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + diff --git a/locale/ru_RU/LC_MESSAGES/messages.mo b/locale/ru_RU/LC_MESSAGES/messages.mo index 6b4d3a7e..2dd711b0 100644 Binary files a/locale/ru_RU/LC_MESSAGES/messages.mo and b/locale/ru_RU/LC_MESSAGES/messages.mo differ diff --git a/locale/ru_RU/LC_MESSAGES/messages.po b/locale/ru_RU/LC_MESSAGES/messages.po index 30e29d9e..b50f2805 100644 --- a/locale/ru_RU/LC_MESSAGES/messages.po +++ b/locale/ru_RU/LC_MESSAGES/messages.po @@ -1,22 +1,19 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" +"Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Betep \n" -"Language-Team: \n" -"Language: en_US\n" +"PO-Revision-Date: 2020-04-14 08:51\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Russian\n" +"Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: ru\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -31,26 +28,32 @@ msgstr "Портал RaspAP Wifi" msgid "Dashboard" msgstr "Приборная панель" -msgid "Configure WiFi client" -msgstr "Настройка WiFi клиента" +msgid "WiFi client" +msgstr "WiFi клиента" -msgid "Configure hotspot" -msgstr "Настройка точки доступа" +msgid "Hotspot" +msgstr "Точка доступа" -msgid "Configure networking" -msgstr "Сетевые настрйоки" +msgid "Memory Use" +msgstr "" -msgid "Configure DHCP Server" -msgstr "Настроить DHCP сервер" +msgid "CPU Temp" +msgstr "" -msgid "Configure OpenVPN" -msgstr "Настройка OpenVPN" +msgid "Networking" +msgstr "Сетевые" -msgid "Configure TOR proxy" -msgstr "Настройка TOR proxy" +msgid "DHCP Server" +msgstr "DHCP сервер" -msgid "Configure Auth" -msgstr "Настйроки авторизации" +msgid "OpenVPN" +msgstr "" + +msgid "TOR proxy" +msgstr "" + +msgid "Authentication" +msgstr "авторизации" msgid "Change Theme" msgstr "Сменить тему" @@ -97,7 +100,7 @@ msgid "Client settings" msgstr "Настройки клиента" msgid "SSID" -msgstr "SSID" +msgstr "" msgid "Channel" msgstr "Канал" @@ -178,8 +181,8 @@ msgstr "Переданные пакеты" msgid "Transferred Bytes" msgstr "Передано Байт" -msgid "Wireless Information" -msgstr "Беспроводная информация" +msgid "Wireless Client" +msgstr "" msgid "Connected To" msgstr "Подключено к" @@ -248,6 +251,9 @@ msgstr "Список клиентов" msgid "Interface" msgstr "Интерфейс" +msgid "DNS Server" +msgstr "DNS сервер" + msgid "Starting IP Address" msgstr "Начальный IP-адрес" @@ -317,6 +323,33 @@ msgstr "Dnsmasq запущена" msgid "Dnsmasq is not running" msgstr "Dnsmasq не запущена" +msgid "Upstream DNS servers" +msgstr "" + +msgid "Only ever query DNS servers configured below" +msgstr "" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "" + +msgid "Add upstream DNS server" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Choose a hosted server" +msgstr "" + +msgid "Log DHCP requests" +msgstr "" + +msgid "Log DNS queries" +msgstr "" + #: includes/hostapd.php msgid "Basic" msgstr "Основные" @@ -340,7 +373,7 @@ msgid "Encryption Type" msgstr "Тип шифрования" msgid "PSK" -msgstr "PSK" +msgstr "" msgid "Advanced settings" msgstr "Расширенные настройки" @@ -387,6 +420,9 @@ msgstr "Запуск точки доступа" msgid "Stop hotspot" msgstr "Остановка точки доступа" +msgid "Restart hotspot" +msgstr "Перезапустите точки доступа" + msgid "Enable logging" msgstr "Включить журналирование" @@ -396,6 +432,9 @@ msgstr "Записи журнала" msgid "WiFi client AP mode" msgstr "Режим AP WiFi-клиента" +msgid "Bridged AP mode" +msgstr "" + msgid "Hide SSID in broadcast" msgstr "Скрыть SSID при трансляции" @@ -415,9 +454,6 @@ msgstr "Текущие настройки" msgid "Default Gateway" msgstr "Основной шлюз" -msgid "DNS Server" -msgstr "DNS сервер" - msgid "Alternate DNS Server" msgstr "Альтернативный DNS-сервер" @@ -630,6 +666,10 @@ msgstr "Попытка запуска TOR" msgid "Attempting to stop TOR" msgstr "Попытка остановить TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "Сохранить настройки" @@ -652,3 +692,45 @@ msgstr "вверх" msgid "down" msgstr "вниз" +msgid "adblock" +msgstr "" + +msgid "Ad Blocking" +msgstr "" + +msgid "Start Ad Blocking" +msgstr "" + +msgid "Restart Ad Blocking" +msgstr "" + +msgid "Blocklist settings" +msgstr "" + +msgid "Enable blocklists" +msgstr "" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Information provided by adblock" +msgstr "" + diff --git a/locale/si_LK/LC_MESSAGES/messages.mo b/locale/si_LK/LC_MESSAGES/messages.mo deleted file mode 100644 index f4269276..00000000 Binary files a/locale/si_LK/LC_MESSAGES/messages.mo and /dev/null differ diff --git a/locale/si_LK/LC_MESSAGES/messages.po b/locale/si_LK/LC_MESSAGES/messages.po deleted file mode 100644 index 7952aa74..00000000 --- a/locale/si_LK/LC_MESSAGES/messages.po +++ /dev/null @@ -1,638 +0,0 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: 1.2.1\n" -"Report-Msgid-Bugs-To: Bill Zimmerman \n" -"POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Bill Zimmerman \n" -"Language-Team: \n" -"Language: si_LK\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: index.php -msgid "RaspAP Wifi Configuration Portal" -msgstr "RaspAP Wifi සැකසුම් වෙබ් අඩවිය" - -msgid "Toggle navigation" -msgstr "හුවමාරුවීම" - -msgid "RaspAP Wifi Portal" -msgstr "RaspAP Wifi වෙබ් අඩවිය" - -msgid "Dashboard" -msgstr "උපකාරක පුවරුව" - -msgid "Configure WiFi client" -msgstr "WiFi සේවාලාභි සැකසුම" - -msgid "Configure hotspot" -msgstr "හොට්ස්පොට් සැකසුම" - -msgid "Configure networking" -msgstr "ජාලකරණ සැකසුම" - -msgid "Configure DHCP Server" -msgstr "DHCP සර්වර් සැකසුම" - -msgid "Configure OpenVPN" -msgstr "OpenVPN සැකසුම" - -msgid "Configure TOR proxy" -msgstr "TOR proxy සැකසුම" - -msgid "Configure Auth" -msgstr "සත්‍යාපනය වින්‍යාස කරන්න" - -msgid "Change Theme" -msgstr "පසුබිම් සැකසුම" - -msgid "System" -msgstr "පද්ධතිය" - -#: includes/admin.php -msgid "Authentication settings" -msgstr "Authentication settings" - -msgid "New passwords do not match" -msgstr "නව මුරපදයන් නොගැලපේ" - -msgid "Username must not be empty" -msgstr "පරිශීලක නාමය හිස් නොවිය යුතුය" - -msgid "Admin password updated" -msgstr "පරිපාලක මුරපදය යාවත්කාලීන වීම සාර්ථකයි" - -msgid "Failed to update admin password" -msgstr "පරිපාලක මුරපදය යාවත්කාලීන කිරීම අසාර්ථකයි" - -msgid "Old password does not match" -msgstr "පැරණි මුරපදය නොගැලපේ" - -msgid "Username" -msgstr "පරිශීලක නාමය" - -msgid "Old password" -msgstr "පැරණි මුරපදය" - -msgid "New password" -msgstr "නව මුරපදය" - -msgid "Repeat new password" -msgstr "නව මුරපදය නැවත සිදු කරන්න" - -#: includes/configure_client.php -msgid "Client settings" -msgstr "සේවාදායක සැකසුම්" - -msgid "SSID" -msgstr "සේවා නිර්ණය කිරීම" - -msgid "Channel" -msgstr "නාලිකාව" - -msgid "Security" -msgstr "ආරක්ෂාව" - -msgid "Passphrase" -msgstr "මුරපදය" - -msgid "Wifi settings updated successfully" -msgstr "Wifi සැකසුම් යාවත්කාලීන වීම සාර්ථකයි" - -msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" -msgstr "Wifi සැකසුම් යාවත්කාලීන කර ඇති නමුත් එය නැවත ආරම්භ කළ නොහැක (wpa_cli reconfigure ක්‍රියාත්මක කළ නොහැක)" - -msgid "Wifi settings failed to be updated" -msgstr "Wifi සැකසුම් යාවත්කාලීන කිරීම නොහැකිය" - -msgid "Failed to update wifi settings" -msgstr "Wifi සැකසුම් යාවත්කාල කිරීමට අසමත් විය" - -msgid "Rescan" -msgstr "නැවත සුපිරික්සා කරන්න" - -msgid "Update" -msgstr "යාවත්කාලීන කිරීම" - -msgid "Add" -msgstr "එක් කරන්න" - -msgid "Delete" -msgstr "මකා දමන්න" - -msgid "Show" -msgstr "Show" - -msgid "Hide" -msgstr "Hide" - -msgid "Not configured" -msgstr "Not configured" - -msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" -msgstr " සටහන: WEP ප්‍රවේශ වීමේ ස්ථාන 'විවෘත' ලෙස පෙනේ. RaspAP දැනට WEP වෙත සම්බන්ධ වීමට සහාය නොදේ" - -#: includes/dashboard.php -msgid "Interface Information" -msgstr "අතුරුමුහුණත් තොරතුරු" - -msgid "Interface Name" -msgstr "අතුරුමුහුණත නම" - -msgid "IP Address" -msgstr "IP ලිපිනය" - -msgid "Subnet Mask" -msgstr "උපජාල ආවරණය" - -msgid "Mac Address" -msgstr "Mac ලිපිනය" - -msgid "Interface Statistics" -msgstr "අතුරු මුහුණත සංඛ්‍යාලේඛන" - -msgid "Received Packets" -msgstr "ලබාගත් දත්ත පැකට් ප්‍රමාණය" - -msgid "Received Bytes" -msgstr "ලැබුණු බයිට් ප්‍රමාණය" - -msgid "Transferred Packets" -msgstr "යවන ලද දත්ත පැකට් ප්‍රමාණය" - -msgid "Transferred Bytes" -msgstr "යවන ලද බයිට් ප්‍රමාණය" - -msgid "Wireless Information" -msgstr "රැහැන් රහිත පද්ධතියේ තොරතුරු" - -msgid "Connected To" -msgstr "සම්බන්ධයි" - -msgid "AP Mac Address" -msgstr "AP Mac ලිපිනය" - -msgid "Bitrate" -msgstr "බිට් අනුපාතය" - -msgid "Signal Level" -msgstr "සංඥා මට්ටම" - -msgid "Transmit Power" -msgstr "සම්පේශණ බලය" - -msgid "Frequency" -msgstr "සංඛ්‍යාතය" - -msgid "Link Quality" -msgstr "සබැඳියෙහි ගුණත්වය" - -msgid "Information provided by ip and iw and from system" -msgstr "ip සහ iw සපයන ලද තොරතුරු" - -msgid "No MAC Address Found" -msgstr "MAC ලිපිනයක් නොමැත" - -msgid "No IP Address Found" -msgstr "කිසිදු IP ලිපිනයක් සොයාගත නොහැකි විය" - -msgid "No Subnet Mask Found" -msgstr "උපජාල ආවරණයක් සොයාගත නොහැකි විය" - -msgid "No Data" -msgstr "දත්ත නැත" - -msgid "Not connected" -msgstr "සම්බන්ධ නොවේ" - -msgid "Interface is up" -msgstr "අතුරුමුහුණත සක්‍රීය විය" - -msgid "Interface is down" -msgstr "අතුරුමුහුණත අක්‍රීය විය" - -msgid "Interface already down" -msgstr "අතුරුමුහුණත අක්‍රීය වී ඇත" - -msgid "Start wlan0" -msgstr "wlan0 ආරම්භ කරන්න" - -msgid "Stop wlan0" -msgstr "wlan0 නතර කරන්න" - -msgid "Connected Devices" -msgstr "සම්බන්ධිත උපකරණ" - -#: includes/dhcp.php -msgid "DHCP server settings" -msgstr "සර්වර සැකසීම්" - -msgid "Client list" -msgstr "සේවාදායක ලැයිස්තුව" - -msgid "Interface" -msgstr "Interface" - -msgid "Starting IP Address" -msgstr "IP ලිපිනය ආරම්භ කිරීම" - -msgid "Ending IP Address" -msgstr "IP ලිපිනය අවසන් කිරීම" - -msgid "Static Leases" -msgstr "Static Leases" - -msgid "Add static DHCP lease" -msgstr "Add static DHCP lease" - -msgid "Lease Time" -msgstr "කල් පිරෙන කාලය" - -msgid "Interval" -msgstr "කාල පරතරය" - -msgid "Active DHCP leases" -msgstr "ක්‍රියාකාරී DHCP කාලය" - -msgid "Expire time" -msgstr "කල් ඉකුත්වන්න කාලය" - -msgid "MAC Address" -msgstr "MAC ලිපිනය " - -msgid "Host name" -msgstr "Host නාමය" - -msgid "Client ID" -msgstr "සේවාලාභී හැඳුනුම්පත් අංකය " - -msgid "Information provided by Dnsmasq" -msgstr "Dnsmasq විසින් සපයන ලද තොරතුරු" - -msgid "Stop dnsmasq" -msgstr "Dnsmasq නතර කරන්න" - -msgid "Start dnsmasq" -msgstr "dnsmasq ආරම්භ කරන්න " - -msgid "Dnsmasq configuration updated successfully" -msgstr "Dnsmasq සැකසීම සාර්ථකව යාවත්කාලීන කර ඇත" - -msgid "dnsmasq already running" -msgstr "dnsmasq දැනටමත් ක්‍රියාත්මක වේ" - -msgid "Successfully started dnsmasq" -msgstr "dnsmasq සාර්ථකව ආරම්භ විය " - -msgid "Failed to start dnsmasq" -msgstr "Dnsmasq ආරම්භ කිරීමට අපොහොසත් විය" - -msgid "Successfully stopped dnsmasq" -msgstr " dnsmasq සාර්ථකව නතර කරන ලදී " - -msgid "Failed to stop dnsmasq" -msgstr "Failed to stop dnsmasq" - -msgid "dnsmasq already stopped" -msgstr "dnsmasq already stopped" - -msgid "Dnsmasq is running" -msgstr "Dnsmasq is running" - -msgid "Dnsmasq is not running" -msgstr "Dnsmasq ක්‍රියාත්මක නොවේ" - -#: includes/hostapd.php -msgid "Basic" -msgstr "මූලික" - -msgid "Advanced" -msgstr "උසස්" - -msgid "Basic settings" -msgstr "මූලික සැකසුම්" - -msgid "Wireless Mode" -msgstr "රැහැන් රහිත ක්‍රම " - -msgid "Security settings" -msgstr "ආරක්ෂක සැකසුම්" - -msgid "Security type" -msgstr "ආරක්ෂක ක්‍රමය " - -msgid "Encryption Type" -msgstr "ගුප්තකේතන වර්ගය" - -msgid "PSK" -msgstr "පූර්ව යෝජිත යතුර (PSK)" - -msgid "Advanced settings" -msgstr "උසස් සැකසුම්" - -msgid "Country Code" -msgstr "රටේ කේතය" - -msgid "Information provided by hostapd" -msgstr "hostapd විසින් සපයන ලද තොරතුරු" - -msgid "Attempting to start hotspot" -msgstr "Hotspot ආරම්භ කිරීමට උත්සාහ කිරීම" - -msgid "Attempting to stop hotspot" -msgstr "Hotspot නතර කිරීමට උත්සාහ කිරීම" - -msgid "HostAPD is not running" -msgstr "HostAPD ක්‍රියාත්මක නොවේ" - -msgid "HostAPD is running" -msgstr "HostAPD ක්‍රියාත්මක වේ" - -msgid "SSID must be between 1 and 32 characters" -msgstr "SSID අක්ෂර 1 සිට 32 දක්වා විය යුතුය" - -msgid "WPA passphrase must be between 8 and 63 characters" -msgstr "WPA රහස්පදය අක්ෂර 8 සිට 63 අතර විය යුතුය" - -msgid "Unknown interface" -msgstr "නොදන්නා අතුරු මුහුණතක්" - -msgid "Country code must be blank or two characters" -msgstr "රටේ කේතය හිස් ව හෝ අක්ෂර දෙකක් විය යුතුය" - -msgid "Wifi Hotspot settings saved" -msgstr "Wifi හොට්ස්පොට් සැකසීම් සුරකින ලදි" - -msgid "Unable to save wifi hotspot settings" -msgstr "WiFi hotspot සැකසුම් සුරැකීමට නොහැකි විය" - -msgid "Start hotspot" -msgstr "hotspot ආරම්භ කරන්න " - -msgid "Stop hotspot" -msgstr "hotspot නතර කරන්න" - -msgid "Enable logging" -msgstr "ඇතුල්වීම සක්‍රිය කරන්න " - -msgid "Logfile output" -msgstr " ලොග්ෆයිල් නිමැවුම " - -msgid "WiFi client AP mode" -msgstr "WiFi client AP mode" - -msgid "Hide SSID in broadcast" -msgstr "Hide SSID in broadcast" - -msgid "Maximum number of clients" -msgstr "Maximum number of clients" - -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." - -#: includes/networking.php -msgid "Summary" -msgstr "Summary" - -msgid "Current settings" -msgstr "වත්මන් සැකසුම්" - -msgid "Default Gateway" -msgstr "මුලික දොරටුව" - -msgid "DNS Server" -msgstr "DNS සේවාදායකය" - -msgid "Alternate DNS Server" -msgstr "විකල්ප DNS සේවාදායකය" - -msgid "Adapter IP Address Settings" -msgstr "ඇඩැප්ටරහි IP ලිපින සැකසුම්" - -msgid "Enable Fallback to Static Option" -msgstr "ස්ථාවර විකල්ප ක්‍රමයට සක්‍රිය කරන්න " - -msgid "Static IP" -msgstr "Static IP" - -msgid "Enabled" -msgstr "සක්‍රිය කර ඇත " - -msgid "Disabled" -msgstr "ක්‍රියා විරහිත වී ඇත " - -msgid "Static IP Options" -msgstr "ස්ථාවර IP ක්‍රම " - -msgid "Apply settings" -msgstr "සැකසීම් කරන්න" - -msgid "Information provided by /sys/class/net" -msgstr "/ Sys / class / net විසින් සපයන ලද තොරතුරු" - -#: includes/system.php -msgid "System Information" -msgstr "පද්ධති තොරතුරු" - -msgid "Language" -msgstr "භාෂාව" - -msgid "Language settings" -msgstr "භාෂා සැකසුම්" - -msgid "Select a language" -msgstr "භාෂාව තෝරන්න" - -msgid "Language setting saved" -msgstr "භාෂා සැකසුම් සුරකිනි " - -msgid "Console" -msgstr "පාලන පුවරුව" - -msgid "Hostname" -msgstr "සත්කාරක නාමය" - -msgid "Pi Revision" -msgstr "Pi සංශෝදිතය " - -msgid "Uptime" -msgstr "ක්‍රියාත්මක කළා සිමාව " - -msgid "Memory Used" -msgstr "භාවිතා කල මතක ධාරිතාවය " - -msgid "CPU Load" -msgstr "CPU ධාරිතාවය" - -msgid "Reboot" -msgstr "නැවත ආරම්භ කරන්න" - -msgid "Shutdown" -msgstr "වසා දමන්න" - -msgid "System Rebooting Now!" -msgstr "දැන් .... පද්ධතිය නැවත ක්‍රියාත්මක කරන්න !" - -msgid "System Shutting Down Now!" -msgstr "දැන් .... පද්ධතිය වසා දමන්න !" - -#: includes/themes.php -msgid "Theme settings" -msgstr "තේමා සැකසුම්" - -msgid "Select a theme" -msgstr "තේමාවක් තෝරන්න" - -#: includes/data_usage.php -msgid "Data usage" -msgstr "දත්ත භාවිතය" - -msgid "Data usage monitoring" -msgstr "දත්ත භාවිතය පිළිබඳ අධීක්ෂණය" - -msgid "Hourly traffic amount" -msgstr "Hourly traffic amount" - -msgid "Daily traffic amount" -msgstr "Daily traffic amount" - -msgid "Monthly traffic amount" -msgstr "මාසිකව ප්ර වාහනය කරන ලද දත්ත ප්ර මාණය" - -msgid "interface" -msgstr "අතුරුමුහුණත" - -msgid "date" -msgstr "දිනය " - -msgid "Send MB" -msgstr "යවන ලද MB" - -msgid "Receive MB" -msgstr "ලැබුණු MB" - -msgid "Information provided by vnstat" -msgstr "Vnstat විසින් සපයන ලද තොරතුරු" - -msgid "Loading {0} bandwidth chart" -msgstr "දත්ත පරාස වගු {0} ආරම්භ වෙමින් පවතී " - -msgid "Showing {0} to {1} of {2} entries" -msgstr "{0} දක්වා {1} / {2} ඇතුළත් කිරීම් පෙන්වමින් පවතී " - -#: includes/openvpn.php -msgid "OpenVPN is not running" -msgstr "OpenVPN is not running" - -msgid "OpenVPN is running" -msgstr "OpenVPN is running" - -msgid "Server settings" -msgstr "Server settings" - -msgid "Select OpenVPN configuration file (.ovpn)" -msgstr "Select OpenVPN configuration file (.ovpn)" - -msgid "Client Log" -msgstr "Client Log" - -msgid "Port" -msgstr "Port" - -msgid "Protocol" -msgstr "Protocol" - -msgid "Root CA certificate" -msgstr "Root CA certificate" - -msgid "Server certificate" -msgstr "Server certificate" - -msgid "Diffie Hellman parameters" -msgstr "Diffie Hellman parameters" - -msgid "KeepAlive" -msgstr "KeepAlive" - -msgid "Server log" -msgstr "Server log" - -msgid "Start OpenVPN" -msgstr "Start OpenVPN" - -msgid "Stop OpenVPN" -msgstr "Stop OpenVPN" - -msgid "Information provided by openvpn" -msgstr "Information provided by openvpn" - -msgid "Attempting to start openvpn" -msgstr "Attempting to start openvpn" - -msgid "Attempting to stop openvpn" -msgstr "Attempting to stop openvpn" - -#: includes/torproxy.php -msgid "TOR is not running" -msgstr "TOR is not running" - -msgid "TOR is running" -msgstr "TOR is running" - -msgid "Relay" -msgstr "Relay" - -msgid "Relay settings" -msgstr "Relay settings" - -msgid "Nickname" -msgstr "Nickname" - -msgid "Address" -msgstr "Address" - -msgid "Start TOR" -msgstr "Start TOR" - -msgid "Stop TOR" -msgstr "Stop TOR" - -msgid "Information provided by tor" -msgstr "Information provided by tor" - -msgid "Attempting to start TOR" -msgstr "Attempting to start TOR" - -msgid "Attempting to stop TOR" -msgstr "Attempting to stop TOR" - -#: common form controls -msgid "Save settings" -msgstr "සැකසුම් සුරකින්න" - -msgid "Refresh" -msgstr "ප්‍රාණවත් කරන්න" - -msgid "running" -msgstr "running" - -msgid "stopped" -msgstr "stopped" - -msgid "Remove" -msgstr "Remove" - -msgid "up" -msgstr "up" - -msgid "down" -msgstr "down" diff --git a/locale/sv_SE/LC_MESSAGES/messages.mo b/locale/sv_SE/LC_MESSAGES/messages.mo index 0b3c5b9c..99c749b5 100644 Binary files a/locale/sv_SE/LC_MESSAGES/messages.mo and b/locale/sv_SE/LC_MESSAGES/messages.mo differ diff --git a/locale/sv_SE/LC_MESSAGES/messages.po b/locale/sv_SE/LC_MESSAGES/messages.po index 5eebb342..8c260af0 100644 --- a/locale/sv_SE/LC_MESSAGES/messages.po +++ b/locale/sv_SE/LC_MESSAGES/messages.po @@ -31,26 +31,26 @@ msgstr "RaspAP Wifi Portal" msgid "Dashboard" msgstr "Dashboard" -msgid "Configure WiFi client" -msgstr "Konfigurera WiFi klienten" +msgid "WiFi client" +msgstr "WiFi klienten" -msgid "Configure hotspot" -msgstr "Konfigurera hotspot" +msgid "Hotspot" +msgstr "Hotspot" -msgid "Configure networking" -msgstr "Konfigurera nätverk" +msgid "Networking" +msgstr "Nätverk" -msgid "Configure DHCP Server" -msgstr "Konfigurera DHCP" +msgid "DHCP Server" +msgstr "DHCP Server" -msgid "Configure OpenVPN" -msgstr "Konfigurera OpenVPN" +msgid "OpenVPN" +msgstr "OpenVPN" -msgid "Configure TOR proxy" -msgstr "Konfigurera TOR proxy" +msgid "TOR proxy" +msgstr "TOR proxy" -msgid "Configure Auth" -msgstr "Konfigurera Auth" +msgid "Authentication" +msgstr "Autentisering" msgid "Change Theme" msgstr "Byt Tema" @@ -317,6 +317,33 @@ msgstr "Dnsmasq körs" msgid "Dnsmasq is not running" msgstr "Dnsmasq körs ej" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + #: includes/hostapd.php msgid "Basic" msgstr "Grundläggande" @@ -387,6 +414,9 @@ msgstr "Starta hotspot" msgid "Stop hotspot" msgstr "Stoppa hotspot" +msgid "Restart hotspot" +msgstr "Starta om hotspot" + msgid "Enable logging" msgstr "Aktivera loggning" diff --git a/locale/tr_TR/LC_MESSAGES/messages.mo b/locale/tr_TR/LC_MESSAGES/messages.mo index fb764aa2..a5dc3a1d 100644 Binary files a/locale/tr_TR/LC_MESSAGES/messages.mo and b/locale/tr_TR/LC_MESSAGES/messages.mo differ diff --git a/locale/tr_TR/LC_MESSAGES/messages.po b/locale/tr_TR/LC_MESSAGES/messages.po index 6d3dfb2a..d47beaf2 100644 --- a/locale/tr_TR/LC_MESSAGES/messages.po +++ b/locale/tr_TR/LC_MESSAGES/messages.po @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" "PO-Revision-Date: 2019-10-21 23:15+0000\n" -"Last-Translator: Furkan 'Cuqer' Sarıboğa \n" +"Last-Translator: Furkan Sarıboğa \n" "Language-Team: \n" "Language: en_US\n" "MIME-Version: 1.0\n" @@ -31,26 +31,26 @@ msgstr "RaspAP Wifi Portalı" msgid "Dashboard" msgstr "Kontrol Paneli" -msgid "Configure WiFi client" -msgstr "WiFi istemcisini yapılandır" +msgid "WiFi client" +msgstr "WiFi istemcisini" -msgid "Configure hotspot" -msgstr "Paylaşım noktasını yapılandır" +msgid "Hotspot" +msgstr "Paylaşım noktasını" -msgid "Configure networking" -msgstr "Ağı yapılandır" +msgid "Networking" +msgstr "Ağı" -msgid "Configure DHCP Server" -msgstr "DHCP sunucusunu yapılandır" +msgid "DHCP Server" +msgstr "DHCP sunucusunu" -msgid "Configure OpenVPN" -msgstr "OpenVPN'i yapılandır" +msgid "OpenVPN" +msgstr "OpenVPN'i" -msgid "Configure TOR proxy" -msgstr "TOR proxysini yapılandır" +msgid "TOR proxy" +msgstr "TOR proxysini" -msgid "Configure Auth" -msgstr "İzinleri yapılandır" +msgid "Authentication" +msgstr "İzinleri" msgid "Change Theme" msgstr "Temayı değiştir" @@ -252,7 +252,7 @@ msgid "Starting IP Address" msgstr "Başlangıc IP Adresi" msgid "Ending IP Address" -msgstr "Ending IP Adresi" +msgstr "Bitiş IP Adresi" msgid "Static Leases" msgstr "Statik Kiralamalar" @@ -270,10 +270,10 @@ msgid "Active DHCP leases" msgstr "Aktif DHCP kiraları" msgid "Expire time" -msgstr "Aşım Zamanı" +msgstr "Aşım zamanı" msgid "MAC Address" -msgstr "MAC adresi" +msgstr "MAC Adresi" msgid "Host name" msgstr "Sunucu adı" @@ -317,6 +317,33 @@ msgstr "Dnsmasq çalışıyor" msgid "Dnsmasq is not running" msgstr "Dnsmasq çalışmıyor" +msgid "Upstream DNS servers" +msgstr "Ana DNS sunucuları" + +msgid "Only ever query DNS servers configured below" +msgstr "Yalnızca aşağıda yapılandırılmış DNS sunucularını sorgulayın" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Eğer RaspAP'ın sadece aşağıda yapılandırılan sunuculara DNS sorgusu göndermesini istiyorsanız bu ayarı aktifleştirin. Varsayılan olarak RaspAP aynı zamanda kendi ana DHCP sunucusunun isim sunucularını da kullanır." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "Bu ayar dnsmasq yapılandırmasına no-resolv'ı ekler." + +msgid "Add upstream DNS server" +msgstr "Ana(Upstream) DNS sunucusu ekle" + +msgid "Format" +msgstr "Biçimlendir" + +msgid "Choose a hosted server" +msgstr "Bir kurulu sunucu seçin" + +msgid "Log DHCP requests" +msgstr "DHCP isteklerini kaydet" + +msgid "Log DNS queries" +msgstr "DNS sorgularını kaydet" + #: includes/hostapd.php msgid "Basic" msgstr "Basit" @@ -352,10 +379,10 @@ msgid "Information provided by hostapd" msgstr "Bilgi hostapd tarafından sağlandı" msgid "Attempting to start hotspot" -msgstr "paylaşım başlatılıyor" +msgstr "Paylaşım noktası başlatılıyor" msgid "Attempting to stop hotspot" -msgstr "Paylaşım durduruluyor" +msgstr "Paylaşım noktası durduruluyor" msgid "HostAPD is not running" msgstr "HostAPD çalışmıyor" @@ -387,6 +414,9 @@ msgstr "Paylaşımı başlat" msgid "Stop hotspot" msgstr "Paylaşımı durdur" +msgid "Restart hotspot" +msgstr "Paylaşımı yeniden başlat" + msgid "Enable logging" msgstr "Günlük kaydını etkinleştir" @@ -542,7 +572,7 @@ msgid "Loading {0} bandwidth chart" msgstr "{0} bant genişliği tablosu yükleniyor" msgid "Showing {0} to {1} of {2} entries" -msgstr "{2} girdiden {0} ve {1} arası gösteriliyor" +msgstr "{2} girdiden {0} ve {1} arasındakiler gösteriliyor" #: includes/openvpn.php msgid "OpenVPN is not running" diff --git a/locale/vi_VN/LC_MESSAGES/messages.mo b/locale/vi_VN/LC_MESSAGES/messages.mo index a4590755..9dd34d9a 100644 Binary files a/locale/vi_VN/LC_MESSAGES/messages.mo and b/locale/vi_VN/LC_MESSAGES/messages.mo differ diff --git a/locale/vi_VN/LC_MESSAGES/messages.po b/locale/vi_VN/LC_MESSAGES/messages.po index 207707de..d9c87902 100644 --- a/locale/vi_VN/LC_MESSAGES/messages.po +++ b/locale/vi_VN/LC_MESSAGES/messages.po @@ -35,25 +35,25 @@ msgstr "Cổng thông tin wifi RaspAP" msgid "Dashboard" msgstr "Bảng điều khiển" -msgid "Configure WiFi client" -msgstr "Định cấu hình WiFi cho máy khách" +msgid "WiFi client" +msgstr "WiFi cho máy khách" -msgid "Configure hotspot" -msgstr "Định cấu hình điểm phát wifi" +msgid "Hotspot" +msgstr "Điểm phát wifi" -msgid "Configure networking" -msgstr "Đặt cấu hình kết nối mạng" +msgid "Networking" +msgstr "Kết nối mạng" -msgid "Configure DHCP Server" -msgstr "Định cấu hình máy chủ DHCP" +msgid "DHCP Server" +msgstr "Chủ DHCP" -msgid "Configure OpenVPN" -msgstr "Định cấu hình OpenVPN" +msgid "OpenVPN" +msgstr "OpenVPN" -msgid "Configure TOR proxy" -msgstr "Định cấu hình proxy TOR" +msgid "TOR proxy" +msgstr "Proxy TOR" -msgid "Configure Auth" +msgid "Authentication" msgstr "Định cấu hình xác thực" msgid "Change Theme" @@ -332,6 +332,33 @@ msgstr "Dnsmasq đang hoạt động" msgid "Dnsmasq is not running" msgstr "Dnsmasq đang không hoạt động" +msgid "Upstream DNS servers" +msgstr "Upstream DNS servers" + +msgid "Only ever query DNS servers configured below" +msgstr "Only ever query DNS servers configured below" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "This option adds no-resolv to the dnsmasq configuration." + +msgid "Add upstream DNS server" +msgstr "Add upstream DNS server" + +msgid "Format" +msgstr "Format" + +msgid "Choose a hosted server" +msgstr "Choose a hosted server" + +msgid "Log DHCP requests" +msgstr "Log DHCP requests" + +msgid "Log DNS queries" +msgstr "Log DNS queries" + #: includes/hostapd.php msgid "Basic" msgstr "Cơ bản" @@ -402,6 +429,9 @@ msgstr "Khởi động tính năng phát wifi" msgid "Stop hotspot" msgstr "Dừng điểm truy cập" +msgid "Restart hotspot" +msgstr "Khởi động lại wifi" + msgid "Enable logging" msgstr "Bật ghi nhật ký" diff --git a/locale/zh_CN/LC_MESSAGES/messages.mo b/locale/zh_CN/LC_MESSAGES/messages.mo index 213adf02..2e8f36e7 100644 Binary files a/locale/zh_CN/LC_MESSAGES/messages.mo and b/locale/zh_CN/LC_MESSAGES/messages.mo differ diff --git a/locale/zh_CN/LC_MESSAGES/messages.po b/locale/zh_CN/LC_MESSAGES/messages.po index dfbd9261..5c080893 100644 --- a/locale/zh_CN/LC_MESSAGES/messages.po +++ b/locale/zh_CN/LC_MESSAGES/messages.po @@ -1,22 +1,19 @@ -# RaspAP Portable Object file -# Project home: https://github.com/billz/raspap-webgui -# Licensed under the GNU General Public License v3.0 -# This file is distributed under the same license as the RaspAP package -# FIRST AUTHOR billzimmerman@gmail.com, 2017 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: 1.2.1\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-21 23:15+0000\n" +"PO-Revision-Date: 2020-04-14 08:51\n" "Last-Translator: BANKA2017 \n" -"Language-Team: \n" +"Language-Team: Chinese Simplified\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -31,25 +28,31 @@ msgstr "RaspAP WLAN热点" msgid "Dashboard" msgstr "仪表板" -msgid "Configure WiFi client" +msgid "WiFi client" msgstr "WLAN客户端设置" -msgid "Configure hotspot" +msgid "Hotspot" msgstr "WLAN热点设置" -msgid "Configure networking" +msgid "Memory Use" +msgstr "内存用量" + +msgid "CPU Temp" +msgstr "CPU 温度" + +msgid "Networking" msgstr "网络设置" -msgid "Configure DHCP Server" +msgid "DHCP Server" msgstr "DHCP服务器设置" -msgid "Configure OpenVPN" +msgid "OpenVPN" msgstr "OpenVPN设置" -msgid "Configure TOR proxy" +msgid "TOR proxy" msgstr "TOR代理设置" -msgid "Configure Auth" +msgid "Authentication" msgstr "登录设置" msgid "Change Theme" @@ -178,8 +181,8 @@ msgstr "传送包" msgid "Transferred Bytes" msgstr "传送数据" -msgid "Wireless Information" -msgstr "WLAN信息" +msgid "Wireless Client" +msgstr "无线客户端" msgid "Connected To" msgstr "已连接" @@ -248,6 +251,9 @@ msgstr "客户端列表" msgid "Interface" msgstr "接口" +msgid "DNS Server" +msgstr "DNS服务器" + msgid "Starting IP Address" msgstr "起始IP地址" @@ -317,6 +323,33 @@ msgstr "Dnsmasq正在运行" msgid "Dnsmasq is not running" msgstr "Dnsmasq未在运行" +msgid "Upstream DNS servers" +msgstr "上游DNS服务器" + +msgid "Only ever query DNS servers configured below" +msgstr "仅使用下面配置的 DNS 服务器查询" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "如果您希望 RaspAP 只向下面配置的服务器发起 DNS 查询,请启用此项。RaspAP 默认还使用上游 DHCP 服务器上的名称服务器" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "此项将会添加 no-resolv 到 dnsmasq 配置" + +msgid "Add upstream DNS server" +msgstr "添加上游DNS服务器" + +msgid "Format" +msgstr "格式" + +msgid "Choose a hosted server" +msgstr "选择托管服务器" + +msgid "Log DHCP requests" +msgstr "记录 DHCP 请求" + +msgid "Log DNS queries" +msgstr "记录 DNS 查询" + #: includes/hostapd.php msgid "Basic" msgstr "基础" @@ -387,6 +420,9 @@ msgstr "开启WLAN热点" msgid "Stop hotspot" msgstr "关闭WLAN热点" +msgid "Restart hotspot" +msgstr "重新启动Wi-Fi热点" + msgid "Enable logging" msgstr "开启log" @@ -396,6 +432,9 @@ msgstr "log信息输出" msgid "WiFi client AP mode" msgstr "无线网客户端AP模式" +msgid "Bridged AP mode" +msgstr "桥接 AP 模式" + msgid "Hide SSID in broadcast" msgstr "在广播中隐藏SSID" @@ -415,9 +454,6 @@ msgstr "当前设置" msgid "Default Gateway" msgstr "默认网关" -msgid "DNS Server" -msgstr "DNS服务器" - msgid "Alternate DNS Server" msgstr "备用DNS服务器" @@ -630,6 +666,10 @@ msgstr "正尝试启动TOR" msgid "Attempting to stop TOR" msgstr "正尝试停止TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "桥接 AP 模式已启用。对于主机名和 IP,请查看您的路由器管理页面。" + #: common form controls msgid "Save settings" msgstr "保存设置" @@ -651,3 +691,46 @@ msgstr "上" msgid "down" msgstr "下" + +msgid "adblock" +msgstr "广告屏蔽" + +msgid "Ad Blocking" +msgstr "广告屏蔽" + +msgid "Start Ad Blocking" +msgstr "启用广告屏蔽服务" + +msgid "Restart Ad Blocking" +msgstr "重启广告屏蔽服务" + +msgid "Blocklist settings" +msgstr "屏蔽列表设置" + +msgid "Enable blocklists" +msgstr "启用屏蔽列表" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "如果您想 RaspAP 屏蔽广告、跟踪和其他虚拟垃圾的 DNS 请求,请启用此选项。 屏蔽列表是从多个活跃的源收集的,并每日自动更新、清理、优化和调节。" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "此项将会添加 conf-fileaddn-hosts 到 dnsmasq 配置" + +msgid "Choose a blocklist provider" +msgstr "选择一个屏蔽列表提供者" + +msgid "Hostnames blocklist last updated" +msgstr "屏蔽主机名列表最近更新" + +msgid "Domains blocklist last updated" +msgstr "屏蔽域名列表最后更新" + +msgid "Update now" +msgstr "立即更新" + +msgid "Statistics" +msgstr "统计" + +msgid "Information provided by adblock" +msgstr "信息由 adblock 提供" + diff --git a/locale/zh_TW/LC_MESSAGES/messages.mo b/locale/zh_TW/LC_MESSAGES/messages.mo new file mode 100644 index 00000000..19345adf Binary files /dev/null and b/locale/zh_TW/LC_MESSAGES/messages.mo differ diff --git a/locale/zh_TW/LC_MESSAGES/messages.po b/locale/zh_TW/LC_MESSAGES/messages.po new file mode 100644 index 00000000..dc62bada --- /dev/null +++ b/locale/zh_TW/LC_MESSAGES/messages.po @@ -0,0 +1,736 @@ +msgid "" +msgstr "" +"Project-Id-Version: raspap\n" +"Report-Msgid-Bugs-To: Bill Zimmerman \n" +"POT-Creation-Date: 2017-10-19 08:56+0000\n" +"PO-Revision-Date: 2020-04-15 07:13\n" +"Last-Translator: Mike Hsiao \n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Language: zh-TW\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" + +#: index.php +msgid "RaspAP Wifi Configuration Portal" +msgstr "RaspAP Wi-Fi 設定中心" + +msgid "Toggle navigation" +msgstr "切換導航" + +msgid "RaspAP Wifi Portal" +msgstr "RaspAP Wi-Fi 中心" + +msgid "Dashboard" +msgstr "總覽" + +msgid "WiFi client" +msgstr "Wi-Fi 用戶端" + +msgid "Hotspot" +msgstr "熱點" + +msgid "Memory Use" +msgstr "記憶體使用量" + +msgid "CPU Temp" +msgstr "CPU 溫度" + +msgid "Networking" +msgstr "網路界面" + +msgid "DHCP Server" +msgstr "DHCP 伺服器" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "TOR proxy" +msgstr "TOR 代理伺服器" + +msgid "Authentication" +msgstr "使用者帳戶" + +msgid "Change Theme" +msgstr "變更主題" + +msgid "System" +msgstr "系統" + +msgid "About RaspAP" +msgstr "關於 RaspAP" + +#: includes/admin.php +msgid "Authentication settings" +msgstr "認證設定" + +msgid "New passwords do not match" +msgstr "兩次新密碼輸入不一致" + +msgid "Username must not be empty" +msgstr "使用者名稱不能為空白" + +msgid "Admin password updated" +msgstr "管理員密碼已更新" + +msgid "Failed to update admin password" +msgstr "管理員密碼更新失敗" + +msgid "Old password does not match" +msgstr "原有密碼輸入不正確" + +msgid "Username" +msgstr "使用者名稱" + +msgid "Old password" +msgstr "原有密碼" + +msgid "New password" +msgstr "新密碼" + +msgid "Repeat new password" +msgstr "請再輸入新的密碼" + +#: includes/configure_client.php +msgid "Client settings" +msgstr "用戶端設定" + +msgid "SSID" +msgstr "SSID" + +msgid "Channel" +msgstr "頻道" + +msgid "Security" +msgstr "安全性" + +msgid "Passphrase" +msgstr "密碼" + +msgid "Wifi settings updated successfully" +msgstr "Wi-Fi 設定更新成功" + +msgid "Wifi settings updated but cannot restart (cannot execute 'wpa_cli reconfigure')" +msgstr "Wi-Fi 設定已更新,但無法重啟 (無法執行 'wpa_cli reconfigure')" + +msgid "Wifi settings failed to be updated" +msgstr "Wi-Fi 設定更新失敗" + +msgid "Failed to update wifi settings" +msgstr "Wi-Fi 設定更新失敗" + +msgid "Rescan" +msgstr "重新掃瞄" + +msgid "Update" +msgstr "更新" + +msgid "Add" +msgstr "新增" + +msgid "Delete" +msgstr "刪除" + +msgid "Show" +msgstr "顯示" + +msgid "Hide" +msgstr "隱藏" + +msgid "Not configured" +msgstr "未設定" + +msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" +msgstr "小提醒:使用 WEP 認證的基地台,密碼在建立連線後才輸入,因此連線前會顯示為不需認證。RaspAP 目前不支援 WEP 連線。" + +#: includes/dashboard.php +msgid "Interface Information" +msgstr "介面資訊" + +msgid "Interface Name" +msgstr "介面名稱" + +msgid "IPv4 Address" +msgstr "IPv4 位址" + +msgid "IPv6 Address" +msgstr "IPv6 位址" + +msgid "Subnet Mask" +msgstr "子網路遮罩" + +msgid "Mac Address" +msgstr "MAC 位址" + +msgid "Interface Statistics" +msgstr "介面統計" + +msgid "Received Packets" +msgstr "已接收封包" + +msgid "Received Bytes" +msgstr "已接收位元組" + +msgid "Transferred Packets" +msgstr "已傳送封包" + +msgid "Transferred Bytes" +msgstr "已傳送位元組" + +msgid "Wireless Client" +msgstr "無線用戶端" + +msgid "Connected To" +msgstr "已連接至" + +msgid "AP Mac Address" +msgstr "AP MAC 位址" + +msgid "Bitrate" +msgstr "位元率" + +msgid "Signal Level" +msgstr "信號強度" + +msgid "Transmit Power" +msgstr "傳輸功率" + +msgid "Frequency" +msgstr "頻率" + +msgid "Link Quality" +msgstr "連線品質" + +msgid "Information provided by ip and iw and from system" +msgstr "資訊自 ip、iw 及系統取得" + +msgid "No MAC Address Found" +msgstr "找不到 MAC 位址" + +msgid "No IP Address Found" +msgstr "找不到 IP 位址" + +msgid "No Subnet Mask Found" +msgstr "找不到子網路遮罩" + +msgid "No Data" +msgstr "無數據" + +msgid "Not connected" +msgstr "尚未連線" + +msgid "Interface is up" +msgstr "界面運作中" + +msgid "Interface is down" +msgstr "界面停止中" + +msgid "Interface already down" +msgstr "界面已停止運作" + +msgid "Start wlan0" +msgstr "啟動 wlan0" + +msgid "Stop wlan0" +msgstr "停止 wlan0" + +msgid "Connected Devices" +msgstr "已連接裝置" + +#: includes/dhcp.php +msgid "DHCP server settings" +msgstr "DHCP 伺服器設定" + +msgid "Client list" +msgstr "用戶端清單" + +msgid "Interface" +msgstr "界面" + +msgid "DNS Server" +msgstr "DNS 伺服器" + +msgid "Starting IP Address" +msgstr "起始 IP 位址" + +msgid "Ending IP Address" +msgstr "終止 IP 位址" + +msgid "Static Leases" +msgstr "靜態租約" + +msgid "Add static DHCP lease" +msgstr "加入靜態 DHCP 租約" + +msgid "Lease Time" +msgstr "租約時間" + +msgid "Interval" +msgstr "時間單位" + +msgid "Active DHCP leases" +msgstr "使用中的 DHCP 租約" + +msgid "Expire time" +msgstr "到期時間" + +msgid "MAC Address" +msgstr "MAC 位址" + +msgid "Host name" +msgstr "主機名稱" + +msgid "Client ID" +msgstr "用戶 ID" + +msgid "Information provided by Dnsmasq" +msgstr "資訊自 Dnsmasq 取得" + +msgid "Stop dnsmasq" +msgstr "停止 dnsmasq" + +msgid "Start dnsmasq" +msgstr "啟動 dnsmasq" + +msgid "Dnsmasq configuration updated successfully" +msgstr "dnsmasq 組態已成功更新" + +msgid "dnsmasq already running" +msgstr "dnsmasq 已在執行中" + +msgid "Successfully started dnsmasq" +msgstr "dnsmasq 已成功啟動" + +msgid "Failed to start dnsmasq" +msgstr "無法啟動 dnsmasq" + +msgid "Successfully stopped dnsmasq" +msgstr "dnsmasq 已成功停止" + +msgid "Failed to stop dnsmasq" +msgstr "無法停止 dnsmasq" + +msgid "dnsmasq already stopped" +msgstr "dnsmasq 已停止" + +msgid "Dnsmasq is running" +msgstr "dnsmasq 正在執行中" + +msgid "Dnsmasq is not running" +msgstr "Dnsmasq 未執行中" + +msgid "Upstream DNS servers" +msgstr "上層 DNS 伺服器" + +msgid "Only ever query DNS servers configured below" +msgstr "僅使用以下 DNS 伺服器" + +msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "啟用此選項會讓 RaspAP 只從下列 DNS 伺服器查詢網址的對應 IP。RaspAP 預設使用其上層 DHCP 伺服器的 DNS 服務。" + +msgid "This option adds no-resolv to the dnsmasq configuration." +msgstr "此選項會將no-resolv加入 dnsmasq 組態中" + +msgid "Add upstream DNS server" +msgstr "新增上層 DNS 伺服器" + +msgid "Format" +msgstr "格式" + +msgid "Choose a hosted server" +msgstr "選擇常用伺服器" + +msgid "Log DHCP requests" +msgstr "記錄 DHCP 要求" + +msgid "Log DNS queries" +msgstr "記錄 DNS 查詢" + +#: includes/hostapd.php +msgid "Basic" +msgstr "基本" + +msgid "Advanced" +msgstr "進階" + +msgid "Basic settings" +msgstr "基本設定" + +msgid "Wireless Mode" +msgstr "無線模式" + +msgid "Security settings" +msgstr "安全性設定" + +msgid "Security type" +msgstr "安全性類型" + +msgid "Encryption Type" +msgstr "加密類型" + +msgid "PSK" +msgstr "密碼" + +msgid "Advanced settings" +msgstr "進階設定" + +msgid "Country Code" +msgstr "國碼" + +msgid "Information provided by hostapd" +msgstr "資訊自 hoastapd 取得" + +msgid "Attempting to start hotspot" +msgstr "嘗試啟動熱點中" + +msgid "Attempting to stop hotspot" +msgstr "嘗試停止熱點中" + +msgid "HostAPD is not running" +msgstr "HostAPD 未執行中" + +msgid "HostAPD is running" +msgstr "HostAPD 執行中" + +msgid "SSID must be between 1 and 32 characters" +msgstr "SSID 必須包含 1 至 32 個字元" + +msgid "WPA passphrase must be between 8 and 63 characters" +msgstr "WPA 密碼必須包含 8 至 63 個字元" + +msgid "Unknown interface" +msgstr "未知界面" + +msgid "Country code must be blank or two characters" +msgstr "國碼必須為空或兩個英文字母" + +msgid "Wifi Hotspot settings saved" +msgstr "Wi-Fi 熱點設定已儲存" + +msgid "Unable to save wifi hotspot settings" +msgstr "無法儲存 Wi-Fi 熱點設定" + +msgid "Start hotspot" +msgstr "啟動熱點" + +msgid "Stop hotspot" +msgstr "停止熱點" + +msgid "Restart hotspot" +msgstr "重啟熱點" + +msgid "Enable logging" +msgstr "啟用日誌記錄" + +msgid "Logfile output" +msgstr "日誌紀錄" + +msgid "WiFi client AP mode" +msgstr "Wi-Fi 用戶兼熱點模式" + +msgid "Bridged AP mode" +msgstr "橋接模式" + +msgid "Hide SSID in broadcast" +msgstr "隱藏 SSID 廣播" + +msgid "Maximum number of clients" +msgstr "最大用戶數量" + +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "設定於 hastapd 的 max_num_sta 參數,預設及最大值為 2007。設為 0 或空白則套用預設值。" + +#: includes/networking.php +msgid "Summary" +msgstr "概要" + +msgid "Current settings" +msgstr "目前設定" + +msgid "Default Gateway" +msgstr "預設閘道" + +msgid "Alternate DNS Server" +msgstr "備用 DNS 伺服器" + +msgid "Adapter IP Address Settings" +msgstr "界面卡 IP 位址設定" + +msgid "Enable Fallback to Static Option" +msgstr "DHCP 失敗時採用靜態 IP" + +msgid "Static IP" +msgstr "靜態 IP" + +msgid "Enabled" +msgstr "啟用" + +msgid "Disabled" +msgstr "停用" + +msgid "Static IP Options" +msgstr "靜態 IP 選項" + +msgid "Apply settings" +msgstr "套用設定" + +msgid "Information provided by /sys/class/net" +msgstr "資訊自 /sys/class/net 取得" + +#: includes/system.php +msgid "System Information" +msgstr "系統資訊" + +msgid "Language" +msgstr "語言" + +msgid "Language settings" +msgstr "語言設定" + +msgid "Select a language" +msgstr "選擇語言" + +msgid "Language setting saved" +msgstr "語言設定已儲存" + +msgid "Console" +msgstr "命令列" + +msgid "Hostname" +msgstr "主機名稱" + +msgid "Pi Revision" +msgstr "樹苺派版本" + +msgid "Uptime" +msgstr "上線時間" + +msgid "Memory Used" +msgstr "記憶體用量" + +msgid "CPU Load" +msgstr "CPU 使用率" + +msgid "Reboot" +msgstr "重新啟動" + +msgid "Shutdown" +msgstr "關機" + +msgid "System Rebooting Now!" +msgstr "系統重啟中!" + +msgid "System Shutting Down Now!" +msgstr "系統關機中!" + +#: includes/themes.php +msgid "Theme settings" +msgstr "主題設定" + +msgid "Select a theme" +msgstr "選擇主題" + +#: includes/data_usage.php +msgid "Data usage" +msgstr "數據用量" + +msgid "Data usage monitoring" +msgstr "數據用量監控" + +msgid "Hourly traffic amount" +msgstr "每小時數據用量" + +msgid "Daily traffic amount" +msgstr "每日數據用量" + +msgid "Monthly traffic amount" +msgstr "每月數據用量" + +msgid "Hourly" +msgstr "每小時" + +msgid "Daily" +msgstr "每日" + +msgid "Monthly" +msgstr "每月" + +msgid "interface" +msgstr "界面" + +msgid "date" +msgstr "日期" + +msgid "Send MB" +msgstr "傳送 MB" + +msgid "Receive MB" +msgstr "接受 MB" + +msgid "Information provided by vnstat" +msgstr "資訊自 vnstat 取得" + +msgid "Loading {0} bandwidth chart" +msgstr "載入 {0} 圖表中" + +msgid "Showing {0} to {1} of {2} entries" +msgstr "顯示 {2} 個項目中的第 {0} 至 {1} 項" + +#: includes/openvpn.php +msgid "OpenVPN is not running" +msgstr "OpenVPN 未執行中" + +msgid "OpenVPN is running" +msgstr "OpenVPN 執行中" + +msgid "Server settings" +msgstr "伺服器設定" + +msgid "Select OpenVPN configuration file (.ovpn)" +msgstr "選擇 OpenVPN 組態檔案 (.ovpn)" + +msgid "Client Log" +msgstr "用戶端日誌" + +msgid "Port" +msgstr "埠" + +msgid "Protocol" +msgstr "協定" + +msgid "Root CA certificate" +msgstr "根憑證" + +msgid "Server certificate" +msgstr "伺服器憑證" + +msgid "Diffie Hellman parameters" +msgstr "Diffie-Hellman 參數" + +msgid "KeepAlive" +msgstr "KeepAlive" + +msgid "Server log" +msgstr "伺服器日誌" + +msgid "Start OpenVPN" +msgstr "啟動 OpenVPN" + +msgid "Stop OpenVPN" +msgstr "停止 OpenVPN" + +msgid "Information provided by openvpn" +msgstr "資訊自 openvpn 取得" + +msgid "Attempting to start openvpn" +msgstr "嘗試啟動 OpenVPN" + +msgid "Attempting to stop openvpn" +msgstr "嘗試停止 OpenVPN" + +#: includes/torproxy.php +msgid "TOR is not running" +msgstr "TOR 未執行中" + +msgid "TOR is running" +msgstr "TOR 執行中" + +msgid "Relay" +msgstr "中繼" + +msgid "Relay settings" +msgstr "中繼設定" + +msgid "Nickname" +msgstr "暱稱" + +msgid "Address" +msgstr "位址" + +msgid "Start TOR" +msgstr "啟動 TOR" + +msgid "Stop TOR" +msgstr "停止 TOR" + +msgid "Information provided by tor" +msgstr "資訊自 tor 取得" + +msgid "Attempting to start TOR" +msgstr "嘗試啟動 TOR" + +msgid "Attempting to stop TOR" +msgstr "嘗試停止 TOR" + +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "橋接模式已啟用。請由路由器的管理頁面查詢主機名稱及 IP。" + +#: common form controls +msgid "Save settings" +msgstr "儲存設定" + +msgid "Refresh" +msgstr "重新整理" + +msgid "running" +msgstr "執行中" + +msgid "stopped" +msgstr "已停止" + +msgid "Remove" +msgstr "移除" + +msgid "up" +msgstr "執行中" + +msgid "down" +msgstr "已停止" + +msgid "adblock" +msgstr "adblock" + +msgid "Ad Blocking" +msgstr "廣告攔截" + +msgid "Start Ad Blocking" +msgstr "啟動廣告攔截" + +msgid "Restart Ad Blocking" +msgstr "重啟廣告攔截" + +msgid "Blocklist settings" +msgstr "攔截清單設定" + +msgid "Enable blocklists" +msgstr "啟用攔截清單" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "啟用此選項後,RaspAP會攔截廣告、追蹤的 DNS 要求及其它虛擬垃圾。攔截清單由多個維護中的來源集合而成,每天自動更新、清除、優化及調整。" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "此選項將conf-fileaddn-hosts加入 dnsmasq 組態中" + +msgid "Choose a blocklist provider" +msgstr "選擇攔截清單來源" + +msgid "Hostnames blocklist last updated" +msgstr "主機名稱清單最後更新" + +msgid "Domains blocklist last updated" +msgstr "網域清單最後更新" + +msgid "Update now" +msgstr "立即更新" + +msgid "Statistics" +msgstr "統計" + +msgid "Information provided by adblock" +msgstr "資訊自 adblock 取得" + diff --git a/package.json b/package.json index 4747cd5f..300e7fe2 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "title": "RaspAP WiFi Configuration Portal", - "name": "raspap-webgui", - "version": "2.1", + "name": "raspap", + "version": "2.6", "scripts": { "start": "node_modules/.bin/gulp watch" }, - "description": "A simple, responsive web interface to control wifi and hostapd on the Raspberry Pi", + "description": "Simple wireless AP setup & management for Debian-based devices", "keywords": [ "raspberry-pi", "hostapd", @@ -16,34 +16,40 @@ "admin", "app" ], - "homepage": "https://github.com/billz/raspap-webgui", + "homepage": "https://github.com/raspap/raspap-webgui", "bugs": { - "url": "https://github.com/billz/raspap-webgui/issues" + "url": "https://github.com/raspap/raspap-webgui/issues" }, - "license": "MIT", + "license": "GPL-3.0", "author": "RaspAP Developers", "contributors": [ - "Bill Zimmerman (https://github.com/billz)" + "Bill Zimmerman (https://github.com/billz)", + "Lawrence Yau (https://github.com/SirLagz)" ], "repository": { "type": "git", - "url": "https://github.com/billz/raspap-webgui.git" + "url": "https://github.com/raspap/raspap-webgui.git" + }, + "publishConfig": { + "registry": "https://npm.pkg.github.com/" }, "dependencies": { - "bootstrap4-toggle": "3.5.0", - "startbootstrap-sb-admin-2": "4.0.7" - }, - "devDependencies": { "browser-sync": "^2.26.7", "del": "^5.1.0", "gulp": "^4.0.2", "gulp-autoprefixer": "^7.0.1", - "gulp-clean-css": "^4.2.0", + "gulp-clean-css": "^4.3.0", "gulp-header": "^2.0.9", "gulp-plumber": "^1.2.1", - "gulp-rename": "1.4.0", - "gulp-sass": "^4.0.2", + "gulp-rename": "^2.0.0", "gulp-uglify": "^3.0.2", - "merge-stream": "^2.0.0" + "huebee": "^2.1.0", + "jquery": "^3.5.0", + "merge-stream": "^2.0.0", + "node-gyp": "^7.0.0", + "startbootstrap-sb-admin-2": "4.0.7" + }, + "devDependencies": { + "gulp-sass": "^4.0.2" } } diff --git a/raspap.php b/raspap.php index 9487720c..e45e3eb4 100755 --- a/raspap.php +++ b/raspap.php @@ -1,14 +1,19 @@ 'admin', - 'admin_pass' => '$2y$10$YKIyWAmnQLtiJAy6QgHQ.eCpY4m.HCEbiHaTgN6.acNC6bDElzt.i' -); +function getConfig() +{ + $config = array( + 'admin_user' => 'admin', + 'admin_pass' => '$2y$10$YKIyWAmnQLtiJAy6QgHQ.eCpY4m.HCEbiHaTgN6.acNC6bDElzt.i' + ); -if (file_exists(RASPI_CONFIG.'/raspap.auth')) { - if ($auth_details = fopen(RASPI_CONFIG.'/raspap.auth', 'r')) { - $config['admin_user'] = trim(fgets($auth_details)); - $config['admin_pass'] = trim(fgets($auth_details)); - fclose($auth_details); + if (file_exists(RASPI_CONFIG . '/raspap.auth')) { + if ($auth_details = fopen(RASPI_CONFIG . '/raspap.auth', 'r')) { + $config['admin_user'] = trim(fgets($auth_details)); + $config['admin_pass'] = trim(fgets($auth_details)); + fclose($auth_details); + } } + return $config; } + diff --git a/templates/about.php b/templates/about.php index f5c542d1..80ac2dd1 100755 --- a/templates/about.php +++ b/templates/about.php @@ -1,3 +1,8 @@ +
@@ -8,13 +13,22 @@
-
-

-
GNU General Public License v3.0
-

-

RaspAP is a co-creation of @billz and @SirLagz
- with the contributions of our community.

-

https://github.com/billz/raspap-webgui

+
+ + + + + + +
+ + +
+ +
diff --git a/templates/about/general.php b/templates/about/general.php new file mode 100644 index 00000000..144bd51b --- /dev/null +++ b/templates/about/general.php @@ -0,0 +1,23 @@ + +
+
+
+

+
+
RaspAP is a co-creation of billz and SirLagz + with the contributions of our developer community + and language translators. + Learn more about joining the project as a code contributor, + translator or financial sponsor with immediate access to exclusive features available to Insiders.
+
Project documentation is available at https://docs.raspap.com/
+ +
+
+
diff --git a/templates/about/insiders.php b/templates/about/insiders.php new file mode 100644 index 00000000..2bd7bb40 --- /dev/null +++ b/templates/about/insiders.php @@ -0,0 +1,9 @@ + +
+
+
+ +
+
+
+ diff --git a/templates/adblock.php b/templates/adblock.php new file mode 100755 index 00000000..6493100b --- /dev/null +++ b/templates/adblock.php @@ -0,0 +1,54 @@ + + + "> + + "> + + "> + + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+
+ showMessages(); ?> +
+ + + + + +
+ + + + +
+ + +
+
+ +
+
+
+ diff --git a/templates/adblock/custom.php b/templates/adblock/custom.php new file mode 100644 index 00000000..5a6e930c --- /dev/null +++ b/templates/adblock/custom.php @@ -0,0 +1,27 @@ + +
diff --git a/templates/adblock/general.php b/templates/adblock/general.php new file mode 100644 index 00000000..22845e66 --- /dev/null +++ b/templates/adblock/general.php @@ -0,0 +1,43 @@ + +
+

+
+
+
+ +
+ aria-describedby="adblock-description"> + +
+
+

+ + IPv4 example: 0.0.0.0 badhost.com") ?> +

+ addn-hosts directive to the dnsmasq configuration.") ?> +
+

+
+
+
+
+ '.htmlspecialchars($adblock_custom_content, ENT_QUOTES).''; ?> +
+
+
+
+
+

+
+ +
+ aria-describedby="adblock-description"> + +
+

+ block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis.") ?> +

+ conf-file and addn-hosts to the dnsmasq configuration.") ?> +
+

+
+
+
+

+

: +
+
: +
+

+
+ +
+ + +
+
+
+
+
+
+
+ diff --git a/templates/adblock/logging.php b/templates/adblock/logging.php new file mode 100644 index 00000000..8378e68d --- /dev/null +++ b/templates/adblock/logging.php @@ -0,0 +1,10 @@ + +
+

+
+
+ '.htmlspecialchars($adblock_log, ENT_QUOTES).''; ?> +
+
+
+ diff --git a/templates/adblock/stats.php b/templates/adblock/stats.php new file mode 100644 index 00000000..0bde73d7 --- /dev/null +++ b/templates/adblock/stats.php @@ -0,0 +1,15 @@ + +
+

+
+
+ +
+
+
+ diff --git a/templates/admin.php b/templates/admin.php index 16a80714..f6ea44c2 100755 --- a/templates/admin.php +++ b/templates/admin.php @@ -4,14 +4,14 @@
- +
showMessages(); ?>

-
+
diff --git a/templates/configure_client.php b/templates/configure_client.php index 2c414be5..aeca17bd 100755 --- a/templates/configure_client.php +++ b/templates/configure_client.php @@ -1,30 +1,58 @@ -
+
-
+
- +
+
+ +
showMessages(); ?> -
+
-

+

-
- +
+ +
+
+
+
+ + + +
+
-
- - -
-
+ + + + diff --git a/templates/dashboard.php b/templates/dashboard.php index 074d54f9..3b727517 100755 --- a/templates/dashboard.php +++ b/templates/dashboard.php @@ -1,110 +1,137 @@ -
-
- -
-
- -
+
+ +
+
+ +
+
-
-
-
-

-
-
-
-
-
-
-
- -
- -
-
-
-
-
-
+ +
+
-

-
-
-
-
-
+

+
+
+
+ +
+
-
-
-

-
-
-
-
+
+ +
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
-
-
-

+
+
+
+
+

- - - + + + + + + + - - + + + + + + - - - + + + + + + + +
+ 2) : ?> +
+ +
+ +
+
-
+
-
+ - " name="ifup_wlan0" /> + " name="ifup_wlan0" /> - " name="ifdown_wlan0" /> + " name="ifdown_wlan0" /> - +
@@ -114,3 +141,9 @@ $ifaceStatus = $wlan0up ? "up" : "down";
+ diff --git a/templates/dhcp.php b/templates/dhcp.php index 20c20250..6fe48917 100755 --- a/templates/dhcp.php +++ b/templates/dhcp.php @@ -1,197 +1,61 @@ + + + " name="savedhcpdsettings" /> + + " name="stopdhcpd" /> + + " name="startdhcpd" /> + + + +
-
-
-
-
-
- -
-
- -
-
-
-
- showMessages(); ?> -
- - - - -
-
-

DHCP server settings

-
-
- - -
-
-
-
- - -
-
+
+
-
-
- - -
-
+
+
+
+ +
+
+ +
+
+
-
-
- - -
-
- - -
-
- -
-
- - -
-
+
+ showMessages(); ?> + + -
-
- - -
-
+ + - - " name="savedhcpdsettings" /> - - " name="stopdhcpd" /> - - " name="startdhcpd" /> - - -
+ +
+ + + + + +
+ + + +
+ + -
-

Client list

-
-
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- -
-
- - -
-
- " class="form-control"> -
-
- " class="form-control"> -
-
- -
-
- -
- -

-
-
- " class="form-control" autofocus="autofocus"> -
-
- " class="form-control"> -
-
- -
-
- - - - " name="savedhcpdsettings" /> - '; - } else { - echo''; - } - ?> - -
- -
- -
- -
-
diff --git a/templates/dhcp/advanced.php b/templates/dhcp/advanced.php new file mode 100644 index 00000000..69804d86 --- /dev/null +++ b/templates/dhcp/advanced.php @@ -0,0 +1,62 @@ + +
+ +
+
+
+
+ +
+ aria-describedby="no-resolv-description"> + +
+

+ send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers.") ?> +
no-resolv to the dnsmasq configuration.") ?> +

+
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+ "> +
+ +
+
+

+ + + ]/[domain/]][[#][@|[#]]"); ?> + +

+ +
+
+ + +
+ +
diff --git a/templates/dhcp/clients.php b/templates/dhcp/clients.php new file mode 100644 index 00000000..c0d9d06d --- /dev/null +++ b/templates/dhcp/clients.php @@ -0,0 +1,35 @@ +
+

Client list

+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
diff --git a/templates/dhcp/general.php b/templates/dhcp/general.php new file mode 100644 index 00000000..47c802f5 --- /dev/null +++ b/templates/dhcp/general.php @@ -0,0 +1,136 @@ +
+

DHCP server settings

+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+ +
+
+
+ + +
+

+ +

+
+
+ +
Static IP options
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+
+ + +
+

+ gateway/nogateway option for this interface in the DHCPCD configuration.") ?> +

+
+
+ +
DHCP options
+
+
+
+
+ + +
+

+ +

+
+
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
diff --git a/templates/dhcp/logging.php b/templates/dhcp/logging.php new file mode 100644 index 00000000..6050e102 --- /dev/null +++ b/templates/dhcp/logging.php @@ -0,0 +1,29 @@ + +
+

+

dhcpcd and dnsmasq activity.") ?>

+ +
+ aria-describedby="log-dhcp-requests"> + +
+
+ aria-describedby="log-dhcp-queries"> + + " /> +
+ +
+
+ '.htmlspecialchars($log, ENT_QUOTES).''; + } else { + echo ''; + } + ?> +
+
+
diff --git a/templates/dhcp/static_leases.php b/templates/dhcp/static_leases.php new file mode 100644 index 00000000..a8d371ba --- /dev/null +++ b/templates/dhcp/static_leases.php @@ -0,0 +1,79 @@ + +
+
+
+

+

+ + dhcp-host entries to the dnsmasq configuration.") ?> +

+
+ + + +
+
+ " class="form-control"> +
+
+ " class="form-control"> +
+
+ " class="form-control"> +
+
+ +
+
+ +
+ +
+
+ " class="form-control" autofocus="autofocus"> +
+
+ " class="form-control"> +
+
+ " class="form-control"> +
+
+ +
+
+ +
+
+ +
+ aria-describedby="dhcp-ignore-description"> + +
+

+ ignore any clients which are not specified in the static leases list.") ?> + dhcp-ignore to the dnsmasq configuration.") ?> +

+
+
+
+ + + +
+ diff --git a/templates/firewall.php b/templates/firewall.php new file mode 100755 index 00000000..70210346 --- /dev/null +++ b/templates/firewall.php @@ -0,0 +1,110 @@ +
+
+
+
+
+
+ +
+
+
+
+ showMessages(); ?> +

+ + + + + +
+
+

+ +
+
+ %s."), $ap_device); ?> +
+

+
+
+
+ +
+
+
+
+ > + +
+
+ > + +
+

+ +

+
+
+
+
+
+ + " aria-describedby="exclusion-description" > +

+ +
+ %s"), $str_clients); ?>
+ %s is per default excluded."), $ap_device); ?> +
+

+
+
+
+
+
+ + " aria-describedby="excl-ips-description" > +

+ +
+
+ %s"), $vpn_ips); ?> +
+

+
+
+ + " name="apply-firewall" /> + " name="firewall-disable" data-toggle="modal" data-target="#firewallModal"/> + + " name="save-firewall" /> + " name="firewall-enable" data-toggle="modal" data-target="#firewallModal"/> + +
+
+ +
+
+
+ + + + diff --git a/templates/hostapd.php b/templates/hostapd.php index fd1c9551..b6f2fce7 100755 --- a/templates/hostapd.php +++ b/templates/hostapd.php @@ -1,461 +1,80 @@ + + + " /> + + " data-toggle="modal" data-target="#hostapdModal"/> + + "/> + " data-toggle="modal" data-target="#hostapdModal"/> + + + + + +
-
-
-
-
-
- -
-
- -
-
-
-
- showMessages(); ?> -
- - - +
+
- -
-
+
+
+
+ +
+
+ +
+
+
-

-
-
- - -
-
-
-
- - -
-
-
-
- - + showMessages(); ?> + + - SelectorOptions('hw_mode', $arr80211Standard, $selectedHwMode, 'cbxhwmode'); ?> -
-
-
-
- - -
-
-
-
-

-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
-

-
-
- '; - } else { - echo "
Logfile output not enabled"; - } - ?> -
-
-
-
-

-
-
-
- - " data-off="" data-width="110" data-height="40" value="1" /> - -
-
-
-
-
-
- - " data-off="" data-width="110" data-height="40" value="1" /> - -
-
-
-
-
-
- - " data-off="" data-width="110" data-height="40" value="1" /> - -
-
-
-
-
- - " aria-describedby="max_num_sta_help"> - -
-
-
-
- - - - -
-
-
- - " /> - ' , PHP_EOL; - } else { - echo '' , PHP_EOL; - }; - endif ?> - -
- -
+ + + + +
+ + + + +
+ + + +
+ + + +
+
+ diff --git a/templates/hostapd/advanced.php b/templates/hostapd/advanced.php new file mode 100644 index 00000000..d765d34c --- /dev/null +++ b/templates/hostapd/advanced.php @@ -0,0 +1,340 @@ +
+

+
+
+
+ + + /> + +
+
+
+
+
+
+ + + /> + +
+
+
+
+
+
+ + /> + +
+
+
+
+
+
+ + /> + +
+
+
+ +
+
+
+
+
+ + /> + +
+

+ +

+
+
+
+
+ + + + txpower option for the AP interface and the configured country."); ?> +
+
+ +
+
+ + " aria-describedby="max_num_sta_help"> + max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies.") ?> +
+
+
+
+ + + + +
+
+
diff --git a/templates/hostapd/basic.php b/templates/hostapd/basic.php new file mode 100644 index 00000000..f421490d --- /dev/null +++ b/templates/hostapd/basic.php @@ -0,0 +1,31 @@ +
+

+
+
+ + +
+
+
+
+ + +
+
+
+
+ + + +
">
+
+
+
+
+ + +
+
+
diff --git a/templates/hostapd/logging.php b/templates/hostapd/logging.php new file mode 100644 index 00000000..0994f88e --- /dev/null +++ b/templates/hostapd/logging.php @@ -0,0 +1,26 @@ + +
+

+

hostapd activity.") ?>

+ +
+ + /> + + " /> +
+ +
+
+ '.htmlspecialchars($log, ENT_QUOTES).''; + } else { + echo ''; + } + ?> +
+
+
diff --git a/templates/hostapd/security.php b/templates/hostapd/security.php new file mode 100644 index 00000000..7389ee41 --- /dev/null +++ b/templates/hostapd/security.php @@ -0,0 +1,28 @@ +
+

+
+
+
+ + +
+
+ + +
+ +
+ +
+ +
+
+
+
+
+ RaspAP Wifi QR code +
+
+
+
+
diff --git a/templates/networking.php b/templates/networking.php index ade9e993..23c356bc 100755 --- a/templates/networking.php +++ b/templates/networking.php @@ -1,112 +1,108 @@
-
-
-
-
- -
-
-
+
+ +
+
+
+ +
+
+
+
-
-

+

- - -
-
-
-
-

+              
+
+ + + + + + + + + + + + + + + + + + + + + + + +
No route to the internet found

+

+ "> +

+

+ "> +

+
+
+
+
+ +

+
+
+
+
+
+
+ + + + +
+ + + +
+
- -
-
-
- -
-
-
+
- - -
+

-
- -
- -
-

-
- - -
-

-
- - -
-
- -
- -

-
- - + + + +
+
+
+
+

+                      
+
-
- - -
-
- - -
-
- - -
-
- - -
- - - - - + + +
+ +
-
- - -
+
+
-
+
+ diff --git a/templates/openvpn.php b/templates/openvpn.php index db8c9671..4e0adaba 100755 --- a/templates/openvpn.php +++ b/templates/openvpn.php @@ -1,10 +1,22 @@ + + + + ' , PHP_EOL; + } else { + echo '' , PHP_EOL; + } + ?> + + +
- +
showMessages(); ?> -
+ +
-
-

-
-
-
-
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- - -
-
-
-
-
-

-
-
- '.htmlspecialchars($log, ENT_QUOTES).''; - ?> -
-
-
- - - ' , PHP_EOL; - } else { - echo '' , PHP_EOL; - } - ?> - - -
+ + + +
+ + +
- -
-
+ +
+
+ + + + + + diff --git a/templates/openvpn/configs.php b/templates/openvpn/configs.php new file mode 100644 index 00000000..c3e578ee --- /dev/null +++ b/templates/openvpn/configs.php @@ -0,0 +1,35 @@ +
+
+
+

+

+ +
openvpn-client service.") ?> +

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
diff --git a/templates/openvpn/general.php b/templates/openvpn/general.php new file mode 100644 index 00000000..9398884e --- /dev/null +++ b/templates/openvpn/general.php @@ -0,0 +1,70 @@ +
+

+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+

+

    + +
  • ca.crt): enclosed in <ca> ... </ca> tags."); ?>
  • +
  • client.crt): enclosed in <cert> ... </cert> tags."); ?>
  • +
  • client.key): enclosed in <key> ... </key> tags."); ?>
  • +
    +
+

+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ diff --git a/templates/openvpn/logging.php b/templates/openvpn/logging.php new file mode 100644 index 00000000..3d74b0e5 --- /dev/null +++ b/templates/openvpn/logging.php @@ -0,0 +1,17 @@ + +
+

+

openvpn activity.") ?>

+ +
+ aria-describedby="log-openvpn"> + + " /> +
+
+
+ +
+
+
+ diff --git a/templates/system.php b/templates/system.php index c48befce..65a3834e 100755 --- a/templates/system.php +++ b/templates/system.php @@ -1,31 +1,3 @@ -hostname(); -$uptime = $system->uptime(); -$cores = $system->processorCount(); - -// mem used -$memused = $system->usedMemory(); -$memused_status = "primary"; -if ($memused > 90) { - $memused_status = "danger"; -} elseif ($memused > 75) { - $memused_status = "warning"; -} elseif ($memused > 0) { - $memused_status = "success"; -} - -// cpu load -$cpuload = $system->systemLoadPercentage(); -if ($cpuload > 90) { - $cpuload_status = "danger"; -} elseif ($cpuload > 75) { - $cpuload_status = "warning"; -} elseif ($cpuload > 0) { - $cpuload_status = "success"; -} - -?>
@@ -38,93 +10,45 @@ if ($cpuload > 90) {
showMessages(); ?> -
+ - -
-
-
-
-

-
-
-
-
-
-
% -
-
-
-
-
% -
-
- - - - - - - " /> - " /> - - -
-
-
- -
-

-
-
- - -
-
- " /> - -
- -
-

-
-
- -
- - - - -
-
- " /> - " /> - -
- -
-
-
- - - -
-
-
-
+ +
+ + + + + +
+ + + + diff --git a/templates/system/advanced.php b/templates/system/advanced.php new file mode 100644 index 00000000..0cc66e1e --- /dev/null +++ b/templates/system/advanced.php @@ -0,0 +1,25 @@ + +
+

+ +
+ +
+
+ + +
+
+
+
+ + +
+
+ " /> + " /> +
+ +
+ + diff --git a/templates/system/basic.php b/templates/system/basic.php new file mode 100644 index 00000000..887eeea7 --- /dev/null +++ b/templates/system/basic.php @@ -0,0 +1,63 @@ + + +
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
% +
+
+
+
+
% +
+
+
+
+
°C +
+
+ +
+ + + " /> + " /> + +
+
+
+ diff --git a/templates/system/language.php b/templates/system/language.php new file mode 100644 index 00000000..2b04cd53 --- /dev/null +++ b/templates/system/language.php @@ -0,0 +1,13 @@ + +
+

+
+
+ + +
+
+ " /> +
+ diff --git a/templates/system/reset.php b/templates/system/reset.php new file mode 100644 index 00000000..bb598059 --- /dev/null +++ b/templates/system/reset.php @@ -0,0 +1,21 @@ + +
+

+ + +
+
+ + +
+ +
+
+
+ + +
+ + diff --git a/templates/system/theme.php b/templates/system/theme.php new file mode 100644 index 00000000..10bb42ec --- /dev/null +++ b/templates/system/theme.php @@ -0,0 +1,20 @@ + +
+

+
+
+ + +
+
+ + +
+
+
+ +
+ + diff --git a/templates/themes.php b/templates/themes.php deleted file mode 100755 index 4040ee80..00000000 --- a/templates/themes.php +++ /dev/null @@ -1,27 +0,0 @@ -
-
-
-
-
-
- -
-
-
-
-

-
-
- - -
-
-
- - -
-
- -
-
-
diff --git a/templates/torproxy.php b/templates/torproxy.php old mode 100644 new mode 100755 index a7e1196d..bd913e4a --- a/templates/torproxy.php +++ b/templates/torproxy.php @@ -1,7 +1,7 @@
-
Configure TOR proxy
+
TOR proxy