From ad9c9f216aade6635fecc65bd01b3e4c2e5bf435 Mon Sep 17 00:00:00 2001 From: Carlgo11 Date: Wed, 17 Jun 2020 03:13:35 +0200 Subject: [PATCH] Fix build errors & add admin panel --- .github/workflows/jekyll.yml | 48 +-- .gitignore | 13 +- LICENSE | 792 +++++++++++++++++------------------ README.md | 10 +- _config.yml | 15 +- _includes/approval.html | 20 +- _includes/error.html | 14 +- _includes/form.html | 36 +- _includes/loading.html | 16 +- _includes/success.html | 6 +- _layouts/default.html | 51 ++- admin.php | 60 +++ composer.json | 8 +- css/main.css | 418 +++++++++--------- index.html | 26 +- js/main.js | 160 +++---- submit.php | 88 ++-- 17 files changed, 924 insertions(+), 857 deletions(-) create mode 100644 admin.php diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml index 75bb053..1d22c29 100644 --- a/.github/workflows/jekyll.yml +++ b/.github/workflows/jekyll.yml @@ -1,24 +1,24 @@ -name: Jekyll test - -on: [push] - -jobs: - Build_Test: - runs-on: ubuntu-20.04 - name: Build Test - steps: - - uses: actions/checkout@v2 - - uses: actions/cache@v2 - with: - path: vendor/cache - key: ${{ runner.os }}-bundle-${{ hashFiles('**/Gemfile.lock') }} - restore-keys: ${{ runner.os }}-bundle- - - uses: actions/setup-ruby@v1 - - name: Install dependencies - run: | - bundle config set path 'vendor/cache' - bundle config set cache_all true - bundle install --jobs 4 --retry 3 - [ -d "vendor/cache" ] || { bundle package; } - - name: Build Jekyll site - run: bundle exec jekyll build +name: Jekyll test + +on: [push] + +jobs: + Build_Test: + runs-on: ubuntu-20.04 + name: Build Test + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: vendor/cache + key: ${{ runner.os }}-bundle-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: ${{ runner.os }}-bundle- + - uses: actions/setup-ruby@v1 + - name: Install dependencies + run: | + bundle config set path 'vendor/cache' + bundle config set cache_all true + bundle install --jobs 4 --retry 3 + [ -d "vendor/cache" ] || { bundle package; } + - name: Build Jekyll site + run: bundle exec jekyll build diff --git a/.gitignore b/.gitignore index 1b7a237..4798b3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -img/bg.* -Gemfile.lock -composer.lock -vendor/ -.bundle -_site \ No newline at end of file +img/bg.* +Gemfile.lock +composer.lock +vendor/ +.bundle +_site +.idea diff --git a/LICENSE b/LICENSE index da6ab6c..9243bc0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,396 +1,396 @@ -Attribution 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution 4.0 International Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution 4.0 International Public License ("Public License"). To the -extent this Public License may be interpreted as a contract, You are -granted the Licensed Rights in consideration of Your acceptance of -these terms and conditions, and the Licensor grants You such rights in -consideration of benefits the Licensor receives from making the -Licensed Material available under these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - j. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - k. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. - +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/README.md b/README.md index 695711b..4785009 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Unify Guest Portal - -## License - -This work is licensed under the Creative Commons Attribution 4.0 International License. +# Unify Guest Portal + +## License + +This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit [LICENSE](LICENSE). \ No newline at end of file diff --git a/_config.yml b/_config.yml index db49d2f..98a4cc4 100644 --- a/_config.yml +++ b/_config.yml @@ -1,8 +1,9 @@ -theme: null -exclude: - - vendor/bundle - - .bundle - - .gitignore - - composer.json - - Gemfile +theme: null +exclude: + - vendor/bundle + - vendor/cache + - .bundle + - .gitignore + - composer.json + - Gemfile - README.md \ No newline at end of file diff --git a/_includes/approval.html b/_includes/approval.html index 9caf239..4abe313 100644 --- a/_includes/approval.html +++ b/_includes/approval.html @@ -1,11 +1,11 @@ - -
-
-
- Loading... -
-
-
Back
-

