From 1d8d191d6904129c4530c4e52f5e2423aefa2cfb Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 28 Jun 2020 23:43:03 +0200 Subject: [PATCH 1/4] repackage add version numbers Update upgrade Update check_process cleaning up Update check_process screenshot remove logo Readme_fr source image Update README_fr.md cleaning up --- .gitignore | 2 - LICENSE | 687 ++++++++++++++++++++++++++++- README.md | 73 ++- README_fr.md | 67 +++ check_process | 4 +- conf/app.src | 4 +- conf/nginx.conf | 4 +- manifest.json | 9 +- scripts/_common.sh | 26 +- scripts/backup | 13 +- scripts/change_url | 58 ++- scripts/install | 54 +-- scripts/remove | 17 +- scripts/restore | 39 +- scripts/upgrade | 50 ++- sources/WemaWema.png | Bin 0 -> 113990 bytes sources/extra_files/app/.gitignore | 2 - sources/patches/.gitignore | 2 - 18 files changed, 967 insertions(+), 144 deletions(-) delete mode 100644 .gitignore create mode 100644 README_fr.md create mode 100644 sources/WemaWema.png delete mode 100644 sources/extra_files/app/.gitignore delete mode 100644 sources/patches/.gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] diff --git a/LICENSE b/LICENSE index d43ed98..f288702 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,674 @@ -The MIT License (MIT) + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 -Copyright (c) 2017 Luc Didry + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + Preamble -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + The GNU General Public License is a free, copyleft license for +software and other kinds of works. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md index 2c13c36..0af1c59 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,68 @@ -# WemaWema app for YunoHost +# WemaWema for YunoHost -[![Integration level](https://dash.yunohost.org/integration/wemawema.svg)](https://dash.yunohost.org/appci/app/wemawema) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/wemawema.svg)](https://dash.yunohost.org/appci/app/wemawema) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.maintain.svg) +[![Install WemaWema for YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wemawema) -- [Yunohost project](https://yunohost.org) -- [WemaWema website](https://luc.frama.io/wemawema) -- [WemaWema git repository](https://framagit.org/luc/wemawema) +*[Lire ce readme en français.](./README_fr.md)* -![WemaWema](https://framagit.org/uploads/-/system/project/avatar/17831/Logo.png "WemaWema logo") WemaWema -=== -WemaWema is a "WE MAKE PORN" meme generator, but it can do more +> *This package allows you to install WemaWema quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* + +## Overview + +WemaWema is a *WE MAKE PORN* meme generator, but it can do more. + +**Shipped version:** 26.1 + +## Screenshots + +![](sources/WemaWema.png) + +## Demo + +* [Official demo](https://luc.frama.io/wemawema/?w=WE+MAKE&wx=400&wy=160&ws=150&wc=%23000000&wa=0&wf=Open+Sans&wfs=bold&ww=725&p=PORN&px=400&py=350&ps=220&pc=%23000000&pa=0&pf=Open+Sans&pfs=bold&pw=725&co=%23fcd205&ra=0&gli=false&bgt=plain&rc=%23000000&bgr=%23fcd205&egr=%23ffffff&or=lr&bgi=beer&cor=20&bth=20&width=800&height=400&x=0&y=0&s=1.000&bgu=&r=false&rx=0&ry=0&rs=100&rr=0&woc=%23ffffff&wos=0&poc=%23ffffff&pos=0) + +## Documentation + + * Official documentation: https://framagit.org/luc/wemawema + * YunoHost documentation: If specific documentation is needed, feel free to contribute. + +## YunoHost specific features + +#### Multi-user support + +* Are LDAP and HTTP auth supported? **No** +* Can the app be used by multiple users? **Yes** + +#### Supported architectures + +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wemawema%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/wemawema/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wemawema%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wemawema/) + +## Limitations + +* Any known limitations. + +## Additional information + +* Other info you would like to add about this app. + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/wemawema_ynh/issues + * App website: https://luc.frama.io/wemawema + * Upstream app repository: https://framagit.org/luc/wemawema + * YunoHost website: https://yunohost.org/ + +--- + +## Developer info + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing --debug +or +sudo yunohost app upgrade wemawema -u https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing --debug +``` diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..31562a7 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,67 @@ +# WemaWema pour YunoHost + +[![Integration level](https://dash.yunohost.org/integration/wemawema.svg)](https://dash.yunohost.org/appci/app/wemawema) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wemawema.maintain.svg) +[![Installer WemaWema avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wemawema) + +*[Read this readme in english.](./README.md)* + +> *Ce package vous permet d'installer WemaWema rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install) pour apprendre comment l'installer.* + +## Vue d'ensemble +WemaWema est un générateur de memes *WE MAKE PORN*. + +**Version incluse :** 26.1 + +## Captures d'écran + +![](sources/WemaWema.png) + +## Démo + +* [Démo officielle](https://luc.frama.io/wemawema/?w=WE+MAKE&wx=400&wy=160&ws=150&wc=%23000000&wa=0&wf=Open+Sans&wfs=bold&ww=725&p=PORN&px=400&py=350&ps=220&pc=%23000000&pa=0&pf=Open+Sans&pfs=bold&pw=725&co=%23fcd205&ra=0&gli=false&bgt=plain&rc=%23000000&bgr=%23fcd205&egr=%23ffffff&or=lr&bgi=beer&cor=20&bth=20&width=800&height=400&x=0&y=0&s=1.000&bgu=&r=false&rx=0&ry=0&rs=100&rr=0&woc=%23ffffff&wos=0&poc=%23ffffff&pos=0) + +## Documentation + + * Documentation officielle : https://framagit.org/luc/wemawema + * Documentation YunoHost : Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. + +## Caractéristiques spécifiques YunoHost + +#### Support multi-utilisateur + +* L'authentification LDAP et HTTP est-elle prise en charge ? **Non** +* L'application peut-elle être utilisée par plusieurs utilisateurs ? **Oui** + +#### Architectures supportées + +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wemawema%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/wemawema/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wemawema%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wemawema/) + +## Limitations + +* Limitations connues. + +## Informations additionnelles + +* Autres informations que vous souhaitez ajouter sur cette application. + +## Liens + + * Signaler un bug : https://github.com/YunoHost-Apps/wemawema_ynh/issues + * Site de l'application : https://luc.frama.io/wemawema + * Dépôt de l'application principale : https://framagit.org/luc/wemawema + * Site web YunoHost : https://yunohost.org/ + +--- + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing --debug +ou +sudo yunohost app upgrade wemawema -u https://github.com/YunoHost-Apps/wemawema_ynh/tree/testing --debug +``` diff --git a/check_process b/check_process index c8a97ab..f5a2553 100644 --- a/check_process +++ b/check_process @@ -19,8 +19,8 @@ backup_restore=1 multi_instance=1 incorrect_path=1 - port_already_use=0 - change_url=0 + port_already_use=1 + change_url=1 ;;; Levels Level 1=auto Level 2=auto diff --git a/conf/app.src b/conf/app.src index 15b5855..401cb4c 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://framagit.org/luc/wemawema/repository/25.0/archive.tar.gz -SOURCE_SUM=b78a5832f72e295d6ab0ebf628ab3c21a2aea70cb0086e9c8bba0957eeb4f958 +SOURCE_URL=https://framagit.org/luc/wemawema/-/archive/26.1/wemawema-26.1.tar.gz +SOURCE_SUM=e06b539502d517866eac5bcdd1db9c7cfc6d5a45212749460aa2502c009966db SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/conf/nginx.conf b/conf/nginx.conf index 1f07f47..052c370 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,8 +1,10 @@ -location __PATH__ { +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { # Path to source alias __FINALPATH__/ ; + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } diff --git a/manifest.json b/manifest.json index 74ad28c..defd876 100644 --- a/manifest.json +++ b/manifest.json @@ -3,18 +3,19 @@ "id": "wemawema", "packaging_format": 1, "description": { - "en": "WemaWema is a \"WE MAKE PORN\" meme generator but it can do more", - "fr": "WemaWema est un générateur de mème « WE MAKE PORN » mais il peut faire bien plus" + "en": "\"WE MAKE PORN\" meme generator but it can do more.", + "fr": "Générateur de mème « WE MAKE PORN » mais il peut faire bien plus." }, + "version": "26.1~ynh1", "url": "https://framagit.org/luc/wemawema", - "license": "AGPLv3", + "license": "AGPL-3.0-only", "maintainer": { "name": "Luc Didry", "email": "luc@didry.org", "url": "https://fiat-tux.fr" }, "requirements": { - "yunohost": ">> 2.6.4" + "yunohost": ">> 3.8.0" }, "multi_instance": true, "services": [ diff --git a/scripts/_common.sh b/scripts/_common.sh index bb04a03..944a65e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,13 +1,17 @@ #!/bin/bash -# ============= FUTURE YUNOHOST HELPER ============= -# Delete a file checksum from the app settings -# -# $app should be defined when calling this helper -# -# usage: ynh_remove_file_checksum file -# | arg: file - The file for which the checksum will be deleted -ynh_delete_file_checksum () { - local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_' - ynh_app_setting_delete $app $checksum_setting_name -} \ No newline at end of file +#================================================= +# COMMON VARIABLES +#================================================= + +#================================================= +# PERSONAL HELPERS +#================================================= + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= diff --git a/scripts/backup b/scripts/backup index ac42c18..a3aa1e8 100755 --- a/scripts/backup +++ b/scripts/backup @@ -6,12 +6,8 @@ # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= @@ -27,9 +23,8 @@ ynh_abort_if_errors app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) -db_name=$(ynh_app_setting_get $app db_name) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= # STANDARD BACKUP STEPS diff --git a/scripts/change_url b/scripts/change_url index 4972ad6..e28e5a4 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -22,13 +22,29 @@ new_path=$YNH_APP_NEW_PATH app=$YNH_APP_INSTANCE_NAME #================================================= -# CHECK THE SYNTAX OF THE PATHS +# LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 -test -n "$old_path" || old_path="/" -test -n "$new_path" || new_path="/" -new_path=$(ynh_normalize_url_path $new_path) -old_path=$(ynh_normalize_url_path $old_path) +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --weight=2 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors #================================================= # CHECK WHICH PARTS SHOULD BE CHANGED @@ -51,6 +67,7 @@ fi #================================================= # MODIFY URL IN NGINX CONF #================================================= +ynh_script_progression --message="Updating nginx web server configuration..." --weight=1 nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf @@ -58,30 +75,33 @@ nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf if [ $change_path -eq 1 ] then # Make a backup of the original nginx config file if modified - ynh_backup_if_checksum_is_different "$nginx_conf_path" - # Replace locations starting with old_path - # Look for every location possible patterns (see https://nginx.org/en/docs/http/ngx_http_core_module.html#location) - ynh_replace_string "location\( \(=\|~\|~\*\|\^~\)\)\? $old_path" "location\1 $new_path" "$nginx_conf_path" - # Replace path in "return" directives - ynh_replace_string "return \([[:digit:]]\{3\}\) $old_path" "return \1 $new_path" "$nginx_conf_path" - # Calculate and store the nginx config file checksum - ynh_store_file_checksum "$nginx_conf_path" + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config fi # Change the domain for nginx if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location - ynh_delete_file_checksum "$nginx_conf_path" - mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf # Store file checksum for the new config file location - ynh_store_file_checksum "/etc/nginx/conf.d/$new_domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" fi -#================================================= -# GENERIC FINALISATION #================================================= # RELOAD NGINX #================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=1 -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" --last diff --git a/scripts/install b/scripts/install index 5c6a54a..7034e73 100755 --- a/scripts/install +++ b/scripts/install @@ -24,54 +24,43 @@ domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -# This is a multi-instance app, meaning it can be installed several times independently -# The id of the app as stated in the manifest is available as $YNH_APP_ID -# The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) -# The app instance name is available as $YNH_APP_INSTANCE_NAME -# - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample -# - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 -# - ynhexample__{N} for the subsequent installations, with N=3,4, ... -# The app instance name is probably what you are interested the most, since this is -# guaranteed to be unique. This is a good unique identifier to define installation path, -# db names, ... app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +ynh_script_progression --message="Validating installation parameters..." --weight=1 final_path=/var/www/$app -test ! -e "$final_path" || ynh_die "This path already contains a folder" +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -# Normalize the url path syntax -path_url=$(ynh_normalize_url_path $path_url) - -# Check web path availability -ynh_webpath_available $domain $path_url # Register (book) web path -ynh_webpath_register $app $domain $path_url +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= +ynh_script_progression --message="Storing installation settings..." --weight=1 -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app path $path_url -ynh_app_setting_set $app is_public $is_public +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url +ynh_app_setting_set --app=$app --key=is_public --value=$is_public #================================================= # STANDARD MODIFICATIONS #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Setting up source files..." --weight=2 -ynh_app_setting_set $app final_path $final_path +ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source "$final_path" +ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Configuring nginx web server..." --weight=3 # Create a dedicated nginx config ynh_add_nginx_config @@ -88,20 +77,25 @@ chown -R www-data: $final_path #================================================= # SETUP SSOWAT #================================================= +ynh_script_progression --message="Configuring SSOwat..." --weight=2 -if [ $is_public -eq 0 ] -then # Remove the public access - ynh_app_setting_delete $app skipped_uris -fi -# Make app public if necessary +# Make app public if necessary or protect it if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set $app unprotected_uris "/" + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission "main" --add "visitors" fi #================================================= # RELOAD NGINX #================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=1 -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index d3f86b8..d5bb81b 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,18 +12,22 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -port=$(ynh_app_setting_get $app port) -final_path=$(ynh_app_setting_get $app final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#port=$(ynh_app_setting_get $app port) #================================================= # STANDARD REMOVE #================================================= # REMOVE APP MAIN DIR #================================================= +ynh_script_progression --message="Removing app main directory..." --weight=2 + # Remove the app directory securely ynh_secure_remove "$final_path" @@ -31,6 +35,13 @@ ynh_secure_remove "$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Removing nginx web server configuration..." --weight=1 # Remove the dedicated nginx config ynh_remove_nginx_config + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 9340592..22b3bb7 100755 --- a/scripts/restore +++ b/scripts/restore @@ -6,12 +6,8 @@ # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= @@ -24,22 +20,23 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -final_path=$(ynh_app_setting_get $app final_path) -db_name=$(ynh_app_setting_get $app db_name) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." --weight=1 -ynh_webpath_available $domain $path_url \ - || ynh_die "Path not available: ${domain}${path_url}" +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ - || ynh_die "There is already a directory: $final_path " + || ynh_die --message="There is already a directory: $final_path " #================================================= # STANDARD RESTORATION STEPS @@ -52,8 +49,13 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= +ynh_script_progression --message="Restoring the app main directory..." --weight=3 -ynh_restore_file "$final_path" +ynh_restore_file --origin_path="$final_path" + +#================================================= +# RESTORE USER RIGHTS +#================================================= # Restore permissions on app files chown -R www-data: $final_path @@ -63,5 +65,12 @@ chown -R www-data: $final_path #================================================= # RELOAD NGINX #================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=1 -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 24c69fe..4dd7bec 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,20 +12,25 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -admin=$(ynh_app_setting_get $app admin) -is_public=$(ynh_app_setting_get $app is_public) -final_path=$(ynh_app_setting_get $app final_path) -port=$(ynh_app_setting_get $app port) -db_name=$(ynh_app_setting_get $app db_name) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +#================================================= +# CHECK VERSION +#================================================= + +upgrade_type=$(ynh_check_app_version_changed) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 # Fix is_public as a boolean value if [ "$is_public" = "Yes" ]; then @@ -68,12 +73,18 @@ path_url=$(ynh_normalize_url_path $path_url) # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -# Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source "$final_path" +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." --weight=3 + + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" +fi #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=1 # Create a dedicated nginx config ynh_add_nginx_config @@ -90,20 +101,25 @@ chown -R www-data: $final_path #================================================= # SETUP SSOWAT #================================================= +ynh_script_progression --message="Configuring SSOwat..." --weight=1 -if [ $is_public -eq 0 ] -then # Remove the public access - ynh_app_setting_delete $app skipped_uris -fi -# Make app public if necessary +# Make app public if necessary or protect it if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway - ynh_app_setting_set $app unprotected_uris "/" + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission "main" --add "visitors" fi #================================================= # RELOAD NGINX #================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=1 -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed" --last diff --git a/sources/WemaWema.png b/sources/WemaWema.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4e7a86a90b5a24dc340d317ba36b283c559a6d GIT binary patch literal 113990 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
xtPx0Nf;LmS}Dt}6@_2ArbEXeH36SiCl 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 aVj896GWk}1RGqKM00f?{elF{r5}E+aoT#G! literal 0 HcmV?d00001 diff --git a/sources/extra_files/app/.gitignore b/sources/extra_files/app/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/sources/extra_files/app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] diff --git a/sources/patches/.gitignore b/sources/patches/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/sources/patches/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] From fef846b47b03a0400ea7a934eb20d66d30c30e63 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 29 Jun 2020 09:57:43 +0200 Subject: [PATCH 2/4] Add pull request template --- README_fr.md | 2 +- pull_request_template.md | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 pull_request_template.md diff --git a/README_fr.md b/README_fr.md index 31562a7..379f5b4 100644 --- a/README_fr.md +++ b/README_fr.md @@ -9,7 +9,7 @@ Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install) pour apprendre comment l'installer.* ## Vue d'ensemble -WemaWema est un générateur de memes *WE MAKE PORN*. +WemaWema est un générateur de mèmes *WE MAKE PORN*. **Version incluse :** 26.1 diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..0b20ffd --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,18 @@ +## Problem +- *Description of why you made this PR* + +## Solution +- *And how do you fix that problem* + +## PR Status +- [ ] Code finished. +- [ ] Tested with Package_check. +- [ ] Fix or enhancement tested. +- [ ] Upgrade from last version tested. +- [ ] Can be reviewed and tested. + +## Package_check results +--- +*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* + +[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/wemawema_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/wemawema_ynh%20PR-NUM-%20(USERNAME)/) From eccfbeee3e5074b2f2a14c20c18d15b746b792eb Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 29 Jun 2020 13:41:52 +0200 Subject: [PATCH 3/4] Update upgrade --- scripts/upgrade | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 4dd7bec..a19b6c2 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -98,19 +98,6 @@ ynh_add_nginx_config # Set right permissions for curl installation chown -R www-data: $final_path -#================================================= -# SETUP SSOWAT -#================================================= -ynh_script_progression --message="Configuring SSOwat..." --weight=1 - -# Make app public if necessary or protect it -if [ $is_public -eq 1 ] -then - # Everyone can access the app. - # The "main" permission is automatically created before the install script. - ynh_permission_update --permission "main" --add "visitors" -fi - #================================================= # RELOAD NGINX #================================================= From e865bb1f42bf68fb44a6fab7d17403a22a84362f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 29 Jun 2020 17:45:13 +0200 Subject: [PATCH 4/4] Update LICENSE --- LICENSE | 695 ++------------------------------------------------------ 1 file changed, 21 insertions(+), 674 deletions(-) diff --git a/LICENSE b/LICENSE index f288702..747f3ce 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,21 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +The MIT License (MIT) + +Copyright (c) 2017 Luc Didry + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file