Waiting for - approval...

+ +
+
+
+ Loading... +
+
+
Back
+

Waiting for + approval...

\ No newline at end of file diff --git a/_includes/error.html b/_includes/error.html index 0c4a3d8..ac6dffe 100644 --- a/_includes/error.html +++ b/_includes/error.html @@ -1,8 +1,8 @@ - -
-
Back
-
-

-

Error:

-
+ +
+
Back
+
+

+

Error:

+
\ No newline at end of file diff --git a/_includes/form.html b/_includes/form.html index 1788172..a959e67 100644 --- a/_includes/form.html +++ b/_includes/form.html @@ -1,19 +1,19 @@ - -
-
-

Guest Wifi

-
- - - - - -
- -
or
- -
+ +
+
+

Guest Wifi

+
+ + + + + +
+ +
or
+ +
\ No newline at end of file diff --git a/_includes/loading.html b/_includes/loading.html index 08a5692..2b7524d 100644 --- a/_includes/loading.html +++ b/_includes/loading.html @@ -1,9 +1,9 @@ - -
-

Communicating with network...

-
-
- Loading... -
-
+ +
+

Communicating with network...

+
+
+ Loading... +
+
\ No newline at end of file diff --git a/_includes/success.html b/_includes/success.html index 81c9abd..f470259 100644 --- a/_includes/success.html +++ b/_includes/success.html @@ -1,4 +1,4 @@ - -
-

Welcome! 😄

+ +
+

Welcome! 😄

\ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html index 14d93bc..4acef1d 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,27 +1,26 @@ - - - - - - Guest WiFi - - - - - - - - - -
-
- {{ content }} -
-
- - - - - - + + + + + + Guest WiFi + + + + + + + + + +
+ {{ content }} +
+
+ + + + + + \ No newline at end of file diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..30ce105 --- /dev/null +++ b/admin.php @@ -0,0 +1,60 @@ +--- +layout: default +--- +login(); +$guests = $unifi_connection->list_guests(); +$clients = $unifi_connection->list_clients(); +?> +
+ +
+

Requests

+
    + +
  • +
    + + +
    +
  • + + +
+
+ +
+

Online

+
    + list_devices($mac); + + if ($name != "") { + $output = $name; + } + else { + $output = $mac; + } + ?> +
  • + +
+
+
\ No newline at end of file diff --git a/composer.json b/composer.json index 3929924..329f2cc 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ -{ - "require": { - "art-of-wifi/unifi-api-client": "^1.1" - } +{ + "require": { + "art-of-wifi/unifi-api-client": "^1.1" + } } \ No newline at end of file diff --git a/css/main.css b/css/main.css index 306706b..0e3ccf7 100644 --- a/css/main.css +++ b/css/main.css @@ -1,208 +1,212 @@ -@font-face { - font-family: 'Roboto'; - font-weight: 100; - font-style: normal; - font-display: swap; - src: local('Roboto Thin'), url('/fonts/Roboto-Thin.ttf') format('truetype'); -} - -@font-face { - font-family: 'Roboto'; - src: local('Roboto Light'), url('/fonts/Roboto-Light.ttf') format('truetype'); - font-weight: 300; - font-style: normal; - font-display: swap; -} - -.webp body { - background: url("/img/bg.webp") no-repeat; - background-size: cover; - background-position: center center; - background-attachment: fixed; - -} - -.no-webp body { - background: url("/img/bg.jpg") no-repeat; - background-size: cover; - background-position: center center; - background-attachment: fixed; -} - -body { - font-family: 'SF Pro Text', -apple-system, system-ui, 'Raleway', sans-serif; -} - -h1, -h2, -h3, -h4 { - font-family: 'SF Pro Display', -apple-system, system-ui, 'Raleway', sans-serif; - font-weight: 100; -} - -.title { - text-align: center; - line-height: 1.5; -} - -.main { - background-color: rgba(255, 255, 255, 0.9); - color: rgba(0, 0, 0, 0.7); - padding: 15px; - text-align: center; - box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(0, 0, 0, 0.08); - - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - min-height: 252px; -} - -.spinner-grow { - width: 4em; - height: 4em; -} - -.form-control, -.btn { - border-radius: 0; -} - -.btn-back { - float: left; - font-size: 1.5em; - cursor: pointer; - font-weight: 300; - color: #222222b3; -} - -.separator { - margin: 25px auto; - display: flex; - align-items: center; - text-align: center; -} - -.separator::before, -.separator::after { - content: ''; - flex: 1; - border-bottom: 1px solid rgba(0, 0, 0, .1); -} - -.separator::before { - margin-right: .25em; -} - -.separator::after { - margin-left: .25em; -} - -#success h1 { - position: absolute; - top: 40%; - transform: translate(-50%, -50); - text-align: center; - width: 100%; -} - -#approval .spinner { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - margin-top: -2rem; -} - -#approval>h2 { - bottom: 0; - width: 100%; - text-align: center; - position: absolute; - margin-bottom: 3vh; -} - -#loading>div { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} - -#loading>div>div { - width: 3rem; - height: 3rem; -} - -#error-container { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} - -#error-container>h1>i { - font-size: 65px; - line-height: 100px; -} - -#error-container>#error-msg { - font-weight: 200; - width: max-content; -} - -textarea:hover, -input:hover, -textarea:active, -input:active, -textarea:focus, -input:focus, -button:focus, -button:active, -button:hover, -label:focus, -.btn:active, -.btn.active { - outline: 0px !important; - -webkit-appearance: none; - box-shadow: none !important; - border-color: #ced4da !important; -} - -#error { - display: none; -} - -#success { - display: none; -} - -#loading { - display: none; -} - -#approval { - display: none; -} - -#manual { - min-width: max-content; -} - -@media screen and (min-width: 541px) { - #manual { - padding: 6px 35px; - width: max-content !important; - } -} - -.noselect { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +@font-face { + font-family: 'Roboto'; + font-weight: 100; + font-style: normal; + font-display: swap; + src: local('Roboto Thin'), url('/fonts/Roboto-Thin.ttf') format('truetype'); +} + +@font-face { + font-family: 'Roboto'; + src: local('Roboto Light'), url('/fonts/Roboto-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +.webp body { + background: url("/img/bg.webp") no-repeat; + background-size: cover; + background-position: center center; + background-attachment: fixed; + +} + +.no-webp body { + background: url("/img/bg.jpg") no-repeat; + background-size: cover; + background-position: center center; + background-attachment: fixed; +} + +body { + font-family: 'SF Pro Text', -apple-system, system-ui, 'Raleway', sans-serif; +} + +h1, +h2, +h3, +h4 { + font-family: 'SF Pro Display', -apple-system, system-ui, 'Raleway', sans-serif; + font-weight: 100; +} + +.title { + text-align: center; + line-height: 1.5; +} + +.main { + background-color: rgba(255, 255, 255, 0.9); + color: rgba(0, 0, 0, 0.7); + padding: 15px; + text-align: center; + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(0, 0, 0, 0.08); + + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + min-height: 252px; +} + +.spinner-grow { + width: 4em; + height: 4em; +} + +.form-control, +.btn { + border-radius: 0; +} + +.btn-back { + float: left; + font-size: 1.5em; + cursor: pointer; + font-weight: 300; + color: #222222b3; +} + +.separator { + margin: 25px auto; + display: flex; + align-items: center; + text-align: center; +} + +.separator::before, +.separator::after { + content: ''; + flex: 1; + border-bottom: 1px solid rgba(0, 0, 0, .1); +} + +.separator::before { + margin-right: .25em; +} + +.separator::after { + margin-left: .25em; +} + +#success h1 { + position: absolute; + top: 40%; + transform: translate(-50%, -50); + text-align: center; + width: 100%; +} + +#approval .spinner { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + margin-top: -2rem; +} + +#approval>h2 { + bottom: 0; + width: 100%; + text-align: center; + position: absolute; + margin-bottom: 3vh; +} + +#loading>div { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +#loading>div>div { + width: 3rem; + height: 3rem; +} + +#error-container { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +#error-container>h1>i { + font-size: 65px; + line-height: 100px; +} + +#error-container>#error-msg { + font-weight: 200; + width: max-content; +} + +textarea:hover, +input:hover, +textarea:active, +input:active, +textarea:focus, +input:focus, +button:focus, +button:active, +button:hover, +label:focus, +.btn:active, +.btn.active { + outline: 0px !important; + -webkit-appearance: none; + box-shadow: none !important; + border-color: #ced4da !important; +} + +#error { + display: none; +} + +#success { + display: none; +} + +#loading { + display: none; +} + +#approval { + display: none; +} + +#manual { + min-width: max-content; +} + +@media screen and (min-width: 541px) { + #manual { + padding: 6px 35px; + width: max-content !important; + } +} + +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.request-buttons button { + width: 42px; } \ No newline at end of file diff --git a/index.html b/index.html index d62c8c9..4c2b8a7 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,14 @@ ---- -layout: default ---- -{% include form.html %} - -{% include loading.html %} - -{% include approval.html %} - -{% include error.html %} - -{% include success.html %} \ No newline at end of file +--- +layout: default +--- +
+ {% include form.html %} + + {% include loading.html %} + + {% include approval.html %} + + {% include error.html %} + + {% include success.html %} +
\ No newline at end of file diff --git a/js/main.js b/js/main.js index afdba30..aba4500 100644 --- a/js/main.js +++ b/js/main.js @@ -1,81 +1,81 @@ -$(document).ready(function () { - if (getUrlVars()['ssid'] != null) { - let ssid = decodeURIComponent(getUrlVars()['ssid'].replace(/\+/g, ' ')); - $('.title').text(ssid + " WiFi"); - document.title = decodeURIComponent(ssid); - } -}); - -function getUrlVars() { - const vars = {}; - window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, - function (m, key, value) { - vars[key] = value; - }); - return vars; -} - -$('form').submit(function (e) { - // Prevent browser from connecting itself to action path - e.preventDefault(); - - let data = getUrlVars(); - let form = $(this); - data['code'] = form.serializeArray()[0]['value']; - $.ajax({ - type: 'POST', - url: form.attr('action'), - dataType: 'json', - data: data, - timeout: 5000, - accepts: { - text: 'application/json' - }, - success: function () { - // Display success window? - displayView('#success'); - setTimeout(function () { - window.location.replace(decodeURIComponent(getUrlVars()['url'])); - }, 2000); - }, - beforeSend: function () { - // Display #loading - displayView('#loading') - }, - error: function (res) { - // Display #error with #error-msg set - displayView('#error'); - console.error(res); - $('#error-msg').text('Error: ' + res.responseJSON['error']); - - } - - }); - - -}); - -$('#manual').click(function (e) { - displayView('#approval'); -}); - -function displayView(view) { - $('.view').hide(); - $(view).show(); -} -$('.btn-back').click(function () { - location.reload(); -}); - - -$('#otp').keyup(function () { - - var foo = $(this).val().split("-").join(""); // remove hyphens - if (foo.length > 0) { - foo = foo.match(new RegExp('.{1,5}', 'g')).join("-"); - } - $(this).val(foo); - if ($(this).val().length == 11) { - $('form').submit(); - } +$(document).ready(function () { + if (getUrlVars()['ssid'] != null) { + let ssid = decodeURIComponent(getUrlVars()['ssid'].replace(/\+/g, ' ')); + $('.title').text(ssid + " WiFi"); + document.title = decodeURIComponent(ssid); + } +}); + +function getUrlVars() { + const vars = {}; + window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, + function (m, key, value) { + vars[key] = value; + }); + return vars; +} + +$('form').submit(function (e) { + // Prevent browser from connecting itself to action path + e.preventDefault(); + + let data = getUrlVars(); + let form = $(this); + data['code'] = form.serializeArray()[0]['value']; + $.ajax({ + type: 'POST', + url: form.attr('action'), + dataType: 'json', + data: data, + timeout: 5000, + accepts: { + text: 'application/json' + }, + success: function () { + // Display success window? + displayView('#success'); + setTimeout(function () { + window.location.replace(decodeURIComponent(getUrlVars()['url'])); + }, 2000); + }, + beforeSend: function () { + // Display #loading + displayView('#loading') + }, + error: function (res) { + // Display #error with #error-msg set + displayView('#error'); + console.error(res); + $('#error-msg').text('Error: ' + res.responseJSON['error']); + + } + + }); + + +}); + +$('#manual').click(function (e) { + displayView('#approval'); +}); + +function displayView(view) { + $('.view').hide(); + $(view).show(); +} +$('.btn-back').click(function () { + location.reload(); +}); + + +$('#otp').keyup(function () { + + var foo = $(this).val().split("-").join(""); // remove hyphens + if (foo.length > 0) { + foo = foo.match(new RegExp('.{1,5}', 'g')).join("-"); + } + $(this).val(foo); + if ($(this).val().length == 11) { + $('form').submit(); + } }); \ No newline at end of file diff --git a/submit.php b/submit.php index 4e7e20b..9464912 100644 --- a/submit.php +++ b/submit.php @@ -1,44 +1,44 @@ - "Invalid mac address"], JSON_PRETTY_PRINT)); - return; -} - -$unifi_connection = new UniFi_API\Client(getenv('hotspot_user'), getenv('hotspot_password'), getenv('hotspot_url'), getenv('unify_site'), getenv('unify_version'), getenv('unifi_tls')); -$login = $unifi_connection->login(); -$vouchers = $unifi_connection->stat_voucher(); - -if (isset($code)) { - foreach ($vouchers as $voucher) { - $voucher = get_object_vars($voucher); - if ($voucher['code'] == $code) { - $max_up = NULL; - $max_down = NULL; - $usage_quota = NULL; - if (isset($voucher['qos_rate_max_up'])) $max_up = $voucher['qos_rate_max_up']; - if (isset($voucher['qos_rate_max_down'])) $max_down = $voucher['qos_rate_max_down']; - if (isset($voucher['qos_usage_quota'])) $usage_quota = $voucher['qos_usage_quota']; - - $authorized = $unifi_connection->authorize_guest($mac, $voucher['duration'], $max_up, $max_down, $usage_quota, $ap_mac); - $unifi_connection->revoke_voucher($voucher['_id']); - header('Status: 202'); - print("{}")); - return; - } - } -} - -header('Status: 400'); -print(json_encode(['error' => 'Voucher code not found'], JSON_PRETTY_PRINT)); -return; + "Invalid mac address", 'success' => FALSE], JSON_PRETTY_PRINT)); + return; +} + +$unifi_connection = new UniFi_API\Client($_ENV['hotspot_user'], $_ENV['hotspot_password'], $_ENV['unifi_url'], $_ENV['unifi_site'], $_ENV['unifi_version'], FALSE); +$login = $unifi_connection->login(); +$vouchers = $unifi_connection->stat_voucher(); + +if (isset($code)) { + foreach ($vouchers as $voucher) { + $voucher = get_object_vars($voucher); + if ($voucher['code'] == $code) { + $max_up = NULL; + $max_down = NULL; + $usage_quota = NULL; + if (isset($voucher['qos_rate_max_up'])) $max_up = $voucher['qos_rate_max_up']; + if (isset($voucher['qos_rate_max_down'])) $max_down = $voucher['qos_rate_max_down']; + if (isset($voucher['qos_usage_quota'])) $usage_quota = $voucher['qos_usage_quota']; + + $authorized = $unifi_connection->authorize_guest($mac, $voucher['duration'], $max_up, $max_down, $usage_quota, $ap_mac); + $unifi_connection->revoke_voucher($voucher['_id']); + header('Status: 202'); + print(json_encode(['success' => TRUE], JSON_PRETTY_PRINT)); + return; + } + } +} + +header('Status: 400'); +print(json_encode(['success' => FALSE, 'error' => 'Voucher code not found'], JSON_PRETTY_PRINT)); +return;