diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b0a28a --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +site-dev.yml +yarn-error.log +cache/ +node_modules/ +public/ +pdf_web/ +tmp/ +.DS_Store +.vscode/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0bc929d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 99, + "singleQuote": true, + "semi": false, + "trailingComma": "none" +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 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 Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server 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, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. diff --git a/README.md b/README.md index 26b9c65..c50b304 100644 --- a/README.md +++ b/README.md @@ -1 +1,36 @@ -# docs-main +# ownCloud Main Page + +**Table of Contents** + +* [Building the Main Page Docs](#building-the-main-page-docs) +* [General Notes](#general-notes) +* [Generating the Documentation](#generating-the-documentation) +* [Target Branch and Backporting](#target-branch-and-backporting) +* [Branching Workflow](#branching-workflow) +* [Create a New Version Branch for ownCloud Server](#create-a-new-version-branch-for-owncloud-server) + +## Building the Main Page Docs + +The ownCloud Main Page documentation is not built independently. Instead, it is built together with the [documentation](https://github.com/owncloud/docs/). However, you can build a local copy of the ownCloud Server documentation to preview changes you are making. + +Whenever a Pull Request of this repo gets merged, it automatically triggers a full docs build. + +## General Notes + +To make life easier, most of the content written in [docs](https://github.com/owncloud/docs#readme) applies also here. For ease of reading, the most important steps are documented here too. For more information see the link provided. Only a few topics of this repo are unique like the branching. + +## Generating the Documentation + +See the [Generating the Documentation](https://github.com/owncloud/docs#generating-the-documentation) in the docs repo for more details as it applies to all documentation repositories. + +## Target Branch and Backporting + +See the the [following section](https://github.com/owncloud/docs#target-branch-and-backporting) as the same rules and notes apply. + +## Branching Workflow + +Please refer to the [Branching Workflow for ownCloud Server](./docs/the-branching-workflow.md) for more information. + +## Create a New Version Branch for ownCloud Server + +Please refer to [Create a New Version Branch for ownCloud Server](./docs/new-version-branch.md) for more information. diff --git a/antora.yml b/antora.yml new file mode 100644 index 0000000..825a198 --- /dev/null +++ b/antora.yml @@ -0,0 +1,9 @@ +name: docs_main +title: ownCloud Main Page +version: next +start_page: ROOT:index.adoc +nav: +- modules/ROOT/partials/nav.adoc + +asciidoc: + attributes: diff --git a/bin/find-orphaned-adoc-files b/bin/find-orphaned-adoc-files new file mode 100755 index 0000000..f38a680 --- /dev/null +++ b/bin/find-orphaned-adoc-files @@ -0,0 +1,275 @@ +#!/usr/bin/env bash + +# +# This script checks which .adoc files are possibly orphaned +# It can cover single and multi manual environments +# +# Note that filenames MUST NOT contain blanks + +AVAILABLE_MANUALS=( ROOT ) +# dependend of root or not, the manual name gets a postfix added, name see below +ROOT_NAME="ROOT" +# all main nav files from the modules have the name nav.adoc +NAV_FILENAME="nav.adoc" +PARTIALS_NAME="partials" +# https://docs.antora.org/antora/2.3/page/resource-id/#id-coordinates +FAMILY='{partialsdir}' +#FAMILY="partial$" +MANUAL_NAME= +MANUAL_POSTFIX="_manual" +PARTIAL_FILES=() +PAGES_FILES=() +PAGES_DIR= +PARTIALS_DIR= +NAV_FILE= + +function get_antora_nav_list() +{ + local filename="$1" + + while read line; do + if [[ ${line} =~ \]$ ]]; then + # remove xref, the level (*), the description ([]), the manual-name + # in case of ROOT, if exists, additionally removes all leading dots and a leading colon + revised_line=$(echo "$line" | sed 's/xref//' | sed 's/\[.*\]//g' | sed -r 's/^\*{1,} //' | sed -E 's/^:.*?://' | sed 's/^\.*//g' | sed 's/^://g') + echo "${revised_line}" + fi + done < "${filename}" +} + +function validate_manual() +{ + # make a comma-separated list of the modules + local list=$(echo ${AVAILABLE_MANUALS[@]} | sed -r 's/[ ]+/, /g') + local manual="$1" + + # ok if manual is in the list of possible manuals + if [[ ${AVAILABLE_MANUALS[@]} =~ (^|[[:space:]])"${manual}"($|[[:space:]]) ]]; then + return 0 + fi + + echo + echo "[${manual}] is not a valid manual." + echo "Available manuals are: ${list}." + echo + exit +} + +function usage() +{ + # create a list of modules separated by | + local list=$(echo ${AVAILABLE_MANUALS[@]} | sed -r 's/[ ]+/|/g') + + echo + echo "Usage: ./bin/find-orphaned-adoc-files [-h] [-n <${list}>]" + echo + echo "-h ... Help" + echo "-n ... Check manual " + echo + echo "Note, files not added by its proper path like ../file.adoc" + echo "are reported as false positives !" +} + +function find_orphans() +{ + local search_pattern= + + validate_manual "$MANUAL_NAME" + + # escape the dollar sign in the search pattern if exists + search_pattern="include::${FAMILY//$/\\$}" + + # define the global variables + # the base directory name depends if there is a single or are multiple manuals available + if [[ ${MANUAL_NAME} = ${ROOT_NAME} ]]; then + BASE_DIR="./modules/${MANUAL_NAME}" + else + BASE_DIR="./modules/${MANUAL_NAME}${MANUAL_POSTFIX}" + fi + # + PAGES_DIR="${BASE_DIR}/pages" + + # define the navigation file + NAV_FILE="${BASE_DIR}/${PARTIALS_NAME}/${NAV_FILENAME}" + + # --> important: the partials dir may change to base_dir/partials_name + PARTIALS_DIR="${BASE_DIR}/${PARTIALS_NAME}" + + # get content for all partials but exclude the nav file, however we call it + # partials directory may not be present + if [ -d "${PARTIALS_DIR}" ]; then + PARTIAL_FILES=($(find "${PARTIALS_DIR}" -type f \( -name '*.adoc' ! -name ${NAV_FILENAME} \) -print | sed "s|$PARTIALS_DIR\/||g" | sort)) + #echo "${PARTIAL_FILES[@]}" | tr ' ' '\n' + #exit + fi + + find_orphans_for_manual "$MANUAL_NAME" +} + +function find_orphans_for_manual() +{ + local not_in_path='-path "**/.DS_Store" -o -path "**/vendor" -o -path "**/.gitkeep"' + local files_with_relative_include=() + local nav_list=() + local not_in_nav=() + local not_in_nav_filename_only=() + local includes_found=() + local true_not_in_nav=() + local search_list=() + local xrefed=() + local not_xrefed=() + local partial_list=() + local not_partial=() + local output=() + local grep_list= + + echo + echo "Finding orphans in the ${MANUAL_NAME} manual" + echo + +# # get a list of all .adoc files but exclude the partials dir + # this list starts with _partial - needs later removal when checking + PAGES_FILES=($(find "${PAGES_DIR}" -type d \( -path "${PARTIALS_DIR}" -o $not_in_path \) -prune -o -type f \( -name '*.adoc' \) -print | sort | sed "s|${PAGES_DIR}/||")) + #echo "${PAGES_FILES[@]}" | tr ' ' '\n' + #exit + + # get all files which have a relative include statement + # (include a file relative the current adoc file) + # this is necessary because these includes need further processing to remove false positives. + # the result includes the relative path of the files + files_with_relative_include=($(grep -oF 'include::./' "${PAGES_FILES[@]/#/${PAGES_DIR}/}" | sed "s|:include::.\/||g" | sort | uniq)) + #echo "${files_with_relative_include[@]}" | tr ' ' '\n' + #exit + + # get all files referenced via xref in the navigation file + nav_list=(`get_antora_nav_list "$NAV_FILE"`) + #echo "${nav_list[@]}" | tr ' ' '\n' + #exit + + # create an array diff of unique files not referenced in the navigation + not_in_nav=($(echo ${PAGES_FILES[@]} ${nav_list[@]} | tr ' ' '\n' | sort | uniq -u)) + #echo "${not_in_nav[@]}" | tr ' ' '\n' + #exit + + # run only if there are files with an include:: statement found + # if not found, true_not_in_nav will not be set + # ${#files_with_relative_include[@]} counts the occurrences + if (( ${#files_with_relative_include[@]} )); then + # make a list of all include lines only keeping the path/file + includes_found=($(grep -w "include:." "${files_with_relative_include[@]}" | sed "s|include::.\/||g" | sed "s/\[[^\[]*$//" | uniq -u)) + #echo "${includes_found[@]}" | tr ' ' '\n' + #exit + + # create a grep-able list in the for of a|b|c... + grep_list=$(echo ${includes_found[@]} | tr ' ' '|') + + # get all items which are not in the nav list + true_not_in_nav=($(echo "${not_in_nav[@]}" | tr ' ' '\n' | grep -vE "${grep_list}")) + #echo "${true_not_in_nav[@]}" | tr ' ' '\n' + #exit + else + true_not_in_nav=${not_in_nav[@]} + #echo "${true_not_in_nav[@]}" | tr ' ' '\n' + #exit + fi + + # if all files found are referenced in the navigation, you do not have orphaned .adoc files + if [ -z "$true_not_in_nav" ]; then + echo -e "\e[1;36mNo orphaned .adoc files in pages from navigation and includes.\e[0m" + echo + fi + + # create a search list like: "xref:path/filename.adoc" + # based on all files found not referenced in the nav file or via include (like the occ commands) + search_list="${true_not_in_nav[@]/#/xref:}" + #echo "${search_list[@]}" | tr ' ' '\n' + #exit + + # get all items which match the search list + xrefed=($(cat "${PAGES_FILES[@]/#/${PAGES_DIR}/}" | grep -of <(echo ${search_list[@]}| tr ' ' '\n') | sort | uniq | sed "s|xref:||")) + #echo ${xrefed[@]} | tr ' ' '\n' + #exit + + # now make a diff of the not in nav and the xrefed match list + # this is the list which is not xref'ed in any adoc file located in pages + not_xrefed=($(echo ${true_not_in_nav[@]} ${xrefed[@]} | tr ' ' '\n' | sort | uniq -u)) + #echo ${not_xrefed[@]} | tr ' ' '\n' + #exit + + if (( ${#not_xrefed[@]} )); then + echo + echo -e "\e[1;35mFollowing files are not listed in nav.adoc or included/xrefed in the pages dir.\e[0m" + echo -e "\e[1;35mCheck if this is intended.\e[1;31m" + echo + printf '%s\n' "${not_xrefed[@]/#/' '${PAGES_DIR}/}" + echo -e "\e[0m" + echo "You may want to check the orphan history via:" + echo + echo "git log --full-history -- full_path_file_from_above" + echo + else + echo -e "\e[1;36mNo orphaned .adoc files in the pages dir (xref).\e[0m" + echo + fi + + # now check if there are orphaned partials files + + # get all files which have an include + family statement + include_list=($(cat "${PAGES_FILES[@]/#/${PAGES_DIR}/}" | grep "${search_pattern}" | sort | uniq)) + #echo ${include_list[@]} | tr ' ' '\n' + #exit + + # get the list of files which are included as a partial + partial_list=($((echo "${include_list[@]}" | tr ' ' '\n') | grep -of <(echo ${PARTIAL_FILES[@]}| tr ' ' '\n'))) + #echo ${partial_list[@]} | tr ' ' '\n' + #exit + + # + not_partial=($(echo ${PARTIAL_FILES[@]} ${partial_list[@]} | tr ' ' '\n' | sort | uniq -u)) + #echo ${not_partial[@]}| tr ' ' '\n' + #exit + + if (( ${#not_partial[@]} )); then + echo -e "\e[1;35mFollowing partial files are not linked anywhere and therefore orphaned.\e[0m" + echo -e "\e[1;35mCheck if this is intended.\e[1;31m" + echo + printf '%s\n' "${not_partial[@]/#/' '${PARTIALS_DIR}/}" + echo -e "\e[0m" + echo "You may want to check the orphan history via:" + echo + echo "git log --full-history -- full_path_file_from_above" + echo + else + echo -e "\e[1;36mNo orphaned .adoc files in partials dir (include).\e[0m" + echo + fi +} + + +while getopts ":hn:" o +do + case ${o} in + n ) + MANUAL_NAME=$OPTARG + ACTION="FIND_ORPHANS" + ;; + : ) + echo "Invalid option: $OPTARG requires an argument" 1>&2 + exit 1 + ;; + h|* ) + ACTION="HELP" + ;; + esac +done +shift $((OPTIND-1)) + +case "$ACTION" in + FIND_ORPHANS) + find_orphans + ;; + HELP | *) + usage + exit + ;; +esac diff --git a/bin/find-orphaned-attachment-files b/bin/find-orphaned-attachment-files new file mode 100755 index 0000000..65d30ca --- /dev/null +++ b/bin/find-orphaned-attachment-files @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# +# This script checks the ownCloud documentation manual(s) to +# see if attachment files are orphaned. +# The file is included by another script which defines the variables needed ! +# +# Note that filenames MUST NOT contain blanks + +AVAILABLE_MANUALS=( ROOT ) +ROOT_NAME="ROOT" +BASE_DIR="" +MANUAL_POSTFIX="_manual" +TASK="ATTACHMENT" +TARGET_DIR="attachments" +# depending on the target, there may be a trailing slash necessary or not +# check how the file is included +SEARCH_PATTERN='link:{attachmentsdir}/' + +# get the full path of the directory where the script runs +DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# load the working script +source ${DIR}/find-orphaned-base + +# start scanning +start_scan diff --git a/bin/find-orphaned-base b/bin/find-orphaned-base new file mode 100755 index 0000000..0eb6b80 --- /dev/null +++ b/bin/find-orphaned-base @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +# +# This script checks the ownCloud documentation manual(s) to +# see if attachment/example/image files are orphaned. +# The file is included by another script which defines the variables needed ! +# +# Note that filenames MUST NOT contain blanks + +# check if directly called and exit in case + if (( ! ${#AVAILABLE_MANUALS[@]} )); then + echo -e "\e[1;31m This script must be called via another script defining the environment.\n Exiting\e[1;37m" + exit + fi + +# escape the dollar sign in the search pattern if exists +SEARCH_PATTERN="${SEARCH_PATTERN//$/\\$}" + +function start_scan() +{ + local list + local manual_postfix= + local found_find=() + local found_fixed=() + local found_grep=() + local grep_list= + local not_linked=() + local count_not_linked= + local is_image= + + list=$(echo ${AVAILABLE_MANUALS[@]} | sed -r 's/[ ]+/, /g') + + echo + echo "Checking for orphaned ${TASK} files in manual: ${list}." + echo "Please run this script from your docs root" + echo + + for manual in "${AVAILABLE_MANUALS[@]}"; do + + unset found_find + unset found_fixed + unset found_grep + + # the base directory name depends if there is a single or are multiple manuals available + if [[ ${manual} = ${ROOT_NAME} ]]; then + BASE_DIR="./modules/${manual}" + else + BASE_DIR="./modules/${manual}${MANUAL_POSTFIX}" + fi + + #echo "${BASE_DIR}" + #echo "${BASE_DIR}/${TARGET_DIR}" + #echo "${BASE_DIR}/pages" + #exit + + [[ ! -e "${BASE_DIR}" ]] && echo "Cannot find ${manual} manual." && continue + + echo -e "\e[1;32mChecking the ${manual} manual \e[0m" + + # return all files found, but omit an error message if TARGET_DIR is not present + found_find=($(find "${BASE_DIR}/${TARGET_DIR}" \ + -type f \( ! -iname ".DS_Store" ! -iname ".gitkeep" \) 2>/dev/null | \ + sed "s|${BASE_DIR}/${TARGET_DIR}/||" | sort)) + + #echo "${found_find[@]}" | tr ' ' '\n' + #exit + + found_fixed=("${found_find[@]/#/${SEARCH_PATTERN}}") + #echo "${found_fixed[@]}" | tr ' ' '\n' + #exit + + # create a grep-able list in the form of a|b|c... + # but remove the pipe symbol from the last position + grep_list=$(echo "${found_fixed[@]/%/\|}" | sed "s/| /|/g" | sed 's/.$//') + #echo "$grep_list" + #exit + + # find any element in all files of the pages directory + found_grep=($(grep -rEow "${grep_list}" "${BASE_DIR}/pages" | sed "s|.*${SEARCH_PATTERN}||g" | sed -e 's/^\///' | sort | uniq)) + #echo "${found_grep[@]}" | tr ' ' '\n' + #exit + + # image needs special treatment because of the possibility of "image::" (double colon) + is_image=$(grep "image:" <<< ${SEARCH_PATTERN}) + if [[ ! -z "$is_image" ]]; then + #echo ${is_image} + grep_list=$(echo "${grep_list}" | sed "s|${SEARCH_PATTERN}|${SEARCH_PATTERN}:|g") + #echo "$grep_list" + #exit + + # extend the result list + found_grep+=($(grep -rEow "${grep_list}" "${BASE_DIR}/pages" | sed "s|.*${SEARCH_PATTERN}:||g" | sed -e 's/^\///' | sort | uniq)) + #echo "${found_grep[@]}" | tr ' ' '\n' + #exit + fi + + # create an array diff and print to output + # the output contains the full relative path + not_linked=($(echo ${found_find[@]} ${found_grep[@]} | tr ' ' '\n' | sort | uniq -u)) + echo "${not_linked[@]/#/${BASE_DIR}/${TARGET_DIR}/}" | tr ' ' '\n' + + # count the number of occurrences + count_not_linked=$(( $count_not_linked + ${#not_linked[@]} )) + #exit + + echo + done + + # print only if there was a match + if (( ${count_not_linked} )); then + echo -e "\e[1;32mCheck completed. \e[0m" + echo + echo "Please consider that files may have been added intentionally but have currently not been included in the documentation." + echo + echo "You may want to check the orphan history via:" + echo + echo "git log --full-history -- full_path_file_from_above" + echo + fi +} diff --git a/bin/find-orphaned-example-files b/bin/find-orphaned-example-files new file mode 100755 index 0000000..a296fed --- /dev/null +++ b/bin/find-orphaned-example-files @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# +# This script checks the ownCloud documentation manual(s) to +# see if example files are orphaned. +# The file is included by another script which defines the variables needed ! +# +# Note that filenames MUST NOT contain blanks + +AVAILABLE_MANUALS=( ROOT ) +ROOT_NAME="ROOT" +BASE_DIR="" +MANUAL_POSTFIX="_manual" +TASK="EXAMPLE" +TARGET_DIR="examples" +# depending on the target, there may be a trailing slash necessary or not +# check how the file is included +# https://docs.antora.org/antora/2.3/page/resource-id/#id-coordinates +SEARCH_PATTERN='include::{examplesdir}' +#SEARCH_PATTERN='include::example$' + +# get the full path the the directory the script runs +DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# load the working script +source ${DIR}/find-orphaned-base + +# start scanning +start_scan diff --git a/bin/find-orphaned-image-files b/bin/find-orphaned-image-files new file mode 100755 index 0000000..5431025 --- /dev/null +++ b/bin/find-orphaned-image-files @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# +# This script checks the ownCloud documentation manual(s) to +# see if image files are orphaned. +# The file is included by another script which defines the variables needed ! +# +# Note that filenames MUST NOT contain blanks + +AVAILABLE_MANUALS=( ROOT ) +ROOT_NAME="ROOT" +BASE_DIR="" +MANUAL_POSTFIX="_manual" +TARGET_DIR="images" +# depending on the target, there may be a trailing slash necessary or not +# check how the file is included +# https://docs.antora.org/antora/2.3/page/resource-id/#id-coordinates +SEARCH_PATTERN='image:' + +# get the full path the the directory the script runs +DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# load the working script +source ${DIR}/find-orphaned-base + +# start scanning +start_scan diff --git a/bin/instructions_makepdf.md b/bin/instructions_makepdf.md new file mode 100644 index 0000000..dca1b1c --- /dev/null +++ b/bin/instructions_makepdf.md @@ -0,0 +1,82 @@ +# Instructions for makepdf + +## Introduction + +`makepdf` generates a pdf version from a manual. Dependening on the parametrization on the command line, it builds either a given manual or all available. To create a pdf manual, `asciidoctor-pdf` is used as processor. Compared to the build to html which uses a different software from the same family, the parametrization of `asciidoctor-pdf` can not use the ui-styles, templates and attributes from the html build. In particular with regard to attributes, this can lead to unresolved "variables" which are printed as defined in the build made. To overcome this issue, an additional software (`yamlparse`) based on bash is used to dynamically create an attribute list from `site.yml` and `antora.yml` which is then added as parameter list to the pdf built. Whenever an attribute change is made in one of the `.yml` files, a new pdf build will use these attributes automatically. + +## Where are PDF Files Generated to + +When running `makepdf` locally, pdf files are generated into the `pdf_web` directory. This is for local viewing purposes only! The folder and the files will not get synced by git - it is exluded via the .gitignore file in the root of the repo. When CI triggers a `makepdf` run, it saves the files to a different location relevant for the webserver. The generated files are quasi-static and will only be overwritten if they exist, but not removed. This means that when having a branch switch, the former pdf file will stay untouched and can be linked - as long it will not get deleted manually! + +## Manual Usage + +To use `makepdf`, call it from the root of the repo. Dependent on the doc repo you use, the list of buildable manuals may differ. + +``` +bin/makepdf -h + +"Usage: ./bin/makepdf [-h] [-e] [-c] [-d] [-m] [-n <${list}>]" + +-h ... help" +-e ... Set failure level to ERROR (default: FATAL) +-c ... clean the ${TARGET_PDF_DIRECTORY}/ directory (contains the locally generated pdf builds) +-d ... Debug mode, prints the book to be converted. Only in combination with -m and/or -n +-m ... Build ALL available manuals +-n ... Build manual . Only in combination with -m +``` + +## Docker Usage + +[//]: <> (More content and details to be added if needed) + +When called from Docker use: + +``` +"commands": [ + "bin/makepdf -m", +], +``` + +## How a pdf is Built + +The general idea of `asciidoctor-pdf` is to create a pdf from a given single file and add options to the build command, see the [CLI Options](https://docs.asciidoctor.org/asciidoctor.js/latest/cli/options/) for details. Because manuals are usually made out of multiple documents, a base document must be created which is then built to pdf. The following method is used: A book template file has to be physically present in the `book_templates/` folder. The following example file shows the basic structure and provides some settings. +``` += ownCloud Administration Manual +:toc: +:toclevels: 2 +:homepage: https://github.com/owncloud/docs +:icon-set: octicon +:icons: font +:listing-caption: Listing +:source-highlighter: rouge +:version-label: Version: +:module_base_path: modules/admin_manual/pages/ +The ownCloud Team +{revnumber}, {revdate} +``` +You can adjust the settings as needed. `:module_base_path:` is the path to the base document files of the buildable manuals and must be set accordingly. The script takes the chosen template file, adds based on the table of contents of the manual (`nav.adoc`) include statemens like below +``` +include::{module_base_path}index.adoc[leveloffset=+1] + +include::{module_base_path}installing.adoc[leveloffset=+1] +... +``` +and pipes this as source to the processor. You can define the level how deep you want to render the table of contents with `:toclevels:`. The pdf file created locally is saved in the `pdf_web` directory with a naming defined by the script. + +When using the debug mode `-d` of `makepdf` as described above, you see the files specified in the base document to use when generating a pdf. + +## Create a New Documentation Repo + +In most cases it is a good idea to copy the contents of an existing repo and adopt them to the needs. In particular you need to take care on following folders and files. + +- Provide book template(s) .adoc file in the `book_templates` directory, adapted them to the requirements. +- Copy the `pdf_web`, `fonts` and `resources` directory. +- Make a copy of an existing `manual_config_pdf` file which must reside on the same level of the makepdf file and adopt its contents according the setup of the new repo. See the description inside the file. It will define the parameters the makepdf script will run for this repo. + +### Debugging + +You will find in `makedf` the creation of the `param` variable. Some of those lines and others are commented. You can uncomment them based on your debugging requirements to print a console output showing which options are created. This is useful if you test new parameters or if you run into build errors (see below). + +## Build Errors + +In very rare cases, it can happen that a pdf build produces errors. This should not be neglected but resolved. One issue identified (and solved) was a case when using a multi-line source bash code block which trailed with a `\`. This code block would not work in bash, should render properly but did not due to a backend bug, see [pdf creation fails when using a codeblock that ends with \ but has no following line with content](https://github.com/asciidoctor/asciidoctor-pdf/issues/1930). In such cases, use the debug mode `-d`, take the file and create a manual build on the command line, adding all attributes and commenting out all includes. Step by step re-enable them and restart the build to see which document is failing. When the problematic file is found, make a copy of the file for backup purposes. Delete all content up to the first section and restart building. Copy back section by section and always do a build. When the problematic section is found do the same thing with the section content. When the issue has been identified, fix it to see if it will build successfully. If a pattern is identifiable, fix all instances and provide those fixes in the backup file. Finally you can drop the debug file and rename the backup file to its original name. A normal build should now succeed. diff --git a/bin/makepdf b/bin/makepdf new file mode 100755 index 0000000..594658a --- /dev/null +++ b/bin/makepdf @@ -0,0 +1,376 @@ +#!/usr/bin/env bash + +# Each manual build is based on a book template found in the mandatory directory book_templates. +# This script creates pdf versions of the manual. +# If no explicit manual is in the parameter list given, all available manuals are built to pdf. +# If called from the command line, the script user the term "master" as branch reference. +# The script uses another script to provide the attribute list of the yaml files dynamically. + +set -e +set -u +set -o noclobber +set -o errexit +set -o pipefail +set -o nounset +IFS=$'\n\t' + +# get the full path the the directory the script runs +DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# define path and file of .yml files to parse for attributes +SITE_YML="${DIR}/../site.yml" +ANTORA_YML="${DIR}/../antora.yml" + +# get all the variables defined specific for that repo +source ${DIR}/manual_config_pdf + +# define common variables +ACTION= +FAILURE_LEVEL= +MANUAL_NAME= +ACTUAL_BRANCH_NAME= + +# the default name is the name used when the branch is master +# this is due to that master does not create a URL component when building +DEFAULT_NAME="next" +MASTER_BRANCH="master" + +# the name of the partials directory +PARTIALS_NAME="partials" + +DRY_RUN=false + +# get the todays date +RELEASE_DATE=$(date +'%B %d, %Y') + +# get the number of manuals +NUM_MANUALS="${#AVAILABLE_MANUALS[@]}" + +# design related variables +STYLE="owncloud" +STYLES_DIRECTORY="resources/themes" +BOOKS_DIRECTORY="book_templates" +FONTS_DIRECTORY="fonts" + +# the target pdf directory must be present and contains a .gitignore file which exludes ALL content +# from being upladed. the directory is used to store local pdf builds. on the server side when running a +# pdf build, the pdf´s are created there - but they will NEVER be added/synced !! +# if there is a pdf on the servers side to be removed, we need to unlik them in den releases from the adoc +# file and tell the sysadmins to remove the pdf from the web folder. +TARGET_PDF_DIRECTORY="pdf_web" + +# error variables +ERR_UNSUPPORTED_MANUAL=21 +ERR_UNSUPPORTED_ACTION=22 + +# yamlparse.sh is a script to get a list of key/value pairs from site.yml which +# will then be used as additional dynamically created argument set for asciidoctor-pdf. +# Else the attributes used can´t be resolved and are printed like {key} +source ${DIR}/yamlparse.sh + +# get the actual branch the pdf build is made for +# the correct branch name will be printed when the pdf is created. +# check if git is present +if command -v git &> /dev/null; then + + # check if we are on a branch and get the name if we are on one + # if the branch name is master, use the content of the "default_name" variable + # for all other cases use the gathered name + currentbranch=$(git symbolic-ref --short -q HEAD 2>/dev/null) + + case ${currentbranch} in + + "") + ACTUAL_BRANCH_NAME='No_Branch' + ;; + + ${MASTER_BRANCH}) + ACTUAL_BRANCH_NAME=${DEFAULT_NAME} + ;; + + *) + ACTUAL_BRANCH_NAME=${currentbranch} + ;; + + esac + +fi + +function usage() +{ + # create a list of modules separated by | + local list=$(echo ${AVAILABLE_MANUALS[@]} | sed -r 's/[ ]+/|/g') + + echo + echo "Usage: ./bin/makepdf [-h] [-e] [-c] [-d] [-m] [-n <${list}>]" + echo + echo "-h ... help" + echo "-e ... Set failure level to ERROR (default: FATAL)" + echo "-c ... clean the ${TARGET_PDF_DIRECTORY}/ directory (contains the locally generated pdf builds)" + echo "-d ... Debug mode, prints the book to be converted. Only in combination with -m and/or -n" + echo "-m ... Build ALL available manuals" + echo "-n ... Build manual . Only in combination with -m" + echo +} + +# clean the directory where the local builds are saved to. +# if we want in a far future files which we want to sync and others not, +# we keep a .gitignore file - even there is already an exclusion of the target +# directory in the root of the repo via .gitignore +function clean_build_dir() +{ + echo "Cleaning ${TARGET_PDF_DIRECTORY}/ directory..." + find $(pwd)/${TARGET_PDF_DIRECTORY}/ -mindepth 1 ! -iname .gitignore -exec rm -r {} \; 2>/dev/null + echo "...${TARGET_PDF_DIRECTORY}/ directory has been cleaned." +} + +# this function generates asciidoc list items based on the navigation file +# the nav file is handed over as parameter used as stream +function convert_antora_nav_to_asciidoc_list() +{ + local level_offset= + local nav_filename="$1" + + # have a blank line between the template content end and the beginning of the inserts + echo + + while read line; do + if [[ ${line} =~ \]$ ]]; then + if (("${NUM_MANUALS}" > 1)) ; then + # on multi manual repos, the level offset is corrected with 2 (NF-2) + level_offset=$(echo "$line" | awk -F"*" '{print NF-2}') + else + # on single manual repos, the level offset is corrected with 1 (NF-1) + level_offset=$(echo "$line" | awk -F"*" '{print NF-1}') + fi + # when having multi manual repos, the last sed in the line below is to remove + # the manual component (:manual_name:) from the string + # this is because we have moved the nav.adoc file into partials and therefore need to add the module + revised_line=$(echo "$line" | sed 's/xref:/include::{module_base_path}/' | sed 's/\[.*\]//g' | sed -r 's/^\*{1,} //' | sed -e 's/\(module_base_path}\)\(.*:\)/\1/') + echo "${revised_line}[leveloffset=+${level_offset}]" + echo + fi + done < "${nav_filename}" +} + +# validate manual checks if the name of the given manual from the command line +# matches against a name to the available manuals +function validate_manual() +{ + # make a comma-separated list of the modules + local list=$(echo ${AVAILABLE_MANUALS[@]} | sed -r 's/[ ]+/, /g') + local manual="$1" + + # ok if manual is in the list of possible manuals + if [[ ${AVAILABLE_MANUALS[@]} =~ (^|[[:space:]])"${manual}"($|[[:space:]]) ]]; then + return 0 + fi + + echo "[${manual}] is not a valid manual." + echo "Available manuals are: ${list}." + return $ERR_UNSUPPORTED_MANUAL +} + +# this function builds the pdf manual +# it is parametrisized by the "build_manuals" function +function build_pdf_manual() +{ + # manual name + local manual="$1" + + # manual root + # the manual root which can differ from the manual name + # this is true when having only one manual + local manual_root="$2" + + # todays date + local release_date="$3" + + # branch name from above + local branch="$4" + + if [ -z "${FIRST_LETTER_CAPITAL}" ] ; then + # first letter can also be lower case + local manual_infix="${manual}" + else + # this name is used as filename and to be printed on the frontpage of the document + # for pdf print, make the first letter of the manual upper case + # ${manual:0:1} is the first character + # ${manual:1} is the rest of the string + local manual_infix="$(tr '[:lower:]' '[:upper:]' <<< ${manual:0:1})${manual:1}" + fi + + local build_directory="$(pwd)/${TARGET_PDF_DIRECTORY}/" + + # this is the path component used for the manual to be generated + # which is either the manual name + postfix or the root name + local source_root= + + # set the path component where the manual files are located + if [[ ${manual} == ${manual_root} ]]; then + source_root="${manual}${MANUAL_POSTFIX_NAME}" + else + source_root="${manual_root}" + fi + + # the book file is the template used to create the final document which is then converted to pdf + local book_file="${BOOKS_DIRECTORY}/ownCloud_${manual_infix}_Manual.adoc" + + # the navigation file for the manual to be built + local nav_file="modules/${source_root}/${PARTIALS_NAME}/nav.adoc" + + # Get the dynamic list of attributes from yml files + # The output after sed is a string like -a key=value -a key=value ... + # For testing, also use the yamltest.sh script + # You can do the same for extensions like kroki if needed (currently not implemented). + # Be aware, that the tabs.js extension MUST not be used in case (html only) + + # site.yml (really global) + local attrib_site=("$(parse_yaml $SITE_YML | grep asciidoc_attributes | sed 's/asciidoc_attributes_/-a /g' | sed 's/\")/\"/' | sed 's/=(/=/' | sed "s/\"'/\'/" | sed "s/'\"/\'/")") + + # antora.yml (branch specific) + local attrib_antora=("$(parse_yaml $ANTORA_YML | grep asciidoc_attributes | sed 's/asciidoc_attributes_/-a /g' | sed 's/\")/\"/' | sed 's/=(/=/' | sed "s/\"'/\'/" | sed "s/'\"/\'/")") + + # concatenate them properly + local attributes=$(printf "%s\n%s\n" "${attrib_site}" "${attrib_antora}") + + if [[ "$DRY_RUN" == true ]]; then + echo "Manual Generation - **DRY RUN**" + echo + echo "${manual} manual would be created with the following content:" + echo + cat $book_file <(convert_antora_nav_to_asciidoc_list "${nav_file}") + return 0 + fi + + echo + echo "Generating: ${manual} manual" + echo "From branch: ${branch}" + echo "Dated: ${release_date}" + echo + + # even that schould not be necessary, create the local pdf directoy + mkdir -p "$build_directory" + + # https://docs.asciidoctor.org/asciidoctor.js/latest/cli/options/ + + # Create argument list, necessary as we have dynamic attributes coming from another file + # The param string needs to be properly constructed, please be careful, see comment below. + # Note regarding the attribute: allow-uri-read + # For details read the comment in ./lib/extensions/remote-include-processor.js + + param='' + param+='-d book ' + param+='-a pdf-stylesdir='${STYLES_DIRECTORY}/' ' + param+='-a pdf-fontsdir='${FONTS_DIRECTORY}' ' + param+='-a pdf-style='${STYLE}' ' + param+='-a format="pdf" ' +# param+='-a experimental="" ' # experimental already set in site.yml + param+='-a examplesdir='$(pwd)/modules/${source_root}/examples/' ' + param+='-a imagesdir='$(pwd)/modules/${source_root}/images/' ' + param+='-a partialsdir='$(pwd)/modules/${source_root}/partials/' ' + param+='-a revnumber='${branch}' ' + param+='-a revdate="'${release_date}'" ' + param+='-a allow-uri-read="" ' + param+="$attributes"' ' + param+='--base-dir '$(pwd)' ' + param+='--out-file '${build_directory}/${branch}_ownCloud_${manual_infix}_Manual.pdf' ' + +# temporary add in case of issues +# param+='--trace ' +# param+='--verbose ' + +# please uncomment in case you want/need debugging +# echo "Parameterlist, useful for debugging" +# echo $param +# echo +# cat $book_file <(convert_antora_nav_to_asciidoc_list "${nav_file}") +# exit + +# createpdf="asciidoctor-pdf ${FAILURE_LEVEL} ${param} - < <(cat ${book_file})" + + createpdf="asciidoctor-pdf ${FAILURE_LEVEL} ${param} - < <(cat ${book_file} <(convert_antora_nav_to_asciidoc_list ${nav_file}))" + + eval ${createpdf} + +} + +# this function is called when the -m (build) option is passed on the command line +# the optional manual name comes also from the command line +function build_manuals() +{ + local actual_manual + + # if no specific manual is named, then build them all, even only one manual is avalable + # the manual name comes from the available manuals array + if [ -z "${MANUAL_NAME}" ]; then + for actual_manual in "${AVAILABLE_MANUALS[@]}" + do + # depending if there is only one manual in the available array, the entry point may be named differently + if (("${NUM_MANUALS}" > 1)) ; then + # if there are more than one manuals in the array of available one + build_pdf_manual "${actual_manual}" "${actual_manual}" "${RELEASE_DATE}" "${ACTUAL_BRANCH_NAME}" + else + # if there is only one manual in the array of available one + build_pdf_manual "${actual_manual}" "${MANUAL_ROOT_NAME}" "${RELEASE_DATE}" "${ACTUAL_BRANCH_NAME}" + fi + done + + # build only the given manual + else + # first check if the manual name given is a valid one out of the available one + validate_manual "${MANUAL_NAME}" + + # depending if there is only one manual in the available array, the entry point may be named differently + if (("${NUM_MANUALS}" > 1)) ; then + # if there are more than one manuals in the array of available one + build_pdf_manual "${MANUAL_NAME}" "${MANUAL_NAME}" "${RELEASE_DATE}" "${ACTUAL_BRANCH_NAME}" + else + # if there is only one manual in the array of available one + build_pdf_manual "{$MANUAL_NAME}" "${MANUAL_ROOT_NAME}" "${RELEASE_DATE}" "${ACTUAL_BRANCH_NAME}" + fi + fi +} + +while getopts ":hecdmn:" o +do + case ${o} in + d ) + DRY_RUN=true + ;; + n ) + MANUAL_NAME=$OPTARG + ;; + m ) + ACTION="BUILD_MANUALS" + ;; + c ) + ACTION="CLEAN" + ;; + e ) + FAILURE_LEVEL='--failure-level=ERROR' + ;; + : ) + echo "Invalid option: $OPTARG requires an argument" 1>&2 + exit 1 + ;; + h|* ) + ACTION="HELP" + ;; + esac +done + +shift $((OPTIND-1)) + +case "$ACTION" in + BUILD_MANUALS) + build_manuals + ;; + CLEAN) + clean_build_dir + ;; + HELP | *) + usage + exit $ERR_UNSUPPORTED_ACTION + ;; +esac diff --git a/bin/manual_config_pdf b/bin/manual_config_pdf new file mode 100755 index 0000000..8c20177 --- /dev/null +++ b/bin/manual_config_pdf @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# if there is manual in the available manuals array below, +# the manual directory is set to ROOT and not the manual name dynamically generated from the array list +# also, set in that case the postfix_name to "" and have the manual name like you want to print it (e.g. "Desktop_Client") +# only change ROOT in case you know what you are doing +# be aware that a manual name MUST NOT contain a blank +MANUAL_ROOT_NAME="ROOT" +# the postfix component is used to create the path to the manual like admin_manual +MANUAL_POSTFIX_NAME="_manual" +# note that this name must be part of the book filename in books/ +# a part of the file name is composed by available_manuals+manual_postfix +AVAILABLE_MANUALS=(admin user developer) +# define if the first letter of the manual name must be captitalized (Desktop) +# make empty in case it can be also lower case (like iOS-App) +FIRST_LETTER_CAPITAL="Y" diff --git a/bin/optimize_crawl b/bin/optimize_crawl new file mode 100755 index 0000000..fc1180f --- /dev/null +++ b/bin/optimize_crawl @@ -0,0 +1,400 @@ +#!/usr/bin/env bash + +# optimizes sitemap-xxx.xml and robots.txt for improved crawling as we only need references to "next" urls. +# +# 1.) deletes in all sitemap-.xml files all xml blocks not containing the term "next" (DEFAULT_NAME) +# post the product name. this is done only for only those xml files, which have the new docs structure +# containing "next" as part of the url for the master branch. +# +# 2.) if uncommented in the code, adds at the end of the robots.txt file "Disallow" directives for all +# non "next" urls/* which match the new docs structure containing "next", e.g. Disallow: /server/10.8/* +# +# the script is intended to be called from the root of this repo. +# +# see the "PRODUCTS" variable for eligable repos +# +# note, no file should be created manually or by an other process with the extension defined in BACKUP_EXT. +# +# +# SEE IMPORTANT COMMENT AT ABOUT LINE 200 + +set -e +set -u +set -o noclobber +set -o errexit +set -o pipefail +set -o nounset +IFS=$'\n\t' + +# these are the products which have the new doc structure using a version, at minimum 'next'. +# only those are taken for optimisation! +# the name must be identical to the name tag in antora.yml of the particular doc repo. +PRODUCTS=(docs server ocis webui desktop ios-app android branding) + +# the location where the site is built to +HTML_ROOT="public" + +# the name of the master sitemap file +# this file includes all other sitemaps +SITEMAP="sitemap.xml" + +# define common variables +ACTION= +DOC_WEB_ROOT= +SITEMAPS_TO_USE= +DRY_RUN=false + +# note that the extension must include the leading dot +BACKUP_EXT=".original" + +# the default name is the name used when the branch is master. +# only for those products which have the new doc structure. +DEFAULT_NAME="next" + +# error variables +ERR_UNSUPPORTED_ACTION=22 + +SITEMAP_ROOT_FILE="${HTML_ROOT}/${SITEMAP}" + +# the main function which processes all files +function run() +{ + local i= + local url= + local hit= + local first= + local actual=() + local product_name= + local current_map= + local current_robot= + local product_name= + local unuseable_releases=() + local sitemap_header= + local url_component_ok= + local new_xml_content= + local add_robot_content= + + current_robot="${HTML_ROOT}/robots.txt" + + # find all files in the html root dir, and only there, where the extension is backup_ext + # if found, those files should be reverted back to the original state before continue executing + for i in `find "${HTML_ROOT}" -maxdepth 1 -name "*${BACKUP_EXT}" -type f`; do + hit=true + done + if [ "$hit" = true ]; then + echo + echo -e "\e[1;31mThere were files found indicating a past run. \e[0m" + echo -e "\e[1;31mRevert them first. \e[0m" + usage + exit $ERR_UNSUPPORTED_ACTION + fi + + echo -e "\e[1;32mOptimizing \e[0m" + echo + + # changes in the robots file only when not in debug mode + if [[ "$DRY_RUN" == false ]]; then + # create a copy of the robots file to make a backup + cp "${current_robot}" "${current_robot}${BACKUP_EXT}" + + # add a blank line for better visibility to the following disallows + # (not using $'\n'... becomes a double blank line when used alone) + cat <<< "" >> "${current_robot}" + fi + + # get the current existing docs url from sitemap.xml + get_doc_www_root "${SITEMAP_ROOT_FILE}" + + # get the list of sitemaps to process + get_sitemaps "${SITEMAP_ROOT_FILE}" "${PRODUCTS[@]}" + #printf '%s\n' "${SITEMAPS_TO_USE[@]}" + + # iterate over all sitemap files + for current_map in "${SITEMAPS_TO_USE[@]}" + do + + new_xml_content= + + #echo "${current_map}" + # get the product name of the current iterating map + product_name=($(get_product_name "${current_map}")) + # echo "$product_name" + + # get all the releases we do not need to keep + unuseable_releases=($(get_unuseable_releases "${current_map}")) + # printf '%s\n' "${unuseable_releases[@]}" + +# keep this, for testing purposes only +# # get the header of the sitemap file +# sitemap_header=$(get_sitemap_header "${current_map}") +# #echo "$sitemap_header" + + url_component_ok="${DOC_WEB_ROOT}"/"${product_name}"/"${DEFAULT_NAME}"/ + + i=-1 + url=false + hit=false + first=true + unset actual + + # read the current xml file and remove all non-"next" entries + while read line; do + i=$((i+1)) + actual[$i]="${line}" + + # starting the block. we expect that are in seperate lines + if [[ "${line}" == "" ]]; then + url=true + first=false + else + # get all lines before the first , there is always necessary stuff above to be taken + # we do not need an array here but add the lines one by one + if [ "$first" = true ]; then + new_xml_content="${new_xml_content}""${line}"$'\n' + # unset the array to remove any leftovers for the first match of + # necessary as we do not know if the first url block will be a hit or not + unset actual + #printf '%s\n' "${new_xml_content[@]}" + continue + fi + fi + + # we are inside a block + if [ "$url" = true ]; then + # check if it is a block + if [[ "${line}" == ""* ]]; then + # check if it contains a usable url with "next" + if [[ "${line}" == *"${url_component_ok}"* ]]; then + hit=true + #echo "${line}" + fi + fi + fi + + # at the end of the block + if [[ "${line}" == "" ]]; then + # use only if we have a hit + if [ "$hit" == true ]; then + #printf '%s\n' "${actual[@]}" + new_xml_content="${new_xml_content}"$(printf '%s\n' "${actual[@]}")$'\n' + fi + # if we had a hit, reset all + i=-1 + url=false + hit=false + unset actual + fi + + done < "${current_map}" + + # finally, add all the remaining elements which are post the last + # the last actual array contains all lines after the last + new_xml_content="${new_xml_content}"$(printf '%s\n' "${actual[@]}") + + # create a disallow entry for the particular product containig non- "next" entries + unset actual + add_robot_content= #$'\n' + for actual in "${unuseable_releases[@]}" + do + #echo $actual + url_component_ok=/"${product_name}"/"${actual}"/* +# +# NOTE the following script line is temporarily commented. +# +# Google can't reindex a site where robots.txt disallows urls which are, when accessed, redirected to a disallowed +# page, even robots.txt is valid and does not disallow the site itself. +# +# robots.txt --> disallow: /server/10.8/* +# docs.owncloud.com --> docs.owncloud.com/server/latest --> docs.owncloud.com/server/10.8 (** bang **) +# +# when server gets its own repository and the main site entry does not automatically redirect to server/latest, +# this comment can be removed and the disallow is added again. +# +# add_robot_content="${add_robot_content}""Disallow: ""${url_component_ok}"$'\n' + done + + # echo the output in debug mode but do not do anything else + # make the headline green for better identification of the current xml file + if [[ "$DRY_RUN" == true ]]; then + echo + echo -e "\e[1;32m${current_map} \e[0m" + echo + echo "${new_xml_content}" + echo + echo -e "\e[1;32mTo be added to ${HTML_ROOT}/robots.txt\e[0m" + echo "${add_robot_content}" + else + # write the changes to the files + # backup the current sitemap file + mv "${current_map}" "${current_map}${BACKUP_EXT}" + # create a new sitemap file and write the new contents + cat <<< "$new_xml_content" > "$current_map" + # append the contents to the new robots file + cat <<< "$add_robot_content" >> "${current_robot}" + fi + + # for testing to make only one block +# break + done + + # remove any emtpy lines at the END of the script + # this keeps the content compact if not adding disallows + sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' "${current_robot}" + +} + +# get the header lines of the current sitemap file +function get_sitemap_header() +{ + # example + # + # + local sh= + sh=$(sed '//Q' "$1") + echo "${sh}" +} + +# get all unusabe releases of the current sitemap file +function get_unuseable_releases() +{ + local a=() + local ur=() + + # make an array of the default name to intersect with the existing names + local name=( "${DEFAULT_NAME}" ) + + ur=($(grep -oP '(?<=loc>)[^<]+' "$1" | grep -Po '\w\K/\w+[^?]+' | cut -c 2- | cut -d \/ -f 2 | sort | uniq)) + + # intersect the arrays + # the array must be returned in this case with printf and not with echo + readarray -t a < <(echo ${ur[@]} ${name[@]} | tr ' ' '\n' | sort | uniq -d | xargs echo ${ur[@]} | tr ' ' '\n' | sort | uniq -u) + printf '%s\n' "${a[@]}" +} + +# get the product name of a particular sitemap file +function get_product_name() +{ + local pn= + pn=($(grep -oP '(?<=loc>)[^<]+' "$1" | grep -Po '\w\K/\w+[^?]+' | cut -c 2- | cut -d \/ -f 1 | uniq)) + echo "${pn}" +} + +# query the URL of the docs site. +# this can also be a local address (e.g. ip:port) if you have built e.g. with "yarn antora-local". +# will be used to identify a deletable block in a sitemap file +function get_doc_www_root() +{ + DOC_WEB_ROOT=($(grep -oP '(?<=loc>)[^<]+' "$1" | cut -d/ -f1-3 |uniq)) + #echo "${DOC_WEB_ROOT}" +} + +# get_sitemaps +# get all sitemap files which are available and match the product array list +# using parameters helps customizing the function easily +function get_sitemaps() +{ + local a=() # helper variable + local sitemap_base_file="$1" # Save first argument in a variable + shift # Shift all arguments to the left (original $1 gets "lost") + local b=("$@") # Rebuild the products array with rest of arguments + local found_sitemaps=() # the list of sitemap files found + + # append .xml to each availabe product and sort the outcome + a=( "${b[@]/%/.xml}" ) + readarray -t available_products < <(printf '%s\n' "${a[@]}" | sort) + #printf '%s\n' "${available_products[@]}" + + # get the list of referenced sitemaps from the main sitemap file and store it into an array + # the name is stored without the extension ".xml" + # the files are defined inbetween the tags + # for matching the arrays, we need to remove the leading "sitemap-" string + readarray -t found_sitemaps < <(grep -oP '(?<=loc>)[^<]+' "${sitemap_base_file}" | grep -Po '\w\K/\w+[^?]+' | cut -c 2- | sed 's/sitemap-//g' | sort) + #printf '%s\n' "${found_sitemaps[@]}" + + # Intersection of possible and available sitmap files + readarray -t a < <(echo ${available_products[@]} ${found_sitemaps[@]} | tr ' ' '\n' | sort | uniq -d) + a=( "${a[@]/#/sitemap-}" ) + #printf '%s\n' "${a[@]}" + SITEMAPS_TO_USE=( "${a[@]/#/${HTML_ROOT}/}" ) + #printf '%s\n' "${SITEMAPS_TO_USE[@]}" +} + +# rename all files with the extension ${BACKUP_EXT} back to its original extension. +# this is only when playing around and you do not want to manually type all the commands +function revert() +{ + local f= + + echo + # find all files in the html root dir, and only there, where the extension is backup_ext + for f in `find "${HTML_ROOT}" -maxdepth 1 -name "*${BACKUP_EXT}" -type f`; do + # move the file by removing the backup extension + mv -- "${f}" "${f%${BACKUP_EXT}}" + echo -e "\e[1;32mReverting file: \e[0m" "${f}" + #echo "${f%${BACKUP_EXT}}" + #echo "$f" + done + # if f is empty there was nothing found to be reverted + if [ -z "$f" ]; then + echo -e "\e[1;32mNothing found to be reverted \e[0m" "${f}" + fi + echo +} + +function revert_and_run() +{ + revert + run +} + +function usage() +{ + echo + echo "Usage: bin/optimize_crawl [-h] [-e] [-x] [-d] [-r]" + echo + echo "-h ... help" + echo "-e ... Execute (add debug mode for a dry run)" + echo "-x ... Revert first and Execute (add debug mode for a dry run)" + echo "-d ... Debug mode, print only of the optimized sitmap content, no saving." + echo "-r ... Revert backuped files to originals if exists." + echo +} + +while getopts ":rdexh:" o +do + case ${o} in + r) + ACTION="REVERT" + ;; + d ) + DRY_RUN=true + ;; + e) + ACTION="RUN" + ;; + x) + ACTION="REVERT_AND_RUN" + ;; + h | * ) + ACTION="HELP" + ;; + esac +done + +shift $((OPTIND-1)) + +case "$ACTION" in + REVERT) + revert + ;; + RUN) + run + ;; + REVERT_AND_RUN) + revert_and_run + ;; + HELP | *) + usage + exit $ERR_UNSUPPORTED_ACTION + ;; +esac diff --git a/bin/ownCloudDocPdf.py b/bin/ownCloudDocPdf.py new file mode 100644 index 0000000..b718aea --- /dev/null +++ b/bin/ownCloudDocPdf.py @@ -0,0 +1,60 @@ +#! /usr/bin/python3 + +import os +import re +import requests +import subprocess +from urllib.parse import urljoin +import sys +import tempfile +import shutil + +# Check if any argument is passed, if not print usage and exit +if len(sys.argv) < 2: + print("Requires Dependencies 'sudo apt-get install wkhtmltopdf pdftk'") + print(f"Usage: python {sys.argv[0]} ") + print(f"Example: python {sys.argv[0]} https://doc.owncloud.com/webui/next/classic_ui/") + sys.exit() + +url = sys.argv[1] +urls = [] + +# Creating a temporary directory +temp_directory = tempfile.mkdtemp() + +while url: + response = requests.get(url) + body = response.text + + # Add current URL to the list + urls.append(url) + + # Step 2: Find next URL + next_url_match = re.search(r' - url: ../docs-ocis.git +echo "Replacing component URL paths to local paths" +sed -i 's#- url: https://github.com/owncloud#- url: ..#g' $target_file + +# creating three caption groups +# 1 ... - url: ../ +# 2 ... docs-ocis +# 3 ... .git +# only taking 1 and 2 +# - url: ../docs-ocis.git --> - url: ../docs-ocis +sed -i -r 's#(- url: \.\.\/)(.*)(.git)#\1\2#g' $target_file + +# Result +echo "Done" +echo diff --git a/bin/yamlparse.sh b/bin/yamlparse.sh new file mode 100755 index 0000000..07423f3 --- /dev/null +++ b/bin/yamlparse.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# shellcheck disable=SC1003 + +# Based on the work of https://gist.github.com/pkuczynski/8665367 +# Source Reference: https://github.com/jasperes/bash-yaml + +# Two lines have been changed compared to the source to adopt for special needs + +# See the yamltest.sh script to get a testoutput, created to exctract asciidoc attributes + +parse_yaml() { + local yaml_file=$1 + # the following line has been changed to avoid: "line 9: $2: unbound variable" + local prefix="${2:-""}" # was local prefix=$2 + local s + local w + local fs + + s='[[:space:]]*' + w='[a-zA-Z0-9_.-]*' + fs="$(echo @|tr @ '\034')" + + ( + sed -e '/- [^\“]'"[^\']"'.*: /s|\([ ]*\)- \([[:space:]]*\)|\1-\'$'\n'' \1\2|g' | + + sed -ne '/^--/s|--||g; s|\"|\\\"|g; s/[[:space:]]*$//g;' \ + -e 's/\$/\\\$/g' \ + -e "/#.*[\"\']/!s| #.*||g; /^#/s|#.*||g;" \ + -e "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ + -e "s|^\($s\)\($w\)${s}[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" | + + awk -F"$fs" '{ + indent = length($1)/2; + if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";} + vname[indent] = $2; + for (i in vname) {if (i > indent) {delete vname[i]}} + if (length($3) > 0) { + vn=""; for (i=0; i supported_php_versions +# gsub("-|\\.", "_", $1) + } + { print }' + ) < "$yaml_file" +} + +unset_variables() { + # Pulls out the variable names and unsets them. + local variable_string="$@" + unset variables + variables=() + for variable in ${variable_string[@]}; do + variables+=($(echo $variable | grep '=' | sed 's/=.*//' | sed 's/+.*//')) + done + for variable in ${variables[@]}; do + unset $variable + done +} + +create_variables() { + local yaml_file="$1" + local prefix="$2" + local yaml_string="$(parse_yaml "$yaml_file" "$prefix")" + unset_variables ${yaml_string[@]} + eval "${yaml_string}" +} + diff --git a/bin/yamltest.sh b/bin/yamltest.sh new file mode 100755 index 0000000..52fe0ae --- /dev/null +++ b/bin/yamltest.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +source ./yamlparse.sh + +echo +echo "Test-prints the found attributes of the ../site.yml file for docs for reuse in asciidoctor-pdf as arguments in a line by line formatted way to compare with the source yaml file" +echo + +# Get key / value pair and preformat it (-a key=value -a key=value ...) +# This is form is used in asciidoctor-pdf +variable=$(parse_yaml ../site.yml | grep asciidoc_attributes | sed 's/asciidoc_attributes_/-a /g' | sed 's/\")/\" /' | sed 's/=(/=/' | sed "s/\"'/\'/" | sed "s/'\"/\'/") + +# Show every -a key=value in a new line for ease of comparison with the original +echo "$variable" | awk -F'-a ' '{$1=$1}1' OFS='-a ' +echo diff --git a/book_templates/ownCloud_Admin_Manual.adoc b/book_templates/ownCloud_Admin_Manual.adoc new file mode 100644 index 0000000..9ff1315 --- /dev/null +++ b/book_templates/ownCloud_Admin_Manual.adoc @@ -0,0 +1,12 @@ += ownCloud Administration Manual +:toc: +:toclevels: 2 +:homepage: https://github.com/owncloud/docs +:icon-set: octicon +:icons: font +:listing-caption: Listing +:source-highlighter: rouge +:version-label: Version: +:module_base_path: modules/admin_manual/pages/ +The ownCloud Team +{revnumber}, {revdate} diff --git a/book_templates/ownCloud_Developer_Manual.adoc b/book_templates/ownCloud_Developer_Manual.adoc new file mode 100644 index 0000000..563a93d --- /dev/null +++ b/book_templates/ownCloud_Developer_Manual.adoc @@ -0,0 +1,12 @@ += ownCloud Developer Manual +:toc: +:toclevels: 2 +:homepage: https://github.com/owncloud/docs +:icon-set: octicon +:icons: font +:listing-caption: Listing +:source-highlighter: rouge +:version-label: Version: +:module_base_path: modules/developer_manual/pages/ +The ownCloud Team +{revnumber}, {revdate} diff --git a/book_templates/ownCloud_User_Manual.adoc b/book_templates/ownCloud_User_Manual.adoc new file mode 100644 index 0000000..137eea2 --- /dev/null +++ b/book_templates/ownCloud_User_Manual.adoc @@ -0,0 +1,12 @@ += ownCloud User Manual +:toc: +:toclevels: 2 +:homepage: https://github.com/owncloud/docs +:icon-set: octicon +:icons: font +:listing-caption: Listing +:source-highlighter: rouge +:version-label: Version: +:module_base_path: modules/user_manual/pages/ +The ownCloud Team +{revnumber}, {revdate} diff --git a/docs/antora-site-structure.md b/docs/antora-site-structure.md new file mode 100644 index 0000000..1a06010 --- /dev/null +++ b/docs/antora-site-structure.md @@ -0,0 +1,155 @@ +# Antora Site Structure for Docs +[link-asciidoc]: https://docs.asciidoctor.org/asciidoc/latest/ +[link-antora]: https://antora.org +[link-playbook]: https://docs.antora.org/antora/latest/playbook/ +[link-ui]: https://docs.antora.org/antora-ui-default/ +[link-resource-id]: https://docs.antora.org/antora/latest/page/resource-id-coordinates/ +[link-standard-directories]: https://docs.antora.org/antora/latest/standard-directories/ +[link-antora-yml]: https://docs.antora.org/antora/latest/component-version-descriptor/ +[link-site-yml]: https://docs.antora.org/antora/latest/playbook/#whats-an-antora-playbook +[custom-attrib-link]: https://docs.antora.org/antora/latest/page/attributes/#custom-attributes +[antora-ui-link]: https://docs.antora.org/antora-ui-default/ +[docs-ui-link]: https://github.com/owncloud/docs-ui + +**Table of Contents** +1. [Why Antora](#why-antora) +2. [Scope of Documentation Repositories](#scope-of-documentation-repositories) +3. [Scope of Content Accessibility](#scope-of-content-accessibility) +4. [Structure of Directories](#structure-of-directories) +5. [Scope of Antora Definitions](#scope-of-antora-definitions) +6. [The Antora UI Template](#the-antora-ui-template) + +## Why Antora + +The main reasons for using [Antora][link-antora] is the following: + +1. It uses and extends the [asciidoc][link-asciidoc] text writing format + +2. It extends asciidoc with [multi-repo][link-playbook] capabilities. Thus, the writer does not need to care about repos anymore as this is virtualized by Antora and content can be accessed in a standardized way. + +3. Antora separates between writing the documentation and the [UI-Template][link-ui] defining how the content is presented. + +## Scope of Documentation Repositories + +The ownCloud documentation consists of a main repo named `docs` and additional product repos like the clients or others which are included as content sources defined in `site.yml`. + +Our setup is made in a way, where each repo can build it's own content individually for testing and checking validity. Only the build of main repo `docs` creates documentation which is pushed to the web. There is one exception, PDF's are created AND pushed via the CI from _each_ content source. + + +``` +main content source + +docs --> docs-server + docs-client-desktop + docs-client-ios-app + docs-client-android + ... + +``` +Note that the arrow from main to content source is intentionally unidirectional in our setup and should be respected. See more details about the reason below. + +### Scope of the playbook files (site.yml) + +In general, only one `site.yml` file is neccessary for the whole environment and its definitions are **available to the whole site**. This `site.yml` file is located in the main repo `docs`. We have additionally for each content source its own `site.yml` for testing purposes only. The scope of these local `site.yml` files is restricted to the respective content source and any definitions made are not availabe outside. + +Due to this fact, you need to re-add all relevant attributes of the main `site.yml` file in the `site.yml` file of the content source which accesses it, else a local build will return warnings about unresolved attributes. + +If you have added an attribute in a content source `site.yml` file, you must add this attibute to the main `site.yml` file to avoid a build warning (unresolved attribute) during a build of the entire documentation. + +Note that this behaviour is relevant for the playbook `site.yml` files only and does not apply to the component descriptor files `antora.yml`. + +## Scope of Content Accessibility + +Because Antora is capable of defining additional content sources, you can access content from these resources. The setup is flat, no main/child environment. To access resources, follow the [Resource ID Coordinates][link-resource-id] scheme. + +Because of the setup we have made regarding testing, the direction of the arrow is important. + + +**Possible** +``` +docs --> docs-client-ios-app + └> index.adoc +``` +Main (docs) can access content from any content source (like docs-client-ios-app) and vice versa *at build time* , because docs has referenced the repo (content source) and made it available to all. + +**Impossible** +``` +docs-client-ios-app --> docs-client-desktop + └> index.adoc + +docs-client-ios-app --> docs + └> index.adoc + +``` +When doing a build of a content source (like the docs-client-ios-app) which is neccesary for testing purposes, any references to another content source or to docs will fail as the referenced content source is unknown. Those references will throw an error/warning. Even if it is not the best approach, use .html references to any other source outside the working repo. + +## Structure of Directories + +All doc repositories have an identical directory structure. This helps maintaining and accessing content easily. + +### The Antora Directory Structure + +``` +modules/named-module-1/attachment + /examples + /images + /pages + /partials + + /named-module-2/attachments + /... + /... +``` + +Please see [Standard File and Directory Set][link-standard-directories] at `Example 1` for details. + +**Note that there is one important exception**: +The navigation file `nav.adoc` is under the `partials` directory and not at the level of the named-module (like ROOT or admin ect). This is necessary because only files which are in a `family directory` can be accessed from outside. This means `docs` can access e.g. `nav.adoc` at any content source like `docs-client-ios-app`. + +### Other Necessary Directories + +Beside the necessary directories for node, other important directories are: +``` +bin/ helper scripts to maintain the documentation +book_templates/ template file(s) to create the pdf file +generator/ scripts needed by antora for the build process +lib/ extension for antora not delivered by node like tabs or remote-include-processor +pdf_web/ output directory of generated pdf files, only used locally! +public/ output directory of generated html files, only used locally! +resources/ themes necessary for creating pdf files +tmp/ temp directory used for htmltest (broken link checking) +``` +### Important files + +The following files are important to run a build properly; note that node related stuff is not mentioned explicitly: + +``` +.drone.star define the build process steps when triggered by a PR + necessary for the creation of the pdf file +antora.yml contains source files and attributes that only belong + to the component (version dependent!) +package.json define the antora environment und scripts to run at the cli +site.yml global site definitions including attributes (version independent!) + +``` + +## Scope of Antora Definitions + +### Versioning + +While you can read more details about [What is antora.yml?][link-antora-yml] and [What is site.yml (the playbook)][link-site-yml], here are some important items: + +To manage versions in docs, we use branches. This means that any content based on a variable (attribute) limited to a branch must go into the component description file `antora.yml` and be maintained accordingly. Any attribute that can be used in any branch of a component must be defined in `site.yml` + +### Accessibility and Availability of Attributes + +1. The scope of attributes defined in a page is limited to that page only. +2. The scope of attributes defined in `antora.yml` is limited to the branch and component where it is defined. This is also true for attributes that should be accessed from the UI-Template. +3. The scope of attributes defined in `site.yml` is _global_. The term global has two flavours in our setup: + 1. When used in the main repo `docs`, it becomes available to all sources at any time. + 2. When used in a content source, it is only availabe to the content source during a test build. +4. Attributes starting with `page-` are also available to the UI-Template when running a build. The rules above apply. This is important when defining UI content based on attributes. To access these attributes in the UI-Template use `page.attribute.name` where `name` is without leading `page-` For details see [AsciiDoc Attributes in Antora][custom-attrib-link]. + +## The Antora UI Template + +As described on top, Antora separates the writing of text and the [presentation design][antora-ui-link]. Our presentation design is defined in the [docs-ui][docs-ui-link] repository. Any change made in the UI affects the complete documentation, careful tests are mandatory. diff --git a/docs/best-practices.md b/docs/best-practices.md new file mode 100644 index 0000000..f13c87a --- /dev/null +++ b/docs/best-practices.md @@ -0,0 +1,811 @@ +# Best Practices and Tips + +This page gives contributors a quick overview of tips and best practices for +writing in AsciiDoc. It is for sure not complete nor covers all possibilities, but gives a quick +reference for common used writing and formatting tasks. For a complete reference see the +[Asciidoctor Documentation](https://asciidoctor.org/docs/). +Also see the [AsciiDoc Syntax Quick Reference](https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/) +guide. + +**Table of Contents** + +* [Initial Reading](#initial-reading) +* [File Locations](#file-locations) +* [Links](#links) +* [Images](#images) +* [Include](#include) +* [Table of Contents](#table-of-contents) +* [Code Blocks](#code-blocks) +* [Literal Text and Blocks](#literal-text-and-blocks) +* [Attributes](#attributes) +* [Admonition](#admonition) +* [Air Quotes](#air-quotes) +* [Preserve Line Breaks](#preserve-line-breaks) +* [Text Formatting](#text-formatting) +* [Keyboard Shortcuts and UI Button Text](#keyboard-shortcuts-and-ui-button-text) +* [Menu Selections](#menu-selections) +* [Lists](#lists) +* [Headers, Titles, Sections, Anchors and Paragraph Titles](#headers-titles-sections-anchors-and-paragraph-titles) +* [Tables](#tables) +* [Conditional Rendering](#conditional-rendering) +* [TabSets](#tabsets) +* [Comments](#comments) +* [Relocating or Renaming Files](#relocating-or-renaming-files) + +## Initial Reading + +Here is a good starting point to get a quick Antora overview [`Three Core Antora Concepts`](https://matthewsetter.com/antoras-three-core-concepts/) + +## File Locations + +* All documents are written into the directory `modules`/`module_name`/`pages`/`` +* All images are written into the directory `modules`/`module_name`/`assets/images`/`` +* All examples are written into the directory `modules`/`module_name`/`examples`/`` + +When using paths to include, you might need to use the `module_name` when linking to another module, +but you must not use `pages`, `assets/images` or `examples` as the path component, only ``. +See the examples in the relevant sections. + +## Links + +In a nutshell, there are two kind of links. +- External links (referencing content outside the documentation) +- Internal links (referencing content inside the documentation) + + +### External Links + +Reference: [`Links`](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#links) + +A `link` follows this style: `http(s)://domain/#section[Printed Name]` + +Where `#section` and `[Printed Name]` are optional components. + +The `link:` prefix is **only** needed when the target is not a URI. That's because the URI protocol is an implicit +macro (in other words, http(s): is recognized as a macro prefix of an implicit link). + +Example: `https://github.com/owncloud-docker/server#launch-with-plain-docker[in the GitHub repository]` + +A URL may not display correctly when it contains characters such as underscores (\_), carets (\^) or double quotes (\") +Please see [Troubleshooting Complex URLs](https://asciidoctor.org/docs/user-manual/#complex-urls) how to solve that. + +This is an example of an URL containing problematic characters which needs special treatment: +`https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)` + +**Strongly** in favour of using attributes which greatly improves readability while authoring the document. + +``` += The Page Header +:internal-link-name-url: https://example.com/content/link_can_be_very_long + +Text {internal-link-name-url}[highlighted text] text. +``` + +For the special case when the URL also contains double quotes (\"), you must additionally replace them manually with `%22` (utf-8 encoding) in the attribute used. + +It is important that `:internal-link-name-url:` is placed directly below the page header. +Any number of these link attributes can be added. Without being mandatory, it has turned +out as a matter of good practice to end your link name with `-url`. + +**NOTE** If you want to prevent automatic linking of a URL, prepend it with a backslash (\\). +This will create text but not a clickable link and can be used for example URLs. +This method helps prevent false positives when checking broken links. + +Example: + +``` +This is an example of an unlinked web address: \http://example.com +``` +The above example renders as: `This is an example web address: http://example.com` +but there is no link. + +See [Troubleshooting URLs](https://docs.antora.org/antora/2.3/asciidoc/external-urls/#troubleshooting-urls) for more possibilities. + +### Internal Links + +Prefix: `xref:` + +Reference: [`Cross Reference`](https://asciidoctor.org/docs/user-manual/#xref) + +In a nutshell, an internal link called `Cross Reference` can link to +- an in-page reference +- a documentation file +- a section title or anchor name inside a documentation file + +All content you want to reference **must be** inside the directory structure of `modules/`. + +An `xref` is usually written in the following example style:
+`xref:module_name:/file.adoc#section[Printed Name]` + +Where `module_name:`, `#section` and `[Printed Name]` are optional components. +`module_name:` is mandatory when referenced content is not in the same module. +`` is the relative path via the module name to your referenced file. + +You can reference a section or an anchor inside the same file, another file - even in another module. +Section titles automatically create references, where the text is converted to lower case characters +and all special characters including an underscore are converted to a dash (`_`) + +You can create anchors manually anywhere in the page by using following methods: + +* text `[#anchor-name]` text (anchor-name will not be printed, it is only the reference point) +* text `[#anchor-name]#Anchor text to be referenced to#` text (Anchor text will be printed) + +Reference Examples: + +- This example references a section title inside the same document:
+`xref:section-title[FAQ]` + +- This example references a manual anchor inside the same document:
+`xref:anchor-name[FAQ]` + +- This example references another file:
+`xref:configuration/server/occ_command.adoc[Market app]` + +- This example references another file and a particular section title:
+`xref:configuration/server/occ_command.adoc#apps-commands[Market app]` + +- This example references another file in another module and a particular section title:
+`xref:admin_manual:configuration/server/occ_command.adoc#apps-commands[Market app]` + +**Strongly** In general it`s advisable to use a ToC ([Table of Contents](#table-of-contents)) instead of a list of xref´s. + +**Note:** Use a link checker regularly to find broken links to section titles or anchors. +If an anchor link is broken, a build will not report an error as the page itself is accessible. + +## Images + +Prefix: `image` + +Reference: [`Images`](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#images) + +All images have to be stored in a path under `modules`/`module_name`/`assets/images`/`` + +An `image` is written in following example style: `image:/image_name[Alternative Image Text, options]` + +Please use the comma as separator for one or more options. + +The `, options` part is optional. Here you can define e.g. the sizing of an image like `, width=40%` + +Example: `image:configuration/files/encryption1.png[Encryption]` + +There are two ways that an image is treated defined by either using `image:` or `image::` + +When using `image:`, the image will be part of the text written. This is useful when you want to have +an image part of the text flow like an icon you reference to. + +When using `image::`, the image is not part of the text written and stands on its own. This means it +will be rendered into a new line and be centered by default if not otherwise defined by an option like +`align="center|left|right"` + +**IMPORTANT** +Please be advised, in case you use an Alternative Image Text, not to use double quotes to highlight some text elements. +Double quotes will be rendered properly when the html documentation is built, but creating the pdf will return +a warning that the string can not be parsed and the complete image link is broken. +You can avoid that by using single quotes and ticks (not backticks!) instead. + +Bad: +`image:enterprise/firewall/firewall-3.png[Protecting files tagged with "Confidential" from outside access]` + +Good: +`image:enterprise/firewall/firewall-3.png[Protecting files tagged with 'Confidential' from outside access]` + +## Include + +Prefix: `include` + +Reference: [`Include`](https://asciidoctor.org/docs/user-manual/#include-directive) + +The include directive provides a way to import content from another file into the current document. + +An `include` is written in following example style: `include::/file[]` + +When using `asciidoc` files to include, the `` option contains as example the `leveloffset=+1` to correct the level offset of the file included. + +You can include example files like scripts or include documentation files. +Both types are used to make the raw documentation files easier to read and to maintain. + +### Example Files Like Scripts + +When creating example files, these files must be saved into a path of the examples directory: `module_name`/`examples` + +The directive consists of following components: +`include::{examplesdir}/file.ext[]` + +Example: + +`include::{examplesdir}installation/post-installation-steps.sh[]` + +`{examplesdir}` will be resolved by the build process automatically + +### Example Files of Type `asciidoc` + +If you include a standard page (a page that is stored in the pages directory) into another page, you must set the `page-partial` AsciiDoc attribute in the document header of the page being included. + +``` += The Page Header +:page-partial: + +Page contents. +``` + +Example: +`include::encryption-types.adoc[leveloffset=+1]` +(the including file in this example is in the same directory as the included file) + +## Table of Contents + +Prefix: `toc` + +Reference: [`Table of Contents (ToC)`](https://asciidoctor.org/docs/user-manual/#user-toc) + +A table of contents (ToC) is, if not otherwise defined, an index of section and subsection +titles that can be automatically generated from the pages structure when converting a +document with Asciidoctor. + +The easiest way of adding a ToC is shown in the following example. + +``` += The Page Header +:toc: + +Page contents. +``` +Please also see additional directives like: +[`toc-title`](https://asciidoctor.org/docs/user-manual/#user-toc-title), +[`toclevels`](https://asciidoctor.org/docs/user-manual/#user-toc-levels) or +[In-Document Placement](https://asciidoctor.org/docs/user-manual/#manual-placement) + +**IMPORTANT** All attributes of kind `:name:` must be direct under the page header without blank lines. + +## Code Blocks + +Reference: [`Listing and source code blocks`](https://asciidoctor.org/docs/asciidoc-writers-guide/#listing-and-source-code-blocks) +Reference: [`Building blocks in AsciiDoc`](https://asciidoctor.org/docs/asciidoc-writers-guide/#building-blocks-in-asciidoc) + +``` +[source,] +---- +text + text +---- +``` +Optional define the `` + +Example: +``` +[source,bash] +---- +subscription-manager repos --enable rhel-server-rhscl-7-rpms +---- +``` +You can also use `include` in code blocks to include an example. + +Example: +``` +[source,bash] +---- +include::example$installation/post-installation-steps.sh[] +---- +``` + +* Use `plaintext` for all examples not belonging to any language as this will properly trigger css. +* Note that you can copy a source block by clicking the copy symbol to the right of the example without the bash prompt if one is present. + +**IMPORTANT** For highlighting `bash` commands properly, you need to distinguish between `console` and `bash` as source language: + +* Use `console` whenever there is a bash prompt with one of the following prompt characters `> % $ #` where there can also be up to 3 whitespaces _before_ the bash prompt, or a bash prompt like `[test@ubuntu~]$`. The bash prompt will be visible, rendered differently but can't be selected with the mouse manually. `bash` commands after the bash prompt will be highlighted. Note that if there is no bash prompt upfront, no highlighting will take place! +* Use `bash` whenever there is no bash prompt upfront and you either show shell commands or bash scripts. + +### OCC Examples + +When creating examples that show how to use occ, ensure that you use the `occ-command-example-prefix` attribute. +Doing so will keep all examples of its use consistent throughout the documentation. + +**Note:** when used within a source code block, as in the following example, `subs="attributes+"` has to be set, otherwise it won't render properly: + +```asciidoc +[source,bash,subs="attributes+"] +---- +{occ-command-example-prefix} -h +---- +``` + +This will print out the following when rendered in the docs: + +```html +sudo -u www-data occ -h +``` + +## Literal Text and Blocks + +Reference: [`Literal Text and Blocks`](https://asciidoctor.org/docs/user-manual/#literal-text-and-blocks) + +Literal paragraphs and blocks display the text you write exactly as you enter it. Literal text is treated as pre-formatted text. + +Example: +``` +.... +Checking system health. +- file permissions are ok. +.... +``` + +## Attributes + +Reference: [`Document Attributes`](https://docs.asciidoctor.org/asciidoc/latest/attributes/document-attributes/) +Reference: [`Inline Passthroughs`](https://docs.asciidoctor.org/asciidoc/latest/pass/pass-macro/) + +Attributes are a way of creating a variable with content which then can be used throughout the document. Using attributes increases +readability a lot and makes it easy to change content one time for all locations used. Attributes are written on top of the page +and have the following form: + +Definition: +``` +:name-of-an-attribute: value +``` + +Usage: +``` +This is some text {name-of-an-attribute} which continues here. +``` + +Attributes can also be used in scripts when you want to handover common used values. In this case, you must define the attributes and macros that +are handed over to the script for processing. "macros" is e.g. needed, when using inline passthroughs: + +``` +[subs=attributes+,+macros] +---- +include... +---- +``` + +When you have parts of texts or inside a script where you must render the content as it is, which is necessary for e.g. language constructs, +read the Antora Inline Passthroughs section referenced above. + +## Admonition + +Reference: [`Admonitions`](https://asciidoctor.org/docs/asciidoc-writers-guide/#admonitions) +Reference: [`Admonition blocks`](https://asciidoctor.org/docs/asciidoc-writers-guide/#admonition-blocks) + +An admonition paragraph is rendered in a callout box with the admonition label — ​or its corresponding icon — ​in the gutter. + +Asciidoctor provides five admonition style labels: `NOTE`, `TIP`, `IMPORTANT`, `CAUTION` and `WARNING` + +### Simple Admonitions + +Use this way when you just have to write text. +A simple `admonition` is written in the following style: `
Drone for building and deploying the documentation. +Drone is a [Continuous Delivery](https://www.continuousdelivery.com/) platform that helps optimize and automate software delivery. + +The build pipeline is configured in [.drone.yml](https://github.com/owncloud/docs/blob/master/.drone.yml), located in the root directory of the docs repository. +You can view the current build status of the docs at https://drone.owncloud.com/owncloud/docs. + +Every push to the docs master branch triggers a drone build. At the end of the build process, the docs are deployed to production. + +It's outside the scope of this file to discuss the process or [the `.drone.yml` file format](https://0-8-0.docs.drone.io/) in-depth. +However, in essence, here is how the build pipeline works: + +1. The docs repository is cloned. +2. All required dependencies are installed. +3. The documentation is validated. +4. The documentation is built. +5. The documentation PDF manuals are built. +6. The PDF manuals are deployed. +7. The HTML version of the documentation is deployed. +8. A build notification is sent. + +## Build Notifications + +Build notifications are sent to the `#documentation` channel in https://talk.owncloud.com when a build of the master, 10.0, and 10.1 branches fails. +Notifications are not sent for successful builds. + +No Pull Request notifications are sent to the `#documentation` channel, as this information is visible within the Pull Request details. + +If you're not already a member of the channel, please join, so that you know what's happening with the builds. diff --git a/docs/what-is-antora.md b/docs/what-is-antora.md new file mode 100644 index 0000000..6672df2 --- /dev/null +++ b/docs/what-is-antora.md @@ -0,0 +1,40 @@ +# Antora + +[Antora](https://antora.org) is self-described as: + +> The multi-repository documentation site generator for tech writers who :heart: writing in AsciiDoc. + +While relatively new (*currently at release 2.0.0*), it's already a competent tool; one I expect makes developers' lives much more comfortable than competing platforms. This is because Antora is: + +- Based around [the AsciiDoc format](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/), a format far more akin to Markdown. Its syntax is _readable_, _concise_, _comprehensive_, _extensible_, and, above all, _easy to learn_. +- Provides a logical and structured way of organizing technical documentation. +- Enforces a clear and logical separation of text content and supporting assets (such as *images*, *videos*, and *code*). +- Uses a small set of tools, ones that are commonly available in developer tool sets, such as *Node* and *Git*. +- Provides very flexible project navigation. +- Natively links to different documentation versions within the UI; +- _Plus so much more!_ + +### What Antora Docs Look Like + +![The ownCloud docs on Antora](./images/antora-ui-anotated.png) + +In the screenshot above, you can see an example of what Antora documentation looks like (using a slightly modified default theme). You can see that: + +- The standard main navigation is at the top(1). +- The secondary navigation is down the left-hand side(2). +- There is breadcrumb navigation above the main content(3). +- The main content is in a large pane on the right(4). + +While not revolutionary, the layout uses well-recognized and understood navigation conventions. However, it has a rich navigational feature. Notice the link right at the bottom(5). If you click it, it opens up a sub-navigation menu. + +![Antora documentation version navigation](./images/what-is-antora/the-antora-version-changer.gif) + +This is an excellent, time-saving feature that allows for direct navigation between different documentation versions (git branches). In the current documentation, an extra page exists to link to the various versions of the documentation, such as for version *8.2*, *9.x*, and *10.x.* However, by taking advantage of this feature in Antora, that's not necessary, thanks to this innovative feature. + +I expect that it makes users lives so much easier, as they'll be able to navigate quickly to the version of the documentation that matches their ownCloud installation. + +## The Antora Directory Structure + +Now that you have an overview of what Antora is and how it renders documentation, the next thing you need to do is to understand the Antora directory structure. That way you know where to find and create files. + +I could describe it here, but [the Antora documentation](https://docs.antora.org/antora/1.0/component-structure/) does an excellent job already. So go through the information and get yourself acquainted. diff --git a/docs/what-is-asciidoc.md b/docs/what-is-asciidoc.md new file mode 100644 index 0000000..6452b36 --- /dev/null +++ b/docs/what-is-asciidoc.md @@ -0,0 +1,145 @@ +# What is AsciiDoc? + +To quote [the AsciiDoc Syntax Quick Reference Guide](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) (which you should bookmark*!*): + +> AsciiDoc is a lightweight markup language for authoring notes, articles, documentation, books, web pages, slide decks and man pages in plain text. This guide is a quick reference for the common AsciiDoc document and text formatting markup. + +If you look through the guide, you'll see that it's a file format which is quite similar to Markdown, supporting paragraphs, formatted text, headers, sections, section titles, lists, links, images, code, tables, videos, and so much more. + +What's more, the format is **consistent** and **predictable**, as it has a definitive standard. +This is in stark contrast to Markdown, which has a series of (_often competing_) standards, such as [GitHub Flavoured Markdown](https://guides.github.com/features/mastering-markdown/), and [Daring Fireball](https://daringfireball.net/projects/markdown/). + +AsciiDoc is a robust, text-based file format, which you can use to create even the most sophisticated technical documentation, able to be exported to a range of modern file formats. +Have a look through the quick reference guide, and the rest of the official AsciiDoc documentation to learn more. + +## Writing & Editing AsciiDoc Files + +To contribute to the documentation, you're only going to need 3 things; these are: + +1. A text editor with AsciiDoc syntax support available. +2. An AsciiDoc previewer. +3. AsciiDoc documentation + +Let's step through each one. + +## A Text Editor or an IDE + +Just like writing in any other format or computer language, you're going to need a text editor or an IDE. +And as you're a developer, you'll already have one, and it likely supports AsciiDoc already. +If not there should be a plugin available for it. +Here are some text editors and IDEs that we recommend. + +### VIM + +![Editing AsciiDoc in Vim](./images/editing-asciidoc-in-vim.png) + +If you're using VIM (or VI), there are two plugins that you can make use of; these are dahu/vim-asciidoc, and matcatc/vim-asciidoc-folding. +vim-asciidoc provides enhanced editing support for Asciidoc files. +vim-asciidoc-folding allows vim to enable folding asciidoc files. + +Alternatively, if you want both of these, plus some extra setup ready to go, you can use [the Vim for Technical Writers repository](https://github.com/settermjd/vim-for-technical-writers). +The repository has a `.vimrc` file that installs both plugins, enabling them only when editing Asciidoc files. + +### SublimeText + +![Editing AsciiDoc in SublimeText](./images/editing-asciidoc-in-sublime-text.png) + +SublimeText doesn't come with native support for AsciiDoc, but you can install [the AsciiDoc package](https://github.com/asciidoctor/sublimetext-asciidoc) which provides it. +Once you do that, you'll have a range of AsciiDoc editing functionality available, including: + +- Snippets +- Syntax Highlighting +- Keymaps +- Attribute completion +- Display document and section titles in the local symbol list + +### Atom + +![Editing AsciiDoc in Visual Studio Code](./images/editing-asciidoc-in-atom.png) + +In recent months, Atom's been gaining significant traction. +Written primarily by the team at GitHub and supported by a massive community around the world, and packed with a wide range of features out of the box, it's easy to see why. + +If it's your text editor of choice, install the [asciidoc-assistant](https://atom.io/packages/asciidoc-assistant) package. +This package is a meta-package that takes care of installing a range of plugins, which to give you full AsciiDoc support. + +These are: + +- [language-asciidoc:](https://atom.io/packages/language-asciidoc) This package adds syntax highlighting and snippets to AsciiDoc files. +- [asciidoc-image-helper:](https://atom.io/packages/asciidoc-image-helper) This package facilitates insertion of images in an AsciiDoc document. +- [asciidoc-preview:](https://github.com/asciidoctor/atom-asciidoc-preview) This package allows Atom to show the rendered HTML of the AsciiDoc content in the current editor. +- [autocomplete-asciidoc:](https://atom.io/packages/autocomplete-asciidoc) This package provides AsciiDoc language auto-completions in Atom. + +**Note:** to view images in the preview pane, you have to set the `imagesdir` attribute in the AsciiDoc plugin's preferences. +To do that: + +1. Open the Preferences pane for the "_asciidoc-preview_" package. +2. In the "_Default Attributes_" field, under "Settings", add _the absolute path_ to the image directory for one of the modules, at the end of the existing attributes. + +![Setting the AsciiDoc plugin's imagesdir attribute in Atom.](./images/what-is-asciidoc/setting-imagesdir-in-atom.png) + +Unfortunately, you cannot reference multiple image directories. + +### Visual Studio Code + +![Editing AsciiDoc in Visual Studio Code](./images/editing-asciidoc-in-vscode.png) + +If you're on the Microsoft Windows platform or love the Visual Studio environment — and in particular the new "*Code*" editor/IDE — then you'll be happy to know that it supports AsciiDoc as well. +If you install [the AsciiDoc plugin](https://marketplace.visualstudio.com/items?itemName=joaompinto.asciidoctor-vscode), then you'll get some basic functionality, including: + +- Live preview. +- Syntax highlighting. +- Open Preview to the Side. +- View Symbols and Go to Symbol actions. + +**Note:** I’m not, currently, aware of how to enable rendering images in the preview pane. + +### IntelliJ IDEA + +![Editing AsciiDoc in PhpStorm](./images/editing-asciidoc-in-phpstorm.png) + +If you're a fan of IDEs over text editors, in particular, the JetBrains IntelliJ platform, then make sure you install [the AsciiDoc plugin](https://plugins.jetbrains.com/plugin/7391-asciidoc), available, from the JetBrains repository. + +It provides a minimal set of functionality when editing AsciiDoc files, which includes: + +- Live Preview (show editor and preview, the editor only, and preview only). +- Basic formatting toolbar (bold, italics, mono-spaced). +- Code folding. +- Syntax highlighting. +- Convert non-AsciiDoc files to AsciiDoc. + +**Note:** to view images in the preview pane, you have to set the `imagesdir` attribute in the AsciiDoc plugin's preferences. +To do that: + +1. Open the Preferences pane and filter by `"AsciiDoc"`. +2. In the "_Attributes_" field, add a new entry, where "_Key_" is set to `imagesdir` and "_Value_" is set to _the absolute path_ to the image directory for one of the modules. +3. Click either "_Apply_" or "_OK_". + +![Setting the AsciiDoc plugin's imagesdir attribute in IntelliJ.](./images/what-is-asciidoc/setting-imagesdir-in-intellij.png) + +Unfortunately, you cannot reference multiple image directories, whether by using a regular expression, nor can you specify `imagesdir` multiple times. + +### Using Another Text Editor or IDE? + +If you're not already using one of these text editors of IDEs, don't feel the need to change to them, just because they're what we recommend. +It's possible that your existing text editor or IDE already has an AsciiDoc plugin. +And it makes far more sense to continue using what you already know, instead of learning an entirely new tool. + +## An AsciiDoc Previewer + +![Viewing AsciiDoc in Firefox with the Asciidoc Live Preview Plugin](./images/viewing-asciidoc-in-firefox-with-the-asciidoc-live-preview-plugin.png) + +Once your text editor or IDE is ready to work with AsciiDoc then, assuming it doesn't already support previewing AsciiDoc, you’ll need a way to preview the changes you’re making to ensure that they render as you expect. + +For that, assuming that you’re using one of _Google Chrome_, _Mozilla Firefox_, or _Opera_, you need to install the [AsciiDoc Live Preview plugin](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/). +When installed, enable the AsciiDoc Live Preview plugin, and you will see AsciiDoc files rendered as HTML in the browser. + +## AsciiDoc Documentation + +As with anything of a technical nature, you need documentation, because there’s going to come a time that you will need to refer to it. +So too with AsciiDoc. +Here are a set of links to documentation that you can bookmark and use on a regular basis: + +- [The AsciiDoc Syntax Quick Reference Guide](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) +- [Powerman's AsciiDoc Cheatsheet](https://powerman.name/doc/asciidoc) +- [The AsciiDoc Markup Syntax Summary](https://is.muni.cz/el/1433/podzim2015/PB162/um/printable/asciidoc.html) diff --git a/fonts/dejavu-sans-bold.ttf b/fonts/dejavu-sans-bold.ttf new file mode 100644 index 0000000..6d65fa7 Binary files /dev/null and b/fonts/dejavu-sans-bold.ttf differ diff --git a/fonts/dejavu-sans-boldoblique.ttf b/fonts/dejavu-sans-boldoblique.ttf new file mode 100644 index 0000000..753f2d8 Binary files /dev/null and b/fonts/dejavu-sans-boldoblique.ttf differ diff --git a/fonts/dejavu-sans-condensed.ttf b/fonts/dejavu-sans-condensed.ttf new file mode 100644 index 0000000..3259bc2 Binary files /dev/null and b/fonts/dejavu-sans-condensed.ttf differ diff --git a/fonts/dejavu-sans-condensedbold.ttf b/fonts/dejavu-sans-condensedbold.ttf new file mode 100644 index 0000000..22987c6 Binary files /dev/null and b/fonts/dejavu-sans-condensedbold.ttf differ diff --git a/fonts/dejavu-sans-condensedboldoblique.ttf b/fonts/dejavu-sans-condensedboldoblique.ttf new file mode 100644 index 0000000..f5fa0ca Binary files /dev/null and b/fonts/dejavu-sans-condensedboldoblique.ttf differ diff --git a/fonts/dejavu-sans-condensedoblique.ttf b/fonts/dejavu-sans-condensedoblique.ttf new file mode 100644 index 0000000..7fde907 Binary files /dev/null and b/fonts/dejavu-sans-condensedoblique.ttf differ diff --git a/fonts/dejavu-sans-extralight.ttf b/fonts/dejavu-sans-extralight.ttf new file mode 100644 index 0000000..b09f32d Binary files /dev/null and b/fonts/dejavu-sans-extralight.ttf differ diff --git a/fonts/dejavu-sans-mono-bold.ttf b/fonts/dejavu-sans-mono-bold.ttf new file mode 100644 index 0000000..8184ced Binary files /dev/null and b/fonts/dejavu-sans-mono-bold.ttf differ diff --git a/fonts/dejavu-sans-mono.ttf b/fonts/dejavu-sans-mono.ttf new file mode 100644 index 0000000..f578602 Binary files /dev/null and b/fonts/dejavu-sans-mono.ttf differ diff --git a/fonts/dejavu-sans-monoboldoblique.ttf b/fonts/dejavu-sans-monoboldoblique.ttf new file mode 100644 index 0000000..754dca7 Binary files /dev/null and b/fonts/dejavu-sans-monoboldoblique.ttf differ diff --git a/fonts/dejavu-sans-monooblique.ttf b/fonts/dejavu-sans-monooblique.ttf new file mode 100644 index 0000000..4c858d4 Binary files /dev/null and b/fonts/dejavu-sans-monooblique.ttf differ diff --git a/fonts/dejavu-sans-oblique.ttf b/fonts/dejavu-sans-oblique.ttf new file mode 100644 index 0000000..999bac7 Binary files /dev/null and b/fonts/dejavu-sans-oblique.ttf differ diff --git a/fonts/dejavu-sans.ttf b/fonts/dejavu-sans.ttf new file mode 100644 index 0000000..e5f7eec Binary files /dev/null and b/fonts/dejavu-sans.ttf differ diff --git a/fonts/dejavuserif-bold.ttf b/fonts/dejavuserif-bold.ttf new file mode 100644 index 0000000..3bb755f Binary files /dev/null and b/fonts/dejavuserif-bold.ttf differ diff --git a/fonts/dejavuserif-bolditalic.ttf b/fonts/dejavuserif-bolditalic.ttf new file mode 100644 index 0000000..a36dd4b Binary files /dev/null and b/fonts/dejavuserif-bolditalic.ttf differ diff --git a/fonts/dejavuserif-italic.ttf b/fonts/dejavuserif-italic.ttf new file mode 100644 index 0000000..805daf2 Binary files /dev/null and b/fonts/dejavuserif-italic.ttf differ diff --git a/fonts/dejavuserif.ttf b/fonts/dejavuserif.ttf new file mode 100644 index 0000000..0b803d2 Binary files /dev/null and b/fonts/dejavuserif.ttf differ diff --git a/fonts/dejavuserifcondensed-bold.ttf b/fonts/dejavuserifcondensed-bold.ttf new file mode 100644 index 0000000..222bf13 Binary files /dev/null and b/fonts/dejavuserifcondensed-bold.ttf differ diff --git a/fonts/dejavuserifcondensed-bolditalic.ttf b/fonts/dejavuserifcondensed-bolditalic.ttf new file mode 100644 index 0000000..e446636 Binary files /dev/null and b/fonts/dejavuserifcondensed-bolditalic.ttf differ diff --git a/fonts/dejavuserifcondensed-italic.ttf b/fonts/dejavuserifcondensed-italic.ttf new file mode 100644 index 0000000..c529df3 Binary files /dev/null and b/fonts/dejavuserifcondensed-italic.ttf differ diff --git a/fonts/dejavuserifcondensed.ttf b/fonts/dejavuserifcondensed.ttf new file mode 100644 index 0000000..d3959b3 Binary files /dev/null and b/fonts/dejavuserifcondensed.ttf differ diff --git a/fonts/mplus-1mn-bold.ttf b/fonts/mplus-1mn-bold.ttf new file mode 100644 index 0000000..5f26678 Binary files /dev/null and b/fonts/mplus-1mn-bold.ttf differ diff --git a/fonts/mplus-1mn-medium.ttf b/fonts/mplus-1mn-medium.ttf new file mode 100644 index 0000000..a85c66b Binary files /dev/null and b/fonts/mplus-1mn-medium.ttf differ diff --git a/fonts/mplus-1mn-regular.ttf b/fonts/mplus-1mn-regular.ttf new file mode 100644 index 0000000..394fb2f Binary files /dev/null and b/fonts/mplus-1mn-regular.ttf differ diff --git a/fonts/mplus-1mn-thin.ttf b/fonts/mplus-1mn-thin.ttf new file mode 100644 index 0000000..de41c15 Binary files /dev/null and b/fonts/mplus-1mn-thin.ttf differ diff --git a/fonts/mplus-1p-regular.ttf b/fonts/mplus-1p-regular.ttf new file mode 100644 index 0000000..b64dee2 Binary files /dev/null and b/fonts/mplus-1p-regular.ttf differ diff --git a/fonts/notoserif-bold.ttf b/fonts/notoserif-bold.ttf new file mode 100755 index 0000000..580ff28 Binary files /dev/null and b/fonts/notoserif-bold.ttf differ diff --git a/fonts/notoserif-bold_italic.ttf b/fonts/notoserif-bold_italic.ttf new file mode 100755 index 0000000..32d38af Binary files /dev/null and b/fonts/notoserif-bold_italic.ttf differ diff --git a/fonts/notoserif-italic.ttf b/fonts/notoserif-italic.ttf new file mode 100755 index 0000000..1d3cc3a Binary files /dev/null and b/fonts/notoserif-italic.ttf differ diff --git a/fonts/notoserif-regular.ttf b/fonts/notoserif-regular.ttf new file mode 100755 index 0000000..a1c6f10 Binary files /dev/null and b/fonts/notoserif-regular.ttf differ diff --git a/fonts/opensans-bold.ttf b/fonts/opensans-bold.ttf new file mode 100755 index 0000000..7b52945 Binary files /dev/null and b/fonts/opensans-bold.ttf differ diff --git a/fonts/opensans-bolditalic.ttf b/fonts/opensans-bolditalic.ttf new file mode 100755 index 0000000..a670e14 Binary files /dev/null and b/fonts/opensans-bolditalic.ttf differ diff --git a/fonts/opensans-extrabold.ttf b/fonts/opensans-extrabold.ttf new file mode 100755 index 0000000..3660681 Binary files /dev/null and b/fonts/opensans-extrabold.ttf differ diff --git a/fonts/opensans-extrabolditalic.ttf b/fonts/opensans-extrabolditalic.ttf new file mode 100755 index 0000000..8c4c15d Binary files /dev/null and b/fonts/opensans-extrabolditalic.ttf differ diff --git a/fonts/opensans-italic.ttf b/fonts/opensans-italic.ttf new file mode 100755 index 0000000..e6c5414 Binary files /dev/null and b/fonts/opensans-italic.ttf differ diff --git a/fonts/opensans-light.ttf b/fonts/opensans-light.ttf new file mode 100755 index 0000000..563872c Binary files /dev/null and b/fonts/opensans-light.ttf differ diff --git a/fonts/opensans-lightitalic.ttf b/fonts/opensans-lightitalic.ttf new file mode 100755 index 0000000..5ebe2a2 Binary files /dev/null and b/fonts/opensans-lightitalic.ttf differ diff --git a/fonts/opensans-regular.ttf b/fonts/opensans-regular.ttf new file mode 100755 index 0000000..2e31d02 Binary files /dev/null and b/fonts/opensans-regular.ttf differ diff --git a/fonts/opensans-semibold.ttf b/fonts/opensans-semibold.ttf new file mode 100755 index 0000000..99db86a Binary files /dev/null and b/fonts/opensans-semibold.ttf differ diff --git a/fonts/opensans-semibolditalic.ttf b/fonts/opensans-semibolditalic.ttf new file mode 100755 index 0000000..8cad4e3 Binary files /dev/null and b/fonts/opensans-semibolditalic.ttf differ diff --git a/generator/generate-site.js b/generator/generate-site.js new file mode 100644 index 0000000..005c5f8 --- /dev/null +++ b/generator/generate-site.js @@ -0,0 +1,208 @@ +'use strict' + +const _ = require('lodash') +const cheerio = require('cheerio') +const Entities = require('html-entities') +const { Client } = require('@elastic/elasticsearch') + +const aggregateContent = require('@antora/content-aggregator') +const buildNavigation = require('@antora/navigation-builder') +const buildPlaybook = require('@antora/playbook-builder') +const classifyContent = require('@antora/content-classifier') +const convertDocuments = require('@antora/document-converter') +const createPageComposer = require('@antora/page-composer') +const loadUi = require('@antora/ui-loader') +const mapSite = require('@antora/site-mapper') +const produceRedirects = require('@antora/redirect-producer') +const publishSite = require('@antora/site-publisher') +const { resolveConfig: resolveAsciiDocConfig } = require('@antora/asciidoc-loader') + +async function generateSite(args, env) { + const playbook = buildPlaybook(args, env) + const [contentCatalog, uiCatalog] = await Promise.all([ + aggregateContent(playbook).then((contentAggregate) => + classifyContent(playbook, enforceEditurl(contentAggregate)) + ), + loadUi(playbook) + ]) + const asciidocConfig = resolveAsciiDocConfig(playbook) + const pages = convertDocuments(contentCatalog, asciidocConfig) + const navigationCatalog = buildNavigation(contentCatalog, asciidocConfig) + const composePage = createPageComposer(playbook, contentCatalog, uiCatalog, env) + pages.forEach((page) => composePage(page, contentCatalog, navigationCatalog)) + const siteFiles = mapSite(playbook, pages).concat(produceRedirects(playbook, contentCatalog)) + generateIndex(playbook, pages) + if (playbook.site.url) siteFiles.push(composePage(create404Page())) + const siteCatalog = { getFiles: () => siteFiles } + return publishSite(playbook, [contentCatalog, uiCatalog, siteCatalog]) +} + +async function generateIndex(playbook, pages) { + if ((process.env.BUILD_SEARCH_INDEX || 'true') !== 'true') { + console.log('elastic: search index generation skipped') + return + } + + console.log('elastic: generate search index') + let siteUrl = playbook.site.url + + const documents = pages.map((page) => { + const titles = [] + + const html = page.contents.toString() + const $ = cheerio.load(html) + + const $article = $('article') + const title = $article.find('h1').text() + + $article.find('h1,h2,h3,h4,h5,h6').each(function () { + let $title = $(this) + let id = $title.attr('id') + + titles.push({ + text: $title.text(), + id: $title.attr('id'), + url: siteUrl + page.pub.url + '#' + $title.attr('id') + }) + + $title.remove() + }) + + let text = Entities.decode($('article').text()) + .replace(/(<([^>]+)>)/gi, '') + .replace(/\n/g, ' ') + .replace(/\r/g, ' ') + .replace(/\s+/g, ' ') + .trim() + + return { + component: page.src.component, + version: page.src.version, + name: page.src.stem, + title: title, + text: text, + url: siteUrl + page.pub.url, + titles: titles + } + }) + + if ( + process.env.UPDATE_SEARCH_INDEX == 'true' && + process.env.ELASTICSEARCH_NODE && + process.env.ELASTICSEARCH_INDEX && + process.env.ELASTICSEARCH_WRITE_AUTH + ) { + console.log('elastic: rebuild search index') + let result = [] + + documents.forEach((document, index) => { + result.push({ + index: { + _index: process.env.ELASTICSEARCH_INDEX, + _type: 'page', + _id: index + } + }) + + result.push(document) + }) + + const client = new Client({ + node: process.env.ELASTICSEARCH_NODE, + auth: { + username: process.env.ELASTICSEARCH_WRITE_AUTH.split(':')[0], + password: process.env.ELASTICSEARCH_WRITE_AUTH.split(':')[1] + } + }) + + try { + console.log('elastic: remove old search index') + await indexDelete(client) + console.log('elastic: create empty search index') + await indexCreate(client) + console.log('elastic: upload search index') + await indexBulk(client, result) + } catch (err) { + const errObj = JSON.parse(err) + console.log('elastic: ERROR: ' + errObj.status + ' - ' + errObj.error.reason) + process.exit(1) + } + } +} + +function enforceEditurl(contentAggregate) { + _.map(contentAggregate, (source) => { + _.map(source.files, (file) => { + if (_.startsWith(file.src.editUrl, 'file://')) { + if (source.name === 'server') { + file.src.editUrl = + 'https://github.com/owncloud/docs/edit/' + source.version + '/' + file.src.path + } + } + + return file + }) + + return source + }) + + return contentAggregate +} + +function indexDelete(client) { + return new Promise((resolve, reject) => { + client.indices + .delete({ + index: process.env.ELASTICSEARCH_INDEX, + ignore_unavailable: true + }) + .then((resp) => { + resolve(resp) + }) + .catch((err) => { + reject(err) + }) + }) +} + +function indexCreate(client) { + return new Promise((resolve, reject) => { + client.indices + .create({ + index: process.env.ELASTICSEARCH_INDEX + }) + .then((resp) => { + resolve(resp) + }) + .catch((err) => { + reject(err) + }) + }) +} + +function indexBulk(client, result) { + return new Promise((resolve, reject) => { + client + .bulk({ + body: result + }) + .then((resp) => { + resolve(resp) + }) + .catch((err) => { + reject(err) + }) + }) +} + +function create404Page() { + return { + title: 'Page Not Found', + mediaType: 'text/html', + src: { stem: '404' }, + out: { path: '404.html' }, + pub: { url: '/404.html', rootPath: '' } + } +} + +module.exports = generateSite diff --git a/generator/xref-validator.js b/generator/xref-validator.js new file mode 100644 index 0000000..9c835cb --- /dev/null +++ b/generator/xref-validator.js @@ -0,0 +1,93 @@ +'use strict' +/* Copyright (c) 2018 OpenDevise, Inc. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Scans converted pages and navigation files for broken xrefs; if any broken + * xrefs are detected, outputs a report and exits with a failure code. + * + * Usage (from root of playbook repository): + * + * $ NODE_PATH=netlify/node_modules antora --fetch --generator=./generator/xref-validator.js antora-playbook.yml + */ +const aggregateContent = require('@antora/content-aggregator') +const buildPlaybook = require('@antora/playbook-builder') +const classifyContent = require('@antora/content-classifier') +const { convertDocument } = require('@antora/document-converter') +const { resolveConfig: resolveAsciiDocConfig } = require('@antora/asciidoc-loader') + +const BROKEN_XREF_RX = /([^>]+\.adoc)(#[^<]+)?<\/a>/g + +module.exports = async (args, env) => { + const playbook = buildPlaybook(args, env) + const contentCatalog = await aggregateContent(playbook).then((aggregate) => classifyContent(playbook, aggregate)) + const asciidocConfig = resolveAsciiDocConfig(playbook) + const docsWithBrokenXrefs = new Map() + const unsilenceStderr = silenceStderr() + contentCatalog + .getFiles() + .filter((file) => (file.src.family === 'page' && file.out) || file.src.family === 'nav') + .forEach((doc) => { + convertDocument(doc, contentCatalog, asciidocConfig) + if (doc.contents.includes('href="#"')) { + const brokenXrefs = new Set() + const contents = doc.contents.toString() + let match + while ((match = BROKEN_XREF_RX.exec(contents))) { + const [, pageSpec, hash ] = match + // Q: should we report the while xref or just the target? + brokenXrefs.add(pageSpec) + } + if (brokenXrefs.size) docsWithBrokenXrefs.set(doc, [ ...brokenXrefs ]) + } + }) + unsilenceStderr() + if (docsWithBrokenXrefs.size) { + const byOrigin = Array.from(docsWithBrokenXrefs).reduce((accum, [page, xrefs]) => { + let origin + const originData = page.src.origin + let startPath = '' + if (originData.worktree) { + origin = [ + `worktree: ${originData.editUrlPattern.slice(7, originData.editUrlPattern.length - 3)}`, + `component: ${page.src.component}`, + `version: ${page.src.version}`, + ].join(' | ') + } else { + if (originData.startPath) startPath = `${originData.startPath}/` + origin = [ + `repo: ${originData.url.split(':').pop().replace(/\.git$/, '')}`, + `branch: ${originData.branch}`, + `component: ${page.src.component}`, + `version: ${page.src.version}`, + ].join(' | ') + } + if (!(origin in accum)) accum[origin] = [] + accum[origin].push({ path: `${startPath}${page.path}`, xrefs }) + return accum + }, {}) + console.error('Invalid Xrefs Detected:') + console.error() + Object.keys(byOrigin).sort().forEach((origin) => { + console.error(origin) + byOrigin[origin].sort((a, b) => a.path.localeCompare(b.path)).forEach(({ path, xrefs }) => { + //console.error(` path: ${path}`) + //xrefs.forEach((xref) => console.error(` ${xref}`)) + xrefs.forEach((xref) => console.error(` path: ${path} | xref: ${xref}`)) + }) + console.error() + }) + console.error('antora: xref validation failed! See previous report for details.') + process.exitCode = 1 + } +} + +function silenceStderr () { + const stderrWriter = process.stderr.write + process.stderr.write = () => {} + return () => { process.stderr.write = stderrWriter } +} + diff --git a/lib/extensions/remote-include-processor.js b/lib/extensions/remote-include-processor.js new file mode 100644 index 0000000..4567802 --- /dev/null +++ b/lib/extensions/remote-include-processor.js @@ -0,0 +1,203 @@ +/** + * This script mimics the capability of Asciidoc: + * Including content by URI in Antora + * https://docs.asciidoctor.org/asciidoc/latest/directives/include-uri/#reference-include-content-by-uri + * e.g.: include::https://raw.githubusercontent.com/asciidoctor/asciidoctor/master/README.adoc[] + * + * Note check if you need a leveloffset like [leveloffset=+1] + * This may be necessary for the makepdf script to avoid having the included content starting on a separate page. + * + * Note that the makepdf script needs to have the 'allow-uri-read="" ' attribute param set in the code. + * + * Note that no attributes in the included document can be resolved if they are defined outside of this repo + * + * Source: + * Add support for including content from a URL (i.e., remote include) + * https://gitlab.com/antora/antora/-/issues/246 + * https://github.com/feelpp/book.feelpp.org/blob/master/lib/remote-include-processor.js +*/ +const CIRCUMFIX_COMMENT_SUFFIX_RX = / (?:\*[/)]|--%?>)$/ +const NEWLINE_RX = /\r\n?|\n/ +const TAG_DELIMITER_RX = /[,;]/ +const TAG_DIRECTIVE_RX = /\b(?:tag|(end))::(\S+)\[\]$/ +const LINES_DOTDOT_RX = /\.\./ + + +function getTags (attrs) { + if ( 'tag' in attrs ) { + const tag = attrs['tag'] + if (tag && tag !== '!') { + return tag.charAt() === '!' ? new Map().set(tag.substr(1), false) : new Map().set(tag, true) + } + } else if ( 'tags' in attrs ) { + const tags = attrs['tags'] + if (tags) { + let result = new Map() + let any = false + tags.split(TAG_DELIMITER_RX).forEach((tag) => { + if (tag && tag !== '!') { + any = true + tag.charAt() === '!' ? result.set(tag.substr(1), false) : result.set(tag, true) + } + }) + if (any) return result + } + } +} + + +function applyTagFiltering (contents, tags) { + let selecting, selectingDefault, wildcard + if (tags.has('**')) { + if (tags.has('*')) { + selectingDefault = selecting = tags.get('**') + wildcard = tags.get('*') + tags.delete('*') + } else { + selectingDefault = selecting = wildcard = tags.get('**') + } + tags.delete('**') + } else { + selectingDefault = selecting = !Array.from(tags.values()).includes(true) + if (tags.has('*')) { + wildcard = tags.get('*') + tags.delete('*') + } + } + + const lines = [] + const tagStack = [] + const usedTags = [] + let activeTag + let lineNum = 0 + let startLineNum + contents.split(NEWLINE_RX).forEach((line) => { + lineNum++ + let m + let l = line + if ( + (l.endsWith('[]') || + (~l.indexOf('[] ') && + (m = l.match(CIRCUMFIX_COMMENT_SUFFIX_RX)) && + (l = l.substr(0, m.index)).endsWith('[]'))) && + (m = l.match(TAG_DIRECTIVE_RX)) + ) { + const thisTag = m[2] + if (m[1]) { + if (thisTag === activeTag) { + tagStack.shift() + ;[activeTag, selecting] = tagStack.length ? tagStack[0] : [undefined, selectingDefault] + } else if (tags.has(thisTag)) { + const idx = tagStack.findIndex(([name]) => name === thisTag) + if (~idx) { + tagStack.splice(idx, 1) + //console.warn(`line ${lineNum}: mismatched end tag in include: expected ${activeTag}, found ${thisTag}`) + } + //} else { + // //console.warn(`line ${lineNum}: unexpected end tag in include: ${thisTag}`) + //} + } + } else if (tags.has(thisTag)) { + usedTags.push(thisTag) + tagStack.unshift([(activeTag = thisTag), (selecting = tags.get(thisTag))]) + } else if (wildcard !== undefined) { + selecting = activeTag && !selecting ? false : wildcard + tagStack.unshift([(activeTag = thisTag), selecting]) + } + } else if (selecting) { + if (!startLineNum) startLineNum = lineNum + lines.push(line) + } + }) + // Q: use _.difference(Object.keys(tags), usedTags)? + //const missingTags = Object.keys(tags).filter((e) => !usedTags.includes(e)) + //if (missingTags.length) { + // console.warn(`tag${missingTags.length > 1 ? 's' : ''} '${missingTags.join(',')}' not found in include`) + //} + return [lines, startLineNum || 1] +} + + +function getLines (attrs) { + if ( 'lines' in attrs ) { + const lines = attrs['lines'] + if (lines) { + // console.warn(`have lines` + lines) + let result = [] // new Map() + let any = false + lines.split(TAG_DELIMITER_RX).forEach((line) => { + if (line && line !== '!') { + let tryMultipleLines = line.split(LINES_DOTDOT_RX) + if ( tryMultipleLines.length === 1 ) { + any = true + result.push([tryMultipleLines[0], tryMultipleLines[0]]) + } + else if ( tryMultipleLines.length === 2 ) { + any = true + result.push([tryMultipleLines[0], tryMultipleLines[1]]) + } + } + }) + if (any) return result + } + } +} + +function applyLineFiltering (contents, linesToInclude) { + const lines = [] + let lineNum = 0 + let startLineNum + let registerCurrentLine = false + + const nLinesPair = linesToInclude.length + let currentLinePair = 0 + let startLine = linesToInclude[currentLinePair][0] + let endLine = linesToInclude[currentLinePair][1] + // console.warn(`applyLineFiltering ` + startLine + ' and ' + endLine ) + + contents.split(NEWLINE_RX).forEach((line) => { + lineNum++ + + if ( !registerCurrentLine ) { + if ( lineNum == startLine ) + registerCurrentLine = true + } + + if ( registerCurrentLine ) + { + if (!startLineNum) startLineNum = lineNum + lines.push(line) + + if ( lineNum == endLine ) { + registerCurrentLine = false + currentLinePair++ + if ( currentLinePair >= nLinesPair ) + return [lines, startLineNum] + else { + startLine = linesToInclude[currentLinePair][0] + endLine = linesToInclude[currentLinePair][1] + } + } + } + }) + return [lines, startLineNum || 1] +} + +module.exports = function () { + this.includeProcessor(function () { + this.$option('position', '>>') + this.handles((target) => target.startsWith('https://')) + this.process((doc, reader, target, attrs) => { + const contents = require('child_process').execFileSync('curl', ['--silent', '-L', target], { encoding: 'utf8' }) + let includeContents = contents + let startLineNum = 1 + const tags = getTags(attrs) + const lines = getLines(attrs) + if (tags) [includeContents, startLineNum] = applyTagFiltering(includeContents, tags) + else if (lines) [includeContents, startLineNum] = applyLineFiltering(includeContents, lines) + reader.pushInclude(includeContents, target, target, startLineNum, attrs) + // reader.pushInclude(contents, target, target, 1, attrs) + }) + }) +} + diff --git a/lib/extensions/tabs.js b/lib/extensions/tabs.js new file mode 100644 index 0000000..b57687a --- /dev/null +++ b/lib/extensions/tabs.js @@ -0,0 +1,76 @@ +/** + * Extends the AsciiDoc syntax to support a tabset element. The tabset is + * created from a dlist that is enclosed in an example block marked with the + * tabs style. + * + * Usage: + * + * [tabs] + * ==== + * Tab A:: + * + + * -- + * Contents of tab A. + * -- + * Tab B:: + * + + * -- + * Contents of tab B. + * -- + * ==== + * + * To use this extension, register the extension.js file with Antora (i.e., + * list it as an AsciiDoc extension in the Antora playbook file), combine + * styles.css with the styles for the site, and combine behavior.js with the + * JavaScript loaded by the page. + * + * @author Dan Allen + */ +const IdSeparatorChar = '-' +const InvalidIdCharsRx = /[^a-zA-Z0-9_]/g +const List = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'List') +const ListItem = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'ListItem') + +const generateId = (str, idx) => `tabset${idx}_${str.toLowerCase().replace(InvalidIdCharsRx, IdSeparatorChar)}` + +function tabsBlock () { + this.onContext('example') + this.process((parent, reader, attrs) => { + const createHtmlFragment = (html) => this.createBlock(parent, 'pass', html) + const tabsetIdx = parent.getDocument().counter('idx-tabset') + const nodes = [] + nodes.push(createHtmlFragment('
')) + const container = this.parseContent(this.createBlock(parent, 'open'), reader) + const sourceTabs = container.getBlocks()[0] + if (!(sourceTabs && sourceTabs.getContext() === 'dlist' && sourceTabs.getItems().length)) return + const tabs = List.$new(parent, 'ulist') + tabs.addRole('tabs') + const panes = {} + sourceTabs.getItems().forEach(([[title], details]) => { + const tab = ListItem.$new(tabs) + tabs.$append(tab) + const id = generateId(title.getText(), tabsetIdx) + tab.text = `[[${id}]]${title.text}` + let blocks = details.getBlocks() + const numBlocks = blocks.length + if (numBlocks) { + if (blocks[0].context === 'open' && numBlocks === 1) blocks = blocks[0].getBlocks() + panes[id] = blocks.map((block) => (block.parent = parent) && block) + } + }) + nodes.push(tabs) + nodes.push(createHtmlFragment('
')) + Object.entries(panes).forEach(([id, blocks]) => { + nodes.push(createHtmlFragment(`
`)) + nodes.push(...blocks) + nodes.push(createHtmlFragment('
')) + }) + nodes.push(createHtmlFragment('
')) + nodes.push(createHtmlFragment('
')) + parent.blocks.push(...nodes) + }) +} + +module.exports.register = (registry, context) => { + registry.block('tabs', tabsBlock) +} diff --git a/modules/ROOT/attachments/.gitkeep b/modules/ROOT/attachments/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/ROOT/examples/.gitkeep b/modules/ROOT/examples/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/ROOT/images/.gitkeep b/modules/ROOT/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/ROOT/pages/client_releases.adoc b/modules/ROOT/pages/client_releases.adoc new file mode 100644 index 0000000..b5786b4 --- /dev/null +++ b/modules/ROOT/pages/client_releases.adoc @@ -0,0 +1,60 @@ += ownCloud App and Client Releases +:toc: right +:toclevels: 3 + +== Introduction + +include::partial$release-intro-text.adoc[] + +== Desktop App and Mobile Apps + +=== ownCloud Desktop App + +==== Latest Stable Desktop App Release (version {latest-desktop-version}) + +The latest ownCloud Desktop App release, suitable for production use. + +* xref:{latest-desktop-version}@desktop:ROOT:index.adoc[ownCloud Desktop App Manual] +// ({docs-base-url}/pdf/desktop/{latest-desktop-version}_ownCloud_Desktop_Client_Manual.pdf[Download PDF]) + +==== Previous Stable Release (version {previous-desktop-version}) + +* xref:{previous-desktop-version}@desktop:ROOT:index.adoc[ownCloud Desktop App Manual] +// ({docs-base-url}/pdf/desktop/{previous-desktop-version}_ownCloud_Desktop_Client_Manual.pdf[Download PDF]) + +=== ownCloud iOS App + +==== Latest Stable iOS App Release (version {latest-ios-version}) + +The latest ownCloud iOS App release, suitable for production use. + +* xref:{latest-ios-version}@ios-app:ROOT:index.adoc[ownCloud iOS App Manual] +// ({docs-base-url}/pdf/ios-app/{latest-ios-version}_ownCloud_iOS_App_Manual.pdf[Download PDF]) + +==== Previous Stable iOS App Release (version {previous-ios-version}) + +* xref:{previous-ios-version}@ios-app:ROOT:index.adoc[ownCloud iOS App Manual] +// ({docs-base-url}/pdf/ios-app/{previous-ios-version}_ownCloud_iOS_App_Manual.pdf[Download PDF]) + +=== ownCloud Android App + +==== Latest Stable Android App Release (version {latest-android-version}) + +The latest ownCloud Android App release, suitable for production use. + +* xref:{latest-android-version}@android:ROOT:index.adoc[ownCloud Android App Manual] +// ({docs-base-url}/pdf/android/{latest-android-version}_ownCloud_Android_App_Manual.pdf[Download PDF]) + +==== Previous Stable Android App Release (version {previous-android-version}) + +* xref:{previous-android-version}@android:ROOT:index.adoc[ownCloud Android App Manual] +// ({docs-base-url}/pdf/android/{previous-android-version}_ownCloud_Android_App_Manual.pdf[Download PDF]) + +== Building Branded ownCloud Clients (Enterprise only) + +Instructions for building branded ownCloud iOS, Android, and Desktop Sync clients. + +* xref:{latest-branded-version}@branded_clients:ROOT:index.adoc[Building Branded ownCloud Clients] +// ({docs-base-url}/pdf/branded_clients/{latest-branded-version}_ownCloud_Branded_Clients_Manual.pdf[Download PDF]) + +All documentation licensed under the Creative Commons Attribution 3.0 Unported license. diff --git a/modules/ROOT/pages/how_to_contribute.adoc b/modules/ROOT/pages/how_to_contribute.adoc new file mode 100644 index 0000000..6f608c8 --- /dev/null +++ b/modules/ROOT/pages/how_to_contribute.adoc @@ -0,0 +1,69 @@ += How to Contribute to the ownCloud Documentation +:toc: right + +:asciidoc-syntax-url: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ +:antora-platform-url: https://docs.antora.org/ +:bpg-url: https://github.com/owncloud/docs/blob/master/docs/best-practices.md +:github-docs-url: https://github.com/owncloud + + +:description: ownCloud welcomes all helpful contributions to the documentation, whether they’re reporting issues, adding new material, or writing tips and tricks. + +{description} + +== Documentation Prerequisites + +If you wish to contribute to the official documentation manuals, you must: + +* Have a https://github.com/[GitHub] account. + +* Get used to the framework: + +** The ownCloud documentation is written in the {asciidoc-syntax-url}[AsciiDoc file format] +and is powered by the {antora-platform-url}[Antora documentation platform]. + +** Read the https://github.com/owncloud/docs/blob/master/docs/getting-started.md[documentation] for instructions on setting up your build environment and become familiar with the file format and the build system that powers the documentation. + +** When contributing to the documentation, please follow our {bpg-url}[Best Practices and Tips guide]. + +* Fork the official repositories as described below, write your changes and create a pull request. + +== Documentation Sources + +The locations for the sources can be found at: + +* The *main page* source which references all other documentation is found at {github-docs-url}/docs[owncloud/docs]. + +* For *Infinite Scale*, you find the documentation source in {github-docs-url}/docs-ocis[owncloud/docs-ocis]. + +** If you have any suggestions regarding development, see https://owncloud.dev[owncloud.dev] and the sources at {github-docs-url}/ocis[owncloud/ocis]. + +* For *ownCloud Server*, the `Administration` and `Developer` manuals are in {github-docs-url}/docs[owncloud/docs-server]. + +* The *web UI* documentation source for both ownCloud Server and Infinite Scale is located in {github-docs-url}/docs-webui[owncloud/docs-webui]. + +* The *Desktop Sync Client* documentation source is located in {github-docs-url}/docs-client-desktop[owncloud/docs-client-desktop]. + +* The *Android app* documentation source is located in {github-docs-url}/docs-client-android[owncloud/docs-client-android]. + +* The *iOS app* documentation source is located in {github-docs-url}/docs-client-ios-app[owncloud/docs-client-ios-app]. + +* Finally, when contributing to the *UI* used by all documentation repositories, the source is located at {github-docs-url}/docs-ui[owncloud/docs-ui]. + +== Reporting Documentation Errors + +If you find any errors or omissions, we encourage you to report them. Please follow this template when reporting documentation errors: + +. First, search the respective repository for matching or similar issues. +. If an issue is not available, open a new one in the respective repository. +. Link to the error that you want to see fixed. + Please be aware that there are multiple release versions of most of the manuals, so please be specific as to which version needs correcting, and if the issue is in the HTML or PDF version. +. Quote the particular error. +. Provide the correct solution (if you know it) and any links to supporting references. + If you don't know the answer that is OK. +. Provide screenshots if they add useful information. +. Provide your web browser, its version, and your operating system & version. + +== Reporting Documentation Suggestions + +If you don't have a specific problem or contribution, but wish to offer a suggestion, open an issue in the appropriate repository. diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc new file mode 100644 index 0000000..62067b0 --- /dev/null +++ b/modules/ROOT/pages/index.adoc @@ -0,0 +1,203 @@ += ownCloud Documentation Overview +:toc: right +:toclevels: 3 + +== What is Infinite Scale + +Infinite Scale is a *cloud-native microservices-based architecture* and the latest generation of server applications. It does not depend on external software packages like PHP or a database which eliminates all the hassle that comes along with using them. With its modern xref:{latest-ocis-version}@ocis:ROOT:architecture/architecture.adoc[architecture], Infinite Scale provides all xref:{latest-ocis-version}@ocis:ROOT:availability_scaling/availability_scaling.adoc[deployment models] for cloud infrastructure deployments and optimized scaling setups for the best output in return for the invested energy. With the single binary concept, managing the server is much more streamlined over all deployment methods. + +With all the measures taken, *security is greatly increased* compared to a LAMP stack. For details read the page about xref:{latest-ocis-version}@ocis:ROOT:security/security.adoc[Security Aspects of Infinite Scale]. + +Amongst many other features, the most notable benefits of ownCloud Infinite Scale are: + +=== Spaces + +Spaces are special folders made for teamwork. + +Members of a space enjoy the service of a space manager, who takes care of enough quota and the right people added to a space. Thus a space is the ideal place where school classes, co-workers in business projects or other working groups collaborate. Spaces don't "belong" to individual people, but are assigned to someone with the role of the space manager. For example, school classes can easily be handed over to the next teacher or organizations can transfer project responsibilities if an employee leaves the organization. + +Usually space managers are, for example, project leaders or teachers. +All in all, spaces make life easier for admins by giving space managers the ability of self-service. + +=== ownCloud Web + +ownCloud Web is bundled with Infinite Scale, has a new design and comes with a brand new look. The goal is to make ownCloud accessible to all people from children to experts. Technically, ownCloud Web is built with VueJS as dedicated client, communicating via well-formed APIs with the Infinite Scale server, just like all the other ownCloud clients. ownCloud Web can be used as app for ownCloud Server but is limited in its capabilities. Nevertheless, switching to ownCloud Web makes a future migration to Infinite Scale easier for users as they are already used to the new UI. ownCloud Web can be customized according to your corporate identity via config values. + +=== Collaborative Editing + +Editing with Microsoft Online Office 365, Collabora Office and OnlyOffice + +Infinite Scale comes with a ramped-up WOPI protocol server that provides collaborative office document editing with multiple users. It supports Microsoft Online Office 365, Collabora Office and OnlyOffice out of the box and is ready to support more collaborative editors in the near future. With the focus on seamless collaboration, files are locked when opened in an online editor to show others that they are in use and likely to change. + +=== Links + +In Infinite Scale, we drastically simplified sharing by links. First of all: You can get a link with a single click in ownCloud Web. Second: You can share one and the same link with internal and external people at once and if you change your mind, you can restrict access for example to only internal people of your organization. This feature was known as "private link" in ownCloud 10 and is still available but via the "internal" selection of a link. + +=== Cloud Native Deployments + +Infinite Scale is a platform built of independent microservices that communicate over the highly efficient gRPC protocol internally and provide HTTP APIs externally. That gives the flexibility for easy extension, integration and deployment of the entire platform. + +For the sake of efficiency, Infinite Scale reduces dependencies and works without a traditional database. This saves administration efforts, hardware resources, attack vectors and energy. + +One of the biggest benefits of Infinite Scale is the variety of xref:{latest-ocis-version}@ocis:ROOT:deployment/index.adoc[deployment models] that make the rollout of the platform really easy and independent of the underlying infrastructure as much as possible. + +Infinite Scale can be delivered as a xref:{latest-ocis-version}@ocis:ROOT:deployment/binary/binary-setup.adoc[single binary] - which is a self-contained, complete and ready to start compilation of all microservices that are needed to simply start Infinite Scale. Other featured deployment methods are xref:{latest-ocis-version}@ocis:ROOT:deployment/container/container-setup.adoc[docker images] and xref:{latest-ocis-version}@ocis:ROOT:deployment/container/orchestration/orchestration.adoc#docker-compose[docker-compose] files. For setups with scaling requirements all Infinite Scale microservices can be deployed and scaled separately on orchestration infrastructure like xref:{latest-ocis-version}@ocis:ROOT:deployment/container/orchestration/orchestration.adoc#kubernetes-and-helm[Kubernetes]. + +With that, Infinite Scale provides all deployment models for modern cloud infrastructure deployments and optimized scaling setups to achieve the best output in return for the invested energy. + +=== Infinite Scale Features + +[width=100%,cols="~,~,~",options="header"] +|=== +| Category +| Component +| Comment + +.4+| Storage +| Local (POSIX) +| “ocis” driver (“decomposedfs”), the default filesystem for Infinite Scale + +| NFS (POSIX) +| “ocis” driver (“decomposedfs”), the default filesystem for Infinite Scale + +| S3 +| “s3ng” driver; with decomposedfs for metadata (POSIX) + +| ownCloud 10 SQL storage driver +| Needed for parallel deployments with ownCloud 10 and for migration purposes + +.4+| Users & IDM +| Integrated, lightweight user & group management (LibreIDM) +| Out-of-the-box integrated user & group management; can be replaced with external LDAP + +| OIDC (LibreConnect) +| OpenID Connect for user authentication and single sign-on based on an integrated identity provider; can be replaced with external identity providers + +| User roles system +| Define user roles based on permissions to create a segregation of duties in administration as well as to distinguish user types + +| LDAP integration +| Integrate an external LDAP/AD user directory + +.8+| Content Collaboration +| File management (upload / download / rename / copy / move / delete / etc.) +| Ability for users to conduct basic file and folder operations as well as synchronization with clients + +| Sharing / access management (permissions on data) +| Ability for users to share files and folders with users, groups and via links + +| Spaces +| User-independent project and team folders with multiple owners and dedicated behavior + +| Deleted files / trash bin +| Ability for users to restore deleted files + +| File versioning +| Ability for users to automatically create versions upon file changes and to restore them + +| Media viewer (preview) +| Ability for users to preview images, videos and music files in the browser + +| File locking +| Ability for users to lock files to prevent concurrent edits + +| Archive download for multiple files and folders +| Ability for users to download multiple files and folders as archives + +.5+| Platform +| User settings +| Framework for users to define their settings like web UI language + +| Notifications +| Framework to inform users about events in the platform; email notification for the event “Share received” + +| File search +| Global search by file name, filter current folder by file name + +| File metadata management framework +| Store and retrieve arbitrary metadata related to files + +| Event system +| Framework to enable cross-service communication based on events + +| Customization +| Web branding (runtime branding based on config values) +| Customize the ownCloud Web frontend according to your corporate identity + +.3+| API & Integration +| WebDAV +| API for file operations; API endpoints known from ownCloud 10 + +| OCS +| Open Collaboration Services, ownCloud-specific API endpoints known from ownCloud 10 + +| LibreGraph +| Open implementation of the MS Graph API, currently used for the management of spaces + +.3+| Administration & Operations +| Technical service metrics +| Load, memory usage, etc. per Infinite Scale service + +| Logging +| Technical log for operations and debugging + +| Auditing +| Ability to log all operations conducted by users for compliance and traceability + +.4+| Deployment +| Single binary +| The simplest way to deploy Infinite Scale for testing + +| systemd +| Deploy Infinite Scale as a systemd service + +| Docker +| Deploy Infinite Scale using Docker and Docker-Compose + +| Helm / Kubernetes +| Deploy Infinite Scale in Kubernetes + +.3+| Web Office Integrations +| Collabora Online +| Collabora Online can be integrated via the wopiserver extension; automatic file locking capabilities are available + +| ONLYOFFICE +| ONLYOFFICE can be integrated via the wopiserver extension; automatic file locking capabilities are available + +| Microsoft Office Online +| Microsoft Office Online can be integrated via the wopiserver extension; automatic file locking capabilities are available + +| File Migration +| Cloud Importer +| With the integrated `Cloud Importer`, there is native support for importing files like from Google Cloud or Microsoft OneDrive and via public shares from Nextcloud or ownCloud and other WebDav based file sharing products. "If you can share it, you can import it". +|=== + +== What is ownCloud Server + +ownCloud Server is an open source *LAMP-stack-based* server application that allows you to access your files from anywhere in a secure way. The files are stored on a server running ownCloud. You can access your files via the browser or sync them to your desktop or mobile device like you might know it from oneDrive, Dropbox or others. The difference with ownCloud is, that you stay in control of your data as you can install ownCloud in your own environment. + +== Web Interfaces + +The web interfaces integrated in ownCoud Infinite Scale and owncloud Server give users native access to their ownCloud cloud data. With no needs for user-side installations, one can just access their data securely from all over the world with just a browser. + +== Apps + +=== ownCloud Desktop App + +The ownCloud Desktop app is fully compatible with Infinite Scale as well as the recent ownCloud Server. It provides many features like syncing data locally. + +For Infinite Scale, the desktop sync app supports the Infinite Scale spaces concept for modern collaboration. Users can select which spaces they are interested in and synchronize these to their desktops. This is supported by a UI where spaces can be selected comfortably, which results in individual and efficient sync connections for each space. + +The desktop app comes with many improvements like performance or Windows VFS or improved log file generation and a large number of other topics. + +=== ownCloud Android App + +Starting with the new Android app version 4.0, users get full support for Infinite Scale spaces as well as the recent ownCloud Server. Users have comfortable access to the collaboration spaces in all their accounts on their mobile devices. The list of spaces available is dynamically retrieved from the Infinite Scale server and listed along with the cover image and description. + +The Android app is an example of how efficient data management works on the mobile platform with Infinite Scale. + +=== ownCloud iOS App + +Starting with the new iOS app version 12, users get full support for Infinite Scale, including spaces, as well as the recent ownCloud Server. Users can comfortably access the collaboration spaces in all their accounts on their mobile devices. The list of spaces available is dynamically retrieved from the Infinite Scale server and listed along with the cover image and description. + +The iOS app is an example of how efficient data management works on the mobile platform with Infinite Scale. diff --git a/modules/ROOT/pages/ocis_release_notes.adoc b/modules/ROOT/pages/ocis_release_notes.adoc new file mode 100644 index 0000000..87a6852 --- /dev/null +++ b/modules/ROOT/pages/ocis_release_notes.adoc @@ -0,0 +1,2125 @@ += Infinite Scale Server Release Notes +:toc: macro +:toclevels: 2 +:toc-title: Releases + +:release-roadmap-url: https://github.com/owncloud/ocis/blob/master/docs/ocis/release_roadmap.md + +:description: Dear Infinite Scale administrator, find below the changes and known issues in Infinite Scale that need your attention. + +{description} Also see our {release-roadmap-url}[release roadmap] for additional information. + +{empty} + + +toc::[] + +== Infinite Scale 5.0.0 + +[discrete] +=== General + +This release brings significant enhancements in performance and stability. It is also designed to provide an optimized experience for both end users and administrators. Please find the most important changes described here or refer to the changelog for a complete list of changes: + +* Infinite Scale: https://github.com/owncloud/ocis/releases/tag/v5.0.0[Changes in 5.0.0] +* Web: https://github.com/owncloud/web/releases/tag/v8.0.0[Changelog for ownCloud Web 8.0.0] + +[discrete] +=== Federated Cloud Sharing (Feature Preview) + +Federated Cloud Sharing allows users to access and collaborate on files stored on connected external servers, as if they were stored on the user's instance. This creates a fluid and efficient workflow, eliminating the need for multiple file versions or complex file transfer processes. With Federated Cloud Sharing data can reside on its original server, ensuring compliance with regional data sovereignty laws and organizational data policies. + +To enable file sharing with a user on a different, connected server, an initial invitation needs to be sent. Once this is completed, files can be shared with that user as usual by entering their username, just like with internal users. The only difference is that users from connected instances will be marked as `Federated Users` for easy identification and management. + +*Technical Note:* + +Federated Cloud Sharing in Infinite Scale is based on the Open Cloud Mesh protocol version 1.1 (OCM 1.1) https://cs3org.github.io/OCM-API/docs.html?branch=v1.1.0&repo=OCM-API&user=cs3org#/paths/~1shares/post[Learn more about OCM 1.1] + +Kudos to all members of the CS3-Community who contributed to this project. A special thanks is owed to CERN for their contribution of the Science Mesh App. Thank You! + +[discrete] +=== Password Policy for Sharing Links + +The Password Policy for Sharing Links allows administrators to set specific requirements for password strength. This feature ensures that your sharing practices align seamlessly with existing security policies. + +The customizable settings for the password are minimum amount of: + +* uppercase characters +* lowercase characters +* numbers +* the special characters: {nbsp} +++"!#\$%&'()*+,-./:;<=>?@[\]^_`{|}~+++ +* and password length + +**Banned Passwords List** + +To further bolster security, this update includes the ability to define a banned password list. This feature prevents users from using overly common or simplistic passwords, like `Password123!`, thereby reducing the risk of unauthorized access. + +**Integrated Password Generator** + +Accompanying this new password policy is a built-in password generator. It automatically creates passwords that comply with your defined requirements, simplifying the process for users while maintaining a high standard of security. + +[discrete] +=== Default Link Permission + +With this new capability we've introduced a new configuration option that allows administrators to set the default permissions for sharing links. This feature is tailored to meet the varying security needs of different organizations. + +As an administrator, you now have the flexibility to define what the standard permissions for a link should be. This means you can choose whether to create a sharing link that is accessible to external parties with just a click, or opt for a more secure link that requires user authentication for access. + +The default link permissions are communicated through capabilities. The default setting for this config option is set to `default_link_permissions:1`, meaning that by default, anyone can access the link with viewer permissions. This enhancement is geared towards providing administrators with greater control over their organizations data sharing and security protocols. + +[discrete] +=== Filter Chips: Type and Last Modified + +[discrete] +==== Type Filter Chip + +Easily narrow down your search by file type. Whether you're looking for documents, images, spreadsheets, or any other file types, the Type Filter Chip allows you to quickly filter results to match your specific needs. The Type filter groups the following MIME types. (The usual file extension is indicated in parentheses after the MIME type for ease of reference. However, it is the MIME type of a file that is decisive, not the file extension.) + +* **Document Filter:** + +** .doc (Microsoft Word Document) +** .docx (Microsoft Word Open XML Document) +** .odt (OpenDocument Text Document) +** .txt (Plain Text File) +** .md (Markdown Documentation File) +** .rtf (Rich Text Format File) +** .pages (Apple Pages Document) + +* **Spreadsheet Filter:** + +** .xls (Microsoft Excel Spreadsheet) +** .xlsx (Microsoft Excel Open XML Spreadsheet) +** .ods (OpenDocument Spreadsheet) +** .csv (Comma-Separated Values) +** .numbers (Apple Numbers Spreadsheet) + +* **Presentation Filter:** + +** .pptx (PowerPoint Presentation, Open XML) +** .ppt (PowerPoint Presentation) +** .odp (OpenDocument Presentation) +** .key (Apple Keynote Presentation) + +* **PDF Filter:** + +** .pdf (Portable Document Format) + +* **Image Filter:** + +** .jpg or .jpeg (JPEG image) +** .png (Portable Network Graphics) +** .gif (Graphics Interchange Format) +** .bmp (Bitmap Image File) +** .tif or .tiff (Tagged Image File Format) +** .svg (Scalable Vector Graphics) +** .webp (WebP image) +** .psd (Adobe Photoshop Document) +** .raw (Raw Image Formats, various camera manufacturers) +** .heif or .heic (High Efficiency Image File Format) +** .ico (Icon File) +** .tga (Targa Graphic) +** .pcx (Paintbrush Bitmap Image) +** .ai (Adobe Illustrator File) +** .eps (Encapsulated PostScript) +** .wmf (Windows Metafile) +** .emf (Enhanced Metafile) +** .xcf (eXperimental Computing Facility, native GIMP file format) +** .indd (Adobe InDesign) +** .cr2 (Canon Raw 2nd Edition) +** .nef (Nikon Electronic Format) +** .orf (Olympus Raw Format) +** .sr2 (Sony Raw Format 2) +** .pef (Pentax Electronic File) +** .arw (Sony Alpha Raw) +** .rw2 (Panasonic RAW 2) +** .dng (Digital Negative) +** .exr (OpenEXR) +** .apng (Animated Portable Network Graphics) +** .avif (AV1 Image File Format) +** .jxr (JPEG XR) +** .hdp (HD Photo, also known as JPEG XR) +** .cpt (Corel Photo-Paint image) +** .dds (DirectDraw Surface) +** .jp2 or .j2k (JPEG 2000) +** .jng (JPEG Network Graphics) +** .pbm (Portable Bitmap Format) +** .pgm (Portable Graymap Format) +** .ppm (Portable Pixmap Format) +** .pnm (Portable Any Map) +** .pfm (Portable Float Map) +** .pam (Pluggable Authentication Module) +** .hdr (High Dynamic Range Image) +** .ras (Sun Raster Graphic) +** .sgi or .rgb (Silicon Graphics Image) +** .tiff (Tagged Image File Format, alternative spelling) +** .xbm (X Bitmap) +** .xpm (X Pixmap) +** .ico (Windows Icon) +** .cur (Windows Cursor) + +// do not remove + +[none] +** ... and all other types that are included within the MIME Types of image/* + +// do not remove + +* **Video Filter:** + +** video/* + +** .mp4 (MPEG-4 Part 14) +** .avi (Audio Video Interleave) +** .mov (Apple QuickTime Movie) +** .wmv (Windows Media Video) +** .flv (Flash Video) +** .mkv (Matroska Video) +** .webm (WebM Video) +** .mpeg or .mpg (MPEG Video) +** .vob (DVD Video Object) +** .ogv (Ogg Video) +** .m4v (MPEG-4 Video File) +** .3gp (3GPP Multimedia File) +** .3g2 (3GPP2 Multimedia File) +** .asf (Advanced Systems Format) +** .h264 (H.264 Encoded Video File) +** .rm (RealMedia File) +** .rmvb (RealMedia Variable Bitrate) +** .ts (MPEG Transport Stream) +** .mts (AVCHD Video File) +** .m2ts (MPEG-2 Transport Stream) +** .divx (DivX-Encoded Movie File) +** .xvid (Xvid-Encoded Video File) +** .dvr-ms (Microsoft Digital Video Recording) +** .f4v (Flash MP4 Video File) +** .m2v (MPEG-2 Video) +** .mxf (Material Exchange Format) +** .svi (Samsung Video File) +** .m4p (MPEG-4 Protected File) +** .qt (QuickTime Movie) +** .nsv (Nullsoft Streaming Video File) +** .amv (Anime Music Video File) +** .flh (FLIC Animation File) +** .roq (Id Software Game Video) +** .mpe (MPEG Movie File) +** .smk (Smacker Video File) +** .bik (Bink Video File) +** .ayuv (Uncompressed YUV Video File) + +// do not remove + +[none] +** ... and all other types that are included within the MIME Types of video/* + +// do not remove + +* **Audio Filter:** +** .mp3 (MPEG Audio Layer III) +** .wav (Waveform Audio File Format) +** .aac (Advanced Audio Coding) +** .flac (Free Lossless Audio Codec) +** .ogg (Ogg Vorbis) +** .m4a (MPEG-4 Audio) +** .wma (Windows Media Audio) +** .opus (Opus Audio Codec) +** .alac (Apple Lossless Audio Codec) +** .mid or .midi (Musical Instrument Digital Interface) +** .mp2 (MPEG Audio Layer II) +** .amr (Adaptive Multi-Rate) +** .aiff or .aif (Audio Interchange File Format) +** .au (Sun Microsystems Audio) +** .ra or .ram (Real Audio) +** .dts (Digital Theater Systems) +** .ac3 (Audio Codec 3) +** .ape (Monkey's Audio) +** .mka (Matroska Audio) +** .gsm (Global System for Mobile Audio) +** .vox (Dialogic ADPCM) +** .tta (True Audio Codec) +** .voc (Creative Labs Audio) +** .qcp (Qualcomm PureVoice) +** .vqf (TwinVQ) +** .paf (Ensoniq PARIS Audio File) +** .spx (Speex) +** .wv (WavPack) +** .oga (Ogg Audio) +** .mogg (Multitrack Ogg) + +// do not remove + +[none] +** ... and all other types that are included within the MIME Types of audio/* + +// do not remove + +* **Archive Filter:** + +** .zip (zip) +** .tar (x-tar) +** .gzip (x-gzip) +** .7z (x-7z-compressed) +** .rar (x-rar-compressed) +** .bz (x-bzip) +** .bz2 (x-bzip2) +** .tgz (x-tgz) + +// do not remove + +[none] +** ... _only_ those types that are starting within the MIME Types of application/ + +// do not remove + +[discrete] +==== Last Modified Filter Chip + +Find the most relevant files in no time. This filter enables users to search for files based on the time they were last modified. Whether you're looking for the latest versions or need to access files from a specific time period, this filter streamlines your search process. + +* **Modified Filter:** +** today +** last 7 days +** last 30 days +** this year +** last year + +[discrete] +=== Simplified Shared with me Page + +We made significant improvements to the `Shared with me` section to make your file-sharing experience more efficient and user-friendly. + +Previously divided into three parts, the `Shared with me` section has now been consolidated into a single, simplified section. This change provides a more streamlined view of all shared files, making it easier to navigate and manage your shared content. + +[discrete] +==== Auto-Accept Feature for Shares: + +In an effort to simplify your workflow, we have implemented an auto-accept feature for shares which is enabled by default. This means that any files shared with you will automatically appear in your `Shared with me` section without the need for manual acceptance, saving you time and effort. + +[discrete] +==== Filter by People: + +If you remember only the name of the person who shared a file with you, our new filter option comes to the rescue. You can now filter the shares by the name of people, making it easier to find files shared by specific individuals. + +[discrete] +==== Option to Hide Unwanted Shares: + +We understand that sometimes you may receive shares that are not relevant or wanted. To address this, we have introduced a feature that allows you to hide such shares. By hiding a share, you can maintain a clear view of the shares that are important to you, ensuring your `Shared with me` section remains organized and clutter-free. + +**Access to Hidden Shares:** + +If you change your mind and wish to view a hidden share, you can easily do so. A dedicated area for hidden shares has been added, allowing you to revisit and manage any shares you have previously hidden. + +[discrete] +==== Enhanced Search Filter: + +To help you quickly find specific shares, we have improved the search functionality within the `Shared with me` section. This enhanced search filter enables you to efficiently locate files based on various criteria. + +[discrete] +==== Sync Feature for Better Control: + +Gain control over which shared files are available for sync on your mobile and desktop devices. This feature is especially useful for managing large files. You can now choose to exclude certain files from syncing right from the start. + +[discrete] +=== Shortcuts + +This new feature is designed to improve navigation and access within the platform, making your experience more efficient and integrated. Creating shortcuts is a new option in the 'New' menu, where you can also create new files. + +**Link to External: Webpage:** + +You can now create shortcuts that link directly to external websites. This feature allows for quick access to frequently used online resources, right from within ownCloud Infinite Scale. + +**Internal Linking to File, Folder or a Space** + +The Shortcut feature also allows you to create links to internal files, folders, or Spaces. This improves organization and accessibility to important documents and areas within ownCloud, which is especially useful in collaborative scenarios. + +[discrete] +=== Improved Tags + +You can now add tags to files directly from the files details panel in the right sidebar. This update eliminates the need to navigate away from the details panel, streamlining the process of organizing and categorizing your documents. With tagging now integrated into the details panel, the process becomes more intuitive and user-friendly. + +[discrete] +=== New action: Duplicate a Space + +This action is designed to enhance the flexibility and efficiency of space management for our users. You now have the option to create a copy of an existing Space. This duplication includes all files and folder structures within the Space. The duplicated Space will be free of any existing members, shares, sharing links or tags. This precaution is taken to prevent accidental data leakage and to ensure that the Space Manager can start from scratch, setting up a new Space for team collaboration as needed. This feature saves time and effort in setting up new Spaces that require similar content and structure to existing ones, but with different sharing. + +[discrete] +=== Show WebDAV Path + +Advanced users now have the ability to view the WebDav Path and URL for each file, folder or Space. This is particularly beneficial for users who prefer to interact through alternative methods, such as command-line interfaces or other third-party tools that support WebDav. It offers a direct and powerful way to interact with resources, especially for scripting, automation, or programmatic access. + +[discrete] +=== Realtime Events (Server Sent Events) + +This new feature brings the ability to display events in real-time, a shift from the traditional time series (polling mechanism). This advancement is made possible through the implementation of Server Sent Events (SSE). By leveraging SSE, Infinite Scale now provides an instantaneous update mechanism. This means that events like notifications and file locking status changes are communicated to users in real-time. + +**Real-Time Notifications:** + +You will receive notifications instantly ensuring that you don't have to wait for important information. + +**Immediate File Locking Visibility:** + +The status of file locking and unlocking is now displayed in real-time. This feature is crucial for collaborative environments, as it allows team members to see when a file is being used or becomes available, preventing conflicts and enhancing collaboration efficiency. + +[discrete] +=== Keyword Query Language (KQL) + +To streamline and enhance the development process, we have standardized the search syntax across server-client search requests using the Keyword Query Language (KQL). By adopting KQL, a well-known and widely used standard, we significantly simplify the development process for client applications. Developers can now rely on a familiar syntax, reducing complexity and accelerating development. + +[discrete] +=== NATS.js as Registry + +To enhance the robustness of Infinite Scale we integrated NATS.js as our primary registry mechanism. This update is particularly beneficial for large-scale deployments. With NATS.js, Infinite Scale is better equipped to handle large-scale deployments efficiently. NATS.js facilitates smoother and more stable operations even as the number of services and nodes increases. The goal is to provide a resilient and fault-tolerant framework, ensuring continuous and uninterrupted service even in demanding scenarios. + +[discrete] +=== Web Embed Mode + +The Web UI now provides an Embed Mode for easier integration into other applications. The Embed Mode allows external applications to integrate the Web UI directly. This means that users can now access and interact with Infinite Scale within the context of other applications. + +Example: Imagine you're using a chat application and want to send a sharing link. With the Embed Mode, you can open the Web UI in a file picker-like interface, select files from Infinite Scale, and share them without ever having to leave the chat tab. + +The Embed Mode streamlines workflows and eliminates the need to switch between different applications to manage files. + +[discrete] +=== Focused "New" Menu + +The `New` menu items have been reorganized with the most frequently used items placed at the top. This rearrangement is based on user feedback, ensuring that the most important filetypes are readily accessible. In our commitment to Open Source and universal accessibility, we've revised the wording for Document labels to be more vendor-neutral. This change reflects our dedication to providing a user-friendly interface that caters to a universal user base. + +[discrete] +=== Open the Sidebar From Everywhere +We have relocated the button to open the sidebar, positioning it now in the global top bar. This move allows users to access the right sidebar not just in the Files app, but also in a variety of other applications. This change provides a way for integrating features like file details and sharing options into other applications, beyond the Files app. + +[discrete] +=== 400% Faster Upload Preparation Time + +In the latest update, we've implemented significant improvements in the efficiency of folder tree creation during file uploads. By optimizing the process to run asynchronously and reducing the number of PROPFIND requests on nested folders, we've managed to substantially speed up this operation. In a test scenario with a folder containing 155 subfolders, the time to create these folders has been reduced from 20-30 seconds to just 5-7 seconds. While this duration may still be noticeable, it represents a considerable improvement, especially considering the limitations of client-side operations. + +Additionally, we've massively enhanced the upload preparation time. Rather than setting file data individually for each file, we now collect all necessary data first and then apply it in a single batch using Uppy's setState method. This approach streamlines the upload process, making it much quicker and more efficient for users. + + +[discrete] +=== Experimental: Support of ADFS + + +[discrete] +=== Enhanced Extension Capabilities + + +=== Known Issues + +=== Migrations + +[discrete] +==== Async Uploads + +* This change sets the default for async uploads `OCIS_ASYNC_UPLOADS` from false to true. True enables postprocessing for all uploaded files. Note, newer features are based on async uploads and might not work correctly when left to false or turning the feature off manually. https://github.com/owncloud/ocis/pull/7416[#7416] + +[discrete] +==== Cache Stores + +* Some cache stores as defined in `OCIS_CACHE_STORE` are now marked for deprecation. These are `ocmem`, `redis`, `etcd` and `nats-js`. A new cache store has been added: `nats-js-kv`. If you have used one of the deprecated stores, you should reconfigure to one of the supported ones as the deprecated stores will be removed in a later version. https://github.com/owncloud/ocis/pull/7979[#7979] + +[discrete] +==== Default Registry + +* We switched the default registry of `MICRO_REGISTRY` from `memory` to `nats-js-kv`. In addition, some registries are now marked for deprecation. These are `nats`, `etcd`, `consul` and `mdns`. If you have used one of the deprecated registries, you should reconfigure to one of the supported ones as the deprecated registries will be removed in a later version. https://github.com/owncloud/ocis/pull/8011[#8011] + +[discrete] +==== Web Config Keys + +* The environment variables `WEB_OPTION_IMPRINT_URL`, `WEB_OPTION_PRIVACY_URL` and `WEB_OPTION_ACCESS_DENIED_HELP_URL` have been removed and the settings are now avaialble as part of the https://owncloud.dev/clients/web/theming/#common-section[Web Theming]. For details see the referenced developer documentation. https://github.com/owncloud/ocis/pull/7970[#7970] and https://github.com/owncloud/ocis/pull/7938[#7938] + +=== Breaking Changes + +[discrete] +==== Service Accounts for Microservices + +* For existing installations you need to set the `OCIS_SERVICE_ACCOUNT_ID` and `OCIS_SERVICE_ACCOUNT_SECRET` envvars. +* For new installations `ocis init` sets the values automatically and no envvars are needed. https://github.com/owncloud/ocis/pull/6427[#6427] + +== Infinite Scale 4.0.4 + +[discrete] +=== General + +This is a patch release only, please update as soon as possible. + +[discrete] +=== Enhancement + +* Update Reva to improve trash bin listing: https://github.com/owncloud/ocis/pull/7858[#7858] + +== Infinite Scale 4.0.3 + +[discrete] +=== General + +This is a patch release only, please update as soon as possible. + +[discrete] +=== Issues Fixed + +* Bump Reva to 2.16.1. https://github.com/owncloud/ocis/pull/7350[#7350] + +* We fixed a problem where the states of received shares were reset to PENDING in the + +`ocis migrate rebuild-jsoncs3-indexes` command. https://github.com/owncloud/ocis/issues/7319[#7319] + +* We fixed an issue that allowed two schools to be created with the same school number. https://github.com/owncloud/ocis/pull/7351[#7351] + +* Disable username validation for Keycloak example. https://github.com/owncloud/ocis/pull/7230[#7230] + +Set `GRAPH_USERNAME_MATCH` to `none` to accept any username that is also valid for Keycloak. + +* Actually pass `PROXY_OIDC_SKIP_USER_INFO` option to OIDC client middleware. https://github.com/owncloud/ocis/pull/7220[#7220] + +[discrete] +=== Enhancement + +* Add `OCIS_LDAP_BIND_PASSWORD` as replacement for `LDAP_BIND_PASSWORD`. https://github.com/owncloud/ocis/issues/7176[#7176] + +The enviroment variable `OCIS_LDAP_BIND_PASSWORD` was added to be more consistent with all other global LDAP variables. `LDAP_BIND_PASSWORD` is deprecated now and scheduled for removal with the 5.0.0 release. We also deprecated `LDAP_USER_SCHEMA_ID_IS_OCTETSTRING` for removal with 5.0.0. The replacement for it is `OCIS_LDAP_USER_SCHEMA_ID_IS_OCTETSTRING`. + +=== Solved Known Issues + +* We reintroduced the `USERS_LDAP_USER_SCHEMA_ID` variable which was accidently removed from the users service with the 4.0.0 release. https://github.com/owncloud/ocis/issues/7312[#7312] + +== Infinite Scale 4.0.2 + +[discrete] +=== General + +This is a patch release only, please update as soon as possible. + +[discrete] +=== Issues Fixed + +* Fixed a problem where the states of received shares were reset to PENDING in the `ocis migrate rebuild-jsoncs3-indexes` command. https://github.com/owncloud/ocis/pull/7336[#7336] + +* Fixed an issue that allowed two schools to be created with the same school number. https://github.com/owncloud/ocis/pull/7351[#7351] + +* Actually pass `PROXY_OIDC_SKIP_USER_INFO` option to oidc client middleware. https://github.com/owncloud/ocis/pull/7220[#7220] + +* Reintroducing the `USERS_LDAP_USER_SCHEMA_ID` variable which was accidently removed from the users service +with the 4.0.0 release. https://github.com/owncloud/ocis/pull/7321[#7321] + +* Always pass adjusted default nats options. https://github.com/cs3org/reva/pull/4214[cs3org/reva#4214] + +* In the yaml example for Keycloak, set `GRAPH_USERNAME_MATCH` to `none`, to accept any username that is +also valid for keycloak. https://github.com/owncloud/ocis/pull/7230[#7230] + +== Infinite Scale 4.0.1 + +[discrete] +=== General + +This is a patch release only, please update as soon as possible. + +=== Solved Known Issues + +The critical issue identified in Infinite Scale 4.0.0 where users where able to search other users' spaces under certain circumstances has been resolved, see https://github.com/owncloud/ocis/issues/7092[#7092]. + +== Infinite Scale 4.0.0 + +[discrete] +=== General + +This release primarily focuses on performance and stability improvements along with usability enhancements for a more streamlined user experience. + +Please find the full list of changes here: + +* Infinite Scale: https://github.com/owncloud/ocis/releases/tag/v4.0.0[Changes in 4.0.0] +* Web: https://github.com/owncloud/web/releases/tag/v7.1.0[Changelog for ownCloud Web 7.1.0] + +[discrete] +=== Paste to Upload + +With the "Paste to upload" feature, you can instantly upload a single file by simply pasting it from your clipboard via kbd:[CTRL+V] / kbd:[CMD+V] in the Web UI. This eliminates the need for traditional file selection and upload methods, providing you an intuitive and swift upload process. Note: For security reasons "Paste to upload" works only for a single file, not for multiple files or a folder. +https://github.com/owncloud/web/pull/9140[#9140] + +[discrete] +=== Fulltext Search: Highlight Matches + +Instead of just showing you the files that contain your search terms, it also highlights exactly where those terms are within each document. This will expedite your search for relevant content, saving you from the hassle of manually scanning through lengthy documents. Users can now activate the fulltext search by selecting the btn:[Search only in content] filter chip located on the search results page. This takes away the need for inputting search syntax. https://github.com/owncloud/web/pull/9294[#9294] + +[discrete] +=== Search: Location Filter + +The location filter feature allows you to refine search by specifying the file location. Now, instead of searching throughout your entire storage system, you can specify to search only within your current folder. This allows for a faster, more accurate search result, saving you precious time and effort. https://github.com/owncloud/web/pull/9304[#9304] + +[discrete] +=== Search: Tag Filter + +With the tag filter on the search results page, you can now refine your search results by specific tags. If you've assigned tags to your files and folders for better organization, you can utilize these tags as filters in your searches. This means you can narrow down your search results to only show items that carry a specific tag. + +For example, if you're looking for a particular project file and you remember tagging it as "Project X", you can input "Project X" in the tag filter, and the search results will only display files and folders with that tag. This new feature is particularly useful when dealing with a large number of files, making your search more efficient and manageable. https://github.com/owncloud/web/pull/9044[#9044], https://github.com/owncloud/web/pull/9096[#9096] + +[discrete] +=== Cloud Importer (experimental) + +We are excited to announce our new extension: Cloud Importer, designed to import files from other services. With this functionality, you can now seamlessly import files and folders from other services like OneDrive, Google Drive, ownCloud 10 or Nextcloud directly into Infinite Scale. + +Effortlessly transfer your work documents, shared files, or entire project folders from these popular cloud storage platforms to your account. Whether you're moving a single document or a large batch of files, the Cloud Importer ensures a smooth, fast, and reliable transfer. Note that the Cloud Importer only imports files, not shares or tags. Think of it as uploading a file, but from a cloud service instead of from your local drive. + +The Cloud Importer is disabled by default. To enable this extension, please refer to the xref:{latest-ocis-version}@ocis:ROOT:deployment/container/orchestration/orchestration.adoc#docker-compose-examples[WOPI Docker Compose Deployment] Example. https://github.com/owncloud/ocis/pull/6702[#6702] + +This feature is experimental, i.e. its in a preview state, may break and individual production usage must be agreed with ownCloud Support. + +[discrete] +=== Simplified Sharing Links + +The simplified sharing links make sharing files with both internal and external parties easier than ever, while maintaining the highest levels of security and access control. + +With simplified sharing links, you can generate a single, user-friendly link for any file or folder you want to share. This one link is all you need, whether you're sharing with team members within your organization or with external partners and clients. + +The advanced design of simplified sharing links respects the permissions of all recipients, regardless of whether they're internal or external. This means that users will only gain the access levels (e.g. view, download, edit) that you authorize. It ensures secure, controlled sharing without compromising on ease of use. + +An added benefit for internal users is the visibility of the file location. If permission is granted, internal users can see where the shared file is stored within the organization's file system. This enables them to navigate directly to the file location, eliminating the need to access the file via the shared link every time. This feature is particularly valuable for efficient collaboration and knowledge sharing within teams. + +Simplified sharing links combines convenience, control, and clarity in one package. Experience a more streamlined and intuitive way to share files both within and outside your organization, while always maintaining control over your files' security and accessibility. + +Note: If you create a sharing link that tries to grant more permissions than internal people have, the internal sharing permissions will take effect for internal people. In other words: The link acts as a "pointer" for internal people. https://github.com/owncloud/web/pull/9299[#9299] + +[discrete] +=== File Control Bar + +The file control bar is a static, always accessible bar located within the user interface of the document viewer or editor. It is designed to provide a consistent location where users can find and use critical file-related functions such as btn:[close] or btn:[save]. https://github.com/owncloud/web/pull/8442[#8442], https://github.com/owncloud/web/pull/8447[#8447] + +[discrete] +=== Links: Directly Open in Editor + +When you share a document that has a standard associated application, the link will now open the document directly in its respective app, instead of showing the document as a single file listing as it did previously. This enables recipients to immediately begin viewing or editing the shared document, eliminating the extra step of navigating from the file listing to the actual document. + +For instance, if you share a Word document, the recipient can click on the link and the document will open directly in its associated application, such as OnlyOffice or Microsoft Word, depending on the settings. https://github.com/owncloud/web/pull/9046[#9046], https://github.com/owncloud/web/pull/9307[#9307] + +[discrete] +=== Drop Files to the Breadcrumb + +You can now move files to a parent folder through a simple drag and drop action. Instead of navigating through multiple steps to move files, you can now simply grab the files you want to move and then drop them onto the breadcrumb trail representing the parent folders. + +For example, if you're in a subfolder and want to move a file up one level, you can drag the file to the breadcrumb link representing the parent folder. The file will be moved instantly, eliminating the need for traditional cut-and-paste or move-to operations. https://github.com/owncloud/web/pull/9052[#9052] + +[discrete] +=== Context Menu on Whitespace + +This feature allows you to right-click on any empty space (whitespace) within your file view to access the context menu. This action was previously limited to direct file or folder interaction, but we've expanded its functionality to utilize the whitespace as well, enhancing your control over the workspace. This new context menu provides quick access to commonly used operations. For instance, you can create a new folder directly from the menu, offering an expedited process for organizing your files. In addition, you can easily view details for the current folder, including its contents, shared status, and more, all from the same context menu. https://github.com/owncloud/web/pull/8921[#8921] + +[discrete] +=== View Spaces as List + +Previously, viewing your spaces was limited to a tiles format. You can now switch to a list view that presents your projects in a clean, streamlined manner. This new view offers an overview of all your spaces, allowing for easy navigation and a concise visual of your work environment. + +This list view provides additional information about the space: + +* name of the manager +* number of members +* total quota +* used quota +* remaining quota +* status +* last modified date + +in a more compact and organized manner. This is particularly useful for users who manage multiple spaces, as it allows for efficient scanning and selection. https://github.com/owncloud/web/pull/9195[#9195] + +[discrete] +=== Other Notable Changes + +* Bugfix - Fixes for the Infinite Scale postprocessing restart command: Restarts the complete postprocessing pipeline if there is no active postprocessing: https://github.com/owncloud/ocis/pull/6753[#6753] +* Enhancement - Add `ocis decomposedfs check-treesize` maintenance command: Verify the treesize metadata of a space in decomposedfs: https://github.com/owncloud/ocis/pull/6556[#6556] +* Enhancement - Add server-sent events endpoint for notifications: https://github.com/owncloud/ocis/pull/5998[#5998] +* Enhancement - Use reva client selectors to improve performance and scalability: https://github.com/owncloud/ocis/pull/6452[#6452] +* Enhancement - Allow disabling WOPI chat to disable the inline chat in Only Office: https://github.com/owncloud/ocis/pull/6544[#6544] +* Enhancement - Download a whole space as archive: https://github.com/owncloud/web/issues/9056[#9056] +* Enhancement - We've implemented a new solution to deal with long breadcrumbs even with long folder names: https://github.com/owncloud/web/pull/8984[#8984] +* Enhancement - Respect archiver limits. The archiver service announces a limit for the accumulated filesize of the currently selected resources. The web UI now respects those limits and shows a disabled download button once the limit has been reached. https://github.com/owncloud/web/pull/9055[#9055] +* Enhancement - Privacy statement in account menu. We've added the option to add an imprint and privacy statement via the config: + https://github.com/owncloud/web/issues/9174[#9174] +* Enhancement - Allow local storage for auth token. We've introduced a new env var `WEB_OPTION_TOKEN_STORAGE_LOCAL`. When set to true (default), the auth token will be stored in the browser's local storage instead of the session storage. This will enable a persisted login state across multiple browser tabs. https://github.com/owncloud/web/pull/9386[#9386] +* Enhancement - Add login button to top bar. We've added a login button to the top bar, this might be handy if a user receives a public link, and they want to login with their user account. https://github.com/owncloud/web/pull/9178[#9178] +* Enhancement - Add pagination options to admin settings: https://github.com/owncloud/web/pull/9199[#9199] +* Enhancement - Add batch actions to search result list: https://github.com/owncloud/web/pull/9200[#9200] + +=== Known Issues + +* A critical issue has been discovered where users where able to search other users' spaces under certain circumstances. +* The environment variable `USERS_LDAP_USER_SCHEMA_ID` variable was accidently removed from the users service. + +=== Migrations + +* The space index of the decomposedFS will be migrated from symlinks to messagepack. This is an auto migration. See the xref:{latest-ocis-version}@ocis:ROOT:migration/upgrading-ocis.adoc[Upgrading Infinite Scale] documentation for more and important details. +* If you use a customized theme you need to add 3 new color tokens to the theme.json: ++ +* `swatch-passive-hover-outline` +* `swatch-primary-muted-hover` +* `swatch-primary-gradient-hover` ++ +{empty} ++ +These colors ensure, that the primary and outlined buttons (e.g. "Upload" and "New") have a proper hover state. +* If you used `yes` or `no` in your YAML files, please change these values to `true` or `false`. Background: The YAML parser we use does not support `yes` or `no` any more. + +=== Breaking Changes + +* Client pool selectors have changed from IP addresses `127.0.0.1:9xxx` to service names `com.owncloud.api.*`. https://github.com/owncloud/ocis/pull/6452[#6452] +* All environment variables that were marked for deprecation in Infinite Scale release 4.0.0 have finally been removed. https://github.com/owncloud/ocis/pull/7099[#7099] + +See the xref:{latest-ocis-version}@ocis:ROOT:migration/upgrading-ocis.adoc[Upgrading Infinite Scale] documentation for important details. + +== Infinite Scale 3.0.0 + +[discrete] +=== General + +We are pleased to announce the availability of Infinite Scale 3.0.0 along with its clients for Web, Windows, MacOS, Linux, iOS and Android. + +Please find the full list of changes here: + +* Infinite Scale: https://github.com/owncloud/ocis/releases/tag/v3.0.0[Changes in 3.0.0] +* Web: https://github.com/owncloud/web/releases/tag/v7.0.0[Changelog for ownCloud Web 7.0.0] + +[discrete] +=== Antivirus (ICAP) + +The Antivirus interface ensures secure file sharing by protecting against Trojans, viruses, and other malicious software. It scans files using an external antivirus scanning engine before storing them, preventing the spread of infected files. The integration of antivirus scanners through ICAP (Internet Content Adaptation Protocol) allows offloading of scanning to a dedicated service, improving performance and scalability. The interface works, for example, with ClamAV, a comprehensive virus scanner that detects various forms of malware in different file types. Read more: xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/antivirus.adoc[Antivirus Service] + +Note: Because Infinite Scale is capable of asynchronous post-processing, the system can efficiently handle a large number of simultaneous file scans without causing delays or bottlenecks that keep end users waiting. Read more: xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/postprocessing.adoc#virus-scanning[Postprocessing Service]. + +[discrete] +=== File Firewall + +The file firewall adds an additional layer of security to the file-level. With definable rules and criteria, the admin can restrict file uploads based, for example, on file extensions, mime types or even content. This granular control helps prevent unwanted or unauthorized uploads. + +Note: The file firewall utilizes Infinite Scale's policies service to check whether a requested operation is allowed or not. To do so, Open Policy Agent (OPA) is used to define the set of rules of what is permitted and what is not. +Policies are written in the Rego query language. Read more: xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/policies.adoc[Policies Service]. + +[discrete] +=== Tags + +Tags provide a flexible and intuitive way to categorize files. By assigning relevant tags to files, users can easily locate specific documents through powerful search functions. This eliminates the need to remember precise file names or navigate through complex folder structures, saving valuable time and effort. Unlike traditional folder-based systems, tags offer a flexible way to organize files that transcends rigid hierarchies. Users can assign multiple tags to a single file, enabling them to classify and retrieve documents using different criteria simultaneously. This adaptability allows for personalized organization methods that align with individual preferences and working styles. + +Tags are saved as metadata on the storage without the need for a dedicated database to assure resilience and scalability of the system. + +[discrete] +=== Fulltext Search + +Fulltext search revolutionizes the way you search and retrieve files, making it easier and more efficient to find the information you need. It enables you to search for files based on their content, not just their titles or metadata. This means you can enter keywords or phrases related to the actual text within documents, spreadsheets, presentations, and more. Say goodbye to manually scanning through countless files and folders — finding the right document is now just a search away. +Fulltext search utilizes Apache Tika for more advanced content extraction. Apache Tika ensures lightning-fast search results, delivering near-instantaneous responses to your queries. Whether you have a large document repository or a vast number of files, full text search will provide you with swift and accurate results, enabling you to access the information you need without delay. +With Apache Tika you can search the contents of files of the types: PDF, DOCX, XLSX, PPTX, ODF, HTML, XML, EPUB, RTF, Tar, RAR, AR, CPIO, Zip, 7Zip, Gzip, BZip2 and many more... Read more: xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/search.adoc#tika-extractor[Search Service]. + +[discrete] +=== Space Templates + +Applying a template is a breeze. When creating a new project space, simply right-click on a folder of your choice, select "Create Space from selection" and the entire folder structure, complete with subfolders and files, will be instantly generated for a project space. Save time and ensure consistency by eliminating the need to manually create folders and subfolders every time you start a new project or onboard a new team. Space templates ensure a consistent folder structure across projects providing a standardized, efficient, and customizable approach to organizing your documents. Space Templates are only available to users with the permission to create spaces. + +[discrete] +=== Custom User Roles + +Infinite Scale ships with the default user roles admin, space admin, user and user light. Each role has different permissions. For example, only space admins can create spaces, but people with the role "User" cannot create a space. With custom roles, you can now configure roles that fit the needs of your organization. For example, if you need custom roles for your school, you can configure the roles "Teacher" and "Pupil" and not give pupils the permission to create public links. If you are interested in creating custom roles, reach out to us on https://talk.owncloud.com/channel/infinitescale[Talk]. + +[discrete] +=== File Versions: Design Overhaul + +File versions received a design overhaul so that you can go back easily in the version history of a file. With the new design of the file versions feature, you now have even easier access to a comprehensive version history for each file. Every time a file is modified or updated, a new version is created and stored, preserving a complete timeline of changes. This allows you to track and revert to previous versions as needed, ensuring data integrity and eliminating the risk of accidental data loss. + +[discrete] +=== Administration Settings + +This update brings a range of functions to streamline user, group, and space administration, enhancing the overall management experience. Let's explore the exciting new capabilities: + +[discrete] +==== Users Administration: + +* Filter Chips for Groups and Role: + +https://m2.material.io/components/chips#filter-chips[Filter chips] use tags or descriptive words to filter content. With that, you can now conveniently filter users based on groups and roles, making it easier to locate and manage specific user segments efficiently. + +* Batch Actions: +** Quota: + +Administrators can now modify the storage quota for multiple users at once, simplifying the management of storage allocations. +** Add to Group: + +Administrators can add multiple users to a group simultaneously, streamlining the process of assigning users to specific teams or projects. +** Remove from Group: + +Administrators can remove multiple users from a group in one go, ensuring efficient group membership management. +** Disable Login: + +Administrators can now disable login access for multiple users simultaneously, providing better control over user accounts. +** Edit Login (Dis/-allow): + +Administrators can enable or disable login access for multiple users, providing greater flexibility in managing user authentication. + +* Edit Username: + +Administrators have the ability to edit the usernames, which is very important if users change their last name. Remember: In ownCloud Server, users where not allowed to marry and/or change names due to technical limitations. With Infinite Scale, marriage and name changes are now possible. + +[discrete] +==== Groups Administration: + +* Rename Group: + +Administrators can now rename groups, enabling them to update group names to better reflect their purpose or current project. +* Show Members of a Group: + +You can easily view a list of members belonging to a specific group, facilitating better oversight and management of group memberships. +* Filter Members of a Group: + +Administrators can filter group members, making it effortless to locate specific users within a group. + +[discrete] +==== Spaces Administration: + +List All Spaces: With appropriate permissions, administrators can now view a comprehensive list of all spaces within the organization. The following attributes are visible: + +* Space Name +* Managers of the Space +* Amount of Members in the Space +* Remaining Quota +* Last Modified Date +* Status +// *Not visible:* +* View Contents of a Space: Please note that this update does not enable the viewing of contents within a space, including files, space images, or descriptions. This limitation ensures the security and privacy of space contents even from the eyes of an administrator. + +[discrete] +=== GDPR Export + +This update focuses on fulfilling the legal requirements of Article 20 of the General Data Protection Regulation (GDPR) - the Right to Data Portability. This feature empowers users to exercise greater control over their personal data and ensures compliance with GDPR guidelines. + +The GDPR Export feature enables users to easily export where and which personal data stored within Infinite Scale, in compliance with the Right to Data Portability outlined in Article 20 of the GDPR. +Users can now request and receive an export of their personal data in a JSON file, saved to the users' personal files. +The export can be requested at any time in self-service by the user. + +[discrete] +=== Secret File Drop + +The feature formerly known as "Uploader" has been renamed to "Secret File Drop", but the functionality stays the same: The Secret File Drop feature allows users to generate unique links that can be shared with external parties. Recipients can anonymously drop files through these links without the need for a registered account or visibility into other submissions. This ensures data privacy and eliminates the risk of unauthorized access. + +Effortless File Collection: With Secret File Drop, collecting files becomes a seamless process. Simply create a file drop link, share it with recipients, and let them submit files directly without any additional steps or complications. This feature saves time and eliminates the need for manual file collection methods, such as email attachments or physical hand-ins. + +[discrete] +=== 3 View Modes + +Users can now choose three distinct view modes, enhancing file browsing and navigation options: + +* *Compact List View* + +The Compact List View provides a condensed and space-efficient representation of your files and folders, designed for users who prefer a streamlined view. +* *Regular List View* + +The Regular List View offers a familiar and comprehensive approach to file organization. +* *Tiles View* + +The Tiles View introduces a visually appealing and intuitive way to browse your files and folders. In this mode, files and folders are displayed as colorful and resizable tiles, providing a visually engaging experience. Users can preview file contents and relevant details directly within the tiles, allowing for quick identification and navigation. This is particularly beneficial for users who prioritize visual recognition and prefer a visually rich interface. + +[discrete] +=== Trash Bins for Spaces + +The Separate Trash Bin for Spaces introduces individual trash bins for each space within your organization's file system. A space represents a dedicated area where teams collaborate on specific projects, departments, or initiatives. With this feature, accidental file deletions are a thing of the past, as files deleted within a space are now moved to a separate trash bin specific to that space. + +[discrete] +=== Deny Access +The Deny Access feature, which is *experimental and not ready for production environments*, allows users to share folders with groups, but deny access to a single person in that group. Example: If you share the "Birthday Present" folder with all users in the organization, you want to exclude the one person whose birthday is coming up. This use case is now possible, but not yet production ready and disabled by default. To enable this feature, the xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/frontend.adoc#environment-variables[variable] `FRONTEND_OCS_ENABLE_DENIALS` needs to be set to to `true`. Please contact {oc-support-url}[ownCloud Support] or give us your feedback via {oc-central-url}[ownCloud Central] so that we can finalize this long-awaited feature with the help of your testing. + +[discrete] +=== Other Notable Changes + +- We added a config option for cross-origin resource sharing (CORS) which, for example, allows running the Web UI on another domain. https://github.com/owncloud/ocis/pull/5987[#5987] + +- We changed the default behavior of shares: Share receivers have no access to versions. People in spaces with the "Editor" or "Manager" role can still see versions and work with them. https://github.com/owncloud/ocis/pull/5531[#5531] + +- With ownCloud Web having transitioned to Vue 3 recently, we would have had to port the settings ui as well. The decision was made to discontinue the settings ui instead. As a result all traces of the settings ui have been removed. The only user facing setting that ever existed in the settings service is now integrated into the `account` page of ownCloud Web (click on top right user menu, then on your username to reach the account page). https://github.com/owncloud/ocis/pull/5463[#5463] + +- We changed the default behavior of shares: Share receivers have no access to versions. People in spaces with the "Can edit" or "Can manage" role can still see versions and work with them. https://github.com/owncloud/ocis/pull/5531[#5531] + +- To provide more monitoring metrics, we added a debug server to the services "audit", "idm", "userlog", "eventhistory" and "postprocessing". https://github.com/owncloud/ocis/pull/6178[#6178], https://github.com/owncloud/ocis/pull/6153[#6153], https://github.com/owncloud/ocis/pull/6203[#6203], https://github.com/owncloud/ocis/pull/6202[#6202], https://github.com/owncloud/ocis/pull/6204[#6204] + +- You can now send prettier notification emails with HTML templates https://github.com/owncloud/ocis/pull/6147[#6147] + +- Webfinger: If your deployment consists of multiple instances, the webfinger service offers the right instances for the right users so that they can login without having to rember instance specific urls. https://github.com/owncloud/ocis/pull/5373[#5373], https://github.com/owncloud/ocis/pull/6110[#6110] + +- Async postprocessing allows the system to do postprocessing tasks like virusscan, copying of bytes to their final destination, etc. asynchronous to the users request. This is a huge enhancement only available with Infinite Scale! https://github.com/owncloud/ocis/pull/5207[#5207] + +- We introduced a new setting to disable email notifications https://github.com/owncloud/ocis/pull/6137[#6137] + +- The LDAP base DN for new groups is now configurable: The LDAP backend for the Graph service introduced a new config option for setting the Parent DN for new groups created via the `/groups/` endpoint. (`GRAPH_LDAP_GROUP_CREATE_BASE_DN`). It defaults to the value of `GRAPH_LDAP_GROUP_BASE_DN`. If set to a different value the `GRAPH_LDAP_GROUP_CREATE_BASE_DN` needs to be a subordinate DN of `GRAPH_LDAP_GROUP_BASE_DN`. All existing groups with a DN outside the `GRAPH_LDAP_GROUP_CREATE_BASE_DN` tree will be treated as read-only groups. So it is not possible to edit these groups. In the UI this is indicated via a lock-icon in the administration settings. https://github.com/owncloud/ocis/pull/5974[#5974] + +- Disable login for specific users: This new option in the administration settings allows login to be disabled / enabled for specific users. By setting the `accountEnabled` property to `false` for a user via the graph API, users can be disabled (i.e. they can no longer login). https://github.com/owncloud/ocis/pull/5588[#5588] + +- New service `eventhistory`: It is a service that stores events and provides a grpc API to retrieve them. Users will notice this enhancement by the bell on the top right in the Web UI and the corresponding notifications (ex: if a user receives a share or becomes a member of a space). + +- New service `policies`: The policies-service provides a new grpc api which can be used to return whether a requested operation is allowed or not. Open Policy Agent is used to determine the set of rules of what is permitted and what is not. ++ +-- +2 further levels of authorization build on this: + +* *Proxy Authorization* + +The simplest authorization layer is in the proxy, since every request is processed here, only simple decisions that can be processed quickly are made here, more complex queries such as file evaluation are explicitly excluded in this layer. + +* *Event Authorization* (needs async post-processing enabled) + +The next layer is event-based as a pipeline step in asynchronous post-processing, since processing at this point is asynchronous, the operations there can also take longer and be more expensive, the bytes of a file can be examined here as an example. + +Since the base block is a GRPC API, it is also possible to use it directly. Policies are written in the https://www.openpolicyagent.org/docs/latest/policy-language/[rego query language]. https://github.com/owncloud/ocis/pull/5714[#5714] +-- + +- Enforce passwords on public links: Added a new config option to enforce passwords on public links with "Uploader,Editor,Contributor" roles. The new options are: `OCIS_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD`,`SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD` and `FRONTEND_OCS_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD`. Check the docs on how to properly set them. https://github.com/owncloud/ocis/pull/5848[#5848] + +- We added the possibility to restrict the creation of public links based on user roles (permission). https://github.com/owncloud/ocis/pull/5690[#5690] + +- Added possibility to assign roles based on OIDC claims: https://github.com/owncloud/ocis/pull/6048[#6048] + +- Default quota based on user role: With this enhancement roles can now be configured with a default quota (eg. Admins should have a default quota of 100GB, Users should have a default quota of 50GB). https://github.com/owncloud/ocis/pull/5616[#5616] + +- Set default quota for project spaces: Additionally to `set-space-quota` for setting quota on personal spaces we now have `Drive.ReadWriteQuota.Project` for setting project spaces quota. https://github.com/owncloud/ocis/pull/5660[#5660] + +- Automatically emtpy the trashbin (off per default): Introduction of a new cli command to purge old trash-bin items. https://github.com/owncloud/ocis/pull/5500[#5500] + +=== Known Issues + +- The environment variable xref:{latest-ocis-version}@ocis:ROOT:deployment/services/env-vars-special-scope.adoc[OCIS_LDAP_DISABLE_USER_MECHANISM] is an option to control the behavior for disabling users. The default value is `attribute` and requires configuration on the LDAP server. Enabling and disabling users is LDAP implementation specific. ++ +-- +- If you are using an external LDAP server you can either set `OCIS_LDAP_DISABLE_USER_MECHANISM` to `none` to disable it completely or to `attribute` in which case you need to set `OCIS_LDAP_USER_ENABLED_ATTRIBUTE` according to your external LDAP server's requirements. +- Additionally and due to a bug recently discovered in the xref:{latest-ocis-version}@ocis:ROOT:deployment/services/s-list/idp.adoc[IDP] service, you must set `OCIS_LDAP_USER_ENABLED_ATTRIBUTE=""` to overwrite the default setting when `OCIS_LDAP_DISABLE_USER_MECHANISM` is set to `none`. This bug will be fixed in a subsequent release. +-- + +=== Migrations + +- Please note the xref:{latest-ocis-version}@ocis:ROOT:migration/upgrading-ocis.adoc#version-2-0-0-to-3-0-0[Upgrading Infinite Scale] documentation. + +=== Breaking Changes + +- Metadata in MessagePack: Metadata are no longer stored in the xattr of a file, but in a dedicated, more scalable and robust file in the binary `MessagePack` format. https://github.com/cs3org/reva/pull/3728[cs3org/reva#3728] +- The Web UI was updated from Vue.js 2 to Vue.js 3. https://github.com/owncloud/web/issues/7948[#7948] + + +== Infinite Scale 2.0.0 + +Infinite Scale 2.0.0 is the first stable release, ready for production scenarios. Infinite Scale bundles with ownCloud Web. + +Please find the full list of changes here: + +* Infinite Scale: https://github.com/owncloud/ocis/releases/tag/v2.0.0[Changes in 2.0.0] +* Web: https://github.com/owncloud/web/releases/tag/v6.0.0[Changelog for ownCloud Web 6.0.0] + +// === Notable Changes +// === Migrations + +=== Known Issues + +This section will be updated if issues are discovered. + +=== Breaking Changes + +When upgrading from release candidates: + +* https://github.com/owncloud/web/issues/6648[owncloud/web#6648]: Breaks existing bookmarks - they won't resolve anymore. + +* A breaking change was introduced for Infinite Scale deployments. ++ +[WARNING] +==== +In order to make every ocis storage provider ID unique by default, the use use of a random uuidv4 during ocis init was needed. Existing installations need to set this value explicitly or ocis will terminate after the upgrade. + +See the https://github.com/owncloud/ocis/releases/tag/v2.0.0[BREAKING CHANGE in ocis deployments] description for details. +==== + +== Beta Releases + +=== Beta 8 + +Infinite Scale 2.0.0 Beta 8 includes a huge number of smaller bug fixes and polishing all around. It introduces a more efficient and scalable way to store share information and improves the performance of ownCloud Web in many areas very noticeably. Furthermore it is now possible to set user quotas in the UI and administrators can now delete orphaned spaces. + +IMPORTANT: When updating from Infinite Scale Beta 7 or lower to Beta 8 it is necessary to run two migration steps from the previous to the new share manager **before** starting the system again. + +**Migration for User/Group Shares** + +`OCIS_LOG_LEVEL="debug" OCIS_LOG_PRETTY="true" OCIS_LOG_COLOR="true" ocis migrate shares --from cs3 --to jsoncs3` + +If you have set up your system with Docker, you can just use the same syntax as with https://doc.owncloud.com/ocis/next/deployment/container/container-setup.html#first-time-start[ocis init]: + +``` +docker run --rm -it \ + --mount type=bind,source=$PWD/ocis/ocis-config,target=/etc/ocis \ + owncloud/ocis migrate shares +``` + +**Migration for Public Links** + +`OCIS_LOG_LEVEL="debug" OCIS_LOG_PRETTY="true" OCIS_LOG_COLOR="true" ocis migrate publicshares --from cs3 --to jsoncs3` + +If you have set up your system with Docker, you can just use the same syntax as with https://doc.owncloud.com/ocis/next/deployment/container/container-setup.html#first-time-start[ocis init]: + +``` +docker run --rm -it \ + --mount type=bind,source=$PWD/ocis/ocis-config,target=/etc/ocis \ + owncloud/ocis migrate publicshares +``` + +The most prominent changes in **Infinite Scale 2.0.0 beta8** and ownCloud Web 5.7.0 comprise: + +* A new share manager implementation has been added that will store share information in a more efficient and scalable way. https://github.com/owncloud/ocis/issues/4431[ocis#4431] https://github.com/cs3org/reva/pull/3199[reva#3199] +* The number of items per page for pagination has been limited to 100 or 500. The options `1000` and `All` have been removed. https://github.com/owncloud/web/issues/7038[web#7038] +* Further improvements to the web upload performance have been made. https://github.com/owncloud/web/issues/7177[web#7177] +* It is now possible to set/modify user quotas (for personal spaces) in the user management UI. https://github.com/owncloud/web/pull/7182[web#7182] +* A new permission to 'Delete all spaces' has been added to allow the deletion of orphaned Spaces for users with certain roles. This permission has been added to the default 'Admin' role. https://github.com/cs3org/reva/pull/3180 https://github.com/cs3org/reva/pull/3203 https://github.com/owncloud/ocis/issues/4196 +* Deleting a user will now also delete their personal space. https://github.com/owncloud/ocis/issues/4195[ocis#4195] +* Space members can now modify shares other members created. https://github.com/cs3org/reva/pull/3192[reva#3192] +* Some translations have been fixed/improved. https://github.com/owncloud/web/issues/7550[web#7550] +* The design of the default login screen has been improved for better consistency with ownCloud Web. https://github.com/owncloud/ocis/pull/4500[ocis#4500] +* Creating duplicate shares with the same recipient (e.g., via group shares or by resharing) will now be prevented. https://github.com/cs3org/reva/pull/3176[reva#3176] +* EXIF orientation information will now be properly used for images. https://github.com/owncloud/ocis/issues/4477[ocis#4477] +* Improvements for quota handling have been made. https://github.com/owncloud/web/pull/7522[web#7522] +* The right sidebar has been improved for smaller screens. https://github.com/owncloud/web/issues/7498[web#7498] +* The visual appearance and usability of the file search feature has been improved. https://github.com/owncloud/web/pull/7586[web#7586] +* The known issue about wrong file paths in file search results has been fixed. https://github.com/owncloud/web/issues/7391[web#7391] https://github.com/owncloud/ocis/pull/4485[ocis#4485] +* The file search now also works properly with shares. https://github.com/owncloud/web/pull/7560[web#7560] +* Creating a new file will now propose a unique file name. https://github.com/owncloud/web/pull/7555[web#7555] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.8[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.7.0[ownCloud Web changelog] for further details on what has changed. + +=== Beta 7 + +Infinite Scale 2.0.0 beta7 includes stability, security and performance improvements. ownCloud Web has been condensed a bit and the cut/copy/paste feature has been reworked. Web Office can now be configured to use a certain language and system administrators can recover a lost admin password. + +The most prominent changes in **Infinite Scale 2.0.0 beta7** and ownCloud Web 5.7.0 rc.10 comprise: + +* Files and folders can now be cut/copy/pasted using either action buttons after selecting them or by using well-known keyboard shortcuts. The former copy/paste dialog has been removed. This enables copy/paste across spaces. Cut/paste across spaces is not supported at the moment. https://github.com/owncloud/web/pull/7309[web#7309] +* The Web interface has a generally more condensed appearance. https://github.com/owncloud/web/pull/7363[web#7363] +* The language setting for Web Office applications (like ONLYOFFICE or Collabora Online) can now be configured. https://github.com/owncloud/ocis/pull/4399[ocis#4399] https://github.com/cs3org/reva/pull/3156[cs3org/reva#3156] https://github.com/owncloud/ocis/issues/4367[ocis#4367] +* It is now possible to reset a lost administrator password using the command `ocis idm resetpassword`. https://github.com/owncloud/ocis/issues/4084[ocis#4084] https://github.com/owncloud/ocis/pull/4365[ocis#4365] +* Encryption and authentication settings have been added to the mail server configuration. https://github.com/owncloud/ocis/pull/4443[ocis#4443] +* The authentication middleware has been rewritten to increase security and stability. https://github.com/owncloud/ocis/pull/4374[ocis#4374] +* There's a new endpoint `/app/open-with-web` which allows native clients to open applications like ONLYOFFICE or Collabora Online directly in the web browser. https://github.com/owncloud/ocis/pull/4376[ocis#4367] https://github.com/cs3org/reva/pull/3143[cs3org/reva#3143] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.7[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.7.0-rc.10[ownCloud Web changelog] for further details on what has changed. + +=== Beta 6 + +Infinite Scale 2.0.0 beta6 includes a huge number of bug fixes, cosmetic and performance improvements. It also brings a lot of improvements and fixes which further hardened the 'Spaces' feature. + +The most prominent changes in **Infinite Scale 2.0.0 beta6** and ownCloud Web 5.7.0 comprise: + +* The drop area for drag & drop uploads is now shown again. https://github.com/owncloud/web/issues/7080[web#7080] +* Deleting multiple files at once now works properly. https://github.com/owncloud/web/pull/7357[web#7357] +* Some bugs on the 'Shares' page have been addressed (share indicators, declining shares). https://github.com/owncloud/web/pull/7379[web#7379] https://github.com/owncloud/web/pull/7355[web#7355] +* The file list rendering performance has been improved. https://github.com/owncloud/web/issues/7038[web#7038] +* Upload stability in Web has been improved with a better access token handling. https://github.com/owncloud/web/issues/7240[web#7240] +* The file versions of a shared file will now be shown. https://github.com/owncloud/web/pull/7313[web#7313] +* Contextual helper texts for users have been improved. https://github.com/owncloud/web/pull/7404[web#7404] +* The drop menus in the right sidebar (e.g., role picker) have been visually aligned and improved. https://github.com/owncloud/web/pull/7365[web#7365] +* File search will now report the total number of results (if there are more than actually shown). https://github.com/owncloud/web/pull/7267[web#7267] +* Disabling a Space now shows immediate effect to the user. https://github.com/owncloud/web/pull/7334[web#7334] +* Leaving a Space and handing it over to a new Manager now works properly. https://github.com/owncloud/ocis/pull/4244[ocis#4244] +* The sharing autocomplete is not case-sensitive anymore and allows to find share recipients based on all terms in their display name. The substring search has been made configurabe to allow performance optimizations. https://github.com/owncloud/ocis/issues/547[ocis#547] +* Searching in received shares works again. https://github.com/owncloud/ocis/issues/4308[ocis#4308] +* The validation of OIDC access tokens has been improved. https://github.com/owncloud/ocis/issues/3841[ocis#3841] +* It is now possible to provide a list of services that should not start (for scale-out deployments). https://github.com/owncloud/ocis/pull/4254[ocis#4254] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.6[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.7.0-rc.8[ownCloud Web changelog] for further details on what has changed. + +=== Beta 5 + +Infinite Scale 2.0.0 beta5 includes a huge number of bug fixes and performance improvements. It further finalizes the 'Resharing' feature. + +The most prominent changes in **Infinite Scale 2.0.0 beta5** and ownCloud Web 5.7.0 comprise: + +* It is now possible to share received shares with other users ('Resharing'). https://github.com/owncloud/web/pull/7086[web#7086] +* It is now possible to add/remove users to/from groups in the integrated IDM UI. https://github.com/owncloud/web/pull/7176[web#7176] +* The authentication logic in ownCloud Web has been improved for highly increased stability. https://github.com/owncloud/web/issues/7030[web#7030] +* Users from the integrated IDM can now change their password on the profile page. https://github.com/owncloud/web/pull/7206[web#7206] +* Alerts in ownCloud Web have been repositioned and redesigned. https://github.com/owncloud/web/pull/7139[web#7139] +* The buttons to access user management and to create new Spaces will now only be shown when the user has the role/permission to use it. https://github.com/owncloud/web/pull/7197[web#7197] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.5[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.7.0-rc.4[ownCloud Web changelog] for further details on what has changed. + +=== Beta 4 + +Infinite Scale 2.0.0 beta4 introduces the 'Resharing' feature in the backend, brings major improvements for file uploads and adds keyboard shortcuts as well as full drag & drop support in ownCloud Web. + +The most prominent changes in **Infinite Scale 2.0.0 beta4** and ownCloud Web 5.7.0 comprise: + +* The 'Resharing' feature is now supported in the backend but it will still be disabled as there are some pending changes in Web to make it available. https://github.com/owncloud/ocis/pull/3904[ocis#3904] https://github.com/cs3org/reva/pull/2877[cs3org/reva#2877] +* The performance, stability and reliability of file uploads in Web has been further improved. https://github.com/owncloud/web/pull/7111[web#7111] https://github.com/owncloud/web/pull/7123[web#7123] https://github.com/owncloud/web/pull/7120[web#7120] https://github.com/owncloud/web/pull/7109[web#7109] https://github.com/owncloud/web/pull/7100[web#7100] +* Web now supports keyboard shortcuts for cut (e.g., `CTRL+X`), copy (e.g., `CTRL+C`) and paste (e.g., `CTRL+V`) operations. They apply for selected rows of the file list and enable cross-view cut/copy/paste (Personal space, received shares, project spaces). https://github.com/owncloud/web/pull/7078[web#7078] +* Web now supports drag & drop for move operations in all relevant views. https://github.com/owncloud/web/issues/7122[web#7122] +* Web now shows an upload time estimation. https://github.com/owncloud/web/pull/7088[web#7088] +* The file mimetype associations for the 'Preview' feature can now be customized. https://github.com/owncloud/web/issues/6933[web#6933] +* Further audit events and information have been added (folder creation, acting user). https://github.com/owncloud/ocis/pull/3941[ocis#3941] https://github.com/owncloud/ocis/issues/3753[ocis#3753] +* The `ocis version` command provides proper version information again. https://github.com/owncloud/ocis/pull/3953[ocis#3953] + +IMPORTANT: Due to an issue, the `latest` version of the https://github.com/cs3org/wopiserver[WOPI Server extension] that is required for online office integrations (Collabora Online, ONLYOFFICE, Microsoft Office Online) is not compatible with the 2.0.0 beta4 release. Version `8.3.0` of the WOPI Server extension works as expected. + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.4[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.7.0-rc.1[ownCloud Web changelog] for further details on what has changed. + +=== Beta 3 + +The third beta release of Infinite Scale 2.0.0 allows clients to list the contents of "Shares" and rounds-off Spaces with a no-restriction quota feature. Web is shipped with the version 5.5.0-rc.9 and focuses on upload reliability and usability. + +The most prominent changes in **Infinite Scale 2.0.0 beta3** and ownCloud Web 5.5.0 comprise: + +* Improved upload UI: The upload stability has been improved, especially for usecases with many small files and complex folder hierarchies. Also the initial view of the upload UI has been simplified and shows now more details, but only on demand. https://github.com/owncloud/web/pull/7067[web#7067] https://github.com/owncloud/web/pull/7036[web#7036] https://github.com/owncloud/web/pull/7032[web#7032] +* Improved "File already exists" dialog: When moving files to a different folder users can now choose to skip, replace or keep conflicting files. If both files should be kept, the existing filename gets extended with a number: filename (1) filename (2) etc. Similar to known dialogs from e.g. Windows or MacOS, users can now apply the chosen option to all conflicts. https://github.com/owncloud/web/pull/6994[web#6994] +* Allow listing of "Shares": Clients can now list the share jail content via `PROPFIND /dav/spaces/\{sharejailid}` https://github.com/cs3org/reva/pull/2931[reva#2931], https://github.com/cs3org/reva/pull/2904[reva#2904] +* Create Spaces without quota restiction: Space managers can now create Spaces without specific quota restrictions like "10 GB". With the quota option "No restriction" Spaces can use up all available storage entirely. This enables a more dynamic storage allocation. https://github.com/cs3org/reva/pull/2895[reva#2895] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta.3[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.5.0-rc.9[ownCloud Web changelog] for further details on what has changed. + +=== Beta 2 + +The Infinite Scale 2.0.0 beta2 release ships the first round of bug fixes and performance improvements. ownCloud Web has received a lot of smaller improvements all around. + +The most prominent changes in **Infinite Scale 2.0.0 beta2** and ownCloud Web 5.5.0 comprise: + +* OIDC user autoprovisioning with the integrated user management works again. https://github.com/owncloud/ocis/pull/3860[ocis#3860] +* Caching for service discovery has been added. https://github.com/owncloud/ocis/pull/3833[ocis#3833] +* The user quota display now shows the correct values for the respective user's personal space. https://github.com/owncloud/web/pull/6923[web#6923] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta2[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.5.0-rc.8[ownCloud Web changelog] for further details on what has changed. + +=== Beta 1 + +The first beta release of Infinite Scale 2.0.0 (beta1) introduces the `File Search` feature and completely replaces the integrated user management with a lightweight LDAP server that is shipped out-of-the-box (LibreIDM). ownCloud Web introduces a new, feature-rich upload manager based on uppy.io and comes with a couple of design and usability round-offs. + +The most prominent changes in **Infinite Scale 2.0.0 beta1** and ownCloud Web 5.5.0 comprise: + +* All `breaking changes` of Infinite Scale 1.20.0 Technology Preview have been fixed. Especially the https://github.com/cs3org/wopiserver[WOPI Server extension] is compatible with Infinite Scale 2.0.0 again. + +* The `File Search` feature to find files and folders based on their name is now available in the backend and in ownCloud Web. https://github.com/owncloud/ocis/pull/3635[ocis#3635], https://github.com/owncloud/web/pull/6841[web#6841] + +* ownCloud Web introduces a new upload manager based on Uppy (https://uppy.io). Uppy provides a well-designed upload manager overlay, integrates seamlessly with the TUS protocol for upload chunking and provides the ability to cancel, pause and resume uploads. https://github.com/owncloud/web/pull/6202[web#6202] + +* The existing integrated user management has been replaced by LibreIDM which is a lightweight LDAP server being developed by ownCloud and the LibreGraph community (https://github.com/libregraph/idm). LibreIDM comes with a MS Graph-based API and integrates a user interface for user & group management in ownCloud Web. https://github.com/owncloud/ocis/pull/3331[ocis#3331], https://github.com/owncloud/web/issues/6673[web#6673] + +* For security reasons, Infinite Scale will not start anymore without specifying certain secrets. A new command `ocis init` has been added to automatically prepare a new Infinite Scale installation by generating secure default secrets. https://github.com/owncloud/ocis/pull/3551[ocis#3551] + +* The `Shares` folder has been moved into a dedicated entry point. It is now available in the left sidebar as `Shares` and will gather all incoming and outgoing shares of the user. With this, the transition to a clear separation of personal, shared and project files is complete. https://github.com/owncloud/web/issues/6448[web#6448] + +* Cover images for spaces will now be rendered with an appropriate aspect ratio (16:9). https://github.com/owncloud/web/pull/6829[web#6829] + +* When unsharing a file or folder, a confirmation dialog will now appear. https://github.com/owncloud/web/pull/6795[web#6795] + +* It is now possible to show/hide file extensions in ownCloud Web using the file list settings. https://github.com/owncloud/web/pull/6793[web#6793] + +* Infinite Scale now provides dedicated quick links that can be created using the quick action in the file list. Once created, the quick link will stay until it's removed and will be copied when the quick action is used. https://github.com/owncloud/web/pull/6820[web#6820] + +* It is now possible to create links with the `Editor` role for single files. https://github.com/owncloud/web/pull/6787[web#6787] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v2.0.0-beta1[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.5.0-rc.5[ownCloud Web changelog] for further details on what has changed. + +[discrete] +=== Known issues + +This section will be updated if known issues are discovered. + +== Technology Preview Releases + +=== Infinite Scale 1.20.0 Technology Preview + +Version 1.20.0 brings major improvements, new features and bug fixes to the platform. Infinite Scale now provides complete Auditing capabilities and the basic 'Spaces' feature has reached initial feature completeness. Furthermore, ownCloud Web introduces a number of smaller features as well as more design and usability improvements. + +The most prominent changes in Infinite Scale 1.20.0 and ownCloud Web 5.4.0 comprise: + +* The implementation of the basic `Auditing` feature is now complete. https://github.com/owncloud/ocis/pull/3467[ocis#3467] + +* The implementation of the basic `Spaces` feature is now complete. https://github.com/owncloud/web/pull/6693[web#6693], https://github.com/owncloud/web/pull/6659[web#6659] https://github.com/owncloud/web/pull/6639[web#6639], https://github.com/owncloud/web/pull/6633[web#6633] https://github.com/owncloud/web/pull/6662[web#6662], https://github.com/owncloud/web/pull/6642[web#6642] + +* All Space members can now list all links and shares. https://github.com/owncloud/ocis/issues/3370[ocis#3370] + +* The LDAP configuration settings have been simplified and unified across services. https://github.com/owncloud/ocis/pull/3476[#3476] + +* All sharing options (users & links) are now united in one panel in ownCloud Web. https://github.com/owncloud/web/pull/6701[web#6701] + +* The "Media Viewer" in ownCloud Web has been renamed to "Preview". https://github.com/owncloud/web/pull/6514[web#6514] + +* ownCloud Web now has support for audio playback in "Preview" (e.g., MP3, WAV, FLAC, OGG). https://github.com/owncloud/web/pull/6514[web#6514] + +* The feedback link in ownCloud Web is now customizable. See https://owncloud.dev/clients/web/getting-started/#options[getting started] for more information. https://github.com/owncloud/web/issues/6702[web#6702] + +* ownCloud Web now supports full screen mode for external apps like web office. https://github.com/owncloud/web/pull/6688[web#6688] + +* ownCloud Web introduces an integrated PDF viewer that user native browser capabilities. https://github.com/owncloud/web/pull/6654[web#6654] + +* The Text Editor in ownCloud Web has received a couple of improvements. https://github.com/owncloud/web/pull/6667[web#6667] + +* The `Shared with me` and `Shared with others` pages in ownCloud Web have received a couple of improvements. https://github.com/owncloud/web/issues/5976[web#5976], https://github.com/owncloud/web/issues/6140[web#6140] + +* The configuration file directory is now configurable. https://github.com/owncloud/ocis/pull/3440[ocis#3440] + +* Infinite Scale will not create demo users by default anymore. https://github.com/owncloud/ocis/pull/3474[ocis#3474] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.20.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.4.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: Due to some breaking changes, the https://github.com/cs3org/wopiserver[WOPI Server extension] that is required for online office integrations (Collabora Online, ONLYOFFICE, Microsoft Office Online) is not compatible with the 1.20.0 release. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: The archive download for multiple files and whole folders is currently disabled for public links. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.19.1 Technology Preview + +Version 1.19.1 is a bugfix release which fixes a regression in version 1.19.0. + +* Bugfix - Return correct special item urls: https://github.com/owncloud/ocis/pull/3419[#3419] + +=== Infinite Scale 1.19.0 Technology Preview + +Version 1.19.0 brings major improvements, new features and bug fixes to the platform. Infinite Scale now has a full audit log and the `Spaces` feature has made a lot of progress towards its initial feature completeness. Sharing inside of spaces was added as well as a spaces aware trashbin. Furthermore, ownCloud Web comes with many design and usability improvements that round off the recent redesign initiative. + +The most prominent changes in Infinite Scale 1.19.0 and ownCloud Web 5.3.0 comprise: + +* Bugfix - Thumbnails only for accepted shares: https://github.com/owncloud/web/issues/5310[#5310] +* Bugfix - Show no auth popup on password protected public links in ownCloud 10: https://github.com/owncloud/web/pull/6530[#6530] +* Bugfix - Prevent cross-site scripting attack while displaying space description: https://github.com/owncloud/web/pull/6523[#6523] +* Bugfix - Replace public mountpoint fileid with grant fileid in ocdav: https://github.com/cs3org/reva/pull/2646[cs3org/reva#2646] +* Change - Switch NATS backend: https://github.com/cs3org/reva/pull/2574[cs3org/reva#2574] +* Change - Allow LDAP groups to have no gidNumber: https://github.com/cs3org/reva/pull/2667[cs3org/reva#2667] +* Change - Improve quota handling: https://github.com/cs3org/reva/pull/3233[cs3org/reva#3233] +* Change - Use the cs3 share api to manage spaces: https://github.com/cs3org/reva/pull/2600[cs3org/reva#2600] +* Change - Drop json config file support: https://github.com/owncloud/ocis/pull/3366[#3366] +* Change - Settings service now stores its data via metadata service: https://github.com/owncloud/ocis/pull/3232[#3232] +* Enhancement - Contextmenu background hover: https://github.com/owncloud/web/pull/6553[#6553] +* Enhancement - Design improvements: https://github.com/owncloud/web/issues/6492[#6492] +* Enhancement - Improve resource loading within spaces: https://github.com/owncloud/web/pull/6601[#6601] +* Enhancement - Internet Explorer deprecation warning banner: https://github.com/owncloud/web/pull/6629[#6629] +* Enhancement - Load space images as preview: https://github.com/owncloud/web/pull/6529[#6529] +* Enhancement - Resolve private links into folders instead of parent: https://github.com/owncloud/web/issues/5533[#5533] +* Enhancement - Share inheritance indicators: https://github.com/owncloud/web/pull/6613[#6613] +* Enhancement - Shares overview: https://github.com/owncloud/web/issues/6440[#6440] +* Enhancement - Side bar nav tags: https://github.com/owncloud/web/pull/6540[#6540] +* Enhancement - Show space members in share panel for files inside a space: https://github.com/owncloud/web/pull/6554[#6554] +* Enhancement - Allow updating space quota: https://github.com/owncloud/web/pull/6477[#6477] +* Enhancement - Implement edit quota action in spaces overview: https://github.com/owncloud/web/pull/6598[#6598] +* Enhancement - Implement people sharing for spaces: https://github.com/owncloud/web/pull/6455[#6455] +* Enhancement - Implement the spaces permission concept: https://github.com/owncloud/web/pull/6531[#6531] +* Enhancement - Implement people sharing for resources within a space: https://github.com/owncloud/web/pull/6577[#6577] +* Enhancement - Trash bin: https://github.com/owncloud/web/pull/6566[#6566] +* Enhancement - Trash bin breadcrumbs: https://github.com/owncloud/web/pull/6609[#6609] +* Enhancement - Audit logger will now log file events: https://github.com/owncloud/ocis/pull/3332[#3332] +* Enhancement - Add password reset link to login page: https://github.com/owncloud/ocis/pull/3329[#3329] +* Enhancement - Log sharing events in audit service: https://github.com/owncloud/ocis/pull/3301[#3301] +* Enhancement - Add space aliases: https://github.com/owncloud/ocis/pull/3283[#3283] +* Enhancement - Include etags in drives listing: https://github.com/owncloud/ocis/pull/3267[#3267] +* Enhancement - Improve thumbnails API: https://github.com/owncloud/ocis/pull/3272[#3272] +* Enhancement - Add new public share manager: https://github.com/cs3org/reva/pull/2644[cs3org/reva#2644] +* Enhancement - Add new share manager: https://github.com/cs3org/reva/pull/2626[cs3org/reva#2626] +* Enhancement - Add etags to virtual spaces: https://github.com/cs3org/reva/pull/2624[cs3org/reva#2624] +* Enhancement - File Events https://github.com/cs3org/reva/pull/2639[cs3org/reva#2639] +* Enhancement - Add events for sharing action https://github.com/cs3org/reva/pull/2627[cs3org/reva#2627] +* Enhancement - Add space aliases: https://github.com/cs3org/reva/pull/2623[cs3org/reva#2623] +* Enhancement - Add space specific events https://github.com/cs3org/reva/pull/2647[cs3org/reva#2647] +* Enhancement - Add the spaceid to propfind responses https://github.com/cs3org/reva/pull/3345[cs3org/reva#3345] +* Enhancement - Add etag to spaces response https://github.com/cs3org/reva/pull/2616[cs3org/reva#2616] +* Enhancement - Add spaces aware trash-bin API https://github.com/cs3org/reva/pull/2628[cs3org/reva#2628] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.19.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.3.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: Due to some breaking changes, the https://github.com/cs3org/wopiserver[WOPI Server extension] that is required for online office integrations (Collabora Online, ONLYOFFICE, Microsoft Office Online) is not compatible with the 1.19.0 release. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: The archive download for multiple files and whole folders is currently disabled for public links. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.18.0 Technology Preview + +Version 1.18.0 brings major improvements, new features and bug fixes to the platform. Infinite Scale can now send user notifications via email and the `Spaces` feature has made a lot of progress towards its initial feature completeness. Furthermore, ownCloud Web comes with many design and usability improvements that round off the recent redesign initiative. + +The most prominent changes in Infinite Scale 1.18.0 and ownCloud Web 5.2.0 comprise: + +* Infinite Scale introduces a notification service to provide user notifications. Currently it can send email notifications for the event of creating a share with another user. The template used for the notification is basic and will be improved with the next versions. See the https://owncloud.dev/services/notifications/[developer documentation] on how to configure notification settings. https://github.com/owncloud/ocis/pull/3217[ocis#3217] + +* Spaces now have a right sidebar for Space properties like quota, actions and more. https://github.com/owncloud/web/pull/6437[web#6437] + +* Space descriptions and images can now be updated. https://github.com/owncloud/web/pull/6410[web#6410] + +* The readme for Spaces can now be modified via a lightweight modal editor. https://github.com/owncloud/web/pull/6509[web#6509] + +* Spaces now support thumbnail previews. https://github.com/owncloud/ocis/pull/3219[ocis#3219] + +* The design of the breadcrumb in ownCloud Web has been improved. https://github.com/owncloud/web/issues/6218[web#6218] + +* The "+ New" button in ownCloud Web has been split into "+ New" and "Upload". The design and context menu have been improved. https://github.com/owncloud/web/issues/6279[web#6279] + +* The file list in ownCloud Web has received a number of visual and usability improvements. https://github.com/owncloud/web/issues/6207[web#6207] + +* The endpoint to list Spaces now supports sorting by name and last modification time. https://github.com/owncloud/ocis/pull/3201[ocis#3201] + +* The Search feature in ownCloud Web has been fixed and improved, e.g., the context menu works again properly (only available on ownCloud 10 currently). https://github.com/owncloud/web/pull/6445[web#6445], https://github.com/owncloud/web/issues/6496[web#6496] + +* Creating a new file now refreshes the file list in ownCloud Web. https://github.com/owncloud/web/issues/5530[web#5530] + +* Further improvements have been made to comply with the URL scheme defined in https://owncloud.dev/ocis/adr/0011-global-url-format/#mixed-global-urls[mixed global urls]. https://github.com/owncloud/web/pull/6363[web#6363], https://github.com/owncloud/ocis/pull/3109[ocis#3109] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.18.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.2.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: Due to some breaking changes, the https://github.com/cs3org/wopiserver[WOPI Server extension] that is required for online office integrations (Collabora Online, ONLYOFFICE, Microsoft Office Online) is not compatible with the 1.18.0 release. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: The archive download for multiple files and whole folders is currently disabled for public links. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.17.0 Technology Preview + +Version 1.17.0 brings major changes, new features and improvements. The Infinite Scale backend introduces an event system as an important platform component and adds support for file locking. ownCloud Web 5.0.0 comes with a full rework of the design and user experience and introduces initial support for the `Spaces` feature. Additionally ownCloud Web now supports Collabora Online with the ownCloud 10 backend. + +The most prominent changes in Infinite Scale 1.17.0 and ownCloud Web 5.0.0 comprise: + +* Infinite Scale now comes with the foundations of an event system based on https://nats.io[NATS]. The events system allows the oCIS services to communicate between each other based on events and will be the key component for features like notifications, auditing and other event-driven extensions/mechanisms. https://github.com/cs3org/reva/pull/2522[cs3org/reva#2522] + +* ownCloud Web has been completely reworked in terms of design and user experience (main layout, app switcher, navigation sidebar, icons, user menu, etc.). https://github.com/owncloud/web/issues/6102[web#6102], https://github.com/owncloud/web/issues/6036[web#6036], https://github.com/owncloud/web/pull/6272[web#6272] + +* Initial support for the 'Spaces' feature in Infinite Scale and ownCloud Web has been added. https://github.com/owncloud/web/pull/6254[web#6254], https://github.com/owncloud/web/pull/6199[web#6199], https://github.com/owncloud/web/pull/6262[web#6262], https://github.com/owncloud/ocis/pull/2931[ocis#2931], https://github.com/owncloud/ocis/pull/3095[ocis#3095] + +* Infinite Scale now supports file locking on CS3 and WebDAV levels to prevent concurrent/conflicting edits in shared areas. ownCloud Web will soon follow-up with the respective actions and indicators. https://github.com/cs3org/reva/pull/2460[cs3org/reva#2460] + +* Spaces can now be disabled, restored and permanently deleted. https://github.com/owncloud/ocis/pull/3092[ocis#3092] + +* ownCloud Web now provides a light and dark mode with an interactive switcher. https://github.com/owncloud/web/issues/6242[web#6242] + +* ownCloud Web now provides skeleton loading bars in the file list. https://github.com/owncloud/web/pull/6204[web#6204] + +* ownCloud Web now provides an ID- and path-based URL scheme according to https://owncloud.dev/ocis/adr/0011-global-url-format/#mixed-global-urls[mixed global url's]. https://github.com/owncloud/web/pull/6137[web#6137] + +* ownCloud Web now supports Collabora Online with the ownCloud 10 backend. More information on configuration can be found in the https://owncloud.dev/clients/web/deployments/oc10-app/#collabora-online[documentation]. + +* ownCloud Web now respects share expiration date enforcement and defaults with the ownCloud 10 backend. https://github.com/owncloud/web/pull/6176[web#6176] + +* The People sharing dialog in ownCloud Web has received a couple of improvements. https://github.com/owncloud/web/pull/6039[web#6039] + +* ownCloud Web now persists sorting preferences. https://github.com/owncloud/web/issues/5930[web#5930] + +* ownCloud Web will now sort properly, even on paginated views. https://github.com/owncloud/web/issues/5687[web#5687] + +* The right-click menu works again in public links. https://github.com/owncloud/web/issues/6123[web#6123] + +* GraphAPI endpoints for Spaces and user/group management are now available. https://github.com/owncloud/ocis/pull/2858[ocis#2858], https://github.com/owncloud/ocis/pull/2947[ocis#2947], https://github.com/owncloud/ocis/pull/2946[ocis#2946], https://github.com/owncloud/ocis/pull/2978[ocis#2978], https://github.com/owncloud/ocis/pull/2979[ocis#2979] + +* Public links with passwords now work properly. https://github.com/owncloud/ocis/pull/2831[ocis#2831] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.17.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v5.0.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +INPORTANT: Due to some breaking changes, the https://github.com/cs3org/wopiserver[WOPI Server extension] that is required for online office integrations (Collabora Online, ONLYOFFICE, Microsoft Office Online) is not compatible with the 1.17.0 release. This issue is under investigation and will be fixed with the next releases. + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.16.0 Technology Preview + +Version 1.16.0 brings bug fixes, new features and progress for ongoing feature implementations like `Spaces` and application integrations. ownCloud Web comes with a couple of usability improvements (e.g., breadcrumb context menu, right-click menu for multi-select). Infinite Scale has got a revamped config handling that makes deployments easier and more flexible. Additionally, it enables easy and fast collaboration via public links. + +The most prominent changes in Infinite Scale 1.16.0 and ownCloud Web 4.6.0 comprise: + +* ownCloud Web now provides a context menu in the navigation breadcrumb that allows users to conduct actions for the parent folder (e.g., sharing). https://github.com/owncloud/web/pull/6044[web#6044] + +* It is now possible to edit files with integrated applications in public links. https://github.com/cs3org/reva/pull/2310[cs3org/reva#2310] + +* Infinite Scale now provides the API endpoints to manage Spaces (e.g., add/remove users, manage their roles). https://github.com/owncloud/ocis/issues/2740[ocis#2740], https://github.com/cs3org/reva/pull/2250[cs3org/reva#2250] + +* The config handling in Infinite Scale has received a huge rework to better enable different deployment and configuration models (environment variables, single config file, service-specific config files). More information can be found in the https://owncloud.dev/ocis/config/[documentation]. https://github.com/owncloud/ocis/pull/2708[ocis#2708] + +* The right-click context menu in ownCloud Web now works when multiple files have been selected. https://github.com/owncloud/web/pull/5973[web#5973] + +* ownCloud Web now shows accessibility-optimized tooltips with absolute dates on relative dates. https://github.com/owncloud/web/pull/6037[web#6037] + +* Pagination in folders with many files now works properly again. https://github.com/owncloud/web/pull/6056[web#6056] + +* The s3ng metadata storage backend works again. https://github.com/owncloud/ocis/pull/2807[ocis#2807] + +* Improvements have been added to support more identity providers (e.g., Authelia). https://github.com/cs3org/reva/pull/2314[cs3org/reva#2314] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.16.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.6.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.15.0 Technology Preview + +Version 1.15.0 brings improvements for the app provider (external application integrations) and more progress on the 'Spaces' feature. Public links now support multi-file and folder downloads as well as all other external application integrations. ownCloud Web 4.5.0 furthermore comes with improvements for use with the ownCloud Classic backend. + +The most prominent changes in Infinite Scale 1.15.0 and ownCloud Web 4.5.0 comprise: + +* Multi-file and folder downloads as well as other external application (Collabora Online, ONLYOFFICE, CodiMD, etc.) integrations now work in public links. https://github.com/owncloud/web/pull/5924[web#5924] + +* New files (created/uploaded and file versions) will now be highlighted in ownCloud Web. https://github.com/owncloud/web/pull/6020[web#6020] + +* When using ownCloud Web with the ownCloud Classic backend, Web will now automatically display app entries in the app switcher based on the entries in the app switcher of the Classic UI (e.g., Activity, Market) so that users can easily find and use the apps. https://github.com/owncloud/web/pull/5996[web#5996] + +* The width of the right sidebar in the Files app of ownCloud Web has been reduced to make it better usable on medium-sized screens. https://github.com/owncloud/web/pull/5983[web#5983] + +* ownCloud Web has received performance and other improvements for external application integrations. https://github.com/owncloud/web/pull/5952[web#5952] + +* Spaces: A new API endpoint has been introduced that allows listing all Spaces in an installation. https://github.com/owncloud/ocis/pull/2692[ocis#2692] + +* Spaces: A permission has been added to control which users can list all Spaces. https://github.com/cs3org/reva/pull/2207[cs3org/reva#2207] + +* The app provider (for external application integrations) has received improvements for announcing and prioritizing applications as well as for error handling. https://github.com/cs3org/reva/pull/2230[cs3org/reva#2230], https://github.com/cs3org/reva/pull/2263[cs3org/reva#2263], https://github.com/cs3org/reva/pull/2258[cs3org/reva#2258] + +* The configuration defaults have been revisited and improved towards better security. https://github.com/owncloud/ocis/issues/2700[ocis#2700] + +* IPv6 support for Infinite Scale has been added. https://github.com/owncloud/ocis/pull/2698[ocis#2698] + +* A capability for the 'Resharing' feature will now be correctly announced. https://github.com/owncloud/ocis/pull/2690[ocis#2690] + +* Restoring a file version now works properly. https://github.com/cs3org/reva/pull/2270[cs3org/reva#2270] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.15.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.5.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap] + +=== Infinite Scale 1.14.0 Technology Preview + +Version 1.14.0 brings more progress on the backend for the `Spaces` and `Quota` features. ownCloud Web 4.4.0 has received performance and usability improvements. + +The most prominent changes in Infinite Scale 1.14.0 and ownCloud Web 4.4.0 comprise: + +* The media viewer in ownCloud Web is now accessible and themeable. https://github.com/owncloud/web/pull/5900[web#5900] + +* The share expiration date setting has been moved to a dropdown menu to better fit the interface. https://github.com/owncloud/web/pull/5806[web#5806] + +* The performance of ownCloud Web has been improved by removing unnecessary requests and redirects. https://github.com/owncloud/web/pull/5910[web#5910], https://github.com/owncloud/web/pull/5893[web#5893], https://github.com/owncloud/web/pull/5917[web#5917] + +* It is now possible for the sysadmin to set a default quota for new Spaces. This way, users with the respective permission can create new Spaces but administrators still keep a leverage on storage usage. https://github.com/owncloud/ocis/pull/2619[ocis#2619] + +* The permission to change Space quota is now enforced. https://github.com/owncloud/ocis/pull/2650[ocis#2650] + +* The maximum chunk size for upload file chunking has been set to 100 MB which will make chunking apply more frequently resulting in more stable uploads. https://github.com/owncloud/ocis/pull/2584[ocis#2584] + +* It is now possible to set a default storage path for Infinite Scale. https://github.com/owncloud/ocis/pull/2590[ocis#2590] + +* Infinite Scale services now by default only listen on localhost to prevent accidental exposure. https://github.com/owncloud/ocis/pull/2612[ocis#2612] + +* A capability for the user settings endpoint has been added to improve request handling in Web between when used with ownCloud Classic and Infinite Scale, respectively. https://github.com/owncloud/ocis/pull/2655[ocis#2655] + +* Requests in public links are now authenticated properly paving the way for Office capabilities in public links. https://github.com/owncloud/ocis/pull/2536[ocis#2536] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.14.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.4.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.13.0 Technology Preview + +Version 1.13.0 brings progress on the backend for the `Spaces` feature. ownCloud Web and Infinite Scale now provide ZIP/TAR download for multiple files/folders and can integrate external file viewer/editor applications (e.g., Collabora Online, ONLYOFFICE, CodiMD, Microsoft Office Online). + +The most prominent changes in Infinite Scale 1.13.0 and ownCloud Web 4.3.0 comprise: + +* Infinite Scale and Web now allow downloading multiple files or folders as archives https://github.com/owncloud/ocis/pull/2509[ocis#2509], https://github.com/cs3org/reva/pull/2088[cs3org/reva#2088] + +* Infinite Scale and Web can now integrate external applications like file viewers/editors via the https://github.com/cs3org/wopiserver[cs3org/wopiserver] (e.g., Collabora Online, ONLYOFFICE, CodiMD, Microsoft Office Online). https://github.com/owncloud/web/pull/5805[web#5805] + +* The `Shared with me` page in ownCloud Web now clearly separates pending, declined and accepted shares. Pending shares are always displayed prominently so that users are aware and can react accordingly. https://github.com/owncloud/web/pull/5814[web#5814] + +* Legacy URLs (e.g., from the address bar, public links) from ownCloud Classic are now properly resolved after migrating to Infinite Scale and Web https://github.com/cs3org/reva/pull/1989[cs3org/reva#1089] + +* A capability for the Favorites feature has been added https://github.com/owncloud/ocis/pull/2599[ocis#2599] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.13.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.3.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.12.0 Technology Preview + +Version 1.12.0 is a maintenance release with the foundations for the `Spaces` feature and for viewer/editor application integrations. The Infinite Scale backend has been further hardened by fixing known issues, improving error handling and stabilizing existing features. Apart from bugfixing, ownCloud Web 4.2.0 has received a number of usability and design improvements for sharing and the file list. + +The most prominent changes in Infinite Scale 1.12.0 and ownCloud Web 4.2.0 comprise: + +* The Infinite Scale backend now supports the first parts of the `Spaces` feature + +** Creating a new Space is now possible via Graph API https://github.com/owncloud/ocis/pull/2471[ocis#2471] + +** A new sharing role, `Manager`, has been introduced for Spaces https://github.com/cs3org/reva/pull/2065[cs3org/reva#2065] + +** A capability for Spaces has been added https://github.com/cs3org/reva/pull/2015[cs3org/reva#2015] + +* Infinite Scale now provides an app provider and an app registry as a foundation for integrations with viewer/editor applications. https://github.com/owncloud/ocis/pull/2204[ocis#2204] + +* ownCloud Web now has a re-designed sharing role selection. https://github.com/owncloud/web/pull/5632[web#5632] + +* ownCloud Web now shows people in sharing as a collapsed list of avatars to save space. This can be expanded to show more details and the full list. https://github.com/owncloud/web/pull/5758[web#5758] + +* ownCloud Web now shows sharing information in file/folder details. https://github.com/owncloud/web/issues/5735[web#5735] + +* The file size calculation in ownCloud Web has been changed from base-2 (e.g., KB / Kibibyte) to base-10 (e.g., kB / Kilobyte) to match better with user expectations. https://github.com/owncloud/web/pull/5739[web#5739] + +* The URL encoding/decoding in ownCloud Web has been improved. https://github.com/owncloud/web/issues/5714[web#5714] + +* ownCloud Web now provides a robots.txt file. https://github.com/owncloud/web/pull/5762[web#5762] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.12.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.2.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.11.0 Technology Preview + +Version 1.11.0 brings new features, usability improvements and bug fixes. ownCloud Web 4.1.0 now supports drag & drop and allows users to do actions (e.g., sharing) for the folder they are currently in. + +The most prominent changes in Infinite Scale 1.11.0 and ownCloud Web 4.1.0 comprise: + +* ownCloud Web now supports drag & drop to move files/folders. https://github.com/owncloud/web/issues/5592[web#5592] + +* The right sidebar in ownCloud Web can now be collapsed and expanded. This change also allows to open the sidebar without selecting a file/folder which will select the current folder and enable the user to do actions (e.g., sharing) for it. https://github.com/owncloud/web/issues/5165[web#5165] + +* The right sidebar in ownCloud Web now presents details for multiple selected files/folders. https://github.com/owncloud/web/issues/5164[web#5164] + +* The owncloud/ocis Docker image now uses a non-root user for improved security. This is a breaking change for existing Docker deployments. The permission on the files and folders in persistent volumes need to be changed to the UID and GID used for oCIS (default 1000:1000 if not changed by the user). https://github.com/owncloud/ocis/pull/2380[ocis#2380] + +* Infinite Scale now supports request tracing through the whole stack to facilitate debugging. https://github.com/cs3org/reva/pull/1984[reva#1984] + +* Infinite Scale now provides a WebDAV endpoint for the new Spaces feature https://github.com/cs3org/reva/pull/1803[#1803] + +* The Infinite Scale backend has been further hardened by fixing known issues, improving error handling and stabilizing existing features. + +* All test scenarios for file-related operations now pass in Infinite Scale (e.g., file operations, trash bin). + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.11.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.1.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.10.0 Technology Preview + +Version 1.10.0 brings new features, usability improvements and bug fixes. ownCloud Web 4.0.0 now supports ONLYOFFICE document editors and can search/filter files and folders. Furthermore it brings a new context menu for file actions that can be accessed via right click and comes with a big bunch of other notable improvements and fixes. + +The most prominent changes in Infinite Scale 1.10.0 and ownCloud Web 4.0.0 comprise: + +* ownCloud Web now supports ONLYOFFICE document editors when used with ownCloud Classic Server. See the https://owncloud.dev/clients/web/deployments/oc10-app/#onlyoffice[documentation] for more information on requirements and configuration. + +* ownCloud Web now supports global search and filtering for the current folder via the search bar. Both will work when ownCloud Web is used with ownCloud Classic. The Infinite Scale capabilities are currently limited to filtering the current folder. https://github.com/owncloud/web/pull/5415[web#5415] + +* A context menu for a file/folder which contains related actions has been introduced to ownCloud Web (in addition to the actions in the right sidebar). https://github.com/owncloud/web/issues/5160[web#5160] + +* The context menu for a file/folder in ownCloud Web can be opened via right click and using the "..." menu. https://github.com/owncloud/web/issues/5102[web#5102] + +* As a first step of a larger redesign of the sharing dialog in ownCloud Web, the autocomplete and share recipient selection have been redesigned. https://github.com/owncloud/web/pull/5554[web#5554] + +* The right sidebar navigation in ownCloud Web has been redesigned. Moving away from structuring all functionality on a single view using accordions, each section now has their own, dedicated view. https://github.com/owncloud/web/pull/5549[web#5549] + +* The maximum number of sharing autocomplete suggestions in ownCloud Web can now be configured. See the https://owncloud.dev/clients/web/getting-started/#options[documentation] for more information. https://github.com/owncloud/web/pull/5506[web#5506] + +* ownCloud Web works now with ownCloud Classic when OpenID Connect authentication is used. https://github.com/owncloud/web/pull/5536[web#5536] + +* ownCloud Web now respects the server-side capability for user avatars. https://github.com/owncloud/web/pull/5178[web#5178] + +* The login page has been optimized in regards of accessibility. https://github.com/owncloud/web/issues/5376[web#5376] + +* The Infinite Scale backend is being further hardened by fixing known issues, improving error handling and stabilizing existing features. + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.10.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v4.0.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.9.0 Technology Preview + +Version 1.9.0 is a feature and maintenance release. More features have been added and the platform was matured further. ownCloud Web 3.4.1 brings usability improvements and new features. The right sidebar now shows details about the selected resource and offers previews for images. View options for the file list and a feedback button have been added. + +The most prominent changes in Infinite Scale 1.9.0 and ownCloud Web 3.4.1 comprise: + +* The right sidebar in ownCloud Web now shows details about the selected file/folder (e.g., size, owner, sharing status, modification time). https://github.com/owncloud/web/issues/5161[web#5161] + +* The right sidebar in ownCloud Web now shows previews for images. https://github.com/owncloud/web/pull/5501[web#5501] + +* View options for the file list have been introduced in ownCloud Web. Currently this allows to change the number of files/folders per page and to show/hide hidden files. https://github.com/owncloud/web/pull/5408[web#5408], https://github.com/owncloud/web/pull/5470[web#5470] + +* A feedback button has been added to the top bar. It guides the user to an ownCloud Web feedback survey. If undesired, this feature can be disabled in the https://owncloud.dev/clients/web/getting-started/#options[ownCloud Web configuration]. https://github.com/owncloud/web/pull/5468[web#5468] + +* Received shares can now be accepted/declined as batches in the "Shared with me" view. https://github.com/owncloud/web/pull/5374[web#5374] + +* The oCIS backend now supports to enable extensions by name. https://github.com/owncloud/ocis/pull/2229[ocis#2229] + +* Storage drivers can be set to read only. https://github.com/owncloud/ocis/pull/2230[ocis#2230] + +* Micro service init has been improved for faster startup. https://github.com/owncloud/ocis/pull/1705[ocis#1705] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.9.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v3.4.1[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.8.0 Technology Preview + +Version 1.8.0 is a maintenance and bug fix release. ownCloud Web 3.3.0 has received further performance and major accessibility improvements. + +The most prominent changes in Infinite Scale 1.8.0 and ownCloud Web 3.3.0 comprise: + +* ownCloud Web is now fully translatable on Transifex https://github.com/owncloud/web/pull/5042[web#5042] + +* ownCloud Web now supports keyboard navigation https://github.com/owncloud/web/pull/4937[web#4937], https://github.com/owncloud/web/pull/5013[web#5013], https://github.com/owncloud/web/pull/5027[web#5027], https://github.com/owncloud/web/pull/5147[web#5147] + +* ownCloud Web now supports screenreaders https://github.com/owncloud/web/pull/5182[web#5182], https://github.com/owncloud/web/pull/5166[web#5166], https://github.com/owncloud/web/pull/5058[web#5058], https://github.com/owncloud/web/pull/5046[web#5046], https://github.com/owncloud/web/pull/5010[web#5010] + +* ownCloud Web has received many performance improvements (image cache, fixes to avoid duplicate resource loading, asynchronous image loading) https://github.com/owncloud/web/pull/5194[web#5194] + +* The file lists in ownCloud Web are now paginated to control loading times https://github.com/owncloud/web/pull/5224[web#5224], https://github.com/owncloud/web/pull/5309[web#5309] + +* ownCloud Web now supports TypeScript https://github.com/owncloud/web/pull/5194[web#5194] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.8.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v3.3.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.7.0 Technology Preview + +Version 1.7.0 is a maintenance and bug fix release. ownCloud Web 3.2.0 has received further performance improvements and minor usability tweaks. + +The most prominent changes in Infinite Scale 1.7.0 and ownCloud Web 3.2.0 comprise: + +* The S3 storage driver can now be used for testing using the configuration values in the https://owncloud.dev/services/storage-users/[documentation] https://github.com/owncloud/ocis/pull/1886[ocis#1886] + +* A confirmation dialog for public link deletion has been added https://github.com/owncloud/web/pull/5125[web#5125] + +* To improve performance, the file types which are being rendered as previews can now be specified using an https://owncloud.dev/clients/web/getting-started/#options[allow list in config.json], https://github.com/owncloud/web/pull/5159[web#5159] + +* A warning has been added when a user tries to leave the page while an operation is in progress (e.g., an upload) https://github.com/owncloud/web/issues/2590[web#2590] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.7.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v3.2.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.6.0 Technology Preview + +To get the full potential out of the microservice architecture, version 1.6.0 introduces a dynamic service registry to Infinite Scale. The dynamic service registry facilitates the configuration and contributes to the scalability of the platform. ownCloud Web 3.1.0 has received further improvements for accessibility like keyboard navigation and it comes with performance improvements by loading certain elements asynchronously. + +The most prominent changes in Infinite Scale 1.6.0 and ownCloud Web 3.1.0 comprise: + +* Introducing a dynamic service registry: The dynamic service registry takes care of dynamically assigning network addresses between the oCIS services and enables the services to find and work with each other automatically. It replaces the previous hardcoded service configuration which simplifies the initial setup and makes distributed, scale-out environments a lot easier to handle. https://github.com/cs3org/reva/pull/1509[reva#1509] + +* User avatars are now fetched asynchronously, enabling a non-blocking loading of the file list and improving user experience https://github.com/owncloud/owncloud-design-system/pull/1295[design#1295] + +* Further accessibility and keyboard navigation improvements have been added https://github.com/owncloud/ocis/pull/1979[ocis#1979], https://github.com/owncloud/ocis/pull/1991[ocis#1991], https://github.com/owncloud/web/pull/4942[web#4942], https://github.com/owncloud/web/pull/4965[web#4965], https://github.com/owncloud/web/pull/4991[web#4991] + +* The OCS user deprovisioning endpoint has been added, enabling a full user deprovisioning including storage. https://github.com/owncloud/ocis/pull/1962[ocis#1962] + +* Text files (.txt) now have previews (thumbnails) https://github.com/owncloud/ocis/pull/1988[ocis#1988] + +* The translations in the Settings and Accounts extensions have been improved https://github.com/owncloud/ocis/pull/2003[ocis#2003] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.6.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v3.1.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +===== Changed oCIS JSON share driver storage format + +Related: https://github.com/cs3org/reva/pull/1655[reva#1655] + +The storage format of the oCIS JSON share driver has changed. You will be affected if you plan to update from a previous version of oCIS to oCIS 1.6.0, you have shared files or folders with users or groups and you are using the oCIS JSON share driver, which is currently the default share driver. + +.Implications: +* manual action required + +.Our recommended update strategy to oCIS 1.6.0 is: +. let users note all their shares with users and groups they set up in oCIS +. stop oCIS +. move / delete the JSON share driver storage file `/var/tmp/ocis/storage/shares.json` +. update to oCIS 1.6.0 +. let users recreate their shares + +===== Fixed / changed oCIS metadata storage driver filesystem path + +Related: https://github.com/owncloud/ocis/pull/1956[ocis#1956] + +The filesystem path of the oCIS metadata storage driver has changed (been fixed). You will be affected if you plan to update from a previous version of oCIS to oCIS 1.6.0 and are using the oCIS storage driver for metadata storage. + +.Implications: +* manual action required + +.Our recommended update strategy to oCIS 1.6.0 is: +. let users backup all their data stored in oCIS +. stop oCIS +. prune all oCIS data in `/var/tmp/ocis` +. update to oCIS 1.6.0 +. recreate user accounts (can be skipped if an external IDP is used) +. let users upload all their data again +. let users recreate their shares + +If you want to use oCIS 1.6.0 without following our recommended update strategy, you can also keep the pre 1.6.0 behaviour by setting this environment variable: + +[source,bash] +---- +export STORAGE_SYSTEM_ROOT=/var/tmp/ocis/storage/users +---- + +This may lead to faulty behaviour since both the metadata and user storage driver will be storing their data in the same filesystem path. + +=== Infinite Scale 1.5.0 Technology Preview + +Version 1.5.0 is a maintenance release for the Infinite Scale backend with a number of bug fixes and smaller improvements. For ownCloud Web it brings further accessibility improvements and a whole bunch of new features. The web interface can now be branded and there is a new, dedicated view in the left sidebar to list all link shares of a user. + +The most prominent changes in Infinite Scale 1.5.0 and ownCloud Web 3.0.0 comprise: + +* Config file based https://owncloud.dev/clients/web/theming/[theming for ownCloud Web] https://github.com/owncloud/web/pull/4822[web#4822] + +* A dedicated view for "Shared by link" has been added https://github.com/owncloud/web/pull/4881[web#4881] + +* The file list table has been replaced and is now more performant and accessible https://github.com/owncloud/web/pull/4627[web#4627] + +* Many further accessibility improvements have been added, e.g., around the app switcher, sidebar, sharing list and focus management + +* User storage quotas will now be enforced https://github.com/cs3org/reva/pull/1557[reva#1557] + +* The "owncloud" storage driver now supports file integrity checking with checksums https://github.com/cs3org/reva/pull/1629[reva#1629] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.5.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v3.0.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.4.0 Technology Preview + +Version 1.4.0 brings new features, bug fixes and further improvements. The accessibility of ownCloud Web has greatly improved, paving the way for WCAG 2.1 compliance. The Infinite Scale platform has received major improvements regarding memory consumption. The user storage quota feature has been implemented and folder sizes are now properly calculated. It is now possible to write log messages to log files and to specify configuration values using a config file. + +The most prominent changes in Infinite Scale 1.4.0 and ownCloud Web 2.1.0 comprise: + +* ownCloud Web is now able to use pre-signed url downloads for password protected shares https://github.com/owncloud/core/pull/38376[core#38376] + +* Reduced the memory consumption of the runtime drastically (by a factor of 24) https://github.com/owncloud/ocis/pull/1762[ocis#1762] + +* Initial quota support to impose storage space restrictions for users (query / set) https://github.com/cs3org/reva/pull/1405[reva#1405] + +* Folder sizes are now calculated correctly (tree size accounting) https://github.com/cs3org/reva/pull/1405[reva#1405] + +* Added the possibility to write the log to a file with the option to write separated log files by service https://github.com/owncloud/ocis/pull/1816[ocis#1816] + +* Added the possibility to specify configuration values for the entire platform in a single config file https://github.com/owncloud/ocis/pull/1762[ocis#1762] + +* Added GIF and JPEG file types for thumbnail generation (allows to display thumbnails and use the media viewer for GIF/JPEG images) https://github.com/owncloud/ocis/pull/1791[ocis#1791] + +* Fixes for the trash bin feature https://github.com/cs3org/reva/pull/1552[reva#1552] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.4.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v2.1.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +===== Changed oCIS storage driver file layout + +Related: https://github.com/cs3org/reva/pull/1452[reva#1452] + +Despite a breaking change in the oCIS storage driver file layout, data is not automatically migrated. You will be affected if you plan to update from a previous version of oCIS to oCIS 1.4.0 and are using the oCIS storage driver, which is currently the default storage driver. + +.Implications: +* manual action required + +.Our recommended update strategy to oCIS 1.4.0 is: +. let users backup all their data stored in oCIS +. stop oCIS +. prune all oCIS data in `/var/tmp/ocis` +. update to oCIS 1.4.0 +. recreate user accounts (can be skipped if an external IDP is used) +. let users upload all their data again +. let users recreate their shares + +If you already updated to oCIS 1.4.0 without our recommended update strategy you will see no data in oCIS anymore, even after a downgrade to your previous version of oCIS. But be assured that your data is still there. + +.You have to follow these steps to be able to access your data again in oCIS: +. stop oCIS +. navigate to `/var/tmp/ocis/storage/users/nodes/root/` +. in this directory you will find directories with UUID as names. These are the home folders of the oCIS users. In the ones with content your oCIS users uploaded to oCIS. +. create an temporary directory e.g. `/tmp/dereferenced-ocis-storage` +. copy the data from oCIS to the temporary directory while dereferencing symlinks. On Linux you can do this by running `cp --recursive --dereference /var/tmp/ocis/storage/users/nodes/root/ /tmp/dereferenced-ocis-storage` +. you now have a backup of all users data in `/tmp/dereferenced-ocis-storage` and can follow our recommended update strategy above + + +=== Infinite Scale 1.3.0 Technology Preview + +Version 1.3.0 is a regular maintenance and bugfix release. It provides the latest improvements to users and administrators. + +==== Changes in Reva + +https://github.com/cs3org/[Reva] is one of the fundamental components of oCIS. It has these significant changes: + +* Align href URL encoding with oc10 https://github.com/cs3org/Reva/pull/1425[reva#1425] +* Fix public link webdav permissions https://github.com/cs3org/Reva/pull/1461[reva#1461] +* Purge non-empty dirs from trash-bin https://github.com/cs3org/Reva/pull/1429[reva#1429] +* Checksum support https://github.com/cs3org/Reva/pull/1400[reva#1400] +* Set quota when creating home directory in EOS https://github.com/cs3org/Reva/pull/1477[reva#1477] +* Add functionality to share resources with groups https://github.com/cs3org/Reva/pull/1453[reva#1453] +* Add s3ng storage driver, storing blobs in a s3-compatible blobstore https://github.com/cs3org/Reva/pull/1428[#reva1428] + +==== Changes in oCIS + +These are the major changes in oCIS: + +* Update ownCloud Web to v2.0.2: https://github.com/owncloud/ocis/pull/1776[ocis#1776] + +* Enhancement - Update go-micro to v3.5.1-0.20210217182006-0f0ace1a44a9: https://github.com/owncloud/ocis/pull/1670[ocis#1670] + +* Enhancement - Update reva to v1.6.1-0.20210223065028-53f39499762e: https://github.com/owncloud/ocis/pull/1683[ocis#1683] + +* Enhancement - Add initial nats and kubernetes registry support: https://github.com/owncloud/ocis/pull/1697[ocis#1697] + +More details about this release can be found in the full https://github.com/owncloud/ocis/releases/tag/v1.3.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v2.0.2[ownCloud Web changelog]. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +=== Infinite Scale 1.2.0 Technology Preview + +Version 1.2.0 brings more functionality and stability to Infinite Scale. ownCloud Web now loads a lot faster and is prepared for the introduction of accessibility features. An initial implementation for S3 storage support is available and file integrity checking has been introduced. + +The most prominent changes in ownCloud Infinite Scale 1.2.0 and ownCloud Web 2.0.0 comprise: + +* The initial loading time for ownCloud Web has been reduced by handling dependencies more efficiently (the bundle size of ownCloud Web has been drastically reduced) https://github.com/owncloud/web/pull/4584[web#4584] + +* Preparations for accessibility features have been implemented to work towards WCAG 2.1 compliance https://github.com/owncloud/web/pull/4594[web#4594] + +* Initial S3 storage support is available https://github.com/cs3org/reva/issues/1429[reva#1429] + +* File integrity checking has been introduced: When uploading files, Infinite Scale now makes sure that the file integrity is protected between server and clients by comparing checksums https://github.com/cs3org/reva/issues/1400[reva#1400] + +* Public link passwords are now stored as hashes to improve security https://github.com/cs3org/reva/issues/1462[reva#1462] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.2.0[Infinite Scale changelog] and https://github.com/owncloud/web/releases/tag/v2.0.0[ownCloud Web changelog] for further details on what has changed. + +==== Breaking changes + +IMPORTANT: We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our {release-roadmap-url}[release roadmap]. + +===== Fix IDP service user + +Related: https://github.com/owncloud/ocis/pull/1390[ocis#1390], https://github.com/owncloud/ocis/issues/1569[ocis#1569] + +After upgrading oCIS from a previous version to oCIS 1.2.0 you will not be able to login in ownCloud Web + +.Implications: +* manual action required + +.Migration steps: +. Stop oCIS +. Open following file `/var/tmp/ocis/storage/metadata/nodes/root/accounts/820ba2a1-3f54-4538-80a4-2d73007e30bf` +. Change password to `$2y$12$ywfGLDPsSlBTVZU0g.2GZOPO8Wap3rVOpm8e3192VlytNdGWH7x72` +. Change onPremisesSamAccountName to `idp` +. Change preferredName to `idp` +. Save the changed file +. Start oCIS +. You now are able to lock back in again. + +Please have a look at https://github.com/owncloud/ocis/blob/master/docs/ocis/deployment/_index.md#secure-an-ocis-instance[how to secure an oCIS instance] since you seem to run it with default secrets. + +===== Reset shares + +Related: https://github.com/owncloud/ocis/pull/1626[ocis#1626] + +After upgrading oCIS from a previous version to oCIS 1.2.0 you will will not be able to use previous shares or create new shares. + +.Implications: ++ manual action required +* loss of shares (manual resharing is needed, files will not be lost) + +.Migration steps: +. Stop oCIS +. Delete following file `/var/tmp/ocis/storage/shares.json` +. Start oCIS +. Recreate shares manually + +=== Infinite Scale 1.1.0 Technology Preview + +Version 1.1.0 is a hardening and patch release. It ships with the latest version of ownCloud Web and brings a couple of minor improvements. The minor version increase is needed due to non-backwards compatible changes in configuration. The documentation has been updated to reflect the changes. Please note that this version is still a Technology Preview and not suited for production use. + +The most prominent changes in Infinite Scale 1.1.0 and ownCloud Web 1.0.1 comprise: + +* Performance and stability improvements for installations with multiple concurrent users + +* Simplified configuration by introducing the new environment variable OCIS_URL + +* Beta release of https://github.com/owncloud/cdperf[ownCloud performance scripts] + +* Update ownCloud web to https://github.com/owncloud/web/releases/tag/v1.0.1[v1.0.1] + +* Update reva to https://github.com/cs3org/reva/releases/tag/v1.5.1[v1.5.1] + +You can also read the full https://github.com/owncloud/ocis/releases/tag/v1.1.0[Infinite Scale changelog] for further details on what has changed. + +=== Infinite Scale 1.0.0 Technology Preview + +We are pleased to announce the availability of Infinite Scale 1.0.0 Technology Preview which is released as the first public version of the new Infinite Scale platform. + +==== Microservice architecture + +Infinite Scale is following the microservices architectural pattern. It is implemented as a set of microservices which are independent of each other. They are coupled with well-defined APIs. This architecture fosters a lot of benefits that we were aiming for with the new design for oCIS: + +* Every service is independent, comparably small and brings it's own webserver, backend/APIs and frontend components + +* Each service runs as a separate service on the system, increasing security and stability + +* Scalability: High performance demands can be fulfilled by scaling and distributing of services + +* Testability: Each service can be tested on its own due to well-defined APIs and functionality + +* Protocol-driven development using protobuf + +* High-performance communication between services through gRPC + +* Multi-platform support powered by Golang - only minimal dependency on platform packages + +* Cloud-native deployment, update, monitoring, logging, tracing and orchestration strategies + +==== Key figures + +* The all-new ownCloud Web frontend is shipped as part of the platform + +* OpenID Connect is the future-proof technology choice for authentication + +* An Identity Provider is bundled to ease deployment and operations. It can be replaced with an external OpenID IdP, if desired + +* Automatically built and fully maintained Docker containers are available + +* Flexible configuration through environment variables, config files or command-line flags + +* Database-less architecture - metadata and data are kept together in the storage as a single source of truth + +* Native storage capabilities are used where like native versioning and trashbin + +* Public APIs like WebDAV and OCS have been kept compatible with ownCloud 10 + +* A secure and flexible framework to create extensions + +===== Supported platforms + +* Linux-amd64 +* Darwin-amd64 +* Experimental: Windows, ARM (e.g., Raspberry Pi, Termux on Android) + +===== Client support + +All official ownCloud Clients support the Infinite Scale server with the following versions: + +* Desktop >= 2.7 +* Android >= 2.15 +* iOS >= 1.2 + +==== Architecture components + +Infinite Scale is built as a modular framework in which components can be scaled individually. It consists of + +* a user management service +* a settings service +* a frontend service +* a storage backend service +* a built-in IdP +* an application gateway/proxy + +These components can be deployed in a multi-tier deployment architecture. See the https://owncloud.dev[developer documentation] for an overview of the services. + +==== Operation modes + +===== Standalone mode (with oCIS storage driver) + +In standalone mode oCIS uses its built-in orchestrator to start all necessary services. This allows you to run oCIS on a single node without any outside dependencies like docker-compose, kubernetes or even a webserver. It will start an OpenID IdP and create a self-signed certificate. You can start right away by navigating to `\https://localhost:9200` + +===== Single services scaleout + +oCIS allows you to scale individual services using well-known orchestration frameworks like docker-compose, dockerSwarm and kubernetes. + +===== Bridge mode with ownCloud 10 backend + +For the product transition phase, Infinite Scale comes with an operation mode ("bridge mode") that allows a hybrid deployment, between both server generations to operate the new web frontend with ownCloud 10 and Infinite Scale in parallel. This setup allows the ownCloud Web frontend to operate with both server generations and provides the foundation to migrate users gradually to the new backend. + +**Requirements for the bridge mode** + +* ownCloud Server >= 10.6 +* https://marketplace.owncloud.com/apps/openidconnect[Open ID Connect] is used for user authentication +* The https://marketplace.owncloud.com/apps/graphapi[Graph API] app is installed on ownCloud Server +* The latest client versions are rolled-out to users (required for OpenID Connect support). See the https://doc.owncloud.com/server/admin_manual/configuration/user/oidc/#owncloud-desktop-and-mobile-clients[documentation] for more information. + +See the https://owncloud.dev/ocis/deployment/bridge/[documentation] on how to deploy Infinite Scale in bridge mode. + +[IMPORTANT] +==== +**Technology Preview** + +Infinite Scale is currently in Technology Preview. The bridge mode should only be used in non-production environments. +==== + +==== What to expect? + +This is the first promoted public release of Infinite Scale, released as "Technical Preview". Infinite Scale is not yet ready for production installations. Technical audiences will be able to get a good understanding of the potential of ownCloud's new platform. + +Version 1.0.0 comes with the base functionality for sync and share with a much higher performance-, stability- and security-level compared to all available platforms. Based on ten years of experience in enterprise sync and share and a long standing collaboration with the biggest global science organizations this new platform will exceed what content collaboration is today. + +==== How to get started? + +One of the most important objectives for oCIS was to ease the setup of a working instance dramatically. Since oCIS is built with Google's powerful Go language it supports the single-file-deployment: Installing oCIS 1.0.0 is as easy as downloading a single file, applying execution permission to it and get started. No more fiddling around with complicated LAMP stacks. + +===== Deployment Options + +Given the architecture of Infinite Scale, there are various deployment options based on the users requirements. In our experience setting up the LAMP stack for ownCloud 10 was difficult for many users. Therefore a big emphasis was put on easy yet functional https://owncloud.dev/ocis/deployment/[deployment] strategies. + +===== Delivery as single binary + +The single binary is the best option to test the new Infinite Scale 1.0.0 Technical Preview release on a local machine. Follow these instructions to get the platform running in the most simple way: + +1. Download the binary + + **Linux** + + `curl https://download.owncloud.com/ocis/ocis/1.0.0/ocis-1.0.0-linux-amd64 -o ocis` + + **MacOS** + + `curl https://download.owncloud.com/ocis/ocis/1.0.0/ocis-1.0.0-darwin-amd64 -o ocis` + +2. Make it executable + + `chmod +x ocis` + +3. Run it + + `./ocis server` + +4. Navigate to `\https://localhost:9200` and log in to ownCloud Web (admin:admin) + +Production environments will need a more sophisticated setup, see https://owncloud.dev/ocis/deployment/[deployment] for more information. + +===== Containerized Setup + +For more sophisticated setups we recommend using one of our docker setup examples. See the https://owncloud.dev/ocis/deployment/ocis_traefik/[documentation] for a setup with https://traefik.io/traefik/[Traefik] as a reverse proxy which also includes automated SSL certificate provisioning using Letsencrypt tools. + +==== ownCloud Web Features + +===== Framework + ++ User avatars (compatible with oC 10 API) +* Alerts for information/errors +* Notifications (bell icon, compatible with oC 10 API) +* Extension points +* Available extensions +** Media Viewer (images and videos) +** Draw.io + +===== Files + +* Listing and browsing the hierarchy +* Sorting by columns (name/size/updated) +* Breadcrumb +* Thumbnail previews for images (compatible with oC 10 API and Thumbnails service API) +* Upload (file/folder), using the TUS protocol for reliable uploads +* Download (file) +* Rename +* Copy +* Move +* Delete +* Indicators for resources shared with people (including subfiles and subfolders) +* Indicators for resources shared by link (including subfiles and subfolders) +* Quick actions +** Add people +** Create public link on-the-fly and copy it to the clipboard +* Favorites (view + add/remove) +* Shared with me (view) +* Shared with others (view) +* Deleted files +* Versions (list/restore/download/delete) +* File/folder search + +===== Sharing with People (user/group shares) + +* Adding people to a resource +** Adding multiple people at once (users and groups) +** Autocomplete search to find users +** Roles: Viewer / Editor (folder) / Advanced permissions (granular permissions) +** Expiration date + +* Listing people who have access to a resource +** People can be listed when a resource is directly shared and when it's indirectly shared via a parent folder +** When listing people of an indirectly shared resource, there is a "via" indicator that guides to the directly shared parent +** Every person can recognize the owner of a resource +** Every person can recognize their role +** The owner of a resource can recognize persons that added other people (reshare indicator) +** Editing persons +** Removing persons + +===== Sharing with Links + +* Private links (copy) +* Public links +** Adding public links on single files and folders +*** Roles: Viewer / Editor (folder) / Contributor (folder) / Uploader (folder) +*** Password-protection +*** Expiration date + +** Listing public links +*** Public links can be listed when a resource is directly shared and when it's indirectly shared via a parent folder +*** When listing public links of an indirectly shared resource, there is a "via" indicator that guides to the directly shared parent +*** Copying existing public links +*** Editing existing public links +** Removing existing public links +** Viewing public links + +===== User Profile + +* Display basic profile information (user name, display name, e-mail, group memberships) + +* "Edit" button guides to ownCloud 10 user settings (when used with oC 10) + +====== Basic user settings + +* Language of the web interface + +==== oCIS Backend Features + +===== Storage + +The default oCIS storage driver deconstructs a filesystem to be able to efficiently look up files by fileid as well as path. It stores all folders and files by a uuid and persists share and other metadata using extended attributes. This allows using the linux VFS cache using stat syscalls instead of a database or key/value store. The driver implements trash, versions and sharing. It not only serves as the current default storage driver, but also as a blueprint for future storage driver implementations. + +===== User and group management + +- Functionality available via API and frontend ("Accounts" extension) +- User listing (API/FE) +- User creation (API/FE) +- User deletion (API/FE) +- User activation/blocking (API/FE) +- Role assignment for users (API/FE) +- User editing (API) +- Multi-select in the frontend (delete & block/activate) +- Group creation (API) +- Add/remove users to/from groups (API) +- Group deletion (API) +- Create/read/update/delete users and groups (CLI) + +====== Settings + +The settings service provides APIs for other services for registering a set of settings as `Bundle`. It also provides a pluggable extension for ownCloud Web which provides dynamically built web forms, so that users can customize their own settings. Some well known settings are directly used by ownCloud Web for adapted user experience, e.g. the UI language. Services can query the users' chosen settings for customized backend and frontend operations as needed. + +====== Roles & Permissions System + +Infinite Scale follows a role-based access control model. Based on permissions for actions which are provided by the system and by extensions, roles can be composed. Ultimately, these roles can be assigned to users to define what users are permitted to do. This model allows a segregation of duties for administration and allows granular control of how different types of users (e.g., Guests) can use the platform. + +* Currently available permissions: Manage accounts (gives access to the internal user management), manage roles (allows assigning roles to users) + +* The current roles are exemplary default roles which are used for demonstration purposes +** "Admin": Has the permissions to "manage accounts" and to "manage roles" +** "User": Does not have any dedicated permission +** "Guest": Does not have any dedicated permission + +* Currently a user can only have one role + +* Users with the role "Admin" can assign/unassign roles to/from other users (as part of the permission to "manage roles") + +===== APIs + +* WebDAV +* OCS + +==== Known issues + +* There are feature differences depending on the operation mode, e.g., no user management with ownCloud Web and oC 10 backend + +* Public links do not yet respect the given role (a recipient has full permissions no matter which role has been set) + +* Resharing does not yet work as expected +** Share recipients can create public links with higher permissions than they originally had +** Share recipients can add other people but they will not be able to access the data + +* Sharing indicators in the file list will only be shown after opening the right sidebar for a resource + +* Users can't change their password yet + +* Folder sizes will not be calculated + +* Cleanups are not yet available (e.g., shares of a deleted user will not be removed) + +* Sharing from the desktop client does not work yet + +* There are no notifications yet + +* There can be issues with access tokens not being refreshed correctly, leading to interruptions, e.g., during uploads + +* Deleting non-empty folders from the trash bin does not work + +* Emptying the whole trash bin does not work + +For feedback and bug reports, please use the https://github.com/owncloud/ocis/issues[public issue tracker]. diff --git a/modules/ROOT/pages/ocis_releases.adoc b/modules/ROOT/pages/ocis_releases.adoc new file mode 100644 index 0000000..edd973d --- /dev/null +++ b/modules/ROOT/pages/ocis_releases.adoc @@ -0,0 +1,19 @@ += Infinite Scale Server Releases +:toc: right +:toclevels: 1 + +:description: ownCloud provides in-depth documentation for Infinite Scale. Functionalities added or decommissioned dependent on a particular version are referenced in the documentation directly. + +== Introduction + +{description} + +== Infinite Scale Server Releases + +=== Actual Stable Release (version {ocis-actual-version}) + +* xref:{latest-ocis-version}@ocis:ROOT:index.adoc[Infinite Scale Documentation] + +=== Former Stable Release (version {ocis-former-version}) + +* xref:{latest-ocis-version}@ocis:ROOT:index.adoc[Infinite Scale Documentation] diff --git a/modules/ROOT/pages/server_release_notes.adoc b/modules/ROOT/pages/server_release_notes.adoc new file mode 100644 index 0000000..0030b56 --- /dev/null +++ b/modules/ROOT/pages/server_release_notes.adoc @@ -0,0 +1,3447 @@ += Release Notes +:server-10_2-avatar-change-url: https://github.com/owncloud/core/issues/35311 +:owncloud-server-changelog-url: https://owncloud.com/changelog/server/ +:page-aliases: {latest-server-version}@server:admin_manual:whats_new_admin.adoc, \ +{latest-server-version}@server:ROOT:server_release_notes.adoc + +* xref:changes-in-10-13-4[Changes in 10.13.4] +* xref:changes-in-10-13-3[Changes in 10.13.3] +* xref:changes-in-10-13-2[Changes in 10.13.2] +* xref:changes-in-10-13-1[Changes in 10.13.1] +* xref:changes-in-10-13-0[Changes in 10.13.0] +* xref:changes-in-10-12-2[Changes in 10.12.2] +* xref:changes-in-10-12-1[Changes in 10.12.1] +* xref:changes-in-10-12-0[Changes in 10.12.0] +* xref:changes-in-10-11-0[Changes in 10.11.0] +* xref:changes-in-10-10-0[Changes in 10.10.0] +* xref:changes-in-10-9-1[Changes in 10.9.1] +* xref:changes-in-10-9-0[Changes in 10.9.0] +* xref:changes-in-10-8-0[Changes in 10.8.0] +* xref:changes-in-10-7-0[Changes in 10.7.0] +* xref:changes-in-10-6-0[Changes in 10.6.0] +* xref:changes-in-10-5-0[Changes in 10.5.0] +* xref:changes-in-10-4-1[Changes in 10.4.1] +* xref:changes-in-10-4-0[Changes in 10.4.0] +* xref:changes-in-10-3-2[Changes in 10.3.2] +* xref:changes-in-10-3-1[Changes in 10.3.1] +* xref:changes-in-10-3-0[Changes in 10.3.0] +* xref:changes-in-10-2-1[Changes in 10.2.1] +* xref:changes-in-10-2-0[Changes in 10.2.0] +* xref:changes-in-10-1-1[Changes in 10.1.1] +* xref:changes-in-10-1-0[Changes in 10.1.0] +* xref:changes-in-10-0-10[Changes in 10.0.10] +* xref:changes-in-10-0-9[Changes in 10.0.9] +* xref:changes-in-10-0-8[Changes in 10.0.8] +* xref:changes-in-10-0-7[Changes in 10.0.7] +* xref:changes-in-10-0-6[Changes in 10.0.6] +* xref:changes-in-10-0-5[Changes in 10.0.5] +* xref:changes-in-10-0-4[Changes in 10.0.4] +* xref:changes-in-10-0-3[Changes in 10.0.3] +* xref:changes-in-10-0-1[Changes in 10.0.1] +* xref:changes-in-10-0-0[Changes in 10.0.0] +* xref:changes-in-9-1[Changes in 9.1] +* xref:changes-in-9-0[Changes in 9.0] +* xref:changes-in-8-2[Changes in 8.2] +* xref:changes-in-8-1[Changes in 8.1] +* xref:changes-in-8-0[Changes in 8.0] +* xref:changes-in-7-0[Changes in 7.0] + +== Changes in 10.13.4 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.13.4 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Show Alert about IoC Scanner to All Customers on Upgrade + +We now display IoC scanner instructions to all customers (a valid license key needs to be present) during upgrade (console as well as Web Updater) and in the admin settings. https://github.com/owncloud/core/pull/41137[#41137] + +Background: The Indicators of Compromise (IoC) tool plays a vital role in identifying potential security threats or breaches. The tool analyzes your ownCloud 10 deployments and determines whether they have possibly been compromised via the known vulnerabilities. It collects information from the Apache logs and identifies the signatures of potential exploits. Please note, the tool has to be run on ALL ownCloud servers in case of a clustered setup! + +=== 2FA Check on Controllers Which Are Annotated as @PublicPage and Also Authenticated + +Some controllers define methods which are publicly accessible and accessible for authenticated users at the same time. In such situations the 2FA handling was bypassed because of the @PublicPage annotation. We now check 2FA on controllers which are publicly accessible and authenticated. https://github.com/owncloud/core/pull/41123[#41123] + +=== Known Issues + +Since we reverted https://github.com/owncloud/core/pull/41014[#41014], upon removing a mountpoint configuration from the web UI, the occ command `files:remove-storage` is currently not able to properly find the candidates to delete in case shares have been created for files/folders located on those mountpoints. + +== Changes in 10.13.3 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.13.3 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Fix Potential Issue with the Preview Cleanup Job in PostgreSQL + +One of the filters of the preview cleanup job requires casting a filename, which is supposed to contain only digits, to an integer. The expected execution of the DB query should filter the results so the condition above should be true, but the DB's query planner might choose to apply the filters in a different way, so we could potentially cast random strings to integer. In the case of PostgreSQL, the cast function will cause an error if the string can't be cast to an integer (because it has non-digit chars, for example). This situation is fixed for all the supported DBs, so we don't require the query planner to execute the query in any particular way. https://github.com/owncloud/core/pull/41051[#41051] + +=== Revert [#41014] for Performance + +The https://github.com/owncloud/core/pull/41014[#41014] PR introduced performance problems for large installations. We are therefore reverting that change. https://github.com/owncloud/core/pull/41059[#41059] + +=== Users Can Only Delete Their Own External Storage Configurations + +Ensure that users can only delete their own external storage configurations. https://github.com/owncloud/core/pull/41092[#41092] + +=== Update config.apps.sample.php + +Comments describing the configuration variables related to the Kerberos and Windows Network Drive app are now updated and in sync with published online documentation. https://github.com/owncloud/core/pull/41109[#41109] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.13.2 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* {oc-marketplace-url}/apps/customgroups[Custom Groups]: 0.8.0 +* {oc-marketplace-url}/apps/kerberos[Kerberos Integration]: 1.0.1 +* {oc-marketplace-url}/apps/files_primary_s3[S3 Primary Object Storage]: 1.6.0 +* {oc-marketplace-url}/apps/files_texteditor[Text Editor]: 2.6.1 +* {oc-marketplace-url}/apps/password_policy[Password Policy]: 2.2.1 +* {oc-marketplace-url}/apps/windows_network_drive[External Storage: Windows Network Drives]: 2.3.2 + +=== Known Issues + +Since we reverted https://github.com/owncloud/core/pull/41014[#41014], upon removing a mount point configuration from the web UI, the occ command `files:remove-storage` is currently not able to properly find the candidates to delete in case shares have been created for files/folders located on those mountpoints. + +== Changes in 10.13.2 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.13.2 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Fix View on Users Page for Subadmins === + +Previously, subadmins couldn't read app config values. This caused problems in the users page because some of the functionalities were depending on the config values that subadmins couldn't read. These problems are now solved. https://github.com/owncloud/core/pull/40961[#40961] + +=== Delete All Files from Object Storage When User Is Deleted === + +In previous versions when a user was deleted, files belonging to this user were not correctly removed from the object storage (s3) and were therefore left as remnants, unnecessarily using up space. This has been corrected and files are now properly removed. https://github.com/owncloud/core/pull/40959[#40959] + +=== Remove "Fill ETags" Repair Step === + +The legacy "OC\Repair\FillETags" repair step, executed during upgrades, had prolonged execution times without delivering any further repairs. For this reason, the repair step has now been removed. https://github.com/owncloud/core/pull/40996[#40996] + +=== Allow Media Viewer App to Work with HEIC and HEIF Formats === + +We removed the regular expression related to HEIC and HEIF files from the preview manager list as this was preventing the files_mediaviewer app from correctly interpreting these mime types. The app is now able to open such files. https://github.com/owncloud/core/pull/40990[#40990] + +=== Prevent mounting of shares with failed underlying storages === + +Some mounts use a shared storage which is pointing to a different storage. In case the underlying storage was removed (removal of the external mount from the web UI), the share mount was still being present as if the underlying storage could still be accessed. This was causing problems with the "files:remove-storage --show-candidates" occ command because the removed storage wasn't shown as possible candidate. Now that shared storage won't be mounted and the underlying storage will be detected as a candidate to be removed with the mentioned command. https://github.com/owncloud/core/pull/41014[#41014] + +=== Check if Account Creation Time Exists for Migrations === + +In some rare scenarios it could have happened that the migration responsible for adding the creation time in the oc_accounts table was not correctly inserted into the oc_migrations one with the consequence that it was reattempted i.e. when upgrading apps, even if the column was already present. This has been fixed. https://github.com/owncloud/core/pull/40991[#40991] + +=== Solved Known Issues + +All xref:known-issues-10-13-1[known issues] in Server 10.13.1 have been fixed: + +* The database query used to identify the previews that need cleaning up has been enhanced for optimal performance. As a result, the background job responsible for this task will have significant performance improvements. https://github.com/owncloud/core/pull/40974[#40974] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.13.1 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* {oc-marketplace-url}/apps/wopi[Microsoft Office Online]: 1.8.1 + +=== Known Issues + +There is a performance impact related to certain external storage mounts in ownCloud Server 10.13.2. +Possible workaround: https://patch-diff.githubusercontent.com/raw/owncloud/core/pull/41014.diff[Revert via diff] + +== Changes in 10.13.1 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.13.1 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Open in Web Improvements === + +The "Open in Web" feature for direct editing of office documents now properly works on iOS and Desktop clients with Collabora. https://github.com/owncloud/core/pull/40958[#40958] + +=== Avoid Loading 3rd-party Resources + +The "Open in Web" configuration offers icons to be shown in the clients. This is e.g. used by the iOS 12.0.3 client. We now ship the icons embedded in core. https://github.com/owncloud/core/issues/40953[#40953] + +=== Notable Changes + +* Fix: disallow pre-signed url access if the signing key is not initialized. https://github.com/owncloud/core/pull/40962[#40962] +* New code was added to dismiss invalid settings of the redirection endpoint URI as seen in the OAuth2 protocol, according to RFC#7636. https://github.com/owncloud/oauth2/pull/359[oauth2#349] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.13.0 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* {oc-marketplace-url}/apps/graphapi [Graph API]: v0.3.1 +* {oc-marketplace-url}/apps/guests [Guests]: 0.12.3 +* {oc-marketplace-url}/apps/oauth2 [OAuth2]: v0.6.1 + +[#known-issues-10-13-1] +=== Known Issues + +* Two cron jobs related to cleaning up left over thumbnails were not properly enabled in the past (`PreviewCleanupJob`). In 10.13.0 the code was fixed, and the jobs started running. However, in certain cases with an exceptionally high number of potential cleanups, these jobs can now take up a substantial amount of database resources. We propose to temporarily disable the offending job until we have a fix. + +== Changes in 10.13.0 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.13.0 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Internet Explorer 11 Deprecation Note + +Internet Explorer 11 support will be dropped in the next server release. + +=== Update Symfony from 4.4.* to 5.4.* + +Symfony framework has been updated to LTS major version 5.4. This also affected a number of apps which required a new release and have been now included in the complete bundle. + +=== Drop Setup of User Key Encryption + +User key encryption has been already deprecated in core versions later than 10.7. For this reason, the command line interface and web UI to enable user key encryption is no longer available. If you are operating an ownCloud installation with user key encryption enabled, please get in contact with support@owncloud.com to plan a migration to master key encryption. https://github.com/owncloud/encryption/pull/389[encryption#389] + +=== User Key Encryption Is No Longer Auto-Enabled + +Executing the `encryption:encrypt-all` occ command will no longer auto-enable user key encryption. https://github.com/owncloud/core/pull/40702[#40702] + +=== Added occ Command to Remove Obsolete Storages + +Metadata coming from storages are stored in the database. Previously, when a storage has been removed from ownCloud, metadata remained in the DB. The new occ command allows removing that stored metadata, reducing the amount of space used by the DB as well as slightly improving the performance since there will be less entries. https://github.com/owncloud/core/pull/40779[#40779] + +=== Enforce 2-Factor Authentication + +2-factor authentication can be enforced now. The feature requires at least one app implementing 2-factor authentication, otherwise no enforcement will be done. If 2-factor authentication is enforced, all users will be required to use a 2-factor authentication app. Some specific groups selected by the admin can be excluded to let those users bypass 2-factor authentication. https://github.com/owncloud/core/pull/40830[#40830] + +=== Setting up Federation Sharing over the Web UI Can Use Trusted Servers Again + +After an update of the guzzle library in previous core versions, it was no longer possible to set up new trusted server relations for federated sharing over the Web UI because of the wrong format used during the token exchange phase. We now explicitly set the format to be json so that the exchange is correctly done. https://github.com/owncloud/core/pull/40815[#40815] + +=== Add Commands to Handle Trusted Servers from the Command Line + +New occ commands have been added to handle the trusted servers for federation from the command line. These commands will allow the admin to add, list and remove trusted servers. https://github.com/owncloud/core/pull/40796[#40796] + +=== Implement App Registry + +By using a new option `Open in..` in the iOS (version 12.0.3+) or Desktop client (version 4.0+) it is now possible to directly open a file in the Office Suite being installed on the ownCloud server. https://github.com/owncloud/core/pull/40843[#40843] + +=== Skip `share_folder` for Guest Users + +When the `share_folder` config.php option was set, guest users could not longer see their received shares. We now skip the `share_folder` config.php option for guest users and default to root. https://github.com/owncloud/core/pull/40864[#40864] + +=== Apply Same Restrictions for All the Shares + +Remote shares will have the same restrictions as user and group shares. This means that, in order for a remote user to show up as sharee, the search term length must be greater than the minimum configured otherwise only exact matches will be shown. https://github.com/owncloud/core/pull/40885[#40885] + +=== Clean up Storage and Database After Failed File Uploads + +Storage and database are now cleaned up of any remaining items if a file upload fails. https://github.com/owncloud/core/pull/40892[#40892] + +=== Bump Files App Version + +The files app version was not properly increased when the `OCA\Files\BackgroundJob\CleanupPersistentFileLock` and `OCA\Files\BackgroundJob\PreviewCleanupJob` background jobs were originally added. As a result, those two jobs were not correctly inserted into the `oc_jobs` table upon a core upgrade. First time installations are not affected as their jobs are correctly added. https://github.com/owncloud/core/pull/40878[#40878] + +=== Explicitly Set Open Mode in the Checksum Wrapper + +Uploading files to some external storages via the desktop client was causing issues due to the checksum wrapper. We are using additional wrappers and the mode wasn't being detected correctly in some cases. Using the right mode in the checksum wrapper was required in order to decide whether we should have discarded the final checksum or not; in this case, the checksum was being discarded so it was causing a checksum mismatch. Now the open mode in the checksum wrapper is set explicitly. https://github.com/owncloud/core/pull/40832[#40832] + +=== Align to New accounts.google.com Authorization URI + +Core 10.12.1 brought an update of the google/apiclient from version 2.12.6 to 2.13.1. However, in version 2.13.0 the accounts.google.com authorization URI has been updated. This change broke old code that uses the `setApprovalPrompt('force')` instead of the newer `setPrompt('consent')` method, as this endpoint does not support the legacy approval prompt parameter. This has been now fixed. https://github.com/owncloud/core/pull/40783[#40783] + +=== Fix for Query Unnecessarily Deleting Thumbnails + +Fixed query that detects unused thumbnails to prevent unnecessary deletes and potential recreations. https://github.com/owncloud/core/pull/40801[#40801] + +=== Automatically Disable Online Updater for Enterprise + +Online updater is not recommended for Enterprise installations and is now automatically disabled in such cases. https://github.com/owncloud/core/pull/40841[#40841] + +=== Versions Expire Job No Longer Reports an Error with Federated Shares + +The versions expire job does not report errors anymore with federated shares when versioning metadata is enabled. https://github.com/owncloud/core/pull/40847[#40847] + +=== Display and delete invalid background jobs + +Background jobs can be no longer valid because they are from an old version of an app, or from an app that has been disabled. These jobs can now be listed with the command `occ background:queue:status --display-invalid-jobs` and can be deleted with the command `occ background:queue:delete `. https://github.com/owncloud/core/pull/40846[#40846] + +=== Rely on Server to Sort the User List + +Previously, the user list was sorted in the browser. This was causing confusion because the sorting happened without taking into account all the items, so there were some weird effects. There is no sorting in the browser now. The server is expected to return the list of users already sorted, so the browser just needs to show the list. https://github.com/owncloud/core/pull/40840[#40840] + +=== Remove the `add group` Button from the Dropdowns in the Users Page + +The `add group` button has been removed from the dropdowns because the behavior was confusing. You can still create new groups in the users page by using the `add group` button in the top left corner of the users page. The dropdowns will only select existing groups, but they won't add new groups. https://github.com/owncloud/core/pull/40770[#40770] + +=== Require firebase/php-jwt in Core + +firebase/php-jwt version 6 is now part of core and all apps can rely on it. https://github.com/owncloud/core/pull/40901[#40901] + +=== New Default Minimum Supported Desktop Client Version + +To ensure clean and reliable operation of the ownCloud platform it is important to stay up-to-date with the latest releases of the server as well as the clients. To take care of compatibility between the server and desktop clients, the minimum version the server will accept connections from has been raised to version `3.2.1`. + +While it’s recommended to keep up with later versions, this is the new default value. https://github.com/owncloud/core/pull/40876[#40876] + +=== Notable Changes + +* Setup checks now allow values other than `none` for X-Robots-Tag header. If `none` or `noindex` and `nofollow` are missing, a security warning is raised. Previously a header value with `noindex` and `nofollow` wasn't allowed even though it was valid. https://github.com/owncloud/core/pull/40715[#40715] +* The `Last Login` column on the Users page is now correctly hidden if the setting is initially unchecked. https://github.com/owncloud/core/pull/40771[#40771] +* User input is validated now in UserController. https://github.com/owncloud/core/pull/40769[#40769] +* A system tag with a too long name resulted in potentially inaccessible data. https://github.com/owncloud/core/pull/40804[#40804] +* A federated share with a too long name resulted in inaccessible data. https://github.com/owncloud/core/pull/40726[#40726] +* Due to Apache rewrite rules originally not existing headers could hold an empty string. https://github.com/owncloud/core/pull/40856[#40856] +* Verbose command output of `background:queue:execute` is now displayed. https://github.com/owncloud/core/pull/40844[#40844] +* There have been rare cases where deleting a file from a Google Drive mount could have thrown an undefined variable error. Since the process completed without further issues, no errors should have been thrown. This fix initializes the variables for these cases properly, making the error go away. https://github.com/owncloud/core/pull/40822[#40822] +* Some occ commands could have returned an invalid exit status when executed. This has been corrected and occ commands will now always return an integer exit status. Zero (0) is success, any other value indicates a problem. https://github.com/owncloud/core/pull/40793[#40793] +* Do not correct parent folders if the target isn't fully scanned. https://github.com/owncloud/core/pull/40730[#40730] +* Trying to connect an external WebDAV storage to a non-WebDAV server will now fail when trying to initiate the first connection. This prevents connecting to an invalid server, and thus prevents problems for users. https://github.com/owncloud/core/pull/40861[#40861] +* We have added an `if-statement` in the ShareesController code of the files_sharing app that searches for remote sharees. When the `sciencemesh` app is installed, it will be used instead of the federatedfilesharing app to find sharee matches for OCM sharing. https://github.com/owncloud/core/pull/40886[#40886] +* Changed the share dropdown to expand to the page bottom if there are more entries. https://github.com/owncloud/core/pull/40873[#40873] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.12.2 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/activity [Activity] 2.7.2 +* https://marketplace.owncloud.com/apps/admin_audit [Auditing] 2.1.4 +* https://github.com/owncloud/configreport/releases [ConfigReport] 0.2.2 +* https://marketplace.owncloud.com/apps/customgroups [Custom Groups] 0.7.2 +* https://marketplace.owncloud.com/apps/diagnostics [Diagnostics] 0.2.0 +* https://marketplace.owncloud.com/apps/drawio [Drawio] 1.0.1 +* https://github.com/owncloud/encryption/releases [Default encryption module] 1.6.1 +* https://marketplace.owncloud.com/apps/files_antivirus [Anti-Virus] 1.2.2 +* https://marketplace.owncloud.com/apps/files_classifier [Document Classification] 1.4.0 +* https://marketplace.owncloud.com/apps/files_lifecycle [File Lifecycle Management] 1.3.4 +* https://marketplace.owncloud.com/apps/files_primary_s3 [S3 Primary Object Storage] 1.5.0 +* https://marketplace.owncloud.com/apps/files_texteditor [Text Editor] 2.6.0 +* https://github.com/owncloud/firstrunwizard/releases [First run wizard] 1.3.0 +* https://marketplace.owncloud.com/apps/impersonate [Impersonate] 0.5.3 +* https://marketplace.owncloud.com/apps/kerberos [Kerberos Integration] 1.0.0 +* https://marketplace.owncloud.com/apps/market [Market] 0.8.0 +* https://marketplace.owncloud.com/apps/metrics [Metrics] 1.4.0 +* https://github.com/owncloud/notifications/releases [Notifications] 0.6.0 +* https://marketplace.owncloud.com/apps/oauth2 [OAuth2] 0.6.0 +* https://marketplace.owncloud.com/apps/password_policy [Password Policy] 2.2.0 +* https://marketplace.owncloud.com/apps/ransomware_protection [Ransomware Protection] 1.7.0 +* https://github.com/owncloud/updater/releases [Updater] 1.1.0 +* https://marketplace.owncloud.com/apps/user_ldap [LDAP Integration] 0.18.0 +* https://marketplace.owncloud.com/apps/user_shibboleth [SAML/SSO Integration] 3.6.0 +* https://marketplace.owncloud.com/apps/web [Web] 7.0.3 +* https://marketplace.owncloud.com/apps/windows_network_drive [External Storage: Windows Network Drives] 2.3.1 +* https://marketplace.owncloud.com/apps/wopi [Microsoft Office Online] 1.7.0 +* https://marketplace.owncloud.com/apps/workflow [Workflows] 0.6.0 + +=== Known Issues + +Currently there are no known issues with ownCloud Server 10.13.0. This section will be updated if issues are discovered. + +== Changes in 10.12.2 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.12.2 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Disallow permissions to be upgraded via federated sharing + +Do not allow setting higher permissions on a federated share for a resource which was shared with limited permissions. https://github.com/owncloud/core/pull/40803[#40803] + +=== Filter sensitive data in log for Session::loginInOwnCloud + +The `loginInOwnCloud` method contains sensitive data in the argument list and needed therefore to be added to the list of methods where sensitive parameters are being obfuscated. https://github.com/owncloud/core/pull/40792[#40792] + +== Changes in 10.12.1 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.12.1 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Fix Permission Bits when Enforcing Passwords on Public Links + +Passwords on public link files with read + write permission were not correctly enforced. The usage of the permissions bits has been now fixed so that, when selecting "Enforce password protection for read + write + delete links", passwords are correctly enforced. https://github.com/owncloud/core/pull/40701[#40701] + +=== Prevent 507 Insufficient Storage on 32-Bit Systems + +With the introduction of https://github.com/owncloud/core/pull/40567 compatibility with 32-bit systems broke as we are now casting $freeSpace to int and this caused an integer overflow on such systems when the free space was above the max supported value. We added therefore an additional check for 32-bit systems in QuotaPlugin.php. https://github.com/owncloud/core/pull/40709[#40709] + +=== Fix quota for 32-Bit Systems + +Quota calculation on 32 bit systems suffered from an inconsistent use of float and integer data types. The fix now correctly supports that the size could be either an integer or a float. https://github.com/owncloud/core/pull/40729[#40729] + +=== Package firebase/php-jwt in files_texteditor + +Since version 2.5.0 of the files_texteditor app we use Firebase\JWT\JWT, but this dependency was not directly shipped with files_texteditor. This was not an issue if the files_external or WOPI app(s) were enabled as they include the same dependency. However, if both apps were disabled the functionality of the files_texteditor app broke. We now ship this dependency in files_texteditor as well. https://github.com/owncloud/files_texteditor/pull/389[files_texteditor#389] + +=== Solved Known Issues + +==== Add RewriteBase to .htaccess + +Referencing xref:known-issues-10-12-0[Known Issues of 10.12.0]. +In previous core versions, the setting of the `htaccess.RewriteBase` config.php option was not added to the generated .htaccess file. The use of a more hardened .htaccess file in version 10.12.0, introduced by https://github.com/owncloud/core/pull/40584[#40584], caused the files view in the web UI to be empty in setups described in the referenced known issue. Additionally, the desktop app was not be able to sync and an error 405 (Method not allowed) was returned. The `htaccess.RewriteBase` is now correctly added to the .htaccess file, see the fix at https://github.com/owncloud/core/pull/40697[#40697]. + +==== Respect User Home Folder Naming Rule for Chunks Uploads + +When using the User Home Folder Naming Rule (configurable in the Advanced tab of the LDAP wizard), which allows to specify the home folder by means of an LDAP attribute, chunks of users' uploads were wrongly created under the default data directory rather than inside the configured home directory. We are now using the getHome() method for getting the user's home so that chunks uploads respect the configured home directory. https://github.com/owncloud/core/pull/40693 [#40693] https://github.com/owncloud/core/pull/40719[#40719] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.12.0 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/files_texteditor[Text Editor] 2.5.1 +* https://marketplace.owncloud.com/apps/metrics[Metrics] 1.2.0 + +[#known-issues-10-12-1] +=== Known Issues + +==== Google Drive external storage integration + +Core 10.12.1 brought an update of the google/apiclient from version 2.12.6 to 2.13.1. However, in version 2.13.0 the accounts.google.com authorization URI has been updated. This change breaks old code that uses the `setApprovalPrompt('force')` instead of the newer `setPrompt('consent')` method, as this endpoint does not support the legacy approval prompt parameter. As a result, Google Drive external storage integration is currently broken. This will be fixed in core version 10.13.0, please refer to https://github.com/owncloud/core/pull/40783 for more details. + +== Changes in 10.12.0 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.12 that need your attention. You can also read the {oc-changelog-url}[full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +When upgrading from ownCloud Server 10.11.0, the following migrations will run as part of the upgrade procedure: + +* A migration step takes care of setting the length of the "oc_calendars.components" column to 255 (see below). This step is expected to be quick and should not impact upgrade duration significantly. https://github.com/owncloud/core/pull/40563[#40563] +* An index is going to be added on the oc_filecache table which should speed up bulk file operations. Consider that this migration step may take several hours in case of installations where the oc_filecache table contains a significantly large number of entries. https://github.com/owncloud/core/pull/40633[#40633] + +=== Drop PHP 7.3 Support Across the Platform + +Support for security fixes for PHP 7.3 ended in December 2021. ownCloud Server no longer supports PHP 7.3 therefore ensure that you are using PHP 7.4. https://github.com/owncloud/core/pull/40394[#40394] + +NOTE: Before upgrading to ownCloud Server 10.12, you MUST upgrade to PHP 7.4. ownCloud Server 10.12 will not start when using PHP 7.3. + +=== Persistent Major File Versions Workflow + +To save space, old versions of files are usually deleted over time according to ownCloud's retention policy. Users are now able to mark the current version as "published". This increases the major version tag and prevents deletion. Also, restore operation logic changed. Now restore creates a new current version of the file from one of the past noncurrent versions of the file. The current version also receives incremented mtime for the file, and author of the file is the user who restored it. The old noncurrent version is no longer removed upon restore and the current version no longer receives mtime of that version. The current version of the file is now shown in the Versions Tab, highlighted with "gray" background. Versions now persist additional extended metadata on versioning tags, that allow easier identification of the versions. Each update increases the minor version for the file. Each new edit of the file creates noncurrent versions - the ones tagged with major version due to publishing will persist long term and won't be subject to any retention policies. Migrate from deprecated save_version_author to save_version_metadata. https://github.com/owncloud/core/pull/40531[#40531] + +=== Support for Login Policies + +Support for login policies has been added in order to block the login of users under some circumstances. By default, there isn't any restriction, so any user can login normally (assuming the password is correct). A group login policy has been added. This policy allows or denies users to log in based on the login type being used (username + password, openID Connect, etc.) and whether they belong to specific groups. This can be used to ensure a group of users is always authenticated using a determined authentication mechanism. https://github.com/owncloud/core/pull/40574[#40574] + +=== Properly Remove File Versions from the Trashbin + +Previously, restoring or removing a file from a deleted folder (the folder and the contents were in the trashbin) didn't remove the versions of the file. Those versions were left in both the database and the file system, taking up space and degrading the performance. This is now being handled properly, so no resources are consumed due to the versions being left stranded. https://github.com/owncloud/core/pull/40291[#40291] + +=== "available for" Selection in the Mount Point Configuration Now Shows the Display Names + +The "available for" selection of the mount configuration of external storages was using the group ID. This wasn't a problem because for local groups the group ID matches the group display name, and for ldap groups the group ID was the "cn" attribute. Due to recent changes, the ldap group will now use the "objectuid" attribute (or a similar attribute) as group ID by default. This was causing the "available for" selection to show that "objectuid", so identifying the right group was problematic. Now, the "available for" selection will show the group display name, which for ldap is the "cn" attribute by default. Note that this happens on new installations. There is an automatic migration in place, so for upgrades, the "cn" attribute will be set as group name in order to keep the old behavior. https://github.com/owncloud/core/pull/40412[#40412] + +=== Skip Public Links When Updating Permissions of a Share's Children + +Updates to permissions of a share were wrongly propagated to public links' children. This has now been fixed and public links are being skipped. https://github.com/owncloud/core/pull/40420[#40420] + +=== Checksums Only Stored if the Whole Stream Has Been Read + +Previously, range downloads (or downloads requesting a specific byte range) would store a checksum, if needed, based only on the requested range. This caused problems because the checksum is expected to be for the whole file. Now those range downloads won't store a checksum because only a part of the file has been read, so the checksum would be incomplete. Some additional cases have been taken into account, mostly based on actions that could happen on the data stream, but they shouldn't happen normally. https://github.com/owncloud/core/pull/40513[#40513] + +=== Fixed the dav:cleanup-chunks Command to Work With a Configured Folder + +ownCloud's file system was initialized partially to prevent contacting the LDAP server if it was configured. This was causing problems because the upload folder where the chunks were expected was a mount point, and due to the partial file system initialization such a mount point was missing, so we were checking a different folder (the default one). Now, ownCloud's file system will be fully initialized instead, so that the mount point will be present and we check the right location. https://github.com/owncloud/core/pull/40571[#40571] + +=== Copy the Encryption Keys First and Then Rename the Files + +With encryption enabled when a file was renamed, first the actual file was renamed, and then the encryption keys were moved to the new location. If something went wrong, it was possible that the keys weren't moved. This caused the file to become inaccessible because we couldn't decrypt the file due to the missing keys (which weren't in the right place). Now, when a file is renamed, the encryption keys will be copied first, and then the file will be renamed. If copying the encryption keys fails, renaming will fail. After the encryption keys are copied, the file could still fail to be renamed. In this case, the copies of the keys will be removed, but the file will still be accessible because we still keep the old keys. The original keys (not the copy) will be removed if the file is successfully renamed. https://github.com/owncloud/core/pull/40433[#40433] + +=== Delete Action Is Removed from Sharing Sections + +In the files apps, the "shared with others" and "shared by link" sections allowed people to use a delete action on a file or folder present in that list. This was causing problems because people accidentally removed the folder when, in fact, they wanted to unshare it. This delete action isn't present any longer. You can revoke shares by accessing the file or folder's details. If you want to delete the file or folder, you can do it from the regular "all files" section. https://github.com/owncloud/core/pull/40497[#40497] + +=== Allow to Temporarily Ignore Invalid Federated Shares + +This change is targeted mostly at tightly federated setups. Currently, if a federated share is invalid or the API endpoint returns "not found", an availability check would validate whether this is a problem with a server, and that given share is removed. However, in some cases these checks might not be enough (e.g. complex migrations in tightly federated setups). In that case the invalidation behavior can be disabled by using the app setting: "occ config:app:set files_sharing enable_cleanup_invalid_external_shares --value no". https://github.com/owncloud/core/pull/40503[#40503] + +=== Fix Orientation of Images with EXIF Data + +Some images with large EXIF data had problems with the orientation when they were shown. This was caused by the native function failing to retrieve the EXIF data. Images with small EXIF data didn't have this problem. By making the chunk size of the stream bigger, the native function is now able to load the EXIF data properly and return the information, and with such information we can fix the orientation of the image. https://github.com/owncloud/core/pull/40600[#40600] + +=== Remove Empty Directories from the files_versions + +Empty directories were left when the contained versions were deleted or moved. Large installations might end up with too many of these empty directories. Now, when a version is deleted, the containing directory will also be deleted if there aren't any more versions inside. https://github.com/owncloud/core/pull/40499[#40499] + +=== Use Correct Themed l10n App Folder When the App Lives outside of Server Root + +When an app_path is pointing outside of the ownCloud server root or uses an symlink, under certain conditions the l10n folder points to an invalid location and results in a crash of the server. This happened due to the assumption that app paths always start with the server root path. https://github.com/owncloud/core/pull/40607[#40607] + +=== Fix Share-into-Share Move Scenario + +Public links were lost upon moving a share into another share as the share owner was not correctly set. This has now been partially fixed. https://github.com/owncloud/core/pull/40612[#40612] + +=== Prevent Creation of Empty Files and Folders When No Quota Is Available + +Until now it was possible for users with 0 quota or who already reached the limit of their assigned quota to still create empty files/folders, which was confusing. This behavior has been fixed. https://github.com/owncloud/core/pull/40567[#40567] + +=== Drag & Drop Folders into Public File Upload + +Previously only files were accepted via drag & drop. Users can now also drag folders into a public link that has the filedrop flag. When adding a folder, the hierarchy is flattened out and all files are added without any subfolders. Name collisons are avoided as usual. https://github.com/owncloud/core/pull/40643[#40643] + +=== Add Support for OCM via ScienceMesh + +We have added an if-statement in the files_sharing ShareesController code that searches for remote sharees. When the config entry "sharing.remoteShareesSearch" is set to the name of a class that is registered in the server container and that implements "IRemoteShareesSearch" (for instance the "ScienceMeshSearchPlugin" that the "sciencemesh" app registers) it will be used instead of the federatedfilesharing app to find sharee matches for OCM sharing. https://github.com/owncloud/core/issues/40577[#40577] + +=== Allow Specifying Available Space for Object Storages + +Object storages are reporting only unknown storage space. This causes problems for other apps that rely on this storage method, e.g. metrics app that monitors the available space. A new configuration at the storage level has been added which allows apps or further extensions of the storage class for object storage to use it. https://github.com/owncloud/core/pull/40674[#40674] + +=== Other Notable Changes + +* The suggested host name and port syntax for the database host on the installation has been corrected. https://github.com/owncloud/core/pull/40348[#40348] +* Without this change, server-side Apache Auth (e.g. Shibboleth) resulted in a redirect to the default ownCloud page instead of the last visited page. We now correctly handle redirect_url. https://github.com/owncloud/core/pull/40470[#40470] https://github.com/owncloud/core/pull/40161[#40161] +* We now expect a not found error instead of a permission denied error for some trash interactions. https://github.com/owncloud/core/pull/40406[#40406] +* Mime types of hidden files are now properly detected. https://github.com/owncloud/core/pull/40427[#40427] +* Unused Google SDK services are removed to reduce package size. https://github.com/owncloud/core/pull/40444[#40444] +* Added account creation time in the oc_accounts table so that this info can be displayed over the Users page. Also extended the users provisioning API and the "user:list" occ command to display this info. https://github.com/owncloud/core/pull/40588[#40588] +* For easy access of files through WebDAV the URL is now displayed right under the app password section. https://github.com/owncloud/core/pull/40509[#40509] +* The username as well as the full name of a user is now shown on his personal general settings page. https://github.com/owncloud/core/pull/40510[#40510] +* The RewriteCond rules in the .htaccess file have been changed to match the expected paths. https://github.com/owncloud/core/pull/40584[#40584] +* Two factor authentication can now be enabled using the provisioning API. https://github.com/owncloud/core/pull/40617[#40617] +* Detecting unused thumbnails is now using a better optimized SQL statement which consumes less database and web server resources. https://github.com/owncloud/core/pull/40514[#40514] +* Backend class aliases have been added to improve usability of the occ user:sync command. https://github.com/owncloud/core/pull/40640[#40640] +* In Guzzle major version 7, the body option of a request must be a string or similar. Requests that send arrays of items have been adjusted to use the form_params option. Developers of apps that use lib/private/Http/Client/IClient.php +should check any calls to ensure that arrays of items are not passed in the body option. See the diffs of PHP docs in the linked PR for examples. https://github.com/owncloud/core/pull/40652[#40652] +* In some cases mail notifications related to sharing activities are blocked by mail filters as they are flagged as email impersonation. In such cases it may be desirable for an ownCloud admin to have a config option for removing the sender display name from the "From" address. This is now possible by setting the config.php parameter "remove_sender_display_name => true". https://github.com/owncloud/core/pull/40671[#40671] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.11.0 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/files_antivirus[Anti-Virus] 1.2.1 +* https://marketplace.owncloud.com/apps/files_classifier[Document Classification] 1.3.2 +* https://marketplace.owncloud.com/apps/files_external_dropbox[External Storage: Dropbox] 2.0.1 +* https://marketplace.owncloud.com/apps/guests[Guests] 0.12.2 +* https://marketplace.owncloud.com/apps/openidconnect[OpenID Connect] 2.2.0 +* https://marketplace.owncloud.com/apps/ransomware_protection[Ransomware Protection] 1.6.0 +* https://marketplace.owncloud.com/apps/user_ldap[LDAP Integration] 0.17.0 +* https://marketplace.owncloud.com/apps/web[Web] 6.0.0 +* https://marketplace.owncloud.com/apps/wopi[Microsoft Office Online] 1.6.1 +* https://marketplace.owncloud.com/apps/files_texteditor[Text Editor] 2.5.0 + +[#known-issues-10-12-0] +=== Known Issues + +==== ownCloud Inaccessibility + +If you have installed ownCloud 10.12.0 in the *combination* of: + +* `index.php-less setup` +* `URL via subfolder` + +the files view in the web UI will be empty. The desktop app will not be able to sync and an error 405 (Method not allowed) will be thrown. +The problem is fixed in 10.12.1. Note that owncloud Server 10.11.0 and earlier are not affected. + +== Changes in 10.11.0 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.11 that need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +When upgrading from ownCloud Server 10.10, there will be no migration steps impacting the upgrade duration. Therefore the upgrade is expected to finish quickly. + +=== Edit Permission for Public Links on Single Files + +In previous versions of ownCloud Server, public links on single files could only be created with read-only permissions (`Download / View`). If users wanted to share a file and enable recipients to change it, they had to put that file into a folder and share that with permissions for editing (`Download / View / Edit`). Server 10.11 introduces the `Download / View / Edit` role for public link shares on single files to make a user's life easier. Especially when using ownCloud in combination with web office solutions like ONLYOFFICE, Collabora Online or Microsoft Office Online, users can now quickly and conveniently collaborate on documents with external parties. https://github.com/owncloud/core/pull/40264[#40264] + +=== Sharing with Multiple Users at once + +Server 10.11 introduces the ability to share with multiple users at once by entering their identifiers (e.g., display name, user ID, email address, federated cloud ID) as a comma-separated list in the sharing dialog (e.g., `alice,bob@example.org,carol`. Based on the inputs, ownCloud will decide how to create the shares (e.g., share with an internal user, invite a new guest, create a federated share). This way, users can easily invite many recipients at once to their files and folders. With Custom Groups version 0.7.0 onwards the same behavior also applies to adding users to Custom Groups. https://github.com/owncloud/core/pull/40155[#40155] https://github.com/owncloud/customgroups/pull/522[customgroups#522] https://github.com/owncloud/guests/pull/506[guests#506] + +=== Inviting New Guests to Custom Groups + +Server 10.11 in combination with Custom Groups 0.7.0 and Guests 0.12.0 allows inviting new guest users directly into a Custom Group. Previously this was only possible by sharing files with new guests first and creating their user account thereby. New guests will not have access to any files nor will they be able to create/upload their own files unless there is a share with the respective Custom Group or with the guest user. https://github.com/owncloud/customgroups/pull/521[#521] https://github.com/owncloud/guests/pull/506[guests#506] + +=== New Skeleton Files for Users + +For new user accounts, the default skeleton files have been changed a bit in version 10.11. The ownCloud user manual PDF has been removed as it becomes outdated quickly and will not be updated for existing users when a server upgrade is done. It is recommended to provide the official user documentation to users instead. New users will further find a folder called "Learn more about ownCloud" that contains information about the product. + +=== Notable Changes + +* The default app on login can now be set per individual user. ownCloud use this to remember which UI (Classic UI or ownCloud Web) the user has used during their last session. This way, users are always redirected to their preferred UI after logging in. https://github.com/owncloud/core/pull/39600[#39600] +* ownCloud Web will now respect the user's language setting. https://github.com/owncloud/core/pull/40087[#40087] +* The command `occ background:queue:status` will now output more information about background jobs. https://github.com/owncloud/core/pull/40113[#40113] +* Quota handling has been improved (e.g., when copying or uploading files into shared folders). https://github.com/owncloud/core/pull/39895[#39895] +* The context menu for multiple file actions in public links (e.g., "Open with PDF Viewer") works again. https://github.com/owncloud/core/pull/40143[#40143] +* Storage encryption has received stability improvements. https://github.com/owncloud/core/pull/40240[#40240] +* Guest users will no longer see settings sections which they are not allowed to use. https://github.com/owncloud/core/pull/40257[#40257] +* The process for the first login of a new user is now more stable. https://github.com/owncloud/core/pull/40091[#40091] +* App passwords now continue to work even when an LDAP connection is temporarily not available. https://github.com/owncloud/core/pull/40152[#40152] +* App passwords now work with case-insensitive user names. https://github.com/owncloud/core/pull/40281[#40281] +* The SAML/SSO login flow is now more stable, making features like the Microsoft Office Online / WOPI integration work better in combination with SAML. https://github.com/owncloud/core/pull/40161[#40161] +* The comments feature now works better on small screens. https://github.com/owncloud/core/pull/40142[#40142] +* A new setting `proxy_ignore` has been introduced to exclude requests to certain domains from using the configured `proxy`. https://github.com/owncloud/core/pull/40148[#40148] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.10.0 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/activity[Activity] 2.7.1 +* https://marketplace.owncloud.com/apps/customgroups[Custom Groups] 0.7.1 +* https://marketplace.owncloud.com/apps/guests[Guests] 0.12.0 +* https://marketplace.owncloud.com/apps/files_antivirus[Anti-Virus] 1.1.0 +* https://marketplace.owncloud.com/apps/files_lifecycle[File Lifecycle Management] 1.3.3 +* https://marketplace.owncloud.com/apps/graphapi[Graph API] 0.3.0 +* https://marketplace.owncloud.com/apps/market[Market] 0.7.0 +* https://marketplace.owncloud.com/apps/web[Web] 5.7.0 + +=== Known Issues + +==== PHP guzzle dependencies +This release uses guzzle 7. The complete bundle contains several app updates that were migrated from guzzle 5 to guzzle 7. When using the minimum bundle, those apps can be downloaded from the marketplacte. Please check any non-standard apps for guzzle 7 compatibility. If in doubt, disable these apps before upgrading. + +Currently known incompatible apps include: +* richdocuments 2.7.0 +* onlyoffice 7.5.3 + +==== Guests App Whitelist Feature + +The _Guests App Whitelist feature_ evaluates the app whitelist stricter starting with release 0.12.0. To overcome any issues related to this strict handling, an upgrade to Guests 0.12.1 is highly recommended as this release has a much wider range of apps whitelisted by default. + +== Changes in 10.10.0 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.10 that need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +When upgrading from ownCloud Server 10.9, the following migrations will run as part of the upgrade procedure: + +* A migration step takes care of converting external storage parameters to the new format (see below). This step is expected to be quick and should not impact upgrade duration significantly. https://github.com/owncloud/core/pull/39935[#39935] + +=== Session Lifetime and Expiration Improvements + +ownCloud Server 10.10 comes with a couple of stability and security improvements around session lifetime and expiration in the Classic web interface https://github.com/owncloud/core/pull/39916[#39916]: + +* The configured session lifetime (`session_lifetime` in `config.php`) will now be reset each time a page is loaded or when a "heartbeat" request is sent. +* If the session keepalive config option (`session_keepalive` in `config.php`) is set to `true`, a periodic "heartbeat" request will be made automatically regardless of any activity going on. This will reset the session lifetime preventing its expiration. +* If the session_keepalive config option (`session_keepalive` in `config.php`) is set to `false`, a "heartbeat" request will be sent based on activity in order to extend the session lifetime. If there's no activity, the session might expire, and the user will need to login again. +* A new config option `session_forced_logout_timeout` has been introduced in `config.php`. For advanced security, this option can be used to expire user sessions a configurable amount of seconds after they close the ownCloud browser tab or the whole browser, respectively, forcing the user to log in again when they access ownCloud the next time. This option is disabled by default. + +=== Notable Changes + +* The feature _Resend invitation mail_ in user management does not apply to guest users anymore as those have a different invitation flow than regular users (user-based vs. admin-based). https://github.com/owncloud/core/pull/40032[#40032] +* Group administrators will now only see the groups they are an administrator of in user management (previously they also saw other groups but were unable to manage them). https://github.com/owncloud/core/pull/39752[#39752] +* ownCloud Server 10.9 introduced a new feature to xref:server_release_notes.adoc#highly-improved-initial-sync-and-discovery-performance[improve initial sync and discovery performance] which has been enabled by default. As there have been performance issues in certain environments, 10.10 disables the feature by default. It is recommended to enable the feature based on evaluations with test systems. https://github.com/owncloud/core/pull/40016[#40016] +* Storage encryption: Restoring a received shared file now also restores its versions correctly. https://github.com/owncloud/core/pull/39822[#39822] +* Storage encryption: Moving a file out of a share now also takes care of versions correctly (previously they were corrupted under certain circumstances). https://github.com/owncloud/core/pull/39829[#39829] +* The external storage administration user interface has been improved to avoid unnecessary credential exposure https://github.com/owncloud/core/pull/39841[#39841] https://github.com/owncloud/core/pull/39935[#39935] +* The mail server configuration user interface has been improved to avoid unnecessary credential exposure https://github.com/owncloud/core/pull/39833[#39833] +* The 'External Storage' feature (`files_external`) can now be disabled. https://github.com/owncloud/core/pull/39856[#39856] +* General performance and stability improvements have been made. https://github.com/owncloud/core/pull/39847[#39847] https://github.com/owncloud/core/pull/40031[#40031] +* The File Drop view for Upload-only public links has been visually improved to provide a better user experience. https://github.com/owncloud/core/pull/39900[#39900] +* ownCloud Web: Guest users will now be explicitly listed as "Guests" (instead of "User") https://github.com/owncloud/core/pull/40013[#40013] +* The config report now provides a https://github.com/owncloud/configreport/releases[dedicated guest user count] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.9.1 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/activity[Activity] 2.7.0 +* https://marketplace.owncloud.com/apps/market[Market] 0.6.3 +* https://marketplace.owncloud.com/apps/metrics[Metrics] 1.1.0 +* https://marketplace.owncloud.com/apps/openidconnect[OpenID Connect] 2.1.1 +* https://marketplace.owncloud.com/apps/password_policy[Password Policy] 2.1.4 +* https://marketplace.owncloud.com/apps/ransomware_protection[Ransomware Protection] 1.4.0 +* https://marketplace.owncloud.com/apps/web[ownCloud Web] 5.4.0 +* https://marketplace.owncloud.com/apps/wopi[Microsoft Office Online] 1.6.0 +* https://marketplace.owncloud.com/apps/workflow[Workflow] 0.5.4 +* https://marketplace.owncloud.com/apps/windows_network_drive[External Storage: Windows Network Drive] 2.1.1 + +=== For Developers + +* The Capabilities API now exposes the product name. [#39851]https://github.com/owncloud/core/pull/39851 +* The OCS Share API now also exposes the user type (e.g., guest) [#40013](https://github.com/owncloud/core/pull/40013) + +=== Known Issues + +Currently there are no known issues with ownCloud Server 10.10.0. This section will be updated if issues are discovered. + +== Changes in 10.9.1 + +ownCloud Server 10.9.1 is a follow-up bugfix release release that takes care of 10.9 known issues. +You can read {owncloud-server-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Solved known issues + +All xref:server_release_notes.adoc#known-issues-10-9-0[known issues] in Server 10.9.0 have been fixed: + +* Prevent encrypted files from being corrupted when overwriting them https://github.com/owncloud/core/pull/39623[#39623] +* Marketplace not working after upgrade from 10.8 to 10.9 https://github.com/owncloud/core/issues/39616[#39616] +* Fixes for the newly introduced xref:file-versions-store-and-display-the-author-of-file-versions[feature to store the author of versions] https://github.com/owncloud/core/pull/39670[#39670] https://github.com/owncloud/core/pull/39673[#39673] + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.9.0 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/web[Web] 4.9.0 +* https://marketplace.owncloud.com/apps/market[Market] 0.6.2 + +== Changes in 10.9.0 + +Dear ownCloud administrator, find below the changes and known issues in ownCloud Server 10.9 that need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +* To improve the performance of address book search queries (e.g., when looking for federated users to share with), a migration step adds an index in the `cards_properties` table. The impact on upgrade duration depends on the number of known federated users. https://github.com/owncloud/core/pull/39017[#39017] +* A migration step takes care of setting the new option `allow_user_to_change_mail_address` according to what has been set in `allow_user_to_change_display_name` to make sure that there's no unintentional behavior change after upgrading. The impact on upgrade duration is insignificant. https://github.com/owncloud/core/pull/39288[#39288] + +=== PHP 7.2 Support Discontinued + +As xref:php-7-2-deprecation-note[announced] in the previous minor releases of ownCloud Server, from version 10.9 onward ownCloud Server **no longer supports PHP 7.2**. +If you're running on PHP 7.2 or below, it is necessary to upgrade PHP **prior** to conducting the upgrade to Server 10.9. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc[system requirements] for more information. + +NOTE: If you're using the official Docker containers or the Univention appliance, this has been taken care of already. + +=== PHP 7.3 Deprecation Note + +PHP 7.3 support will be dropped in one of the next server releases. Support is still available with 10.9 but it will be necessary to plan an upgrade soon if PHP < 7.4 is in use. + +=== Support for MariaDB 10.6 + +Version 10.9 adds support for MariaDB 10.6 (https://github.com/owncloud/core/pull/39286[#39286]). If you're planning a database update to a MariaDB version > 10.5, it is **very important to prepare the ownCloud installation first**. Please read the https://doc.owncloud.com/server/latest/admin_manual/maintenance/upgrading/database_upgrade.html[documentation] on this matter carefully before upgrading to MariaDB 10.6. + +=== Highly Improved Initial Sync and Discovery Performance + +Server 10.9 comes with the means to drastically reduce the time needed by the ownCloud clients for the initial discovery of the contents in user accounts, especially for those with many files and huge directory structures. Practically, this means when a user account is initially set up, e.g., in the ownCloud Desktop Client or when larger directory structures are added to an existing account (e.g., via sharing or external storage mounts like Windows Network Drives), the client no longer needs to check every individual folder. Instead, the server will compose a full content listing and provide it to the client ("Streaming PROPFIND with depth=infinity", https://github.com/owncloud/core/pull/38583[#38583]). Additionally, to prevent memory issues on the server side, this content listing will be streamed to the client while it is being created. + +This new server-side capability needs changes in the ownCloud clients to work. At the time of the ownCloud Server 10.9 release, client implementations for iOS, Android and Desktop are in the making but not yet available. The implementations will follow soon with the next client releases. + +TIP: If you use the currently existing versions of the ownCloud clients, you will not yet experience performance gains. + +=== Manual File Locking: Ability to Define User Groups That Can Unlock Files + +Since version 10.5, xref:file-locking-in-the-web-interface[ownCloud supports Manual File Locking] to prevent concurrent changes of files by different users. The feature works in a way that it only allows the user who locked a file to unlock it again (_exclusive file locking_) and it provides a configurable timeout for file locks. + +Version 10.9 introduces a new subfeature that allows administrators to define groups of users that are entitled to unlock locked files, independent of whether they have set the lock initially or not (https://github.com/owncloud/core/pull/38222[#38222]). Users in such groups can regain control over files, e.g., if a lock owner is unavailable and a long timeout for file locks is used. Administrators can configure this in the _Manual File Locking_ section of the _General_ admin settings. More information, refer to the https://doc.owncloud.com/server/latest/admin_manual/configuration/files/manual_file_locking.html[ownCloud documentation]. + +=== File Versions: Store and Display the Author of File Versions + +To improve usability, Server 10.9 provides a new feature for file versioning. When working on documents with multiple people, it can be important to know who created a certain version, e.g., to roll back to a specific state or to understand who made which changes to a file. For this, you can enable storing and displaying the author of file versions. When enabled, users will see the author of file versions in the 'Versions' tab of the right sidebar in the web interface. To avoid time-consuming database migrations, the author metadata will be stored in files on the storage. + +The feature is disabled by default as it is not compatible with all use cases. To enable it, administrators can set `'file_storage.save_version_author' => true` in `config.php`. + +TIP: This feature is incompatible with S3 object storage. Do not enable it if you're using S3 as primary storage. + +=== Restrict Public Link Sharing to Certain Groups + +In certain scenarios it is not desired that all users of an ownCloud installation can create public links and share data publicly. Therefore, ownCloud Server 10.9 provides a new configuration option for administrators that allows restricting the creation of public links to users in certain groups (https://github.com/owncloud/core/pull/38980[#38980]). + +TIP: Existing public links will continue to work after introducing a restriction policy. The policy only applies to the creation of new public links. + +=== Ability to move a user's home folder + +In some cases it is necessary to manage storage locations of users, e.g., if you want to distribute them across multiple storages. To facilitate this process, Server 10.9 introduces a new _occ_ command (`occ user:move-home`) that allows moving user home folders to a new location (https://github.com/owncloud/core/pull/39136[#39136]). The command takes care of moving the physical data and of updating all other related information. In addition, new commands like the `occ user:home:list-dirs` which lists the available storage locations of users and `occ user:home:list-users` which lists users belonging to a storage location have been added. +For more information, refer to the https://doc.owncloud.com/server/latest/admin_manual/configuration/server/occ_command.html#user-commands[ownCloud documentation about occ] and https://doc.owncloud.com/server/latest/admin_manual/configuration/user/user_management.html#moving-the-user-home[about user management]. + +=== Updated App Versions + +Find below a list of updated apps in comparison with the 10.8 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/files_mediaviewer[Media Viewer] 1.0.5 +* https://marketplace.owncloud.com/apps/files_pdfviewer[PDF Viewer] 1.0.1 +* https://marketplace.owncloud.com/apps/files_texteditor[Text Editor] 2.4.1 +* https://marketplace.owncloud.com/apps/guests[Guests] 0.9.3 +* https://marketplace.owncloud.com/apps/oauth2[OAuth2] 0.5.2 +* https://marketplace.owncloud.com/apps/openidconnect[OpenID Connect] 2.1.0 +* https://marketplace.owncloud.com/apps/web[Web] 4.6.0 +* https://marketplace.owncloud.com/apps/windows_network_drive[Windows Network Drive] 2.1.0 +* https://marketplace.owncloud.com/apps/wopi[Microsoft Office Online] 1.5.1 +* https://marketplace.owncloud.com/apps/user_ldap[LDAP Integration] 0.16.0 + +=== Other Notable Changes + +* The handling of inaccessible federated shares has been improved to avoid removing temporarily unavailable shares. https://github.com/owncloud/core/pull/38474[#38474] +* Group admins can now add users who are in at least one of their administered groups to their other groups via the HTTP Provisioning API (previously this was only possible via the web-based user management). https://github.com/owncloud/core/pull/39013[#39013] +* Issues with updating apps via the Market app occurring under certain circumstances have been resolved. https://github.com/owncloud/core/pull/39108[#39108] +* The logo on the login screen will be displayed correctly again, independent of its size. https://github.com/owncloud/core/pull/39129[#39129] +* Image orientation information from EXIF data will now be processed correctly so that images will be displayed with the correct orientation, e.g., in the Media Viewer. https://github.com/owncloud/core/pull/39140[#39140] +* The `occ user:report` command has been fixed so that only real user folders will be counted (instead of counting system folders like, e.g., avatars). Additionally, folders outside of the data directory will also be taken into account (e.g., symlinks). https://github.com/owncloud/core/pull/39223[#39223] https://github.com/owncloud/core/pull/39254[#39254] +* The "Home" icon in the breadcrumb of the Files app has been replaced with the icon and text of the respective view (e.g., All Files, Deleted Files) so that its functionality is clearer to the user. https://github.com/owncloud/core/pull/39367[#39367] +* The `occ user:list` command now supports the option `show-all-attributes` to provide a user list including all available information at once. https://github.com/owncloud/core/pull/39366[#39366] +* The "Open with" menu which is shown when a user can choose between multiple applications/actions for a certain file type (e.g., ONLYOFFICE, Collabora Online, PDF Viewer) has been improved to only show relevant actions. If there's only one relevant action available, clicking on the file name will directly conduct this action. https://github.com/owncloud/core/pull/39541[#39358] +* Support for Collabora Online Draw has been added. https://github.com/owncloud/core/pull/39594[#39594] +* Thumbnails for WEBP files can now be generated. https://github.com/owncloud/core/issues/39358[#39358] +* The quality of preview images (e.g., in the Media Viewer) can now be configured. https://github.com/owncloud/core/blob/master/config/config.sample.php#L996[in _config.php_]. https://github.com/owncloud/core/pull/39349[#39349] +* Starting and trailing spaces in file names will now be trimmed when uploading, creating and renaming files in order to maintain cross-platform compatibility (e.g., Windows does not support such file names). https://github.com/owncloud/core/pull/39310[#39310] +* Empty folders can now be uploaded via the web interface. https://github.com/owncloud/core/pull/39285[#39285] +* The file list has received improvements for mobile devices. https://github.com/owncloud/core/pull/39233[#39233] https://github.com/owncloud/core/issues/39221[#39221] +* The _Shared by link_ view has been improved for mobile devices. https://github.com/owncloud/core/pull/39232[#39232] +* The _Deleted files_ view has been improved for mobile devices. https://github.com/owncloud/core/pull/39236[#39236] +* The file creation menu ("+" menu) now provides buttons to confirm and cancel file creation. https://github.com/owncloud/core/pull/39056[#39056] +* The group listing of the user management in the web interface has been improved with regard to usability. https://github.com/owncloud/core/pull/39262[#39262] +* It is now possible to disable the upload time estimation in the web interface using `occ config:app:set files hide_upload_estimation --value="yes"`. https://github.com/owncloud/core/pull/39228[#39228] +* When 'upgrade.disable-web' is set to `true` in _config.php_, the web updater section in admin settings will now be completely hidden. https://github.com/owncloud/core/compare/issues/39183[#39183] +* Deleting a tag now requires confirmation to prevent mistakes. https://github.com/owncloud/core/issues/39157[#39157] +* The `occ transfer:ownership` command now has a new option `--destination-use-user-folder` to transfer entire user accounts. See the https://doc.owncloud.com/server/latest/admin_manual/configuration/server/occ_command.html#the-filestransfer-ownership-command[documentation] for more information. https://github.com/owncloud/core/pull/39118[#39118] +* The performance of address book search queries has been improved. https://github.com/owncloud/core/pull/39017[#39017] +* File actions in the web interface will now only be triggered when clicking on the file name. A bug has been fixed that caused clicking on the file row to have the same behavior. https://github.com/owncloud/core/pull/39361[#39361] +* The setting `allow_user_to_change_mail_address` has been introduced and decoupled from the setting `allow_user_to_change_display_name`. +* The expiration date in the _Shared by link_ view will now be correctly displayed. https://github.com/owncloud/core/pull/39238[#39238] + +=== For developers + +* It is now possible to register multiple default actions for a certain mimetype. If there is only a single action available, this action will be conducted when the user clicks on the file name. If there are multiple actions available for a certain mimetype, the user will see an "Open with" menu when clicking on the file name. More information can be found in the https://doc.owncloud.com/server/latest/developer_manual/app/fundamentals/js.html#registering-file-actions[developer documentation]. https://github.com/owncloud/core/pull/39541[#39541] + +=== Solved known issues + +All xref:server_release_notes.adoc#known-issues-10-8[known issues in Server 10.8] have been fixed. + +* Bugfix: Avoid potential open_basedir errors after upgrade to PHP 7.4.21 https://github.com/owncloud/core/issues/39034[#39034] + +[#known-issues-10-9-0] +=== Known Issues + +* When updating an existing instance to ownCloud 10.9, you may experience that the marketplace is not accessible via ownCloud and content is not shown. If you have this issue, see the following link for details and a https://github.com/owncloud/core/issues/39616#issuecomment-1001490469[procedure how to solve] this. + +* If you use encryption, we recommend _not to update_ to ownCloud 10.9.0 but wait until 10.9.1 will be released in early January 2022. The following issue can occur: If you have an encrypted file which is shared, the file gets corrupted if the share recipient overwrites that file. This means that the latest changes will be lost. If https://doc.owncloud.com/server/next/admin_manual/configuration/files/file_versioning.html[Files Versions] has been enabled, you can restore the previous version. The issue has been resolved already and will be available with the next patch release. See the following link for https://github.com/owncloud/core/pull/39623[more technical details]. + +== Changes in 10.8.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.8 that need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== ownCloud Web supplements the Classic Web Interface - Try it! + +The all-new web interface for ownCloud, ownCloud Web, has come a long way since its initial release at the end of 2020. It is available as an app on the https://marketplace.owncloud.com/apps/web[ownCloud Marketplace] and ownCloud Server has been xref:server_release_notes.adoc#owncloud-web-the-new-web-frontend-for-owncloud[prepared to work with it since version 10.6]. ownCloud Web https://owncloud.dev/clients/web/deployments/oc10-app/#configure-owncloud-10[can be deployed as a supplement to the classic web interface] and meanwhile it is in use at quite a number of installations. This has brought up good feedback around the integration with ownCloud 10 that has been addressed for 10.8. Additionally, lots of improvements have made their way into ownCloud Web. For an overview you can have a look at the https://owncloud.dev/ocis/release_notes/[ownCloud Infinite Scale release notes] and for a full list of changes, please see the https://github.com/owncloud/web/blob/master/CHANGELOG.md[ownCloud Web changelog]. + +The most prominent recent improvements are + +* Accessibility: Compliance with WCAG 2.1 / BITV 2.0 (currently in the certification process) +* Theming: Ability to change name, logos, colors and more via config file (see the https://owncloud.dev/clients/web/theming/[documentation] for more information) +* Performance improvements in many areas + +With all these improvements we want to motivate ownCloud service providers to make ownCloud Web available to users, to experience the new technology as well as to provide feedback to further improve it. The ownCloud Web integration app comes as part of the 10.8 complete bundle. Furthermore, ownCloud Web has a release cycle of 3 weeks that is independent of ownCloud Server. This allows new versions with features, fixes and improvements to be made available regularly via the ownCloud Marketplace and to deploy them with minimal effort. + +TIP: ownCloud Web is currently in the status of a Technology Preview. This means that bugs and other undesired behavior are expected. After careful testing, ownCloud Web can be used on production systems. Features are still being added to ownCloud Web and users will need to use the Classic web interface to do certain actions. Please evaluate according to your use case how well the new web interface suits your needs and let us know any feedback that you encounter. + +==== Fixed known issues + +Both xref:server_release_notes.adoc#known-issues-10-7[known issues from ownCloud Server 10.7] have been fixed. The deployment of ownCloud Web is now more robust and administrators can optionally decide whether ownCloud Links (public and private links) should be provided by the Classic web interface or by ownCloud Web using a https://owncloud.dev/clients/web/deployments/oc10-app/#configure-link-routing[new option in config.php]. + +==== Feedback +As mentioned, features are still being added to ownCloud Web and the new web interface can't yet cover every use case of the Classic interface. To further shape the new product and to determine the development priorities it is of utmost importance to consider user feedback. We're very grateful for any hints or feedback that you supply via the following channels + +- ownCloud Web survey: https://owncloud.com/web-design-feedback +- GitHub: https://github.com/owncloud/web[owncloud/web] +- Chat: talk.owncloud.com / #web +- Mail: product at owncloud dot com + +Since the ownCloud Web 3.4.0 release, the survey above is made available in ownCloud Web to allow users to directly report about their experience. If undesired, the feature can be turned off in the https://owncloud.dev/clients/web/getting-started/#options[ownCloud Web configuration]. + +=== Improved Usability for "Add to ownCloud" on Public Links + +The usability of the "Add to ownCloud" feature on public link pages has been improved (https://github.com/owncloud/core/pull/38712[#38712]). Research on the feature has shown that most users use the feature to add links to the same ownCloud installation they originate from instead of creating federated shares with other ownCloud installations. For this reason there is a new default behavior which allows adding a link to a user account on the ownCloud installation the public link originates from with just a click and without requiring any further input. Advanced users can use a dropdown menu to add a link to a user account on another ownCloud installation. + +TIP: New icons have been introduced for this feature. If you're using a custom theme, it is recommended to check whether the icons have a good contrast. + +=== Modernized Login Page + +The login page has received several improvements regarding design and usability (https://github.com/owncloud/core/pull/38506[#38506]). A login button and labels for the input fields have been added and the "Alternative login" buttons (e.g., for authentication with OpenID Connect) have been redesigned to give a more modern look and feel. In this context, also the ownCloud Enterprise Theme has received improvements that are shipped with Server 10.8. + +TIP: If you're using a custom theme, it is recommended to check the login page and make sure that all elements appear as desired. + +=== Improvements for External Storages + +* Performance and caching improvements for external storages (e.g., Windows Network Drives) have been added https://github.com/owncloud/core/pull/38804[#38804] +* Renaming or deleting a Windows Network Drive mount point from the files list is now properly prevented https://github.com/owncloud/core/pull/38709[#38709] https://github.com/owncloud/core/pull/38819[#38819] +* Passwords in the external storage configuration can now be stored encrypted in the database (e.g., for Windows Network Drive mount points). With the next release of the Windows Network Drive app, these can also be used to set up the WND Listener. https://github.com/owncloud/core/pull/38728[#38728] +* The external storage settings UI has been improved to prevent accidentally exposing mount points to all users https://github.com/owncloud/core/pull/38795[#38795] + +=== Re-sending User Invitation Emails + +Invitation links for new users in the local ownCloud user management expire after 12 hours for security reasons. For such cases, administrators can now conveniently re-send invitation emails to new users using the mail icon in the user management. https://github.com/owncloud/core/pull/38774[#38774] + +=== System Events in the Activity Stream + +Events in the activity stream that have been issued by the system (e.g., expired shares or workflow automations like file retention or auto-tagging) are now indicated properly. Before, these events appeared as if the user would have done them manually. To be effective, this requires the latest versions of the Workflow and Activity app versions which are shipped with ownCloud Server 10.8. https://github.com/owncloud/core/pull/38605[#38605] https://github.com/owncloud/core/pull/38631[#38631] + +=== Migrations + +Upgrading from ownCloud Server 10.7 to 10.8 does not involve database migrations. The upgrade duration is, therefore, expected to be short. + +=== Updated App Versions + +Since ownCloud Server 10.5, all supported apps are being shipped as part of the complete bundle for ownCloud Server. Find below a list of updated apps in comparison with the 10.7 complete bundle. More information on the changes can be found in the respective changelogs on ownCloud Marketplace. + +* https://marketplace.owncloud.com/apps/web[Web] 3.4.1 (new addition to the bundle) +* https://marketplace.owncloud.com/apps/files_antivirus[Anti-Virus] 1.0.0 (with https://owncloud.com/news/through-icap-owncloud-enterprise-now-works-with-the-major-names-in-anti-virus/[ICAP support]) +* https://marketplace.owncloud.com/apps/user_ldap[LDAP] 0.15.4 +* https://marketplace.owncloud.com/apps/activity[Activity] 2.6.1 +* https://marketplace.owncloud.com/apps/workflow[Workflow] 0.5.2 +* https://marketplace.owncloud.com/apps/announcementcenter[Announcement Center] 1.5.2 +* https://marketplace.owncloud.com/apps/customgroups[Custom Groups] 0.6.2 +* https://marketplace.owncloud.com/apps/files_lifecycle[File Lifecycle Management] +* https://marketplace.owncloud.com/apps/firewall[File Firewall] 2.10.3 +* https://marketplace.owncloud.com/apps/market[Market] 0.6.1 +* https://marketplace.owncloud.com/apps/admin_audit[Auditing] 2.1.3 +* https://marketplace.owncloud.com/apps/files_classifier[Document Classification] 1.3.1 +* https://marketplace.owncloud.com/apps/files_pdfviewer[PDF Viewer] 0.12.1 +* https://marketplace.owncloud.com/apps/files_texteditor[Text Editor] 2.3.1 +* https://marketplace.owncloud.com/apps/guests[Guests] 0.9.1 +* https://marketplace.owncloud.com/apps/wopi[Microsoft Office Online] 1.5.0 +* https://marketplace.owncloud.com/apps/theme-enterprise[ownCloud Enterprise Theme] 2.3.0 + +=== PHP Minimum Version 7.2.5 + +The minimum supported PHP version has been increased from 7.2 to 7.2.5. If you are still running PHP 7.2, +ensure that you are running a recent patch release before upgrading to 10.8. + +=== PHP 7.2 Deprecation Note + +As announced with the xref:server_release_notes.adoc#php-7-2-deprecation-note[release notes of version 10.6], PHP 7.2 support will be dropped in one of the next minor releases. Support is still available with 10.8 but it will be necessary to plan an upgrade soon if PHP < 7.4 is in use. + +=== Other Notable Changes + +* The auto-removal of inaccessible federated shares has been made more robust https://github.com/owncloud/core/pull/38474[#38474] +* Interoperability in federation with other OCM providers has been improved https://github.com/owncloud/core/pull/38738[#38738] https://github.com/owncloud/core/pull/38751[#38751] +* Thumbnail previews for file versions work again https://github.com/owncloud/core/pull/38778[#38778] +* Received shared files/folders can be renamed again without permission checks (only affecting the mount point for the user themself) https://github.com/owncloud/core/pull/38794[#38794] +* An issue that caused the sharing autocomplete dropdown menu not appearing in the Safari browser has been fixed https://github.com/owncloud/core/pull/38831[#38831] +* MOVE operations from encrypted storage to unencrypted storage have been fixed https://github.com/owncloud/core/pull/38567[#38567] +* The performance of MOVE operations has been improved https://github.com/owncloud/core/pull/38649[#38649] +* An issue related to CORS that prevented users from accepting shares has been fixed https://github.com/owncloud/core/pull/38639[#38639] +* Design improvements for the tabs in the right sidebar have been made https://github.com/owncloud/core/pull/38653[#38653] +* Improvements on the files list allow a better readability of file names on small screens https://github.com/owncloud/core/pull/38748[#38748] +* The button to share a user's federation ID to Google+ has been removed from personal settings since it's obsolete https://github.com/owncloud/core/pull/38705[#38705] +* The config report and the `occ user:report` command now provide the number of guest users https://github.com/owncloud/core/pull/38742[#38742] https://github.com/owncloud/configreport/pull/146[#146] +* For more control over Deleted Files, administrators can now decide if a resource should be deleted immediately instead of moving it to the trash bin. The behavior can be configured based on file extensions, directory names and size using the `trashbin_skip` options in config.php. https://github.com/owncloud/core/pull/38704[#38704] +* License keys can now be removed with a button in the admin settings https://github.com/owncloud/core/issues/38843[#38843] +* Video playback in ownCloud relies on browser capabilities. If a video cannot be played, users will now see a hint with guidance. https://github.com/owncloud/core/pull/38858[#38858] + +=== For developers + +* App developers can now exclude default file actions like "Rename" when their app adds a new file view to ownCloud. https://github.com/owncloud/core/pull/38643[#38643] + +=== Solved known issues + +All xref:server_release_notes.adoc#known-issues-10-7[known issues from Server 10.7] have been fixed. + +[#known-issues-10-8] +=== Known issues + +* If `open_basedir` is configured within your `php.ini` file and you update PHP to 7.4.21 or later then unnecessary entries will be logged to the log file about "open_basedir restriction in effect." See issue https://github.com/owncloud/core/issues/39034[#39034]. This issue will also happen on all other 10.* releases if `open_basedir` is used with PHP 7.4.21. + +== Changes in 10.7.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.7 that need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +Upgrading from ownCloud Server 10.6 to 10.7 does not involve database migrations. The upgrade duration is, therefore, expected to be short. + +=== Usability Improvements for the Classic Web Interface + +==== Tagging + +Based on user feedback, the user interface for file/folder tagging has been improved. Research has shown that some users misinterpret the tagging input field in the right sidebar as the location to share files/folders. To prevent this, the functionality to manage tags has been separated from the location where tags are displayed. From version 10.7 onwards, tags will be displayed as a read-only list at the top of the right sidebar. Tag management (assign/unassign, etc.) can now be conducted in a dedicated tab "Tags" below. + +==== Sharing via Email Address + +Based on user feedback, some further usability improvements have been made in the user sharing dialog. In most cases users actually want to share with an internal or a guest user. Therefore, when sharing data by entering an email address, the suggestion to create a federated share will now only be shown when the internal user lookup has finished and did not return any results. As federated user IDs have the same syntax like email addresses (e.g., _userid@cloud.tld_) this measure has been taken to guide users better by only suggesting federated users when no other known users have been found. + +==== Improvements for Opening Files with Multiple Applications + +Server 10.7 brings improvements for users when there are files that have multiple editor or viewer applications associated. For example, this could be a PDF file that can be opened with the integrated PDF viewer or with a third party application like Collabora Online or OnlyOffice. Previously the classic ownCloud Web interface would just make the decision for the user on click or require the user to use the respective entry in the file's dropdown menu. Starting with version 10.7, the user will be prompted on click to decide which application they want to use. If there is only a single application available that is capable of opening the file, the behavior stays as before. + +=== Improvements for Storage Encryption + +Version 10.7 brings improvements for storage encryption in order to reduce storage usage. By changing from `base64` to `binary` encoding for encrypted files, a reduction of about 35% in storage usage can be achieved. +For existing installations that use storage encryption, this process is seamless. Files that have been stored before upgrading to 10.7 will stay with the previous encoding until they are rewritten which will store them with the new encoding. + +=== Deprecation Note for User-key Storage Encryption + +Storage encryption in ownCloud offers two options, master-key and user-key encryption. While master-key encryption is based on a general encryption key that is used to decrypt all user data, user-key encryption relies in essence on user passwords to decrypt individual user data. Both follow the goal to prevent malicious administrators from being able to read user data. +Due to the nature of user-key storage encryption, this encryption mode comes with a list of xref:{latest-server-version}@server:admin_manual:configuration/files/encryption/encryption_configuration.adoc#limitations-of-user-key-based-encryption[limitations] and can cause challenges for administrators, e.g., when users forget their password. +For these reasons, user-key storage encryption is now marked as deprecated and will not be maintained anymore for future versions of ownCloud Server. Server 10.7 still supports user-key encryption but the feature will be removed in later versions. If you are operating an ownCloud installation with user-key storage encryption enabled, please get in contact with support@owncloud.com to plan a migration to master-key storage encryption. + +TIP: Master-key storage encryption is still supported and has received improvements with Server 10.7 (see above). This encryption mode can be used with dedicated xref:{latest-server-version}@server:admin_manual:configuration/server/security/hsmdaemon/index.adoc[HSM products] for additional security. + +=== PHP 7.2 Deprecation Note + +As announced with the xref:server_release_notes.adoc#php-7-2-deprecation-note[release notes of version 10.6], PHP 7.2 support will be dropped in one of the next minor releases. Support is still available with 10.7 but it will be necessary to plan an upgrade soon if PHP < 7.3 is in use. + +=== Other Notable Changes + +* Redis can now be connected with TLS support for improved security. See the xref:{latest-server-version}@server:admin_manual:configuration/server/config_sample_php_parameters.adoc#define-redis-connection-details[documentation] for more information. https://github.com/owncloud/core/pull/38386[#38386] +* For strong security, ownCloud Server uses strict same-site cookie handling. In certain scenarios (e.g., integrations) this behavior is not desired. To be able to flexibly adapt the intended behavior, the xref:{latest-server-version}@server:admin_manual:configuration/server/config_sample_php_parameters.adoc#define-how-to-relax-same-site-cookie-settings[same-site cookie handling] can now be configured. https://github.com/owncloud/core/pull/38458[#38458] +* Loading the "Shared with you" list when shares originate from files on unavailable storages (e.g., Windows Network Drives) has been fixed. https://github.com/owncloud/core/pull/38190[#38190] +* Performance improvements for the "Shared with you" view list have been made. https://github.com/owncloud/core/pull/38385[#38385] +* Existing guest users are now correctly labeled as 'Guest' in the sharing sidebar tab (before they were labeled as regular 'User'). https://github.com/owncloud/core/pull/38440[#38440] +* Issues with multiple files with the same name e.g., in the "Shared by link" view, have been fixed https://github.com/owncloud/core/pull/38415[#38415] +* Error messages when uploading files are more specific again (e.g., when a virus has been found or when an upload was blocked due to a File Firewall rule) https://github.com/owncloud/core/pull/38416[#38416] +* The xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#mimetype-update-commands[occ command] `maintenance:mimetype:update-db --repair-filecache` has been fixed. It can be used to bring changed mimetype associations for files into operation. https://github.com/owncloud/core/issues/38425[#38425] +* Subfolders from Google Drive can now be mounted. https://github.com/owncloud/core/pull/38161[#38161] +* The right scrollbar in the web interface is more visible now. https://github.com/owncloud/core/pull/38183[#38183] +* The user experience when adding external storages has been improved by clearly indicating success or errors. https://github.com/owncloud/core/pull/38288[#38288] +* There are user groups which cannot be edited manually in user management (e.g., the `guests_app` group). These groups will not allow adding users anymore to prevent confusion. https://github.com/owncloud/core/pull/38298[#38298] +* Some unnecessary errors in the logs have been removed for cleanliness. https://github.com/owncloud/core/pull/38390[#38390] + +=== Solved known issues + +Both xref:server_release_notes.adoc#known-issues-10-6[known issues from Server 10.6] have been fixed. + +* ownCloud Web now also allows proper downloading from public links. https://github.com/owncloud/core/pull/38376[#38376] +* Theming issues have been resolved. https://github.com/owncloud/core/pull/38246[#38246] + +[#known-issues-10-7] +=== Known issues + +* When having storage encryption (master key encryption) enabled, there is an issue that prevents Collabora Online (`richdocuments`) from working. If you are using this feature combination, please skip the 10.7 upgrade and wait for the next release. In case you have already upgraded to Server 10.7, please get in touch with ownCloud Support to fix the issue. https://github.com/owncloud/richdocuments/pull/392[#392] +* When having ownCloud Web enabled, all public links will open in ownCloud Web instead of the classic UI. This behavior will be made configurable in a follow-up release of ownCloud Server. +* When setting up ownCloud Web, it is necessary to be careful with the `web.baseUrl` parameter as trailing slashes currently do not work as expected. For example, `\https://cloud.example.com/apps/web/` should not be used while `\https://cloud.example.com/apps/web` will work properly. + +This section will be updated when more issues are discovered. + +== Changes in 10.6.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.6 that +need your attention. You can also read {oc-changelog-url}[the full ownCloud Server changelog] +for further details on what has changed. + +=== Migrations +* To allow sharing files with very long names (> 64 characters) via federation, a migration step will run. +The impact on upgrade duration depends on the number of federated shares. +https://github.com/owncloud/core/pull/37835[#37835] + +=== PHP 7.2 Deprecation Note + +PHP 7.2 recently reached its {php-supported-versions-url}[end of life] and is not maintained anymore. +ownCloud Server will, therefore, drop support in one of the next minor versions as well. +If you’re running on PHP lower than 7.3, please make sure to schedule an upgrade to PHP 7.4 as soon as +possible. See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc[system requirements] for more information. + +=== ownCloud Web - The New Web Frontend for ownCloud + +ownCloud Server 10.6 comes with the prerequisites to run the new ownCloud Web frontend as an optional +component on top of it. + +* The new server version comes with a switcher to the new frontend ("New Design"). It will be available +to users in the apps menu if the address of ownCloud Web is specified in config.php. Likewise, the new +frontend comes with a switcher back to the classic frontend ("Classic Design") to allow users to navigate +back and forth. +* https://github.com/owncloud/core/pull/37923[Pre-signed URLs] allow proper downloading and streaming of +files in ownCloud Web. +* A https://github.com/owncloud/core/pull/37673[capability for the Favorites feature] makes it available +in ownCloud Web. + +There are different ways to deploy ownCloud Web with ownCloud Server. We strive to make it as easy as +possible to make the new frontend available to users. For this, there is the new app for +{oc-marketplace-url}/apps/web[Web] on the ownCloud Marketplace. It can be installed on ownCloud 10 servers with +the regular tools. The app will make the new frontend available as described above when +https://owncloud.github.io/clients/web/deployments/oc10-app/[deployed and configured correctly]. + +TIP: Deploying ownCloud Web via the Marketplace app is the currently recommended approach. + +**Requirements for deploying ownCloud Web as an app for ownCloud Server 10** + +* ownCloud Server 10.6 +* {oc-marketplace-url}/apps/oauth2[OAuth2] or {oc-marketplace-url}/apps/openidconnect[OpenID Connect] +is used for client authorization. +* {oc-marketplace-url}/apps/web[ownCloud Web] is installed and enabled. +* ownCloud Server and ownCloud Web are configured as outlined in the +https://owncloud.github.io/clients/web/deployments/oc10-app/[documentation]. + +=== Other Notable Changes + +* Federated shares can now also have an expiration date (including default and enforcement options) https://github.com/owncloud/core/pull/37548[#37548] +* SGI images can now be displayed and have thumbnails https://github.com/owncloud/core/pull/37758[#37758] +* When sharing public links via mail, the subject will now be translated https://github.com/owncloud/core/issues/37321[#37321] +* Stability improvements for file checksums with versioning https://github.com/owncloud/core/pull/37934[#37934] +* Manual file locking on the web UI can now be enabled/disabled in the admin settings section "Additional" https://github.com/owncloud/core/pull/37720[#37720] +* Fixes and library updates for the Google Drive external storage integration https://github.com/owncloud/core/issues/25826[#25826] https://github.com/owncloud/core/pull/37739[#37739] https://github.com/owncloud/core/pull/37912[#37912] +* When disabling storage encryption, the configuration is now properly cleaned up https://github.com/owncloud/core/pull/35980[#35980] +* Many issues around unavailable federated shares have been fixed (e.g., not being able to remove them) https://github.com/owncloud/core/pull/38042[#38042] https://github.com/owncloud/core/pull/37956[#37956] +* Performance improvements for the "Shared by link" view https://github.com/owncloud/core/pull/38000[#38000] https://github.com/owncloud/core/pull/38053[#38053] +* Files with names up to 255 characters can now be shared via federation (was limited to 64 before) https://github.com/owncloud/core/issues/36730[#36730] +* A user's language preference will not be overriden by locales sent by browsers anymore https://github.com/owncloud/core/pull/38073[#38073] +* Fixed display of public links and user/group shares in case avatars are disabled https://github.com/owncloud/core/pull/37945[#37945] https://github.com/owncloud/core/pull/37964[#37964] +* Fixed some translations not working with themes https://github.com/owncloud/core/pull/38072[#38072] +* Improved output on errors for LDAP user sync https://github.com/owncloud/core/pull/37951[#37951] +* A new occ command `files:troubleshoot-transfer-ownership` has been added to help finding issues with `files:transfer-ownership` https://github.com/owncloud/core/pull/37950[#37950] +* Added values to the invalid uid list to prevent creating users with reserved UIDs https://github.com/owncloud/core/pull/37766[#37766] +* The log level of "file locked" exceptions has been reduced to "debug" https://github.com/owncloud/core/pull/37907[#37907] + +=== Bundle and Delivery + +Since ownCloud Server 10.5 xref:server_release_notes.adoc#changes-in-delivery[all supported apps are shipped in +the ownCloud Server Complete bundles]. The following changes have been made to the bundle for Server 10.6: + +* Added {oc-marketplace-url}/apps/openidconnect[OpenID Connect] +* Added {oc-marketplace-url}/apps/files_lifecycle[File Lifecycle Management] +* Added {oc-marketplace-url}/apps/graphapi[Graph API] +* Removed {oc-marketplace-url}/apps/twofactor_totp[Two-factor Authentication] + +[#known-issues-10-6] +=== Known issues + +- There is an issue around when using ownCloud Web with ownCloud Server 10.6. By default when ownCloud Web is enabled, all public links will open in the new ownCloud Web view. Downloading files from ownCloud Web in public links currently lacks some capabilities which make it appear strangely to a user. There is no status indication and progress information until the download has finished in the background. Server 10.7 will fix this issue. https://github.com/owncloud/core/pull/38376[#38376] +- There is an issue with themes which causes some themed icons and logos not to be replaced (the original icon/image will be displayed). The issue will be fixed in the next release. https://github.com/owncloud/core/pull/38246[#38246] + +This section will be updated when other issues are discovered. + +== Changes in 10.5.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.5 that need your attention. +You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +- To improve the performance of addressbook search queries (e.g., when looking for federated users to share with), a +https://github.com/owncloud/core/pull/37152[migration step] adds indices for the columns `addressbookid`, `name` and `value` on the `oc_cards_properties` table. The impact on upgrade duration can be high depending on the number of rows of the mentioned columns. +- To prepare for the new background job for change detection in federated shares (xref:new-background-job-for-change-detection-in-federated-shares[see below]), a https://github.com/owncloud/core/pull/37391[migration step] adds a new column (`lastscan`) to the `oc_share_external` table. The impact on upgrade duration depends on the number of rows in `oc_share_external`. +- To enable storing complex WebDAV properties, a https://github.com/owncloud/core/pull/37314[migration step] adds a new column (`propertytype`) to the `oc_properties` and `oc_dav_properties` tables. The impact on upgrade duration depends on the number of rows in `oc_properties` and `oc_dav_properties`. +- To facilitate the transition to the new licensing mechanism (xref:changes-in-delivery[see below]) a https://github.com/owncloud/core/pull/37512[migration step] will disable the `enterprise_key` app during the upgrade. This step does not have an impact on upgrade duration. + +=== PHP 7.1 Support Discontinued + +As xref:php-7-1-deprecation-note[announced], in the previous minor release of ownCloud Server, from version 10.5 onward, ownCloud Server **no longer supports PHP 7.1**. +If you're running on PHP 7.1 or below, it is necessary to upgrade PHP **prior** to conducting the upgrade to Server 10.5. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc[system requirements] for more information. + +NOTE: If you're using the official Docker containers or the Univention appliance, this has been taken care of already. + +=== Official PHP 7.4 Support + +ownCloud Server 10.5 officially supports PHP 7.4. +The Server Core and all apps maintained by ownCloud have received a full QA cycle and are proven to work reliably with PHP 7.4. +If you are still running a PHP version < 7.2, you must upgrade PHP before upgrading ownCloud Server as lower versions are not supported anymore. + +Summarizing, ownCloud Server 10.5 supports the PHP versions **7.2, 7.3 and 7.4**. + +TIP: See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#officially-supported-environments[system requirements in the ownCloud Documentation] for the recommended PHP version and for more information. + +TIP: Upgrade PHP to 7.2 or 7.3 then upgrade ownCloud Server to 10.5, then upgrade PHP to 7.4 + +NOTE: The official ownCloud Docker containers have been updated to Ubuntu 20.04 and are using PHP 7.4. + +=== File Locking in the Web Interface + +ownCloud Server 10.5 comes with great enhancements for content collaboration. Manual file locking allows users to lock files in shared areas while working on them in order to prevent concurrent changes from other users (check-in/check-out). + +The feature builds on the xref:webdav-locks[WebDAV Locks backend] which has been introduced with Server 10.1 and is now available in the ownCloud Web Interface. Using the context menu of files, every user who has access can lock them. Users can recognize locked files by the means of a new lock indicator. While a file is locked, other users can still access it but they can not make any changes. Locked files can manually be unlocked by the lock owner (the user who locked the file; exclusive locking) using the "Locks" tab in the file details view (right sidebar). + +TIP: When using the ownCloud clients, file locks will also be respected, meaning local changes can't be checked-in to locked files and users will see an error message. If there are conflicting local changes and the respective file becomes unlocked, there will be a conflict file that allows to resolve the concurrent changes. + +To prevent files being locked infinitely, there is a mechanism that automatically expires locks after a certain time. The expiration time of locks can be configured via the "Manual File Locking" section in the menu:Settings[Admin > Additional] settings or using _occ_ commands: + +- _Default timeout for the locks if not specified (in seconds)_: Maximum lifetime of a lock set **via the web interface** (or by not specifying a timeout value when calling the WebDAV Locks API) + +`occ config:app:set core lock_timeout_default --value 1800` + +- _Maximum timeout for the locks (in seconds)_: Maximum lifetime of locks which is allowed to be set by calling the WebDAV Locks API + +`occ config:app:set core lock_timeout_max --value 86400` + +By default locks set in the web interface will expire after 30 minutes. The expiration time is bound to the individual locks and can't be changed after locking. The maximum lock time by default is one day. + +TIP: Please change the lock expiration settings according to your needs. Usually you will only need to change the default timeout as that applies to locks set in the web interface. + +TIP: The user-facing components in the web interface are disabled by default. Administrators can enable the feature by executing the following _occ_ command: + +`occ config:app:set files enable_lock_file_action --value yes` + +=== Changes to the ownCloud Marketplace + +The ownCloud Marketplace is opening up. With the release of Server 10.5, all apps available on the Marketplace (including ownCloud Enterprise apps) are now also available for download and installation via the Market app. This change facilitates the process of getting started with ownCloud Server and of evaluating Enterprise functionality. Additionally, it allows updates for all apps to be obtained from the ownCloud Marketplace and ensures running up-to-date versions. + +=== Changes in Delivery + +In line with the changes to the Marketplace the deliverables for ownCloud Server have been unified. Previously there were different Tarball bundles, Docker images and Linux packages for the Community (bare minimum) and Enterprise (all supported apps) Editions. +Starting with Server 10.5 there are the following bundles which are shipped via tarball, Docker images and Linux packages: +- minimal bundle for the Server and required components, semantically versioned (`ownCloud-10.5.0`) +- complete bundle for the Server and all supported apps, including the Enterprise features, not semantically versioned as it always contains the latest versions of all supported apps (`ownCloud-complete-`) + +The availability of Enterprise features now only depends on the license key. +As part of this process, the former `enterprise_key` app has been deprecated and is not used anymore. New versions for all Enterprise apps have been released and included in the Server 10.5 complete bundle. These are needed to work with PHP 7.4 and the new licensing mechanism (see below). + +TIP: **When upgrading to Server 10.5 it is mandatory to upgrade all apps to the latest versions as well to ensure compatibility with the supported PHP versions and the new licensing mechanism. Using the Server 10.5 complete bundle for upgrading you will get the latest versions of all apps.** + +TIP: It is mandatory to disable the deprecated `enterprise_key` app when upgrading. A migration step will do this automatically during the upgrade procedure. Additionally, to prevent some corner cases when accidentally using old versions of the `enterprise_key` app with the new server version, the deliverables contain a non-functional `enterprise_key` app (new version without any business logic) to avoid such scenarios. This app will be removed completely in a future release. + +TIP: Practically, for existing installations the change does not make a big difference. Community installations will get all supported Community and Enterprise apps in addition but they are disabled. For Enterprise installations the bundles stay equal. After upgrading it is recommended to check whether the desired apps are enabled/disabled. + +=== New Enterprise Trial Mechanism + +To facilitate the evaluation of ownCloud Enterprise functionality, Server 10.5 comes with a new trial mechanism. Previously, the process to upgrade from a Community installation to an Enterprise trial was not that easy. + +With Server 10.5 this process has been changed and made easier: Along with the changes to the Marketplace and in delivery, Enterprise functionality is available in every installation after upgrading or installing, respectively. The apps can be enabled like other apps which will start a grace period if no valid license key is present. During this time the functionality can be fully used and the admin has some time to start a trial. To start 30 days of Enterprise trial, a demo license key can be obtained from a https://owncloud.com/try-enterprise/[new landing page]. As usual, if you do not have a valid license key after the grace period or the 30 day trial, all Enterprise apps will become disabled again. The administrator will be informed and guided to obtain the demo license and can enter it in the web interface. If desired, the location of the landing page can be customized using the _config.php_ option `'grace_period.demo_key.link' => 'https://owncloud.com/try-enterprise/'`. + +=== New Admin UI to Supply License Keys + +As mentioned above, Server 10.5 adds new UI elements to set license keys in the menu:Settings[Admin > General] settings. Keys added this way will be stored in the database, not in _config.php_ as before. Still, there is legacy support taking into account when keys have been stored in _config.php_ or _license.config.php_. + +=== New Background Job for Change Detection in Federated Shares + +With ownCloud Server 10.2.0 a xref:background-job-for-change-detection-of-nested-federated-shares[background job for change detection of nested federated shares] was added (`occ incoming-shares:poll`) to allow ownCloud Server to discover changes in federated shares in order to make them available for synchronization with the ownCloud Clients. Based on feedback a new, improved background job with more configuration options was added to Server 10.5. It replaces the former occ command which is now **deprecated** and should not be used anymore after upgrading to 10.5. + +In addition to discovering changes ("check"), the new background job also synchronizes meta data changes between involved servers ("scan") making them available without requiring users to actively browse them. + +The new background job provides some configuration options to optimize its performance, especially for larger environments: +- Minimum amount of hours since the last login of a user that a scan is triggered (limits the execution of discovery & meta data sync to active users which have logged in during the configured time frame) (default: 24h) + +`occ config:app:set files_sharing cronjob_scan_external_min_login --value ` + +- Minimum amount of hours since the last scan of a federated share for the next scan to be triggered (avoids frequently scanning the same federated share when it is in active use) (default: 3h) + +`occ config:app:set files_sharing cronjob_scan_external_min_scan --value ` + +- Maximum amount of federated shares scanned per execution (scan is only performed if changes in federated shares are discovered) (default: 100) + +`occ config:app:set files_sharing cronjob_scan_external_batch --value ` + +The new background job is disabled by default and can be enabled/disabled in the menu:Settings[Admin > Sharing] settings (_Periodically synchronize outdated federated shares for active users_) or using + +`occ config:app:set files_sharing cronjob_scan_external_enabled --value yes`. + +If enabled, it will be executed as part of the regular ownCloud background job queue and therefore does not need to be added to crontab. + +TIP: If your instance provides federated sharing, activate the new background job as explained above. +TIP: Remove the `occ incoming-shares:poll` command from crontab if you have set it. + +=== Other Notable Changes + +- The btn:[Add to your ownCloud] feature on public link pages is now hidden if an instance has outgoing federated shares disabled (specifically, if _Allow users on this server to send shares to other servers_ is disabled in menu:Settings[Admin > Sharing] settings) https://github.com/owncloud/core/pull/37232[#37232] +- Improvements for Oracle DB support https://github.com/owncloud/core/pull/37314[#37314] +- Folder download (as ZIP/TAR archive) now preserves the modification times of the contained files https://github.com/owncloud/core/pull/37222[#37222] +- Users with certain special names (UIDs) reserved by the system can't be created anymore https://github.com/owncloud/core/pull/37268[#37268] +- Performance improvements for SMB external storages https://github.com/owncloud/core/pull/37451[#37451] +- Strict LDAP login only using LDAP user name and password (instead of e.g., email and password) can now be enforced using `occ config:system:set --type boolean --value true strict_login_enforced` https://github.com/owncloud/core/pull/37569[#37569] +- Server 10.5 comes with a new background image on the login page and colors have been adapted to ownCloud CI https://github.com/owncloud/core/pull/37650[#37650] + +=== Solved Known Issues + +- The xref:sharing-with-numeric-uids[known issue] around sharing with numeric UIDs in 10.4.0 and 10.4.1 has been fixed. https://github.com/owncloud/core/pull/37336[#37336] + +[#known-issues-10-5] +=== Known issues + +Currently there are no known issues with ownCloud Server 10.5.0. This section will be updated when issues are discovered. + +== Changes in 10.4.1 + +ownCloud Server 10.4.1 is a bug fix and maintenance release. +You can read {owncloud-server-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Notable changes + +* The xref:password-policy-app[10.4.0 known issue] between Password Policy and user/group share expiration is fixed. Server 10.4.1 and Password Policy 2.1.2 are required to resolve it. https://github.com/owncloud/core/pull/37135[#37135] +* Reshared public links are now shown to the share owner. https://github.com/owncloud/core/pull/36865[#36865] +* Externally encrypted files can now be downloaded. https://github.com/owncloud/core/pull/36921[#36921] +* Improvements have been added to make long-running downloads more stable. https://github.com/owncloud/core/pull/36978[#36978] +* Pending federated shares are now also shown in the "_Shared with you_" tab and can be accepted/declined there. https://github.com/owncloud/core/pull/37022[#37022] +* The `files:transfer-ownership` occ command can now also be executed for users who have never logged in. https://github.com/owncloud/core/pull/37038[#37038] +* File download for files without a file extension from Google Drive external storages now works. https://github.com/owncloud/core/issues/37044[#37044] +* The calculation of the remaining upload time in public links has been improved. https://github.com/owncloud/core/pull/37053[#37053] +* E-mail notifications (e.g., for sharing) now respect the `default_language` config.php option. https://github.com/owncloud/core/issues/37039[#37039] +* A new occ command (`files:check-cache`) is now available. + It checks if a target file can be read from the storage and cleans up stored information in ownCloud's filecache, in case a file disappears from the primary storage. + This is mainly important for object stores and should only be utilized in rare cases. https://github.com/owncloud/core/pull/37067[#37067] + +[#known-issues-10-4-1] +=== Known issues +==== Sharing with Numeric UIDs + +With Server 10.4.0 and 10.4.1, sharing resources with users that have numeric user ids (e.g., "123") does not work in some cases. https://github.com/owncloud/core/issues/37324[#37324] + +Apart from this patch release, please consider the ownCloud Server 10.4.0 release notes, below. + +== Changes in 10.4.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.4 that need your attention. +You can also read {oc-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +Upgrading from ownCloud Server 10.3.x to 10.4.0 does not involve database migrations. +The upgrade duration is, therefore, expected to be short. + +=== PHP 7.0 Support Discontinued + +As xref:php-7-0-deprecation-note[announced], in the previous release of ownCloud Server, from version 10.4 onward, ownCloud **no longer supports PHP 7.0**. +If you're running on PHP 7.0, it is necessary to upgrade PHP **prior** to conducting the upgrade to Server 10.4. +We strongly recommend upgrading to PHP 7.2 or 7.3. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc[system requirements] for more information. + +NOTE: If you're using the official Docker containers or the Univention appliance, this has been taken care of already. + +=== PHP 7.1 Deprecation Note + +PHP 7.1 recently reached its {php-supported-versions-url}[end of life] and is not maintained anymore. +ownCloud Server will, therefore, drop support in one of the next minor versions as well. +If you're running on PHP < 7.2, please make sure to schedule an upgrade to PHP 7.2 or 7.3 as soon as possible. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc[system requirements] for more information. + +=== Expiration Date for User and Group Shares + +To give users and administrators more control of access to resources, Server 10.4 introduces an expiration date for user and group shares, just like in public links. +With this new feature, users can control the lifetime of shares with other users or groups. +Administrators can choose to set a default maximum lifetime and to enforce it. +To integrate this change, the UI in the user/group sharing tab of the sidebar has been adapted. +When a resource is shared, the user and group entries are expandable and collapsible using the cogwheel next to the trash bin icon to show/hide the permissions and the expiration date field to maintain an overview. +Additionally, to allow users to recognize expiring shares at a glance, a new clock indicator will be shown next to the cogwheel. + +Administrators can configure the feature in the '_Sharing_' section of the admin settings. + +=== Sharing Information in Subfolders + +ownCloud Server 10.4 puts the focus on user awareness for shared areas to prevent accidentally sharing data or changing other users' data, as well as to make it easier for users to recognize who has access to shared areas. +Practically, users are better able to recognize shared resources using a new share overlay indicator on file and folder icons. +The indicators are also applied to resources that are not directly shared but are part of a share (when working in a shared folder). + +Apart from that, the sharing sidebar panels have been improved to also show users/groups and public links which have access through shares on parent folders. +These will be shown as static entries with a "_via_" indicator that allows users to jump to the parent folder and to change the share properties, if desired. + +This sharing information is only shown to share owners (users that created shares) as other share recipients are not entitled to get detailed information about who else has access. + +=== MariaDB 10.4 and PostgreSQL 10 Support + +The discontinuation of PHP 7.0 enables support for MariaDB up to version 10.4 and PostgreSQL 10. +Server 10.4 is thoroughly tested against these database versions and proven to work stable. + +=== Other Notable Changes + +* External storages can now be mounted in read-only mode. https://github.com/owncloud/core/pull/36397[#36397] +* Filter options (`--enabled` and `--disabled`) have been added to the `occ app:list` command to only show enabled or disabled apps, respectively. https://github.com/owncloud/core/pull/36520[#36520] +* Support for Oracle DB connection strings has been added to be able to use Oracle-specific configuration settings like failover. https://github.com/owncloud/core/pull/36489[#36489] +* Two new config.php options (`blacklisted_files_regex` and `excluded_directories_regex`) have been added to allow excluding files and folders from ownCloud using regular expressions (e.g., to prevent creating/renaming/scanning certain file types like ".pst"). See config.sample.php for more information. https://github.com/owncloud/core/pull/36360[#36360] +* Previously, when a settings section did not have any panels to display, an "Error" was shown. This has been changed to be more user-friendly. https://github.com/owncloud/core/pull/36776[#36776] +* The memory consumption of the `occ files:checksums:verify` command has been optimized, and the command will now show progress information. https://github.com/owncloud/core/pull/36787[#36787] +* The memory consumption of the trash bin expiration background job has been optimized. https://github.com/owncloud/core/pull/36565[#36565] + +=== Solved Known Issues + +* Folder download via the web interface now works in macOS Catalina. https://github.com/owncloud/core/pull/36722[#36722] +* User creation now allows "+" characters in the user id (e.g., to invite guests with mail addresses containing "+"). + For the change to take effect, you also need to upgrade the `guests` and/or `user_ldap` apps to the latest version. https://github.com/owncloud/core/pull/36613[#36613] +* File locking actions are not available for public link endpoints anymore. https://github.com/owncloud/core/pull/36402[#36402] +* `occ files:transfer-ownership` now works in S3 multi-bucket setups. https://github.com/owncloud/core/pull/36464[#36464] +* The "_Notify by email_" button in users/groups sharing now also works when the initiator does not have an email address set. https://github.com/owncloud/core/pull/36505[#36505] +* Remaining `.part` files from unfinished uploads via public links will now be cleaned up. https://github.com/owncloud/core/pull/36761[#36761] +* The quota usage calculation of the trash bin retention has been fixed. + Previously, it mistakenly counted the space usage of incoming shares toward the user's quota usage leading to undesired behavior, e.g., when `trashbin_retention_obligation` was set to `auto`, the user had a quota set and incoming shares exceeded 50% of this quota. https://github.com/owncloud/core/pull/36494[#36494] +* The command to sync single users from external user backends like LDAP (`occ user:sync -u 'username'`) does not abort anymore if multiple users matching the search term are returned (e.g., 'alice' could return 'alice' and 'alice1'). + It will only abort if none of the results matches the search term (e.g., 'alice' returns 'alice1' and 'alice2'). https://github.com/owncloud/core/pull/36576[#36576] +* When sharing with both a user and a group with the same name, adjusting the permissions of the second entry works again. https://github.com/owncloud/core/issues/36813[#36813] + +=== For Developers + +* The xref:next@server:developer_manual:webdav_api/trashbin.adoc[WebDAV Trash bin API] and the xref:next@server:developer_manual:webdav_api/public_files.adoc[WebDAV endpoint for public links] (introduced with 10.3.0) have left the tech preview state. + They are considered stable and are enabled by default. +* The config.php option to enable/disable tech preview APIs (`'dav.enable.tech_preview' => true`) has been removed as it's obsolete. https://github.com/owncloud/core/pull/36815[#36815] +* A new xref:next@server:developer_manual:core/apis/ocs-user-sync-api.adoc[OCS User Sync API] to trigger user sync from external user backends has been added. + This allows external user provisioning systems to push new users to ownCloud on demand and removes the necessity to do full user sync. https://github.com/owncloud/core/pull/36428[#36428] + +[#known-issues-10-4] +=== Known Issues + +==== Password Policy App + +If the public link expiration policy "_days maximum until link expires if password is not set_" is enabled, sharing with users and groups will not work. +A fix for this issue is currently being developed. +If you have already upgraded to ownCloud 10.4.0, please disable this option until the fix is available and deployed on your system. +https://github.com/owncloud/password_policy/issues/287[#287] + +This issue has been resolved with ownCloud Server 10.4.1. + +==== Sharing with Numeric UIDs + +With Server 10.4.0 and 10.4.1, sharing resources with users that have numeric user ids (e.g., "123") does not work in some cases. https://github.com/owncloud/core/issues/37324[#37324] + +== Changes in 10.3.2 + +ownCloud Server 10.3.2 is a bug fix and maintenance release. +You can read {owncloud-server-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. + +=== Notable changes + +* Guest sharing works now even when the sharing restriction `Restrict users to only share with users in their groups` is enabled https://github.com/owncloud/core/pull/36384[#36384] +* When creating a public link on a received shared resource (reshare), users can now send the public link via mail using the web interface if the feature is enabled https://github.com/owncloud/core/issues/36386[#36386] +* `occ system:cron` now only shows output when errors occur or when the `--progress` option is added https://github.com/owncloud/core/issues/36298[#36298] +* `occ files:transfer-ownership` does not collect shares outside of the given path anymore preventing errors https://github.com/owncloud/core/pull/36222[#36222] +* The `accounts.enable_medial_search` config.php setting now also respects federated user search https://github.com/owncloud/core/pull/36225[#36225] +* When using multi-bucket object storage, versioning information is now stored on the object storage instead of the database https://github.com/owncloud/core/pull/36329[#36329] +* When using the `share_folder` config.php option, the defined folder and its parents can't be shared anymore https://github.com/owncloud/core/issues/36241[#36241] +* Files/folders can again be shared when a user and a group have the same name https://github.com/owncloud/core/issues/35488[#35488] +* `occ files_external:list` can now list mount options by adding `--mount-options` https://github.com/owncloud/core/pull/36420[#36420] + +Apart from this patch release, please consider the ownCloud Server 10.3.0 release notes, below. + +== Changes in 10.3.1 + +ownCloud Server 10.3.1 is a bug fix and maintenance follow-up release. +You can read {owncloud-server-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. +It is recommended to schedule an upgrade to this version soon. + +Apart from this patch release, please consider the ownCloud Server 10.3.0 release notes, below. + +== Changes in 10.3.0 + +Dear ownCloud administrator, please find, below, the changes and known issues in ownCloud Server 10.3 that need your attention. +You can also read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +* For improved compliance with the OpenCloudMesh protocol specification (Federation) a https://github.com/owncloud/core/pull/35122[migration step] will convert the fields of the `remoteId` column of the `federated_reshares` and `share_external` tables from `int` to `string`. + This migration might increase the upgrade duration depending on the number of federated shares. +* A https://github.com/owncloud/core/pull/35721[repair step] has been added that drops the deprecated `contacts_cards_properties` table. + This migration is not expected to increase the upgrade duration significantly. +* A housekeeping https://github.com/owncloud/core/pull/36084[repair step] for the `oc_properties` table removes existing entries which have `fileid` with value `null` and restrict the further creation of such. + This repair step is not expected to increase the upgrade duration significantly. + +=== Official PHP 7.3 support + +ownCloud Server 10.3 officially supports PHP 7.3. +The Server Core and all apps maintained by ownCloud have received a full QA cycle and are proven to work reliably with PHP 7.3. +If you are still using version 5.6, you must upgrade PHP before upgrading ownCloud Server xref:php-5-6-deprecation[as it's not supported anymore since ownCloud Server 10.2]. +If you are still running PHP 7.0 or 7.1, please plan an upgrade soon as these versions {php-supported-versions-url}[are or will soon be unsupported], respectively. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#officially-supported-environments[system requirements in the ownCloud Documentation] for more information. + +=== PHP 7.0 deprecation note + +As announced with ownCloud Server xref:php-5-6-deprecation-2[10.0.8] and xref:php-5-6-deprecation[10.2.0], support for PHP 7.0 is discontinued. +The next minor version of ownCloud Server (around the end of 2019) **no longer supports PHP 7.0**. +If you are still running on PHP 7.0, please make sure to plan an upgrade to PHP >= 7.2 to stay compatible. + +=== Changes to background job execution + +For code cleanup reasons, the execution of background jobs (e.g., for public link expiration, trash bin emptying, cleanup of old file versions) has been changed. + +**The following changes require manual interaction in your installation:** + +* If you're using xref:{latest-server-version}@server:admin_manual:configuration/server/background_jobs_configuration.adoc#cron[System cron] to trigger background job execution, there is a new `occ` command (`occ system:cron`) which executes the background jobs. + To make use of it, you have to change the entry in `crontab`. + Instead of executing `cron.php` (e.g., `/usr/bin/php -f /path/to/your/owncloud/cron.php`), cron should use `occ system:cron` (e.g., `{occ-command-example-prefix} system:cron`). + As a fallback, `cron.php` will continue to work with Server 10.3 but will be removed in a later version. +* If you're using xref:{latest-server-version}@server:admin_manual:configuration/server/background_jobs_configuration.adoc#webcron[Webcron] to trigger background job execution you now have to call the new route `../cron` instead of `../cron.php`. + As a fallback, `../cron.php` will continue to work with Server 10.3 but will be removed in a later version. + +TIP: See the xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc[occ documentation] for more information. + +IMPORTANT: In a later version of ownCloud Server, `cron.php` will be removed. +Please apply the changes to ensure that background jobs continue to work. + +TIP: If your ownCloud deployment is based on the official Docker images or the Univention appliance, these changes have already been applied for you. + +=== Media Viewer replaces Gallery and Video Player + +The {oc-marketplace-url}/apps/files_mediaviewer[Media Viewer] app has recently been released. +The Media Viewer is the next generation image and video file viewer for ownCloud. +It provides a foundation based on new technologies and officially supersedes the former `gallery` and `files_videoplayer` apps. +ownCloud Server 10.3 does not bundle `gallery` and `files_videoplayer` anymore. +Instead, it bundles `files_mediaviewer`. +With this change, support and maintenance for `gallery` and `files_videoplayer` are discontinued. +More details on the Media Viewer can be found in the https://owncloud.com/news/good-bye-gallery-say-hi-to-the-new-media-viewer/[release blog post]. + +* For a clean transition to Media Viewer, it is necessary to **disable both deprecated apps before the upgrade** using either the admin "Apps" panel in the web interface or via `occ` (e.g., `occ app:disable gallery` followed by `occ app:disable files_videoplayer`). +* After the upgrade, enable the Media Viewer app via the admin panel or `occ app:enable files_mediaviewer`. +* It is not recommended to continue with the deprecated apps. + However, if you want to do so, you can copy over the `files_videoplayer` directory from the `apps/` folder of the previous ownCloud Server directory and obtain `gallery` from the {oc-marketplace-url}/apps/gallery[ownCloud Marketplace]. + +TIP: Please do not enable `gallery`/`files_videoplayer` and `files_mediaviewer` simultaneously, as these apps are mutually exclusive. + +For more information on the Media Viewer app, visit the xref:{latest-server-version}@server:admin_manual:installation/apps/mediaviewer/index.adoc[ownCloud Documentation]. + +=== OAuth2 and session handling improvements + +Server 10.3 comes with improvements for session handling with Redis. +These are designed to cope with issues encountered around duplicate session tokens, which make the ownCloud Clients lose their OAuth2 authorization from time to time, and force users to re-authenticate. + +The session handling in ownCloud 10.3.0 has been generally improved, making user and client sessions more stable. +If Redis is used for session handling, it is necessary to enable Session Locking to ensure that the mentioned issues no longer occur. + +TIP: You can find out if Redis session handling is configured in your web server if you generate an ownCloud Configreport in the web interface. You will find the value `session.save_handler` set to `redis`. + +* It is recommended to use Redis Session Locking if Redis is used for session handling (minimum required version for `php-redis` is `4.1.0`) +* Enable Redis Session Locking by setting `redis.session.locking_enabled = 1` in `php.ini` + +TIP: If Redis is just used as a memory cache or not in use at all, you do not have to apply changes. + +TIP: Please note that Redis Session Locking is not supported in clustered Redis environments. + +TIP: If your ownCloud deployment is based on the official Docker images or the Univention appliance, you do not have to apply changes as Redis is not used for session handling (unless you configured it differently using ENV variables). + +=== Restructured user/group sharing autocompletion + +To cope for long user names or additional user information and to provide a better overview for users, the user/group sharing autocompletion dropdown has been restructured. +The available information is now distributed vertically to improve space usage and user experience. +Screenshots are available in the https://github.com/owncloud/core/pull/35397[pull request]. +Other ownCloud clients will align with this behavior with the next releases. + +=== SWIFT object storage as primary & secondary storage removed + +Following the xref:swift-objectstore-deprecation[deprecation announcement] with ownCloud Server 10.0.9, support for primary and secondary storage via the OpenStack SWIFT protocol has been removed. +Please get in contact with ownCloud Support if you're still using OpenStack SWIFT and want to upgrade. + +=== S3 object storage as secondary storage is now a separate app + +The extension to integrate S3 object storages as secondary storages (`files_external_s3`) has been updated, unbundled from ownCloud Server (was previously part of `files_external`) and released to the {oc-marketplace-url}/apps/files_external_s3[ownCloud Marketplace]. +If you're using S3 external storage mounts, you have to conduct some steps to ensure continuous operation after upgrading to Server 10.3: + +* After the upgrade to Server 10.3 has finished successfully, keep the maintenance mode activated and install/enable `files_external_s3` (either manually or via the Market app) as the app is not bundled with ownCloud Server anymore. +* If users were allowed to configure personal mount points before the upgrade, switch from maintenance mode into single user mode (`occ maintenance:singleuser --on`) and enable the option again by ticking the respective checkbox (_Amazon S3_) below "_Allow users to mount external storage_" (in Admin settings => Storage). +* Existing storage mount points will remain and do not have to be touched. +* Make sure that everything works and disable maintenance/single-user mode to put the installation back into normal operations (`occ maintance:mode --off` / `occ maintenance:singleuser --off`). + +=== New HTTP APIs + +ownCloud Server is being prepared for https://owncloud.com/news/owncloud-phoenix-rebirth-of-the-owncloud-user-interface/[Phoenix], the upcoming web frontend for ownCloud. +As Phoenix is separated from the backend and communicates only via HTTP APIs, it is necessary to complete the API coverage. + +The following new HTTP APIs have been added with Server 10.3: + +* xref:next@server:developer_manual:webdav_api/trashbin.adoc[WebDAV Trash bin API]. +* xref:next@server:developer_manual:core/apis/ocs-notify-public-link-by-email.adoc[OCS API for public link share email notifications] +* xref:next@server:developer_manual:webdav_api/public_files.adoc[WebDAV endpoint for public links]. + +All new endpoints are currently in tech preview state and are mainly used for Phoenix development. +For this reason, they are disabled by default and have to be explicitly enabled using the new config.php option: `'dav.enable.tech_preview' => true,`. + +=== Other notable changes + +* The `previews_path` config option has been added to allow customization of the thumbnail storage path (by default those reside in the user storage). https://github.com/owncloud/core/pull/35131[#35131] +* An Activity entry is now shown when a share receiver unshares a share. https://github.com/owncloud/core/pull/35193[#35193] +* The WebUI experience on mobile devices has been improved. https://github.com/owncloud/core/pull/35919[#35919] https://github.com/owncloud/core/pull/35813[#35813] https://github.com/owncloud/core/pull/35347[#35347] https://github.com/owncloud/core/pull/34803[#34803] +* The config.php options `proxy` and `proxyuserpwd` will now be respected to enable federation when an instance needs to go through an authenticated proxy to reach a federated instance. See `config.sample.php` and the xref:{latest-server-version}@server:admin_manual:configuration/files/federated_cloud_sharing_configuration.adoc#working-with-proxies[Federated Cloud Sharing Configuration documentation] for more information. +* The `occ files:scan` command is now case-insensitive for the userid. https://github.com/owncloud/core/pull/35324[#35324] +* A new `config.php` option (`dav.enable.tech_preview`) has been added to disable tech preview APIs by default. https://github.com/owncloud/core/issues/36124[#36124] +* [PHOENIX] Support for redirecting links to ownCloud Phoenix frontend has been added by introducing a new `config.php` option which stores the address where Phoenix is reachable (e.g., `'phoenix.baseUrl' => 'http://phoenix.example.tld:port'`). https://github.com/owncloud/core/pull/35819[#35819] +* The performance when loading groups of users has been improved. https://github.com/owncloud/core/pull/35822[#35822] +* Memory handling for the trashbin expiry background job has been improved. https://github.com/owncloud/core/pull/35708[#35708] + +=== Solved known issues + +* A new occ command, `encryption:fix-encrypted-version`, has been introduced to address issues related to encrypted files no longer being accessible. + This originated from a security measure to avoid that encrypted files with the same content look identical. + In some cases, users get a `Bad Signature` error when trying to access files. + The new command corrects this behavior, making files accessible again. + The command only needs to be run if users report the mentioned error. + https://github.com/owncloud/encryption/pull/115[#115] +* If an instance uses the `share_folder` config.php option to gather incoming user shares in a specific folder, this folder cannot be deleted by users anymore. + https://github.com/owncloud/core/pull/35998[#35998] +* The `share_folder` `config.php` option now also respects federated shares. + https://github.com/owncloud/core/pull/35396[#35396] +* The `user.min_search_length` config.php option now also respects federated users. + https://github.com/owncloud/core/pull/35977[#35977] +* Issues with database conversions using the `db:convert-type` occ command (e.g., SQLite to MySQL) have been fixed. + This is still in an experimental state and should be tested thoroughly. + Please provide feedback if you encounter issues. + https://github.com/owncloud/core/pull/35390[#35390] +* File integrity checking has been improved to prevent issues: If a checksum mismatch occurs after uploading a file, the uploaded file and its checksum is deleted to prepare for a clean re-upload. + https://github.com/owncloud/core/pull/35294[#35294] +* User/group sharing permission handling +** When a share recipient shared a resource with a group the resource owner was a member of (reshare), the resource owner was unable to increase the permissions of the initial share. This has now been fixed. https://github.com/owncloud/core/pull/35884[#35884] +** When a user shared a resource with a group, share recipients (members of the group) were able to remove the share altogether (instead of just unsharing from themselves). This has been fixed. https://github.com/owncloud/core/pull/36120[#36120] +* External storages now return `StorageNotAvailable` correctly on temporary network failures to prevent associated issues (e.g., Desktop clients will not delete local folders anymore when the storage is temporarily not available). + https://github.com/owncloud/core/pull/35707[#35707] +* External storage: Multiple Google Drive external storages can be added again. https://github.com/owncloud/core/pull/34987[#34987] +* The input fields in user administration are not captured by password manager autocompletion anymore. https://github.com/owncloud/core/pull/35931[#35931] +* Storage encryption with a master key in an HSM: Recreating a master key works again. https://github.com/owncloud/encryption/pull/128[#128] + +=== For developers + +* Tech preview for WebDAV Trash bin API (disabled by default). https://github.com/owncloud/core/pull/35716[#35716] https://github.com/owncloud/core/pull/35879[#35879] +* Tech preview for OCS API for public link share email notifications (disabled by default). https://github.com/owncloud/core/pull/36063[#36063] +* Tech preview DAV endpoint for public shares (disabled by default). https://github.com/owncloud/core/pull/35932[#35932] +* Two-factor providers may now display custom challenge messages. https://github.com/owncloud/core/issues/34848[#34848] +* The theming capabilities have been improved by allowing HTML for `Name` and `LogoClaim`. + Please check https://github.com/owncloud/theme-example/pull/7/files[the changes to owncloud/theme-example] if you are interested in making use of this in your theme. https://github.com/owncloud/core/pull/35273[#35273] +* A new Roles API has been added to allow clients to query the server for available permissions/roles for user/group sharing and public links. + In future client releases, this endpoint will be used to dynamically display roles/permissions depending on the server's capabilities. You can find out more about it in xref:next@server:developer_manual:core/apis/roles-api.adoc[the Roles API documentation]. +* A new, improved version of the "_Advanced Sharing Permissions_" JavaScript API (v2) has been added to allow ownCloud apps to register additional permissions/restrictions in user/group sharing. + Version 1 of the API is still available in parallel. https://github.com/owncloud/core/pull/35836[#35863] + +[#known-issues-10-3] +=== Known issues + +NOTE: This section will be updated if further issues become known. + +* *WebDAV Locks:* When a file in a folder is locked, exclusively locking the parent folder currently still works ("conflicting lock"; divergent from https://datatracker.ietf.org/doc/html/rfc4918#section-7.4[RFC 4918]) + +== Changes in 10.2.1 + +ownCloud Server 10.2.1 is a bug fix and maintenance release taking care of several bugs and known issues. +Please find, below, the changes in ownCloud Server 10.2.1 that need your attention. +You can also read {owncloud-server-changelog-url}[the full ownCloud Server changelog] for further details on what has changed. +It is recommended to schedule an upgrade to this version soon, especially if you're running 10.2.0 already. + +TIP: No occ upgrade is required when upgrading from 10.2.0. + +=== Improved Performance For Storage Encryption With Master Key + +ownCloud Server offers two ways for key management with storage encryption. +Either a central master key pair or individual user key pairs are used to encrypt/decrypt data. +Previously both modes used the same mechanisms which resulted in potentially significant overhead when master key encryption was used as user key encryption relies on so-called `share keys` which are necessary to allow share recipients to decrypt shared files. + +With master key encryption, `share keys` are redundant as you have one central key that can be used to decrypt all files. +Version 10.2.1 corrects this behavior by dropping `share keys` for master key encryption, thereby increasing the performance dramatically, especially when sharing folders with many files as said keys do not have to be generated anymore for each file. + +=== Solved Issues + +* **Fixed reshare permission issue** + +An issue in the Sharing API allowed users to increase sharing permissions beyond their own permissions in a reshare scenario: When user A shares a folder "_Project_" with user B, granting only read and share permission, then the Sharing API allowed user B to reshare a subfolder of "_Project_" with user C granting full permissions or to create a public link on the shared folder, respectively. +This undesired behavior is fixed with 10.2.1. +* **Fixed issue with Sharing API and enforced public link expiration dates** + +An issue in the Sharing API caused the ownCloud clients to prevent users from creating public links when the option "Enforce expiration date" for public links is in use. This is now solved. +* **Fixed known issue with user avatar paths** + +Version 10.2.0 xref:server_release_notes.adoc#known-issues-10-2[accidentally changed the location of user avatars] making them unavailable and storing uploaded avatar images in the wrong location. +10.2.1 restores the earlier behavior and provides a repair step to move back the avatar images uploaded with 10.2.0 to the right location. +As it is not necessary nor possible to run `occ upgrade` when upgrading from 10.2.0 to this patch release, if you are already running 10.2.0 then after installing 10.2.1 **you need to run `occ maintenance:repair -s 'OC\Repair\MoveAvatarIntoSubFolder'` manually to trigger the repair step**. +* **Fixed xref:known-issues-10-2[known issue] with "Password changed" HTML emails rendered in plain text** +* **Fixed use of invalid token on password reset** + +Password reset links sent to a user were invalid, if the user attempted to login using their e-mail address and an invalid password prior to filling out and submitting the Reset Password form. +* **Fixed issue when removing a user from a group** + +Removing a user from a group using the user management UI resulted in an error that required the page to be refreshed to show the changes. This has been corrected. +* **Added -y option to `occ encryption:encrypt-all` command** + +The occ command `encryption:encrypt-all` now offers a `-y` option that can be used to automatically answer potential questions with "yes" which is particularly important for automated deployments with Ansible or similar tools. +* **Fixed an issue with loading JS files when multiple apps folders are in use** + +Previously ownCloud would have taken the files from the `apps/` folder even though there might be newer versions in e.g. `apps-external`. This has been changed so that ownCloud will always take the files from the most recent app version. + +TIP: Apart from this patch release, please consider xref:changes-in-10-2-0[the ownCloud Server 10.2.0 release notes]. + +== Changes in 10.2.0 + +Dear ownCloud administrator, please find, below, the changes and known issues in ownCloud Server 10.2 that need your attention. +You can also read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] for further details on what has changed. + +=== Migrations + +Please note that this minor release contains database migrations which impact the upgrade duration. +Specifically: + +* The `oc_share` table has a new column. The time the upgrade takes for this change depends on the number of shares in your ownCloud installation. +* The `oc_authtoken` table's login name column size has been increased. The time the upgrade takes for this change depends on the number of recently logged in users, and the number of app passwords that have been created. + +=== PHP 5.6 Deprecation + +Following up the xref:php-5-6-deprecation[PHP 5.6/7.0 deprecation notice in the ownCloud Server 10.0.8 releases] ownCloud Server 10.2 *does not support PHP 5.6* and some apps no longer support older PHP versions. +Additionally, PHP 7.3 support will be available in an upcoming version. + +If you're still running PHP 5.6, **you must upgrade to PHP 7 before upgrading to ownCloud Server 10.2**. +Please be aware that apps that do not support outdated PHP versions will not upgrade. + +TIP: See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#officially-supported-environments[system requirements in the ownCloud documentation]. + +To allow for additional upgrade time, version 10.2 still supports PHP 7.0, because some of the major Linux distributions continue to support it. +However, support for PHP 7.0 will be discontinued in an upcoming version of ownCloud 10, to enhance both security and performance. +To prepare for this change, we strongly encourage you to begin planning an upgrade as soon as possible. + +=== Advanced Sharing Permissions + +The new server version https://github.com/owncloud/core/issues/34951[introduces the means] for extensions to implement additional, advanced permissions for user and group sharing. This feature increases sharing flexibility and opens the doors for extension developers to introduce new functionality based on sharing permissions. + +Especially, considering collaborative editing solutions, this addition provides the foundation for mode-based document sharing, such as "view-only", "comments-only" or "enforce change tracking". In the future, such advanced permissions should significantly improve the security as well as the usability of review processes, working on Office documents collaboratively, or exchanging information securely. + +Based on the new capabilities a set of features has been developed together with Collabora Online, called _Secure View_. Secure View is designed to enable information distribution processes for sensitive data, meaning that information can be provided securely yet can — *under no circumstances* — leave the platform. + +Practically, it enables users to share documents (such as docx, xlsx, pptx, and PDF files) in such a way that the recipient can't edit, download, copy and paste, nor print them. +Additional protection for screenshots and photos is provided by watermarks which display user information. +What's more, users can decide to allow printing and exporting of documents protected by watermarks as well. + +=== More Granular Permissions for Public Links on Folders + +With ownCloud Server 10.2, the former "Download / View / Upload" permission has been renamed to "Download / View / Edit", as this better reflects its behavior (full permissions). +Additionally, a new permission ("Download / View / Upload") has been introduced which allows recipients to view, download, and upload contents but not to make any changes to existing content (e.g., rename, move, delete, update). Another way of looking at it is as a public file drop folder for distributing and gathering information with a single link, yet which prevents recipients from altering the existing content. + +=== Storage Encryption with Master Key in HSM + +With version 10.2, ownCloud Server officially supports storage encryption with master keys stored in hardware security modules (HSM). +In contrast to regular master key-based storage encryption, which stores the keys on the storage, storage encryption with keys in an HSM allows administrators to completely prevent anyone with access to the storage from accessing the data stored in ownCloud. + +As a result, the bundled `encryption` app has been updated to support HSM, and a standalone service (`hsmdaemon`) that connects ownCloud Server and the HSM device is now available within ownCloud Enterprise Edition. +To get started with storage encryption and HSM, https://owncloud.com/contact/[please get in touch with us]. +For more information around the different encryption types ownCloud offers, consider https://oc.owncloud.com/rs/038-KRL-592/images/Whitepaper_Data_Protection_and_Data_Secrecy_in_ownCloud_EN.pdf[this whitepaper]. + +=== Background Job for Change Detection of Nested Federated Shares + +When using federation to share data across ownCloud instances, deeply nested folders (e.g., folders with many sub-items) https://github.com/owncloud/docs/issues/856[are not discovered automatically for performance reasons]. +This leads to several issues such as the ownCloud Desktop Client not being able to synchronize newly added or changed content unless the user navigates down the hierarchy using the web interface, which manually triggers content discovery. + +Also, the size of such folders can't be calculated, showing "Pending" instead, until the discovery is manually triggered. +To help alleviate this problem, a new `occ` command has been introduced. +It can be executed regularly as a background job to discover federated shares (`occ incoming-shares:poll`). +This is aimed at handling this issue while providing the means for administrators to control resource usage. + +When using federation, it is recommended to execute `occ incoming-shares:poll` regularly xref:{latest-server-version}@server:admin_manual:configuration/server/background_jobs_configuration.adoc#cron-jobs[using Cron jobs]. +The time interval to choose between executions is a trade-off between the availability of changes in federated shares and resource consumption, which naturally depends a lot on the number of federated shares and the frequency of changes within those shares. + +Executing the command once per 12 hours should be safe enough for any instance. +However, the interval could be reduced to once per 2 hours for instances with a low number of federated shares. + +Depending on the desired resource consumption this value should be lowered or increased based on individual expectations. +To find a value that fits a specific setup, it is recommended to execute the command once, measure the execution time and set the interval so that the background job can finish before the next execution is triggered. + +=== New Option to Automatically Accept Federated Shares from Trusted Servers + +ownCloud Server 10.0.9 xref:server_release_notes.adoc#pending-shares[introduced the *Pending Shares* feature] which allows users to decide whether or not they want to accept local user shares instead of just making the decision for them, giving more control thereby. +In contrast, Federated shares always had to be accepted as they can originate from external, potentially untrusted, sources. + +ownCloud Server 10.2 introduces a global option to automatically accept xref:{latest-server-version}@server:admin_manual:configuration/files/federated_cloud_sharing_configuration.adoc#configuration[federated shares originating from trusted servers]. +This option enables providers of several instances (e.g., an external and an internal instance) to facilitate or automate data exchange between them, not requiring users to accept shares. + +NOTE: For security reasons, federated shares from untrusted servers will never be accepted automatically. + +=== New Privacy and Self-Service Options for Users + +In the spirit of self-service, ownCloud Server 10.2 introduces new options for users that previously were reserved for global admin settings: + +* As discussed in the section above, there are global options for *Pending Shares* regarding federated as well as regular user/group shares. + To give users more control over the sharing behavior in the scope of their account, user-based override options were introduced that allow users to enable/disable *Pending Shares* for themselves if the instance's global setting is disabled (when "_Automatically accept new incoming local user shares_" is enabled). + The two new checkboxes can be found in the 'Sharing' settings panel of personal settings. +* In addition to the option "_Allow username autocompletion in share dialog_" in the global 'Sharing' settings, users can now autonomously decide to opt-out of autocompletion to protect their privacy. + When enabled, other users need to enter a user's full identifier to be able to share with them. + This option is not a general override but an opt-out, meaning it can only be used when "_Allow username autocompletion in share dialog_" is enabled. + The new checkbox is available in the 'Sharing' settings panel of personal settings. + +=== Other Notable Changes + +* *Added email footer with motto in email for changing passwords.* + If you use customized email templates, it is necessary to adapt those to incorporate the footer. + Please compare the original templates with your custom templates (`core/templates/lostpassword/notify.php` and `core/templates/lostpassword/altnotify.php`). +* *Repair steps can now be executed individually in case one would need to be run again.* + Repair steps are employed to clean up and resolve issues from former versions. + Usually, they run during upgrades, but some scenarios make it necessary to rerun them. + To save time when only specific steps need to be taken, administrators can now individually execute them using `occ maintenance:repair --list` and `occ maintenance:repair --single ""`. +* *Command for the first run wizard to reset for all users.* + In some cases, administrators customize the First Run Wizard in order to distribute information to users. + Using `occ firstrunwizard:reset-all` you can reset the popup so that it will appear for each user upon their next login. +* *Added checkboxes to hide quota and password in user management.* + The columns in user management have been made more flexible. + Using the bottom left cog wheel you can now show/hide the columns for _Quota_ and _Password_. +* *By default, the "apps-external" directory is included in config.php during installation.* + For new installations, there will be two apps directories so that the bundled apps are distinguishable from the apps that were installed or updated by the administrator. + Existing installations will not change but, generally, xref:{latest-server-version}@server:admin_manual:installation/apps_management_installation.adoc#using-custom-app-directories[this separation is recommended] in all scenarios, as it makes upgrading easier and less error-prone. +* *Update the `occ files:scan` `--group` and `--groups` options.* + The `occ files:scan` command is used to scan resources on the storage and make them available in ownCloud. + While previously it could only be used for all or single users and groups of users, you can now also execute it for groups where the group name contains a comma. +* *Allow administrators to enable/disable medial search for users and groups.* + Medial search is used to get search results when typing keys within a search term in autocomplete fields (e.g. when typing "_ter_" you'll find "Peter"). + Depending on the configuration of available search terms (e.g., attributes from LDAP), search results can deliver better results without medial search. + For these reasons medial search can now be enabled/disabled for user (`'accounts.enable_medial_search'`) and group (`'groups.enable_medial_search'`) search. + See https://github.com/owncloud/core/blob/stable10/config/config.sample.php#L285[config.sample.php] for more information. +* Added a new occ command, `background:queue:execute`, for running cron jobs manually. +* Added two new `occ background:queue` commands: `status` and `delete`. +** `status` lists the current background job queue status +** `delete` removes a single background job, identified by its id. + +=== Solved Known Issues + +* Fixed public link share default expiration behavior https://github.com/owncloud/core/issues/34971[#34971]. + Previously, when a default expiration date for public links had been set by an administrator (without enforcement option), the default value has been applied upon link creation even when a user removed it. + The only way to create a link without expiration date was to subsequently edit it and remove the expiration date. + This has been fixed to work as expected. +* Better support for international email addresses after Swiftmailer update https://github.com/owncloud/core/issues/34759[#34759] +* Improved speed of apps list settings page by caching integrity check results https://github.com/owncloud/core/issues/34584[#34584] +* Improved upgrade speed when migrating avatars from oC < 10 https://github.com/owncloud/core/issues/34592[#34592] +* Improved performance and memory usage of account sync service https://github.com/owncloud/core/issues/34546[#34546] +* Store quota overrides in the `oc_preferences` table https://github.com/owncloud/core/issues/34467[#34467]. In former versions, functionality has been introduced to preserve quota values either imported via LDAP attributes against manual changes by the administrator in ownCloud user management, or via the provisioning API. This functionality works again properly. If you sync accounts from LDAP and have a quota attribute specified in LDAP, each `user:sync` run will set the quota values to the ones from LDAP, no matter if they were changed manually. +* Images are again properly rotated now based on EXIF rotation, also affects gallery app https://github.com/owncloud/core/issues/34356[#34356] +* An exception is logged when a background job class is not found - https://github.com/owncloud/core/issues/34723[34723] + +[#known-issues-10-2] +=== Known Issues + +NOTE: This section will be updated if further issues become known. + +- Server 10.2 {server-10_2-avatar-change-url}[accidentally changes the location of user avatars] on the storage from `data/avatars/..` to `data/..`, making existing avatars unavailable and storing uploaded avatar images in the wrong location. The next release will correct the behavior. +- The HTML email that confirms a successful password change is rendered in plain text. Please apply this https://patch-diff.githubusercontent.com/raw/owncloud/core/pull/35260.patch[patch] to fix the issue. +- WebDAV Locks: When a file in a folder is locked, exclusively locking the parent folder currently still works ("conflicting lock"; divergent from https://datatracker.ietf.org/doc/html/rfc4918#section-7.4[RFC 4918]) + +=== For Developers + +- It is now possible for apps to specify extra permissions for shares https://github.com/owncloud/core/issues/34951[#34951] +- Add before-after share link auth events https://github.com/owncloud/core/issues/34399[#34399] +- Add events for user preference changes https://github.com/owncloud/core/issues/34820[#34820] +- Added CORS headers for many existing API calls, required for Phoenix https://github.com/owncloud/core/issues/34476[#34476] +- Remove classes that were deprecated since OC 8.0.0: OCP\Config, OCP\PERMISSION_XXX, OCP\Template https://github.com/owncloud/core/issues/34927[#34927] +- A capability has been added to the Capabilities API to allow clients to check whether the server supports the details parameter for private links, e.g., as a direct link to a resource's sharing or versions tab in the web interface https://github.com/owncloud/core/issues/35104[#35104] + +== Changes in 10.1.1 + +ownCloud Server 10.1.1 is a hotfix follow-up release that takes care of https://github.com/owncloud/core/issues/34851[an issue with loading updated apps]. Instead of updating the app versions to their new values in the database, the old version value is written causing the process to repeat with every request. + +This issue can cause high load on the database, especially in large installations. If you have already upgraded to 10.1.0, we strongly recommend upgrading to 10.1.1. You can expect minimal downtime for the upgrade to this patch release. + +Apart from this patch release, please consider the ownCloud Server 10.1.0 release notes. + +== Changes in 10.1.0 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.1 that need your attention. You can also read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] for further details on what has changed. + +=== Semantic Versioning + +Starting with this release, ownCloud Server and the app ecosystem will follow the principles of https://semver.org/[Semantic Versioning]. +This step was taken to benefit operators by clearly indicating the contents and upgrade procedures of new releases via version numbers. Practically, the versioning scheme will follow the "Major.Minor.Patch" (or "Breaking.Feature.Fix") format. +App developers need to re-release their apps to make them compatible with the new version. For details, please refer to https://owncloud.com/news/switching-owncloud-to-semantic-versioning/[this blog post]. + +=== Change Management for Server Updates + +`occ upgrade` pulls app updates from the ownCloud Marketplace to make sure that not only the Server itself but also the installed apps are kept up-to-date. In line with the new versioning principles `occ upgrade` as well as the {oc-marketplace-url}/apps/market[Market App] now make a difference between major and minor app updates. Practically, this means that during a minor Server upgrade only new minor app versions will be installed. This is to make sure that apps with breaking changes will not be automatically installed when upgrading the Server. The `--major` option for `occ upgrade` and `occ market:install` provides the means for administrators to force installing new major app versions. Additionally, the {oc-marketplace-url}/apps/market[Market App] now includes a version picker to enable administrators to choose which version of an app they want to install or upgrade to. + +=== MS Office Online Server Compatibility + +Version 10.1 delivers all the prerequisites to be compatible with the Microsoft Office Online Server Integration (WOPI) that is about to become available. This enables providers to integrate ownCloud Server with Microsoft's Office Online Server which brings users the benefits of working on Office documents in the browser as well as collaboratively with other users. The integration will work with MS Office Online Server (on-premise) out-of-the-box. We kindly ask you to get in touch with us if you want to make use of the Office 365 (cloud) version of Office Online. + +=== WebDAV Locks + +ownCloud Server 10.1 introduces WebDAV Locks that allow clients to lock and unlock resources to prevent other users from making changes. The feature has been implemented as a prerequisite for manual file locking and MS Office Online Server compatibility. In the current state, file locking is only available via API. Users can recognize locked files via the "lock" icon in the file list. Additionally a lock owner (the user who locked the file) can manually unlock them via the "Locks" tab in the right sidebar. The "Locks" tab will only appear for files that have active locks. + +=== Foreign Keys in Database + +Please note that foreign keys have been added with the :xref:webdav-locks[WebDAV Locks] feature. +This is the first time ownCloud implements foreign keys. + +==== How Does This Affect Each Database + +===== MySQL + +MySQL supports foreign keys. +They are enabled by default. + +===== MariaDB + +MariaDB supports foreign keys. +They are enabled by default. + +===== PostgreSQL + +PostgreSQL supports foreign keys. +They are enabled by default. + +===== SQLite + +Foreign keys are, by default, disabled in SQLite. +You must ensure that foreign keys are enabled in your SQLite installation. +Here is what https://sqlite.org/foreignkeys.html[the current documentation] says about enabling foreign key support: + +[quote,Enabling Foreign Key Support] +To enable foreign key support, the library must be compiled with neither `SQLITE_OMIT_FOREIGN_KEY` or `SQLITE_OMIT_TRIGGER` defined. +If `SQLITE_OMIT_TRIGGER` is defined but `SQLITE_OMIT_FOREIGN_KEY` is not, then SQLite behaves as it did prior to version 3.6.19 (2009-10-14) - foreign key definitions are parsed and may be queried using PRAGMA foreign_key_list, but foreign key constraints are not enforced. +The PRAGMA foreign_keys command is a no-op in this configuration. +If `SQLITE_OMIT_FOREIGN_KEY` is defined, then foreign key definitions cannot even be parsed (attempting to specify a foreign key definition is a syntax error). + +IMPORTANT: SQLite is not recommended for production deployments. + +===== Oracle + +Oracle supports foreign keys. +They are enabled by default. + +=== Federation: Compliance with proposed OpenCloudMesh 1.0 specification + +Federation enables instances of ownCloud and other supporting platforms to exchange information. It allows users to share data across installations building a worldwide collaboration network of decentralized nodes - each under the full control of it's provider. Together with the other vendors the underlying OpenCloudMesh API specification has been shifted to a new level to clean up the interface, improve its stability and to set the foundation for future feature improvements. ownCloud Server 10.1 is compliant with the new specification proposal. The introduction of the new specification does not involve changes in functionality for users. + +=== New Collaborative Tags Scope: Static Tags + +Version 10.1 comes with a new scope for Collaborative Tags called "Static Tags". In addition to the https://doc.owncloud.com/webui/next/classic_ui/files/webgui/tagging.html#filter-by-tag[other tag scopes], these tags are intended to be supplied by administrators and linked with policies in the {oc-marketplace-url}/apps/firewall[File Firewall], {oc-marketplace-url}/apps/files_classifier[Document Classification] or {oc-marketplace-url}/apps/workflow[Workflows], for example. Every user will be able to see these tags assigned to files but only users in specified groups have the permission to assign or unassign them. This makes it possible to equip certain users with the means to impose pre-defined policies upon files. To create such tags administrators need to use the {oc-marketplace-url}/apps/systemtags_management[Collaborative Tags Management] extension. + +=== Other notable changes + +- The user/group deletion in the users page now has a confirmation dialog to prevent unintentional user deletion +- The default public link share name has been changed to be "Public link" instead of formerly the file or folder's name +- Allow loading JSON files in setups with pretty URLs. Please check that the .htaccess file has updated automatically. If not, see https://github.com/owncloud/core/pull/32718/files for the required change. + + +=== Solved known issues + +- LDAP users can upload avatars again https://github.com/owncloud/core/issues/33369[#33369] +- Versions list performance improvements https://github.com/owncloud/core/issues/33291[#33291] +- Improved compatibility with third party WebDAV applications (fixed PROPFIND with depth infinity requests through Sabre update) https://github.com/owncloud/core/issues/28341[#28341] +- Fixed `occ encrypt-all` command to not attempt re-encrypting already encrypted files https://github.com/owncloud/core/issues/33206[#33206] + +=== Known issues + +- WebDAV Locks: When a file in a folder is locked, exclusively locking the parent folder currently still works ("conflicting lock"; divergent from https://datatracker.ietf.org/doc/html/rfc4918#section-7.4[RFC 4918]) + +=== For developers + +- Added "getBucket" method to HomeObjectStore to fix S3 issue https://github.com/owncloud/core/issues/33513[#33513] +- Public JS utility function for email validation https://github.com/owncloud/core/issues/33699[#33699] +- If only the patch level of an app's version changes no migrations will run when updating https://github.com/owncloud/core/issues/33218[#33218] +- Deprecated Sharing 1.0 PHP APIs which will be removed in ownCloud 11 https://github.com/owncloud/core/issues/33220[#33220] +- Add "uid" argument to Symfony login events for consistency https://github.com/owncloud/core/issues/33470[#33470] + +== Changes in 10.0.10 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.0.10 +that need your attention. You can also read +https://owncloud.com/changelog/server/[the full ownCloud Server changelog] +for further details on what has changed. + +=== Official PHP 7.2 Support + +After announcing the future deprecation of PHP 5.6 and 7.0 with the +xref:php-5-6-deprecation[10.0.8 release], +ownCloud Server now follows up by officially adding PHP 7.2 support. +The Server Core and all apps maintained by ownCloud have received a full QA cycle and are +proven to work reliably with PHP 7.2. ownCloud Server is also being prepared for PHP 7.3, +which is https://wiki.php.net/todo/php73[scheduled to become available by the end of 2018]. + +If you are still using versions 5.6 or 7.0, please plan an upgrade to 7.2 soon. +See the xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#officially-supported-environments[system requirements in the ownCloud Documentation]. + +NOTE: With PHP 7.2 some extensions have changed. If you have not yet upgraded, you need to install `php-openssl`. +See https://github.com/owncloud/core/issues/30337[#30337] for more information. + +=== New Local User Creation Flow + +In previous versions, administrators created local users by entering a username and a password. +In many cases this is undesirable, as administrators set the password for new users and need to provide it via a +second communication channel. For this reason the local user creation flow has been changed to expect a username +and an email address, which will be used to send an activation link to new users. + +This way user creation is easier and more secure as new users are informed automatically and can choose a password +in self-service. For cases where administrators want to set the initial password, it's possible to deviate from +the default by setting the option "*Set a password for new users*" on the bottom left settings cog. +The former option "*Send email to new users*" has been removed, as this change made it obsolete. + +=== HTTP API for Search + +ownCloud Server 10.0.10 introduces an HTTP API for search functionality. +It enables the use of search terms to query the server and the delivery of search results via HTTP (WebDAV). +In upcoming releases, ownCloud clients will make use of it to search content on the server, without the need +to have them available locally. + +In combination with the Full-Text Search integration, which is soon to be released as an ownCloud Server extension +(Community Edition), HTTP API for Search will boost usability and productivity for users. +For example, they will be able to search through all the content which they store in their account and quickly +find files on their smartphones. + +=== Native Brute-Force Protection + +Together with the new server version, another security-enhancing extension is available, +{oc-marketplace-url}/apps/brute_force_protection[Brute Force Protection]. +This extension is tasked with preventing attackers from guessing user passwords (brute-force attack) +by delaying subsequent failed login attempts for a user account from the same IP address. + +While in the past similar functionality was only achievable via third party applications, such as *Fail2Ban*, +this extension provides the functionality natively, configurable by ownCloud administrators on the Security +settings section. + +The new extension supersedes the former {oc-marketplace-url}/apps/security[Security] +extension together with the ne {oc-marketplace-url}/apps/password_policy[Password Policy] +extension, which xref:server_release_notes.adoc#password-history-and-expiration[has been released +with ownCloud Server 10.0.9]. This community-contributed extension is well-tested, but out of ownCloud's +general support scope. However, individual support can be obtained on request. + +=== Improved Reliability for Uploads Via Web Interface on Unreliable Connections + +The reliability of the file upload feature in the ownCloud web interface has been improved. +When uploading larger amounts of data on unreliable connections (e.g., on the train or with mobile data) you have to deal with interruptions and timeouts, which in the past required users to restart stalled uploads from the beginning in the worst case. + +On top of ownCloud's chunking mechanism, which splits large files into pieces and uploads them separately, there's new logic that takes care of retrying stalled chunks. +With this, uploads can now continue from the point they froze when a connection becomes available again. + +=== New Option to Prevent Sharing With Specific System Groups + +System groups in ownCloud can have many purposes. They can be used for sharing with many users at once, for feature and access restrictions, or for storage mounts to specific users - just to name a few. +In some cases, especially in larger deployments, it's undesirable that groups which are used for other purposes are also available for sharing. +To prevent users from sharing with such groups, administrators can now blacklist the respective system groups using the option "*Exclude groups from receiving shares*" in the administration settings "*Sharing*" section. + +=== New Options for the occ Command to Reset User Passwords + +The occ command `user:resetpassword` allows system administrators to reset or change user passwords. +It has been extended to provide the additional options `--send-email` and `--output-link`, which can be used to send a password reset link to the user via mail and output the password reset link to the command line, respectively. +This change is in line with the new local user creation flow, which is explained above, and can also be used for further processing with scripts. +See the ownCloud Documentation and the `--help` option for more information. + +=== New Default Minimum Supported Desktop Client Version + +To ensure clean and reliable operation of the ownCloud platform it is important to stay up-to-date with the latest releases for the server as well as the clients. +To take care of compatibility between the server and desktop clients, the minimum version the server will accept connections from has been raised to version `2.3.3`. + +While it's recommended to keep up with later versions, this is the new default value. +It can be changed by altering the config.php parameter `'minimum.supported.desktop.version' => '2.3.3',` if absolutely necessary. + +=== New Option to Configure the Language of Mail Notifications for Public Links + +Usually ownCloud renders mail notifications in the language of the recipients, when they are known. +For the xref:server_release_notes.adoc#personal-note-for-public-link-mail-notification[recently improved feature] +to send public links with a personal note directly from the user interface, the recipients' language can't be +determined automatically, it just knows the recipients' mail addresses. + +ownCloud therefore uses the language of the user who sent the notification, which can have the drawback that recipients can't understand them. This is still the default behavior but administrators can now change it via a dropdown menu *"Language used for public mail notifications for shared files"* in the settings *"Sharing"* section. + +=== Theming Changes + +Mail templates for share notifications do not strip line breaks from the personal note anymore. +This affects the HTML (`core/templates/mail.php`) and plain text (`core/templates/altmail.php`) mail templates. +The default templates shipped with ownCloud Server 10.0.10 have been modified to accommodate these changes. +If your custom theme overrides these templates, you have to follow up with the changes: + +- Replace the following line of the HTML template +`p($l->t("Personal note from the sender: %s.", [$_['personal_note']]));` +with +`print_unescaped($l->t("Personal note from the sender:
%s.", $_['personal_note']));`. +- Replace the following line of the plain text template +`print_unescaped($l->t("Personal note from the sender: %s.", [$_['personal_note']]));` +with +`print_unescaped($l->t("Personal note from the sender: \n %s.", $_['personal_note']));`. + +=== Other Notable Changes + +- Allow automated SSL certificate verifications for CAs other than Let's Encrypt. +See https://github.com/owncloud/core/issues/31858[#31858] for further details. +- "/" and "%" are now valid characters in group names. +See https://github.com/owncloud/core/issues/31109[#31109] for further details. +- New audit events for login action with token or Apache. +See https://github.com/owncloud/core/issues/31985[#31985] for further details. +- Log entries for exceeding user quota: Loglevel changed to "debug" (Insufficient storage exception is now logged with "debug" log level). +- The app for embedding external sites to the app launcher (*"external"*) now supports icons that originate from theme apps. +- The occ command to deactivate storage encryption (`occ encryption:decrypt-all`) has received stability +improvements and can now read the required recovery key from an environment variable which is very helpful +for a scripted per-user decryption process. + +=== Solved Known Issues + +ownCloud Server 10.0.10 takes care of xref:server_release_notes.adoc#changes-in-10-0-9[10.0.9 known issues] +and provides remedies for several others: + +- The Password Policy extension now works with two- or multi-factor authentication extensions. +See https://github.com/owncloud/core/issues/32058[#32058] for further details. +- The `Versions` feature now works also when the `Comments` app is disabled. +See https://github.com/owncloud/core/issues/32208[#32208] for further details. +- E-mail addresses with subdomains with hyphens are now also accepted for public link emails. +See https://github.com/owncloud/core/issues/32281[#32281] for further details. +- Allow null in "Origin" header for third party clients that send it with WebDAV. +See https://github.com/owncloud/core/issues/32189[#32189] for further details. +- Properly log failed message when token based authentication is enforced (Fail2Ban). +See https://github.com/owncloud/core/issues/31948[#31948] for further details. +- Deleting a user now also properly deletes their external storages and storage assignations. +See https://github.com/owncloud/core/issues/32069[#32069] for further details. +- Lockout issues with wrong passwords for Windows Network Drives are mitigated: Fixed mount config in front-end to only load once to avoid side effects. +See https://github.com/owncloud/core/issues/32095[#32095] for further details. +- Fixed update issue related to oc_jobs when automatically enabling market app to assist for update in OC 10. +See https://github.com/owncloud/core/pull/32573[#32573] for further details. +- Fixed missing migrations in files_sharing app and add indices to improve performance. +See https://github.com/owncloud/core/issues/32562[#32562] for further details. +- Fixed issue with spam filters when sending public link emails. +See https://github.com/owncloud/core/issues/32542[#32542] for further details. + +=== Known Issues + +Currently there are no known issues with ownCloud Server 10.0.10. +This section will be updated in the case that issues become known. + +=== For Developers + +- Search API for files using WebDAV REPORT and an underlying search provider. +See https://github.com/owncloud/core/issues/31946[#31946] +and https://github.com/owncloud/core/issues/32328[#32328] for further details. +- Add information whether user can share to capabilities API. +See https://github.com/owncloud/core/issues/31824[#31824] for further details. +- Hook `loadAdditionalScripts` now also available for public link page. +See https://github.com/owncloud/core/issues/31944[#31944] for further details. +- Added URL parameter to files app which opens a specific sidebar tab. +See https://github.com/owncloud/core/issues/32202[#32202] for further details. +- Allow slashes in generated resource routes in app framework. +See https://github.com/owncloud/core/issues/31939[#31939] for further details. +- The app for embedding external sites to the app launcher ("*external*") has been moved +to a https://github.com/owncloud/external[separate repository]. It is still bundled with +ownCloud Server releases and can be used normally. + +== Changes in 10.0.9 + +Dear ownCloud administrator, please find below the changes and known issues in ownCloud Server 10.0.9 that need your attention. +You can also read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] for further details on what has changed. + +=== New Features + +==== Pending Shares + +ownCloud Server 10.0.9 introduces new features to close usability gaps and to give users more control over incoming shares. +Previously, shared contents would appear, unannounced, in the receiving user’s file hierarchy, and clients would start synchronizing. + +Incoming shares can now have a pending state, offering the ability to accept or decline (as known from federated sharing). +We anticipate that this will provide a better user experience. + +In addition, the xref:server_release_notes.adoc#new-mail-notifications-feature[recently introduced notifications framework] +is being used to inform users via mail. + +The bell icon in the web interface and the ownCloud Desktop Client can additionally be used to take action. +To switch to the new behavior administrators need to disable the configuration option +`Automatically accept new incoming local user shares` in the _Sharing_ settings section. +By default the option will be enabled to preserve the known behavior. + +Mail notifications do not, currently, support asynchronous batch +processing. For this reason, ownCloud will send notification emails +directly when initiating shares between users. Due to this limitation, +sharing with large groups (> 50 users) can take some time and might +cause load peaks. When operating installations with large groups, it is, +therefore, not yet recommended to enable the feature. + +==== Overview of pending & rejected shares + +In addition to the "_Pending Shares_" feature, ownCloud Server now +provides the means to view "_accepted_", "_pending_" and +*"rejected*" incoming shares. Leveraging the "_Shared with you_" +filter in the left sidebar of the files view users can now list all +incoming shares, their respective states and have the ability to switch +between the states easily. + +This improvement not only empowers users to accept rejected shares +subsequently but also to restore shares that have been unshared before +without requiring the owner to share it again. + +==== Password history and expiration + +To prepare ownCloud Server for new capabilities in the authentication process, we have introduced an authentication middleware, +and a new major version of the {oc-marketplace-url}/apps/password_policy[Password Policy extension] is now available. + +===== The Authentication Middleware + +It: + +- Offers a defined way of inserting mandatory functionality between user authentication and user account access. For example, forcing users to accept legal agreements. +- Affords the ability to interact with the user during the login process, such as retrieving user details like their email address. + +[NOTE] +==== +The authentication middleware is currently focused on offering new features for the Password Policy extension. +==== + +===== The Password Policy Extension + +The {oc-marketplace-url}/apps/password_policy[Password Policy Extension] +has got a new major release and has been relicensed (OCL => GPLv2) to be available for community and standard +subscription users as well. It now supports password expiration and history policies for user accounts. + +[NOTE] +==== +These features don't apply to users imported from LDAP or other backends but only for local users created by administrators or the +{oc-marketplace-url}/apps/guests[Guests extension]. +==== + +Imposing password expiration and history policies enhances security for a number of reasons. +For example, by forcing users to choose a new password, they can be prevented from using one or more of their previous passwords. +In doing this, it encourages them to not use a previous password, which may be known to attackers. + +Two further examples are manually expiring passwords and configuring the number of days that have to pass since the last change before the password expires. +These help ensure that users change their passwords on a semi-regular basis, making them harder to crack. + +However, we encourage administrators to always consider the implication of their password policies, so that they strike an appropriate balance between security and usability. +For example, a high frequency of password changes, for instance, might increase security but could also decrease user satisfaction. + +To help ensure a good user experience it is possible to configure: + +- Email notifications. +- Internal notifications (they appear on the web interface and clients). +- The password history count. +- The days before reminder notification are sent. + +Users will always be informed when passwords have expired. + +[NOTE] +==== +Although the above two password practices +https://pages.nist.gov/800-63-3/sp800-63b.html[are discouraged by NIST], +ownCloud is now fully compliant with common password guidelines in enterprise scenarios. +==== + +[NOTE] +==== +When users employ tokens for client authentication, which can be configured on the user settings page ("App passwords"), those are not affected from password policies. +==== + +[NOTE] +==== +When imposing password expiration policies on an existing installation it is necessary to take some further actions. +Please consult `the ownCloud documentation`_ for guidance. +==== + +==== Technology preview for new S3 Objectstore implementation + +ownCloud Server 10.0.9 comes with the prerequisites to be ready for the new S3 Objectstore implementation +"_files_primary_s3_", which will massively improve performance, reliability and protocol-related capabilities. +The new extension is available as a technology preview via the +{oc-marketplace-url}[ownCloud Marketplace] and will supersede the current +{oc-marketplace-url}/apps/objectstore[Objectstore] extension. + +It has received extensive testing and is in very good shape. +However, there is no out-of-the-box migration from the current _Objectstore_ to _files_primary_s3_ as this will require individual guidance. + +Due to changes to the Versioning API, the +{oc-marketplace-url}/apps/ransomware_protection[ownCloud Ransomware Protection] +is not yet compatible with _files_primary_s3_. +For now the {oc-marketplace-url}/apps/objectstore[Objectstore] +extension will continue to work as usual. +Once the new implementation leaves the technology preview state and migrations have been taken care of, +the current implementation will be deprecated. + +==== SWIFT Objectstore Deprecation + +As the markets are moving in the direction of https://aws.amazon.com/documentation/s3/[the S3 protocol] to +communicate with object storages, ownCloud will follow this path with a +clear focus. To do this, it will be a necessity to deprecate object +storage via https://docs.openstack.org/swift/latest/[the OpenStack SWIFT protocol]. + +The extension will still be available as part of ownCloud Server, but it +will neither be maintained nor developed any further by ownCloud, and +support will be discontinued. Please make sure to move to the S3 +protocol to use object storage as primary storage with future ownCloud +Server versions. + +==== New options to display Imprint and Privacy Policy + +To enable GDPR and legal compliance in various jurisdictions for +ownCloud providers, it is now possible to specify links to Imprint and +Privacy Policy: + +* In the "_General_" Administration settings section +* Via the following OCC commands: +** `{occ-command-example-prefix} config:app:set core legal.imprint_url ` +** `{occ-command-example-prefix} config:app:set core legal.privacy_policy_url ` + +These links can be displayed on all pages of the ownCloud web interface +and in the footer of mail notifications. When using one of the default +themes provided by ownCloud, as well as the default mail templates, +configured links will be automatically included. + +For customized themes or mail templates, actions are required to include +the links. These are: + +Add the following at the end of each HTML template to add the footer: + +`inc('html.mail.footer', ['app' => 'core'])); ?>` + +Add the following at the end of each plain text template to add the footer: + +`inc('plain.mail.footer', ['app' => 'core'])); ?>` + +In a custom theme, change `getShortFooter` and `getLongFooter` in `defaults.php` +https://github.com/owncloud/theme-example/blob/master/defaults.php#L124[without links] to +https://github.com/owncloud/core/blob/master/lib/private/legacy/defaults.php#L256[include the links] + +=== Changed behavior of "Exclude groups from sharing" option + +The option "_Exclude groups from sharing_", in the administration +settings "_Sharing_" section, enables administrators to exclude +groups of users from the ability to initiate file shares. In previous +versions this restriction only applied to users who were members of +exactly these groups (membership of one or more non-excluded groups +bypassed the restriction). + +This behavior has been changed to be both more restrictive and to better +cover the expectations of administrators. With ownCloud Server 10.0.9, +it will apply to all users who are members of at least one of the +excluded groups. + +=== Changes to the sharing autocomplete mechanism + +In ownCloud Server 10.0.8, the value for +minimum characters to trigger the sharing autocomplete mechanism +has been made configurable and set to 4 by default. As this +security-enhancing change came at the expense of usability, and might +only be required in special scenarios, the default value has been +reverted to 2. + +For increased security requirements, the `config.php` option +`'user.search_min_length' => 2` can be adjusted. To further improve +usability, a hint has been added to inform users about the required +character count, to get suggestions. + +=== Improvements for _occ user:list_ + +To improve the usability of the `occ user:list` command, the output has +been made configurable by using the `-a` option, for including certain +attributes. This change has mainly been introduced to facilitate +automation tasks. Check the `--help` option for more information. + +=== Additional events for audit logging + +New events are available for audit logging, among others. These include: + +* Changes in user specific settings +* Sending public links via mail; and +* Accepting and rejecting shares + +When logs are forwarded to external analyzers, like Splunk, +administrators can check to add the new events. The latest version of +the Auditing extension (`admin_audit`) is required. + +=== Theming improvements and changes + +* HTML templates for `lost password` mails have been added. This is important in case a custom theme is used and it needs manual adjustments. +* The mail notifications framework, introduced with ownCloud Server 10.0.8 , has been extended to provide a basic framework and notification structure, which can be used by ownCloud features and third party extensions. To support this, mail template wording and structure have been updated. Please review the templates in `apps/notifications/templates/mail/` to align them with your needs. +* Mail templates can now include a footer for HTML (`core/templates/html.mail.footer.php`) and plain text mails (`core/templates/plain.mail.footer.php`). The default templates shipped with ownCloud Server 10.0.9 contain the respective references. For customized mail templates, it is necessary to manually add the references. To do so: + + * Add the following at the end of each HTML template: : + +[source] +---- +inc('html.mail.footer', ['app' => 'core'])); ?> +---- + + * Add the following at the end of each plain text template: : + +[source] +---- +inc('plain.mail.footer', ['app' => 'core'])); ?> +---- + +* The ownCloud example theme (`theme-example`), which can be used as a solid base to create custom themes, +is no longer bundled with ownCloud Server. It now lives in it’s own +https://github.com/owncloud/theme-example[repository on GitHub]. + +=== Solved known issues + +ownCloud Server 10.0.9 takes care of xref:server_release_notes.adoc#changes-in-10-0-9[10.0.8 known issues], +and provides remedy for several others: + +* Issues with multiple theme apps and the Mail Template Editor +https://github.com/owncloud/core/issues/31478[#31478] +* OCC command to transfer data between users (`occ transfer:ownership`) works as expected again. +Previously, public link shares were not transferred. +See https://github.com/owncloud/core/issues/31176[#31176] for further details. +* OCC commands to encrypt (`occ encryption:encrypt-all`) and decrypt (`occ encryption:decrypt-all`) user data +work correctly again. Previously, shares might have been lost during the encryption process. +See https://github.com/owncloud/core/issues/31600[#31600] and +https://github.com/owncloud/core/issues/31590[#31590] for further details. +* Files larger than 10 MB can now properly be uploaded by guest users. +See https://github.com/owncloud/core/issues/31596[#31596] for further details. +* Issues with public link dialog when collaborative tags app is disabled has been resolved. +See https://github.com/owncloud/core/issues/31581[#31581] for further details. +* Enabling/disabling of users by group administrators in the web UI works again. +See https://github.com/owncloud/core/issues/31489[#31489] for further details. +* Issues with file upload using Microsoft EDGE are now circumvented +(hard memory limit of 5 GB causing uploads to fail randomly as garbage collection for file chunks did not +work properly). See https://github.com/owncloud/core/pull/31825[#31884] for further details. + +=== Known issues + +xref:server_release_notes.adoc#the-password-policy-extension[The new Password Policy feature "Password Expiration"]: + +- Does not work together with Multi-Factor Authentication (e.g. `twofactor_totp`, `twofactor_privacyidea`). +Please do not deploy expiration policies yet when having Two- or Multi-Factor Authentication extensions in place. +This issue will be solved with the next ownCloud Server release. +See https://github.com/owncloud/core/issues/32059[#32059] for more information. +- xref:server_release_notes.adoc#the-password-policy-extension[The new Password Policy feature "Password Expiration"] +includes an *occ* command to manually force password expiration. Please run it directly after imposing +expiration policies on an instance with existing users. Currently the command will only work when the +policy *X days until user password expires* has been enabled. This might be confusing and will be solved +with the next release of the extension. See https://github.com/owncloud/password_policy/issues/66[#66] +for more information. + +=== For developers + +* The symfony event for logging has been extended to include the original exception when applicable: +https://github.com/owncloud/core/issues/31623[#31623] +* Added Symfony event for whenever user settings are changed +https://github.com/owncloud/core/issues/31266[#31266] +* Added Symfony event for whenever a public link share is sent by email +https://github.com/owncloud/core/issues/31632[#31632] +* Added Symfony event for whenever local shares are accepted or rejected +https://github.com/owncloud/core/issues/31702[#31702] +* Added public WebDAV API for versions using a new `meta` DAV endpoint +https://github.com/owncloud/core/pull/29207[#31729] +https://github.com/owncloud/core/pull/29637[#29637] +* Added support for retrieving file previews using WebDAV endpoint +https://github.com/owncloud/core/pull/29319[#29319] +https://github.com/owncloud/core/pull/30192[#30192] + +== Changes in 10.0.8 + +Dear ownCloud administrator, please find below the changes and known +issues in ownCloud Server 10.0.8 that need your attention. You can also +read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] +for further details on what has changed. + +=== PHP 5.6 deprecation + +PHP 5.6/7.0 active support has ended on January 19th 2017 / December 3rd 2017 and security support +{php-supported-versions-url}[will be dropped by the end of 2018]. +Many libraries used by ownCloud (including the QA-Suite _PHPUnit_) will therefore not be maintained +actively anymore which forces ownCloud to drop support in one of the next minor server versions +as well. Please make sure to upgrade to PHP 7.1 as soon as possible. See the +xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#officially-supported-environments[system requirements in the ownCloud documentation]. + +=== Personal note for public link mail notification + +One of the usability enhancements of ownCloud Server 10.0.8 is the +possibility for users to add a personal note when sending public links +via mail. When using customized mail templates it is necessary to either +adapt the shipped original template to the customizations or to add the +https://github.com/owncloud/core/blob/stable10/core/templates/mail.php#L21-L25[code block] +for the personal note to customized templates in order to display the personal note in the mail notifications. + +=== New mail notifications feature + +ownCloud Server 10.0.8 introduces a new extensible notification +framework. Apart from technical changes under the hood the Notifications +app can now also send mails for all notifications that previously were +only displayed within the web interfaces (notification bell) or on the +Desktop client (notifications API) like incoming federated share or +Custom Group notifications, for example. In the _"General"_ settings +section users can configure whether they want to receive mails for all +notifications, only for those that require an action or decide not to +get notifications via mail (by default users will only receive +notifications when an action is required). + +=== LDAP-related improvements + +* When disabling or deleting user accounts in LDAP, the administrator +can choose to either _delete_ or _disable_ respective accounts in +ownCloud when executing `occ user:sync` +(`-m, --missing-account-action=MISSING-ACCOUNT-ACTION`). User accounts +that are disabled in ownCloud can now be re-enabled automatically when +running `occ user:sync` if they are enabled in LDAP. When this behavior +is desired administrators just need to add the `-r, --re-enable` option +to their cron jobs or when manually executing `occ user:sync`. +* Furthermore it is now possible to execute `occ user:sync` only for *single* (`-u, --uid=UID`) or *seen* (`-s, --seenOnly`) users (users that are present in the database and have logged in at least once). These new options provide more granularity for administrators in terms of managing `occ user:sync` performance. +* Another notable change in behavior of `occ user:sync` is that +administrators now have to explicitly specify the option +`-c, --showCount` to display the number of users to be synchronized. + +=== New events for audit logging + +New events have been added to be used for audit logging, among others. +These include _configuration changes_ by administrators and users, _file +comments_ (_add/edit/delete_) and _updating existing public links_. When +logs are forwarded to external analyzers like Splunk, administrators can +check to add the new events. The latest version of the Auditing +extension (_admin_audit_) is required. + +=== New command to verify and repair file checksums + +With ownCloud 10 file integrity checking by computing and matching +checksums has been introduced to ensure that transferred files arrive at +their target in the exact state as their origin. In some rare cases +wrong checksums can be written to the database leading to +synchronization issues with e.g. the Desktop Client. To mitigate such +situations a new command `occ files:checksums:verify` has been +introduced. The command recalculates checksums either for all files of a +user or for files within a specified path, and compares them with the +values in the database. Naturally the command also offers an option to +repair incorrect checksum values (`-r, --repair`). Please check the +available options by executing `occ files:checksums:verify --help`. +Note: Executing this command might take some time depending on the file +count. + +=== New config setting to specify minimum characters for sharing autocomplete + +For security reasons the default value for minimum characters to trigger +the sharing autocomplete mechanism has been set to "4" (previously it +was set to "2"). This is to prevent people from easily downloading +lots of email addresses or user names by requesting their first letters +through the API. As it is a trade-off between security and usability for +some scenarios this high security level might not be desirable. +Therefore the value now is configurable via the _config.php_ option +`'user.search_min_length' => 4,`. Please check which value fits your +needs best. + +=== New option to granularly configure public link password enforcement + +With ownCloud 10 the `File Drop` feature has been merged with public +link permissions. This kind of public link does not give recipients +access to any content, but it gives them the possibility to `drop +files`. As a result, it might not always be desirable to enforce +password protection for such shares. Given that, passwords for public +links can now be enforced based on permissions (_read-only, read & +write, upload only/File Drop_). Please check the administration settings +_`Sharing`_ section and configure as desired. + +=== New option to exclude apps from integrity check + +By verifying signature files the _integrity check_ ensures that the code +running in an ownCloud instance has not been altered by third parties. +Naturally this check can only be successful for code that has been +obtained from official ownCloud sources. When providing custom apps +(like theme apps) that do not have a signature, the integrity check will +fail and notify the administrator. These apps can now be excluded from +the _integrity check_ by using the _config.php_ option +`'integrity.ignore.missing.app.signature' => ['app_id1', 'app_id2', 'app_id3'],`. +See _config.sample.php_ for more information. + +=== New occ command to modify user details + +It is now possible to modify user details like display names or mail +addresses via the command `occ user:modify`. Please append `--help` for +more information. + +=== occ files:scan can now be executed for groups + +Apart from using the `occ files:scan` command for _single users_ and +_whole instances_ it can now be executed for _groups_ using +`-g, --groups=GROUPS`. Please append `--help` for more information. + +=== New configurable default format for syslog + +When using syslog as the log type (`'log_type' => 'syslog',` in +_config.php_) the default format has been changed to include _request +IDs_ for easier debugging. Additionally the log format has been made +configurable using `'log.syslog.format'` in _config.php_. If you require +a certain log format, please check the new format and +_config.sample.php_ on how to change it. + +=== New config option to enable fallback to HTTP for federated shares + +For security reasons federated sharing (sharing between different +ownCloud instances) strictly requires HTTPS (SSL/TLS). When this +behavior is undesired the insecure fallback to HTTP needs to be enabled +explicitly by setting `'sharing.federation.allowHttpFallback' => false,` +to `true` in _config.php_. + +=== Migration related to auth_tokens (app passwords) + + +Upgrading to 10.0.8 includes migrations related to _auth_tokens_ (_app +passwords_). When users have created _app passwords_ as separate +passwords for their clients the upgrade duration will increase depending +on user count. Please consider this when planning the upgrade. + +=== Changed behavior of e-mail autocomplete for public link share dialog + +When the _"Sharing"_ settings option +`Allow users to send mail notifications for shared files` for public +links is enabled, users can send public links via mail from within the +web interface. The behavior of the autocomplete when entering mail +addresses in the public link share dialog has been changed. Previously +the autocomplete queried for local users, users from federated address +books and contacts from CardDAV/Contacts App. As public links are not +intended for sharing between ownCloud users (local/federated), those +have been removed. Contacts synchronized via CardDAV or created in the +Contacts app will still appear as suggestions. + +=== Notifications sent by _occ_ can now include links + +The command `occ notifications:generate` can be used to send notifications to individual users or groups. +With 10.0.8 it is also capable of including links to such notifications using the `-l, --link=LINK` option. +Please append `--help` for more information. +There is also {oc-marketplace-url}/apps/announcementcenter[Announcement center] +to conduct such tasks from the web interface but it is currently limited to send notifications to all users. +For now administrators can use the `occ` command if more granularity is required. + +=== Global option for CORS domains + +For security reasons ownCloud has a _Same-Origin-Policy_ that prevents +requests to ownCloud resources from other domains than the domain the +backend server is hosted on. If ownCloud resources should be accessible +from other domains, e.g. for a separate web frontend operated on a +different domain, administrators can now globally specify policy +exceptions via _CORS (Cross-Origin Resource Sharing)_ using +`'cors.allowed-domains'` in _config.php_. Please check +_config.sample.php_ for more information. + +=== Mail Template Editor is now unbundled + +The Mail Template Editor has been unbundled from the default apps and is not shipped with the Server anymore. +When upgrading ownCloud will try to automatically +{oc-marketplace-url}/apps/templateeditor[install the latest version from the ownCloud Marketplace] +in case the app was installed before. + +If this is not possible (e.g. no internet connection or clustered setup) you will either need to disable the app +(`occ app:disable templateeditor`) or +xref:{latest-server-version}@server:admin_manual:installation/apps_management_installation.adoc#installing-apps-manually[download and install it manually]. + +=== Solved known issues + +* Bogus `Login failed` log entries have been removed (see xref:server_release_notes.adoc#changes-in-10-0-7[10.0.7 known issues]) +* The _Provisioning API_ can now properly set default or zero quota +* User quota settings can be queried through _Provisioning API_ +* A regression preventing a user from setting their e-mail address in the settings page has been fixed +* File deletion as a guest user works correctly (trash bin permissions are checked correctly) + +=== Known issues + +* Issues with multiple theme apps and Mail Template Editor + +As of ownCloud Server 10.0.5 it is only possible to have one theme app +enabled simultaneously. When a theme app is enabled and the +administrator attempts to enable a second one this will result in an +error. However, when also having the Mail Template Editor enabled in +this scenario the administrators _"General"_ settings section +https://github.com/owncloud/core/issues/31134[will be displayed incorrectly]. +As a remedy administrators can either uninstall the second theme app or disable the Mail Template Editor app. + +* `occ transfer:ownership` https://github.com/owncloud/core/issues/31150[does not transfer public link shares if they were created by the target user (reshare)]. + +=== For developers + +* The global JS variable `oc_current_user` was removed. Please use the public method `OC.getCurrentUser()` instead. +* Lots of new Symfony events have been added for various user actions, see changelog for details, or the +https://github.com/owncloud/documentation/issues/3738[documentation ticket]. +* When requesting a private link there is a new HTTP response header `Webdav-Location` that contains the +WebDAV path to the requested file while the `Location` still points at the frontend URL for viewing the file. + +== Changes in 10.0.7 + +ownCloud Server 10.0.7 is a hotfix follow-up release that takes care of +an https://github.com/owncloud/core/issues/30157[issue regarding OAuth authentication]. + +Please consider the ownCloud Server 10.0.5 release notes. + +=== Known issues + +* When using application passwords, +https://github.com/owncloud/core/issues/30157[log entries related to `Login Failed` will appear] +and can be ignored. For people using fail2ban or other account locking tools based on log parsing, please apply +https://github.com/owncloud/core/commit/50c78a4bf4c2ab4194f40111b8a34b7e9cc17a14.patch[this patch] +with `patch -p1 < 50c78a4bf4c2ab4194f40111b8a34b7e9cc17a14.patch` +(https://github.com/owncloud/core/pull/30591[original pull request here]). + +== Changes in 10.0.6 + +ownCloud Server 10.0.6 is a hotfix follow-up release that takes care of +an issue during the build process +(https://github.com/owncloud/core/pull/30265). Please consider the ownCloud Server 10.0.5 release notes. + +== Changes in 10.0.5 + +Dear ownCloud administrator, please find below the changes and known +issues in ownCloud Server 10.0.5 that need your attention. You can also +read https://owncloud.com/changelog/server/[the full ownCloud Server changelog] +for further details on what has changed. + +=== Technology preview for PHP 7.2 support + +ownCloud catches up with new web technologies. This has mainly been +introduced for the open-source community to test and give feedback. PHP +7.2 is not yet supported nor recommended for production scenarios. +ownCloud is going to fully support PHP 7.2 with the next major release. + +=== php-intl now is a hard requirement + +Please make sure to have the PHP extension installed before upgrading. + +=== Changed: Only allow a single active theme app + +The theming behavior has been changed so that only a single theme can be +active concurrently. This change ensures that themes can not interfere +in any way (e.g., override default theming in an arbitrary order). +Please make sure to have the desired theme enabled after upgrading. + +=== Removed old Dropbox external storage backend (Dropbox API v1) + + +Please switch to +{oc-marketplace-url}/apps/files_external_dropbox[the new _External Storage: Dropbox_ app] +with Dropbox API v2 support to continue providing Dropbox external storages to your users. + +=== Fixed: Only set CORS headers on WebDAV endpoint when Origin header is specified + +ownCloud Server 10.0.4 known issue is resolved. + +=== Fixes and improvements for the Mail Template Editor + +* Known issues are resolved: Mail Template Editor works again, got +support for app themes and additional templates were added for customization. +* Mail Template Editor is still bundled with ownCloud Server but will +soon be released as a separate app to ownCloud Marketplace. +* Changelog: https://github.com/owncloud/templateeditor/blob/master/CHANGELOG.md#02---2018-02-28 + +=== Known issues + +* When using application passwords, +https://github.com/owncloud/core/issues/30157[log entries related to +`Login Failed` will appear], please upgrade to 10.0.7 and check the fix mentionned in its release notes. + +== Changes in 10.0.4 + +Dear ownCloud administrator, please find below the changes and known +issues in ownCloud Server 10.0.4 that need your attention. You can also +read https://github.com/owncloud/core/blob/stable10/CHANGELOG.md[the full ownCloud Server 10.0.4 changelog] +for further details on what has changed. + +=== More granular sharing restrictions + +The "_Restrict users to only share with users in their groups_" +option, in the Sharing settings, restricts users to only share with +groups which they are a member of, while simultaneously prohibiting +sharing with single users that do not belong to any of the users’ +groups. + +To make this more granular, we split this option into two parts and +added "_Restrict users to only share with groups they are member +of_", which differentiates between users and groups. Doing so makes it +possible to restrict users from sharing with all users of an +installation, limiting them to only being able to share with groups +which they are a member of, and vice versa. + +=== Configurable solution for indistinguishable user display names + +The ownCloud sharing dialog displays users according to their display +name. As users can choose their display name in self-service (which can +be disabled in config.php) and display names are not unique, it is +possible that a user can’t distinguish sharing results. + +To cover this case the displayed user identifiers are now configurable. +In the Sharing settings administrators can now configure the display of either mail addresses or user ids. + +=== Added `occ files:scan` repair mode to repair filecache inconsistencies + +We recommend to use this command when directed to do so in the upgrade process. +Please refer to xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#the-repair-option[the occ command’s files:scan --repair documentation] for more information. + +=== Detailed mode for `occ security:routes` + +Administrators can use the output of this command when using a network +firewall, to check the appropriateness of configured rules or to get +assistance when setting up. + +=== Added mode of operations to differentiate between single-instance or clustered setup + +As ownCloud needs to behave differently when operating in a clustered setup versus a single instance setup, the new `config.php` option `operation.mode` has been added. +It can take one of two values: `single-instance` and `clustered-instance`. +For example: `'operation.mode' => 'clustered-instance',`. + +Currently the Market App (ownCloud Marketplace integration) does not support clustered setups and can do harm when used for installing or updating apps. +The new config setting prevents this and other actions that are undesired in cluster mode. + +*When operating in a clustered setup, it is mandatory to set this option.* Please check +xref:{latest-server-version}@server:admin_manual:configuration/server/config_sample_php_parameters.adoc[the config_sample_php_parameters documentation] +for more information. + +=== Added occ dav:cleanup-chunks command to clean up expired uploads + +When file uploads are interrupted for any reason, already uploaded file +parts (chunks) remain in the underlying storage so that the file upload +can resume in a future upload attempt. +However, resuming an upload is only possible until the partial upload is expired and deleted, respectively. + +To clean up chunks (expire and delete) originating from unfinished uploads, administrators can use this newly introduced command. +The default expiry time is two days, but it can be specified as a parameter to the command. + +[TIP] +==== +**It is recommended to configure CRON to execute this background job regularly**. +==== + +It is not included in the regular ownCloud background jobs so that the administrators have more flexibility in scheduling it. +Please check xref:{latest-server-version}@server:admin_manual:configuration/server/background_jobs_configuration.adoc#cleanupchunks[the background jobs configuration documentation] +for more information. + +=== Administrators can now exclude files from integrity check in config.php + +When administrators did intentional changes to the ownCloud code they +now have the ability to exclude certain files from the integrity +checker. Please check `config.sample.php` for the usage of `'integrity.excluded.files'`. + +=== Modification time value of files is now 64 bits long + +When upgrading to 10.0.4 migrations may increase update duration +dependent on number of files. + +=== Updated minimum supported browser versions + +Users with outdated browsers might get warnings. +See xref:{latest-server-version}@server:admin_manual:installation/system_requirements.adoc#web-browser[the list of supported browser versions]. + +=== Known issues + +* When using application passwords, +https://github.com/owncloud/core/issues/30157[log entries related to `Login Failed` will appear], +please upgrade to 10.0.7 and check the fix mentioned in its release notes. + +=== 10.0.3 resolved known issues + +* https://github.com/owncloud/core/issues/29156[SFTP external storages with key pair mode work again] +* https://github.com/owncloud/core/issues/29240[Added support for MariaDB 10.2.7+] +* https://github.com/owncloud/core/issues/29049[Encryption panel in admin settings fixed to +properly detect current mode after upgrade to ownCloud 10] +* https://github.com/owncloud/core/pull/29261[Removed double quotes from boolean values in status.php output] + +=== Known issues + +* Impersonate app 0.1.1 does not work with ownCloud Server 10.0.4. +Please update to {oc-marketplace-url}/apps/impersonate[Impersonate 0.1.2] +to be able to use the feature with ownCloud 10.0.4. +* https://github.com/owncloud/core/issues/29793[Mounting ownCloud storage via davfs does not work] + +== Changes in 10.0.3 + +Dear ownCloud administrator, please find below the changes and known +issues of ownCloud Server 10.0.3 that need your attention: + +**The full ownCloud Server 10.0.3 changelog can be found here: +https://github.com/owncloud/core/blob/stable10/CHANGELOG.md** + +* It is now possible to directly upgrade from 8.2.11 to 10.0.3 in a single upgrade process. +* Added occ command to list routes which can help administrators setting up network firewall rules. +* `occ upgrade` is now verbose by default. Administrators may need to adjust scripts for automated +setup/upgrade procedures that rely on `occ upgrade' outputs. +* Reenabled medial search by default:: + ** Enables partial search in sharing dialog autocompletion (e.g. a + user wants to share with the user "Peter": Entering "pe" will find + the user, entering "ter" will only find the user if the option is enabled) + ** New default is set to enabled as there is no performance impact + anymore due to the introduction of the user account table in ownCloud Server 10.0.1. + ** Please check the setting. You need to disable it explicitly if the functionality is undesired. +* All database columns that use the fileid have been changed to bigint +(64-bits). For large instances it is therefore highly recommended to upgrade in order to avoid reaching limits. +* Upgrade and Market app information:: + ** Removed `appstoreenabled` setting from config.php. If you want to + disable the app store / Marketplace integration, please disable the Market app. + ** Added setting `upgrade.automatic-app-update' to config.php to + disable automatic app updates with `occ upgrade' when Market app is enabled + ** On upgrade from OC < 10 the Market app won’t be enabled if `appstoreenabled` was false in config.php. +* Clustering: Better support of read only config file and apps folder +* Default minimum desktop client version in config.php is now 2.2.4. + +*Known issues* + +* Added quotes in boolean result values of `yourdomain/status.php` output +* Setting up SFTP external storages with keypairs does not work. +https://github.com/owncloud/core/issues/28669 +* If you have storage encryption enabled, the web UI for encryption will +ask again what mode you want to operate with even if you already had a +mode selected before. The administrator must select the mode they had +selected before. https://github.com/owncloud/core/issues/28985 +* Uploading a folder in Chrome in a way that would overwrite an existing +folder can randomly fail (race conditions). +https://github.com/owncloud/core/issues/28844 +* Federated shares can not be accepted in WebUI for SAML/Shibboleth users +* For *MariaDB users*: Currently, Doctrine has no support for the +breaking changes introduced in MariaDB 10.2.7, and above. If you are on +MariaDB 10.2.7 or above, and have encountered the message `1067 Invalid +default value for `lastmodified`, +https://gist.github.com/VicDeo/bb0689104baeb5ad2371d3fdb1a013ac/raw/04bb98e08719a04322ea883bcce7c3e778e3afe1/DoctrineMariaDB102.patch[please +apply this patch] to Doctrine. We expect this bug to be fixed in ownCloud 10.0.4. For more information on the bug, +https://github.com/owncloud/core/issues/28695[check out the related issue]. +* When updating from ownCloud < 9.0 the CLI output may hang for some +time (potentially up to 20 minutes for big instances) whilst sharing is +updated. This can happen in a variety of places during the upgrade and +is to be expected. Please be patient as the update is performed and the +output will continue as normal. + +== Changes in 10.0.1 + +Hello ownCloud administrator, please read carefully to be prepared for +updates and operations of your ownCloud setup. + +* *A new update path:* ownCloud 10.0.1 contains migration logic to allow +upgrading directly from 9.0 to 10.0.1. +* **Marketplace:** Please create an account for `the new marketplace`_. Access to +optional ownCloud extensions and enterprise apps will be provided by the +marketplace from now on. Currently some apps are still shipped with the +tarballs / packages and will be moved to the marketplace in the near +future. +* *Apps:* _LDAP_, _gallery_, _activity_, _PDF viewer_, and _text editor_ +were moved to the marketplace. +* *Updates with marketplace:* During the upgrade, enabled apps are also +updated by fetching new versions directly from the marketplace. If +during an update, sources for some apps are missing, and the ownCloud +instance has no access to the marketplace, the administrator needs to +disable these apps or manually download and provide the apps before +updating. +* *App updates:* Third party apps are not disabled anymore when +upgrading. +* *Upgrade migration test:* The upgrade migration test, `--skip-migration-tests`, has been removed. + +[NOTE] +==== +The template editor app is not included in the 10.0.1 release due to technical reasons, but will be distributed via the marketplace. However, +you can still xref:{latest-server-version}@server:admin_manual:configuration/server/email_configuration.adoc#using-email-templates[edit template files manually]. +==== + +=== Settings + +* *Settings design:* Admin, personal pages, and app management are now +merged together into a single "Settings" entry. +* *Disable users:* The ability to disable users in the user management +panel has been added. +* *Password Policy:* Rules now apply not only to link passwords but also +to user passwords. + +=== Infrastructure + +* *Client:* You need to update to +https://doc.owncloud.com/desktop/latest/[the latest desktop client version]. +* *Cron jobs:* The user account table has been reworked. As a result the Cron job for +xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#syncing-user-accounts[syncing user backends], +e.g., LDAP, needs to be configured. +* *Logfiles:* App logs, e.g., auditing and owncloud.log, can now be split, see: +xref:{latest-server-version}@server:admin_manual:configuration/server/config_sample_php_parameters.adoc#logging[Configuring Logging]. + +=== Known Issues + +==== Converting the Database Type doesn’t work + +Converting a Database from e.g. `SQLite` to `MySQL` or `PostgreSQL` with +the `occ db:convert-type` currently doesn’t work. See +https://github.com/owncloud/core/issues/27075 for more info. + +==== Installing the LDAP user backend will trigger the installation twice + +This causes an SQL error such as the following: + +[source,console,subs="attributes+"] +---- +{occ-command-example-prefix} market:install user_ldap + +user_ldap: Installing new app ... +user_ldap: An exception occurred while executing 'CREATE TABLE `ldap_user_mapping` (`ldap_dn` VARCHAR(255) DEFAULT '' NOT NULL, `owncloud_name` VARCHAR(255) DEFAULT '' NOT NULL, `directory_uuid` VARCHAR(255) DEFAULT '' NOT NULL, UNIQUE INDEX ldap_dn_users (`ldap_dn`), PRIMARY KEY(`owncloud_name`)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB ROW_FORMAT = compressed': + +SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'ldap_user_mapping' already exists +---- + +This can be safely ignored. And the app can be used after enabling it. +Please be aware that when upgrading an existing ownCloud installation +that already has `user_ldap` this error will not occur. It was fixed by +https://github.com/owncloud/core/pull/27982. However, this could happen +for other apps as well that use `database.xml`. If it does please use the same workaround. + +==== SAML authentication only works for users synced with `occ user:sync` + +We will re-enable SSO for LDAP users with an update of the app in the +market after completing internal testing. + +==== The web UI prevents uninstalling apps marked as shipped, e.g., `user_ldap` + +To uninstall, disable the app with occ and rm the app directory. + +==== Moving files around in external storages outside of ownCloud will invalidate the metadata + +All shares, comments, and tags on the moved files will be lost. + +==== Existing LDAP users only show up in the user management page and the share dialog after being synced + +The account table introduced in ownCloud 10.0.0 significantly reduces +LDAP communication overhead. Password checks are yet to be accounted +for. LDAP user metadata in the account table will be updated when users +log in or when the administrator runs +`occ user:sync "OCA\User_LDAP\User_Proxy"`. +We recommend setting up xref:{latest-server-version}@server:admin_manual:configuration/server/background_jobs_configuration.adoc[a nightly Cron job] to keep metadata of users not actively logging in up to date. + +==== Error pages will not use the configured theme but will instead fall back to the community default + +== Changes in 10.0.0 + +* PHP 7.1 support added (supported PHP versions are 5.6 and 7.0+) +* The upgrade migration test has been removed; (Option `"--skip-migration-tests"` removed from update command) +* Requires to use the latest desktop client version 2.3 +* Third party apps are not disabled anymore when upgrading +* User account table has been reworked. CRON job for syncing with e.g., LDAP needs to be configured +(see xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#user-commands[Syncing User Accounts] for more information) +* LDAP app is not released with ownCloud 10.0.0 and will be released on +the marketplace after some more QA +* files_drop app is not shipped anymore as it’s integrated with core +now. Since migrations are not possible you will have to reconfigure your +drop folders (in the `Public Link' section of the sharing dialog of the +respective folders). +* SAML/Shibboleth with device-specific app passwords: No migration +possible; Users need to regenerate device-specific app passwords in the +WebUI and enter those in their clients. +* For security reasons status.php can now be configured in config.php to +not return server version information anymore (`version.hide'; default +`false'). As clients still depend on version information this is not yet +recommended. The default will change to `true' with 10.0.2 once clients +are ready. +* Order of owncloud.log entries changed a bit, please review any +application (e.g. fail2ban rules) relying on this file +* External storages:: + ** FTP external storage moved to a separate app + ({oc-marketplace-url}/apps/files_external_ftp) + ** "Local" storage type can now be disabled by sysadmin in + config.php (to prevent users mounting the local file system) + +Full changelog: +https://github.com/owncloud/core/wiki/ownCloud-10.0-Features + +== Changes in 9.1 + +*General* + +* Background jobs (cron) can now run in parallel +* Update notifications in client via API - You can now be notified in +your desktop client about available updates for core and apps. The +notifications are made available via the notifications API. +* Multi-bucket support for primary objectstore integration +* Support for Internet Explorer below version 11 was dropped +* Symlinks pointing outside of the data directory are disallowed. Please +use the configuration/files/external_storage_configuration_gui with the +configuration/files/external_storage/local storage backend instead. +* Removed `dav:migrate-calendars` and `dav:migrate-addressbooks` +commands for `occ`. Users planning to upgrade from ownCloud 9.0 or below +to ownCloud 9.1 needs to make sure that their calendars and address +books are correctly migrated *before* continuing to upgrade to 9.1. + +*Authentication* + +* Pluggable authentication: plugin system that supports different +authentication schemes +* Token-based authentication +* Ability to invalidate sessions +* List connected browsers/devices in the personal settings page. Allows +the user to disconnect browsers/devices. +* Device-specific passwords/tokens, can be generated in the personal +page and revoked +* Disable users and automatically revoke their sessions +* Detect disabled LDAP users or password changes and revoke their +sessions +* Log in with email address +* Configuration option to enforce token-based login outside the web UI +* Two Factor authentication plug-in system +* OCC command added to (temporarily) disable/enable two-factor +authentication for single users + +NOTE: The current desktop and mobile client versions do not support two-factor yet, this will be added later. It is already possible to generate a device specific password and enter that in the current client versions. + +*Files app* + +* Ability to toggle displaying hidden files +* Remember sort order +* Permalinks for internal shares +* Visual cue when dragging in files app +* Autoscroll file list when dragging files +* Upload progress estimate + +*Federated sharing* + +* Ability to create federated shares with CRUDS permissions +* Resharing a federated share does not create a chain of shares any more +but connects the share owner’s server to the reshare recipient + +*External storage* + +* UTF-8 NFD encoding compatibility support for NFD file names stored +directly on external storages (new mount option in external storage +admin page) +* Direct links to the configuration pages for setting up a GDrive or +Dropbox application for use with ownCloud +* Some performance and memory usage improvements for GDrive, stream +download and chunk upload +* Performance and memory usage improvements for Dropbox with stream +download +* GDrive library update provides exponential backoff which will reduce +rate limit errors + +*Shibboleth* + +* The WebDAV endpoint was changed from `/remote.php/webdav` to +`/remote.php/dav`. You need to check your Apache configuration if you +have exceptions or rules for WebDAV configured. + +*Minor additions* + +* Support for print style sheets +* Command line based update will now be suggested if the instance is +bigger to avoid potential timeouts +* Web updater will be disabled if LDAP or shibboleth are installed +* DB/application update process now shows better progress information +* Added `occ files:scan --unscanned` to only scan folders that haven’t +yet been explored on external storages +* Chunk cache TTL can now be configured +* Added warning for wrongly configured database transactions, helps +prevent `database is locked` issues +* Use a capped memory cache to reduce memory usage especially in +background jobs and the file scanner +* Allow login by email +* Respect CLASS property in calendar events +* Allow addressbook export using VCFExportPlugin +* Birthdays are also generated based on shared addressbooks + +*For developers* + +* New DAV endpoint with a new chunking protocol aiming to solve many +issues like timeouts (not used by clients yet) +* New webdav property for share permissions +* Background repair steps can be specified info.xml +* Background jobs (cron) can now be declared in info.xml +* Apps can now define repair steps to run at install/uninstall time +* Export contact images via Sabre DAV plugin +* Sabre DAV’s browser plugin is available in debug mode to allow easier +development around webdav + +*Technical debt* + +* PSR-4 autoloading forced for `OC\` and `OCP\`, optional for `OCA\` +docs at +xref:next@server:developer_manual:app/fundamentals/classloader.adoc +* More cleanup of the sharing code (ongoing) + +== Changes in 9.0 + +9.0 requires .ico files for favicons. This will change in 9.1, which +will use .svg files. See +xref:next@server:developer_manual:core/theming.adoc[Changing favicon] in the Developer Manual. + +Home folder rule is enforced in the user_ldap application in new +ownCloud installations; see configuration/user/user_auth_ldap. This +affects ownCloud 8.0.10, 8.1.5 and 8.2.0 and up. + +The Calendar and Contacts apps have been rewritten and the CalDAV and +CardDAV backends of these apps were merged into ownCloud core. During +the upgrade existing Calendars and Addressbooks are automatically +migrated (except when using the `IMAP user backend`). As a fallback for +failed upgrades, when using the `IMAP user backend` or as an option to +test a migration `dav:migrate-calendars` and/or +`dav:migrate-addressbooks` scripts are available (*only in ownCloud +9.0*) via the `occ` command. See configuration/server/occ_command. + +IMPORTANT: After upgrading to ownCloud 9.0 and *before* continuing to upgrade to 9.1 make sure that all of your +and your users Calendars and Addressbooks are migrated correctly. Especially when using the `IMAP user backend` +(other user backends might be also affected) you need to manually run the mentioned `occ` migration commands +described above. + +Updates on systems with large datasets will take longer, due to the +addition of checksums to the ownCloud database. See +https://github.com/owncloud/core/issues/22747. + +Linux packages are available from our +{oc-install-package-url}[official download site]. +New in 9.0: split packages. `owncloud` installs +ownCloud plus dependencies, including Apache and PHP. `owncloud-files` +installs only ownCloud. This is useful for custom LAMP stacks, and +allows you to install your own LAMP apps and versions without packaging +conflicts with ownCloud. See installation/linux_installation. + +New option for the ownCloud admin to enable or disable sharing on individual external mountpoints (see xref:{latest-server-version}@server:admin_manual:configuration/files/external_storage/configuration.adoc#mount-options[External Storage GUI Mount Options]). +Sharing on such mount points is disabled by default. + +=== Enterprise 9.0 + +owncloud-enterprise packages are no longer available for CentOS 6, +RHEL6, Debian 7, or any version of Fedora. A new package, +owncloud-enterprise-files, is available for all supported platforms, +including the above. This new package comes without dependencies, and is +installable on a larger number of platforms. System administrators must +install their own LAMP stacks and databases. + +== Changes in 8.2 + +New location for Linux package repositories; ownCloud admins must +manually change to the new repos. See maintenance/upgrade + +PHP 5.6.11+ breaks the LDAP wizard with a `Could not connect to LDAP' +error. See https://github.com/owncloud/core/issues/20020. + +`filesystem_check_changes` in `config.php` is set to 0 by default. This +prevents unnecessary update checks and improves performance. If you are +using external storage mounts such as NFS on a remote storage server, +set this to 1 so that ownCloud will detect remote file changes. + +`XSendFile` support has been removed, so there is no longer support for +serving static files from your ownCloud server. + +LDAP issue: 8.2 uses the `memberof` attribute by default. If this is not +activated on your LDAP server your user groups will not be detected, and +you will see this message in your ownCloud log: +`Error PHP Array to string conversion at /var/www/html/owncloud/lib/private/template/functions.php#36`. +Fix this by disabling the `memberof` attribute on your ownCloud server +with the `occ` command, like this example on Ubuntu Linux: + +[source,console,subs="attributes+"] +---- +{occ-command-example-prefix} ldap:set-config "s01" useMemberOfToDetectMembership 0 +---- + +Run `{occ-command-example-prefix} ldap:show-config` to find the correct +`sNN` value; if there is not one then use empty quotes, `""`. (See +configuration/server/occ_command.) + +Users of the Linux Package need to update their repository setup. + +== Changes in 8.1 + +Use APCu only if available in version 4.0.6 and higher. If you install +an older version, you will see a +`APCu below version 4.0.6 is installed, for stability and performance reasons we recommend to update to a +newer APCu version` warning on your ownCloud admin page. + +SMB external storage now based on `php5-libsmbclient`, which must be downloaded from the ownCloud software repositories +(https://software.opensuse.org/download.html?project=isv%3AownCloud%3Acommunity%3A8.1&package=php5-libsmbclient[installation instructions]). + +`Download from link` feature has been removed. + +The `.htaccess` and `index.html` files in the `data/` directory are now +updated after every update. If you make any modifications to these files +they will be lost after updates. + +The SabreDAV browser at `/remote.php/webdav` has been removed. + +Using ownCloud without a `trusted_domain` configuration will not work +anymore. + +The logging format for failed logins has changed and considers now the +proxy configuration in `config.php`. + +A default set of security and privacy HTTP headers have been added to +the ownCloud `.htaccess` file, and ownCloud administrators may now +customize which headers are sent. + +More strict SSL certificate checking improves security but can result in +`cURL error 60: SSL certificate problem: unable to get local issuer +certificate` errors with certain broken PHP versions. Please verify +your SSL setup, update your PHP or contact your vendor if you receive +these errors. + +The persistent file-based cache (e.g. used by LDAP integration) has been +dropped and replaced with a memory-only cache, which must be explicitly +configured. See configuration/user/user_auth_ldap. Memory cache +configuration for the ownCloud server is no longer automatic, requiring +installation of your desired cache backend and configuration in +`config.php` (see configuration/server/caching_configuration.) + +The `OC_User_HTTP` backend has been removed. Administrators are +encouraged to use the `user_webdavauth` application instead. + +ownCloud ships now with its own root certificate bundle derived from +Mozilla’s root certificates file. The system root certificate bundle +will not be used anymore for most requests. + +When you upgrade from ownCloud 8.0, with encryption enabled, to 8.1, you must enable the new encryption backend and +xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#encryption[migrate your encryption keys]. + +Encryption can no longer be disabled in ownCloud 8.1. It is planned to +re-add this feature to the command line client for a future release. + +It is not recommended to upgrade encryption-enabled systems from +ownCloud Server 8.0 to version 8.1.0 as there is a chance the migration +will break. We recommend migrating to the first bugfix release, ownCloud +Server 8.1.1. + +Due to various technical issues, by default desktop sync clients older +than 1.7 are not allowed to connect and sync with the ownCloud server. +This is configurable via the `minimum.supported.desktop.version` switch +in `config.php`. + +Previews are now generated at a maximum size of 2048 x 2048 pixels. This +is configurable via the `preview_max_x` and `preview_max_y` switches in +`config.php`. + +The ownCloud 8 server is not supported on any version of Windows. + +The 8.1.0 release has a minor bug which makes application updates fail +at first try. Reload the apps page and try again, and the update will +succeed. + +The `forcessl` option within the `config.php` and the `Enforce SSL` option within the Admin-Backend was removed. +This now needs to be configured like described in +xref:{latest-server-version}@server:admin_manual:configuration/server/harden_server.adoc#use-https[Hardening and Security Guidance]. + +WebDAV file locking was removed in ownCloud 8.1 which causes Finder on macOS to mount WebDAV read-only. + +=== Enterprise 8.1 + +The SharePoint Drive application does not verify the SSL certificate of +the SharePoint server or the ownCloud server, as it is expected that +both devices are in the same trusted environment. + +== Changes in 8.0 + +=== Manual LDAP Port Configuration + +When you are configuring the LDAP user and group backend application, +ownCloud may not auto-detect the LDAP server’s port number, so you will +need to enter it manually. + +=== No Preview Icon on Text Files + +There is no preview icon displayed for text files when the file contains +fewer than six characters. + +=== Remote Federated Cloud Share Cannot be Reshared With Local Users + +When you mount a Federated Cloud share from a remote ownCloud server, +you cannot re-share it with your local ownCloud users. (See +xref:{latest-server-version}@server:admin_manual:configuration/files/federated_cloud_sharing_configuration.adoc[Federated Cloud Sharing Configuration] +to learn more about federated cloud sharing) + +=== Manually Migrate Encryption Keys after Upgrade + +If you are using the Encryption application and upgrading from older versions of ownCloud to ownCloud 8.0, you must +xref:{latest-server-version}@server:admin_manual:configuration/server/occ_command.adoc#encryption[manually migrate your encryption keys]. + +=== Windows Server Not Supported + +Windows Server is not supported in ownCloud 8. + +=== PHP 5.3 Support Dropped + +PHP 5.3 is not supported in ownCloud 8, and PHP 5.4 or better is +required. + +=== Disable Apache Multiviews + +If Multiviews are enabled in your Apache configuration, this may cause +problems with content negotiation, so disable Multiviews by removing it +from your Apache configuration. Look for lines like this: + +---- + +Options Indexes FollowSymLinks Multiviews +---- + +Delete `Multiviews` and restart Apache. + +=== ownCloud Does Not Follow Symlinks + +ownCloud’s file scanner does not follow symlinks, which could lead to +infinite loops. To avoid this do not use soft or hard links in your +ownCloud data directory. + +=== No Commas in Group Names + +Creating an ownCloud group with a comma in the group name causes +ownCloud to treat the group as two groups. + +=== Hebrew File Names Too Large on Windows + +On Windows servers Hebrew file names grow to five times their original +size after being translated to Unicode. + +=== Google Drive Large Files Fail with 500 Error + +Google Drive tries to download the entire file into memory, then write +it to a temp file, and then stream it to the client, so very large file +downloads from Google Drive may fail with a 500 internal server error. + +=== Encrypting Large Numbers of Files + +When you activate the Encryption application on a running server that +has large numbers of files, it is possible that you will experience +timeouts. It is best to activate encryption at installation, before +accumulating large numbers of files on your ownCloud server. + +=== Enterprise 8.0 + +==== Sharepoint Drive SSL Not Verified + +The SharePoint Drive application does not verify the SSL certificate of +the SharePoint server or the ownCloud server, as it is expected that +both devices are in the same trusted environment. + +==== No Federated Cloud Sharing with Shibboleth + +Federated Cloud Sharing (formerly Server-to-Server file sharing)does not +work with Shibboleth . + +==== Direct Uploads to SWIFT do not Appear in ownCloud + +When files are uploaded directly to a SWIFT share mounted as external +storage in ownCloud, the files do not appear in ownCloud. However, files +uploaded to the SWIFT mount through ownCloud are listed correctly in +both locations. + +==== SWIFT Objectstore Incompatible with Encryption App + +The current SWIFT implementation is incompatible with any application +that uses direct file I/O and circumvents the ownCloud virtual +filesystem. Using the Encryption application on a SWIFT object store +incurs twice as many HTTP requests and increases latency significantly. + +==== application Store is Back + +The ownCloud application Store has been re-enabled in ownCloud 8. Note +that third-party apps are not supported. + +== Changes in 7.0 + +=== Manual LDAP Port Configuration + +When you are configuring the LDAP user and group backend application, +ownCloud may not auto-detect the LDAP server’s port number, so you will +need to enter it manually. + +=== LDAP Search Performance Improved + +Prior to 7.0.4, LDAP searches were substring-based and would match +search attributes if the substring occurred anywhere in the attribute +value. Rather, searches are performed on beginning attributes. With +7.0.4, searches will match at the beginning of the attribute value only. +This provides better performance and a better user experience. + +Substring searches can still be performed by prepending the search term +with `*`. For example, a search for `te` will find Terri, but not Nate: + +---- +occ ldap:search "te" +---- + +If you want to broaden the search to include Nate, then search for +`*te`: + +---- +occ ldap:search "*te" +---- + +Refine searches by adjusting the `User Search Attributes` field of the +Advanced tab in your LDAP configuration on the Admin page. For example, +if your search attributes are `givenName` and `sn` you can find users by +first name + last name very quickly. For example, you’ll find Terri +Hanson by searching for `te ha`. Trailing whitespaces are ignored. + +=== Protecting ownCloud on IIS from Data Loss + +Under certain circumstances, running your ownCloud server on IIS could +be at risk of data loss. To prevent this, follow these steps. + +* In your ownCloud server configuration file, +`owncloud\config\config.php`, set `config_is_read_only` to true. +* Set the `config.php` file to read-only. +* When you make server updates `config.php` must be made writeable. When +your updates are completed re-set it to read-only. + +=== Antivirus Application Modes + +The Antivirus application offers three modes for running the ClamAV +anti-virus scanner: as a daemon on the ownCloud server, a daemon on a +remote server, or an executable mode that calls `clamscan` on the local +server. We recommend using one of the daemon modes, as they are the most +reliable. + +=== `Enable Only for Specific Groups` Fails + +Some ownCloud applications have the option to be enabled only for +certain groups. However, when you select specific groups they do not get +access to the app. + +=== Changes to File Previews + +For security and performance reasons, file previews are available only +for image files, covers of MP3 files, and text files, and have been +disabled for all other filetypes. Files without previews are represented +by generic icons according to their file types. + +=== 4GB Limit on SFTP Transfers + +Because of limitations in `phpseclib`, you cannot upload files larger +than 4GB over SFTP. + +=== `Not Enough Space Available` on File Upload + +Setting user quotas to `unlimited` on an ownCloud installation that has +unreliable free disk space reporting– for example, on a shared hosting +provider– may cause file uploads to fail with a `Not Enough Space +Available` error. A workaround is to set file quotas for all users +instead of `unlimited`. + +=== No More Expiration Date On Local Shares + +In older versions of ownCloud, you could set an expiration date on both +local and public link shares. Now you can set an expiration date only on +public link shares, and local shares do not expire when public link shares expire. + +=== Zero Quota Not Read-Only + +Setting a user’s storage quota should be the equivalent of read-only, +however, users can still create empty files. + +=== Enterprise 7.0 + +==== No Federated Cloud Sharing with Shibboleth + +Federated Cloud Sharing (formerly Server-to-Server file sharing) does +not work with Shibboleth . + +==== Windows Network Drive + +Windows Network Drive runs only on Linux servers because it requires the +Samba client, which is included in all Linux distributions. + +`php5-libsmbclient` is also required, and there may be issues with older +versions of `libsmbclient`; see Using External Storage > Installing and +Configuring the Windows Network Drive application in the Enterprise +Admin manual for more information. + +By default CentOS has activated SELinux, and the `httpd` process can not +make outgoing network connections. This will cause problems with curl, +LDAP and samba libraries. Again, see Using External Storage > Installing +and Configuring the Windows Network Drive application in the Enterprise +Admin manual for instructions. + +==== Sharepoint Drive SSL + +The SharePoint Drive application does not verify the SSL certificate of +the SharePoint server or the ownCloud server, as it is expected that +both devices are in the same trusted environment. + +==== Shibboleth and WebDAV Incompatible + +Shibboleth and standard WebDAV are incompatible, and cannot be used +together in ownCloud. If Shibboleth is enabled, the ownCloud client uses +an extended WebDAV protocol + +==== No SQLite + +SQLite is no longer an installation option for ownCloud Enterprise +Edition, as it not suitable for multiple-user installations or managing +large numbers of files. + +==== No Application Store + +The application Store is disabled for the Enterprise Edition. + +==== LDAP Home Connector Linux Only + +The LDAP Home Connector application requires Linux (with MySQL, MariaDB, +or PostgreSQL) to operate correctly. diff --git a/modules/ROOT/pages/server_releases.adoc b/modules/ROOT/pages/server_releases.adoc new file mode 100644 index 0000000..fc9e1a9 --- /dev/null +++ b/modules/ROOT/pages/server_releases.adoc @@ -0,0 +1,122 @@ += ownCloud Server Releases +:toc: right +:toclevels: 3 +:page-aliases: releases.adoc + +== Introduction + +include::partial$release-intro-text.adoc[] + +== ownCloud Server Releases + +include::partial$maintenance-release-schedule-link.adoc[] + +=== Latest Stable Release (version {latest-server-version}) + +* xref:{latest-server-version}@server:admin_manual:index.adoc[Administration Manual] +// ({docs-base-url}/pdf/server/{latest-server-version}_ownCloud_Admin_Manual.pdf[Download PDF]) +* xref:{latest-server-version}@server:developer_manual:index.adoc[Developer Manual] +// ({docs-base-url}/pdf/server/{latest-server-version}_ownCloud_Developer_Manual.pdf[Download PDF]) +* xref:{latest-webui-version}@webui:classic_ui:index.adoc[User Manual] +// ({docs-base-url}/pdf/webui/{latest-webui-version}_ownCloud_User_Manual.pdf[Download PDF]) + +=== Previous Stable Release (version {previous-server-version}) + +* xref:{previous-server-version}@server:admin_manual:index.adoc[Administration Manual] +// ({docs-base-url}/pdf/server/{previous-server-version}_ownCloud_Admin_Manual.pdf[Download PDF]) +* xref:{previous-server-version}@server:developer_manual:index.adoc[Developer Manual] +// ({docs-base-url}/pdf/server/{previous-server-version}_ownCloud_Developer_Manual.pdf[Download PDF]) +* xref:{previous-webui-version}@webui:classic_ui:index.adoc[User Manual] +// ({docs-base-url}/pdf/webui/{previous-webui-version}_ownCloud_User_Manual.pdf[Download PDF]) + +=== ownCloud X Appliance + +The ownCloud X Appliance is a complete virtual machine image running ownCloud X, on _Univention Server_. + +* xref:{latest-server-version}@server:admin_manual:appliance/index.adoc[ownCloud X Appliance Manual] + +== Older ownCloud Server Releases + +include::partial$maintenance-release-schedule-link.adoc[] + +These are the older ownCloud releases. +Users of these releases are *strongly encouraged* to upgrade to the latest production release. + +[discrete] +=== ownCloud 10.7 + +* Administration Manual {docs-base-url}/pdf/server/10.7_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.7_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.7_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.6 + +* Administration Manual {docs-base-url}/pdf/server/10.6_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.6_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.6_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.5 + +* Administration Manual {docs-base-url}/pdf/server/10.5_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.5_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.5_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.4 + +* Administration Manual {docs-base-url}/pdf/server/10.4_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.4_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.4_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.3 + +* Administration Manual {docs-base-url}/pdf/server/10.3_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.3_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.3_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.2 + +* Administration Manual {docs-base-url}/pdf/server/10.2_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.2_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.2_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.1 + +* Administration Manual {docs-base-url}/pdf/server/10.1_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.1_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.1_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 10.0 + +* Administration Manual {docs-base-url}/pdf/server/10.0_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/10.0_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/10.0_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 9.1 + +* Administration Manual {docs-base-url}/pdf/server/9.1_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/9.1_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/9.1_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 9.0 + +* Administration Manual {docs-base-url}/pdf/server/9.0_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/9.0_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/9.0_ownCloud_User_Manual.pdf[Download PDF] + +[discrete] +=== ownCloud 8.2 + +* Administration Manual {docs-base-url}/pdf/server/8.2_ownCloud_Admin_Manual.pdf[Download PDF] +* Developer Manual {docs-base-url}/pdf/server/8.2_ownCloud_Developer_Manual.pdf[Download PDF] +* User Manual {docs-base-url}/pdf/server/8.2_ownCloud_User_Manual.pdf[Download PDF] + +All documentation licensed under the Creative Commons Attribution 3.0 Unported license. diff --git a/modules/ROOT/partials/maintenance-release-schedule-link.adoc b/modules/ROOT/partials/maintenance-release-schedule-link.adoc new file mode 100644 index 0000000..5a64fb6 --- /dev/null +++ b/modules/ROOT/partials/maintenance-release-schedule-link.adoc @@ -0,0 +1,2 @@ +NOTE: See the https://github.com/owncloud/core/wiki/Maintenance-and-Release-Schedule[Maintenance and Release schedule] for full release schedule details. + diff --git a/modules/ROOT/partials/nav.adoc b/modules/ROOT/partials/nav.adoc new file mode 100644 index 0000000..74f197c --- /dev/null +++ b/modules/ROOT/partials/nav.adoc @@ -0,0 +1,29 @@ +.xref:index.adoc[Overview] +* Server Releases +** xref:ocis_releases.adoc[Infinite Scale Releases] +** xref:ocis_release_notes.adoc[Infinite Scale Release Notes] +** xref:server_releases.adoc[ownCloud Server Releases] +** xref:server_release_notes.adoc[ownCloud Server Release Notes] +// * xref:webui_releases.adoc[ownCloud Web UI Releases] +// * xref:webui_releases_notes.adoc[ownCloud Web UI Release Notes] +* xref:client_releases.adoc[App Releases] +* xref:how_to_contribute.adoc[How to Contribute] + +// note, atm we cant include an existing component navigation via eg +// include::{latest-server-version}@server:ROOT:nav$partials/nav-server.adoc +// for details about how to setup the nav link properly the see: +// https://antora.zulipchat.com/#narrow/stream/282400-users/topic/Include.20partial.20with.20ROOT.20module.20errors +// BUT: the content gets presented, the links do not work - therefore not used +// a soulution needs to be considered if the current layout should be changed +// see: https://antora.zulipchat.com/#narrow/stream/282400-users/topic/Multi.20Component.20Navigation + +.Server +* xref:{latest-ocis-version}@ocis:ROOT:index.adoc[Infinite Scale] +* xref:{latest-server-version}@server:ROOT:index.adoc[ownCloud Server] + +.Apps and User Interfaces +* xref:{latest-webui-version}@webui:ROOT:index.adoc[Web] +* xref:{latest-desktop-version}@desktop:ROOT:index.adoc[Desktop App] +* xref:{latest-android-version}@android:ROOT:index.adoc[Mobile App for Android] +* xref:{latest-ios-version}@ios-app:ROOT:index.adoc[Mobile App for iOS] +* xref:{latest-branded-version}@branded_clients:ROOT:index.adoc[Branded Clients] diff --git a/modules/ROOT/partials/release-intro-text.adoc b/modules/ROOT/partials/release-intro-text.adoc new file mode 100644 index 0000000..c1982c8 --- /dev/null +++ b/modules/ROOT/partials/release-intro-text.adoc @@ -0,0 +1,7 @@ +ownCloud provides in-depth documentation for three different releases. This in-depth documentations contain an `online` browser-based and `pdf` version. You can select the online releases via the release selector in the browser window or by replacing the release name in the URL. If you replace the shown release name with `latest` in the URL, you will always be directed to the current stable release if the respective page exists. The selectable releases are: + +- The current stable release +- The last release before the current stable release +- The next upcoming, but not yet published release + +ownCloud also provides a `pdf` only documentation for older releases if available. diff --git a/modules/notes_for_the_navigation_file_nav.txt b/modules/notes_for_the_navigation_file_nav.txt new file mode 100644 index 0000000..6c9974c --- /dev/null +++ b/modules/notes_for_the_navigation_file_nav.txt @@ -0,0 +1,13 @@ +The navigation files have been relocated and are accessed differently now. + +The main nav.adoc file is in ROOT and includes all nav.adoc files from the modules. To do so, the modules nav.adoc files needed to be relocated from: + +{modulesdir}/nav.adoc +to +{modulesdir}/partials/nav.adoc + +This is due to the fact that "Antora does not classify files located at the root of the module or in the modules folder" which means, there is no access path to a nav.adoc file which is located in the root of a module. + +As a result, the antora.yml file only contains the main ROOT/nav.adoc file. + +This is benificial, as we now can structure products and their content in a better way. diff --git a/package.json b/package.json new file mode 100644 index 0000000..a66a967 --- /dev/null +++ b/package.json @@ -0,0 +1,61 @@ +{ + "private": true, + "name": "owncloud-docs", + "description": "The ownCloud documentation", + "version": "3.0.0", + "license": "AGPL-3.0", + "author": "The ownCloud Team", + "homepage": "https://github.com/owncloud/docs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/owncloud/docs.git" + }, + "bugs": { + "url": "https://github.com/owncloud/docs/issues" + }, + "contributors": [ + { + "name": "Martin Mattel" + }, + { + "name": "Edith Parzefall" + }, + { + "name": "Phil Davis" + } + ], + "scripts": { + "serve": "http-server public/ -d -i", + "antora": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html site.yml", + "antora-local": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html --url http://localhost:8080 site.yml", + "antora-staging": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html --url https://doc.staging.owncloud.com site.yml", + "antora-bundle": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html --ui-bundle-url ../docs-ui/build/ui-bundle.zip --url https://doc.staging.owncloud.com site.yml", + "antora-dev-local": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html --url http://localhost:8080 site-dev.yml", + "antora-dev-bundle": "antora --stacktrace generate --cache-dir cache --redirect-facility static --generator ./generator/generate-site.js --clean --fetch --attribute format=html --ui-bundle-url ../docs-ui/build/ui-bundle.zip --url http://localhost:8080 site-dev.yml", + "validate": "antora --stacktrace generate --cache-dir cache --redirect-facility disabled --generator ./generator/xref-validator.js --clean --fetch --attribute format=html site.yml", + "linkcheck": "broken-link-checker --filter-level 3 --recursive --verbose" + }, + "dependencies": { + "@antora/cli": "^2.3", + "@antora/site-generator-default": "^2.3", + "@asciidoctor/core": "^3.0.2", + "@elastic/elasticsearch": "^7.17.13", + "asciidoctor-kroki": "^0.18.1", + "cheerio": "^1.0.0-rc.12", + "html-entities": "2.4.0", + "lodash": "^4.17.21" + }, + "devDependencies": { + "broken-link-checker": "^0.7.8", + "http-server": "^14.1.1" + }, + "resolutions": { + "glob-parent": "^6.0" + }, + "keywords": [ + "antora", + "asciidoc", + "documentation", + "owncloud" + ] +} diff --git a/resources/themes/custom-theme.yml b/resources/themes/custom-theme.yml new file mode 100644 index 0000000..7d30300 --- /dev/null +++ b/resources/themes/custom-theme.yml @@ -0,0 +1,257 @@ +font: + catalog: + # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols + Noto Serif: + normal: notoserif-regular-subset.ttf + bold: notoserif-bold-subset.ttf + italic: notoserif-italic-subset.ttf + bold_italic: notoserif-bold_italic-subset.ttf + # M+ 1mn supports ASCII and the circled numbers used for conums + M+ 1mn: + normal: mplus1mn-regular-ascii-conums.ttf + bold: mplus1mn-bold-ascii.ttf + italic: mplus1mn-italic-ascii.ttf + bold_italic: mplus1mn-bold_italic-ascii.ttf + # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols + # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font + M+ 1p Fallback: + normal: mplus1p-regular-fallback.ttf + bold: mplus1p-regular-fallback.ttf + italic: mplus1p-regular-fallback.ttf + bold_italic: mplus1p-regular-fallback.ttf + fallbacks: + - M+ 1p Fallback +page: + background_color: ffffff + layout: portrait + margin: [0.5in, 0.67in, 0.67in, 0.67in] + # margin_inner and margin_outer keys are used for recto/verso print margins when media=press + margin_inner: 0.75in + margin_outer: 0.59in + size: A4 +base: + align: justify + # color as hex string (leading # is optional) + font_color: 333333 + # color as RGB array + #font_color: [51, 51, 51] + # color as CMYK array (approximated) + #font_color: [0, 0, 0, 0.92] + #font_color: [0, 0, 0, 92%] + font_family: Noto Serif + # choose one of these font_size/line_height_length combinations + #font_size: 14 + #line_height_length: 20 + #font_size: 11.25 + #line_height_length: 18 + #font_size: 11.2 + #line_height_length: 16 + font_size: 10.5 + #line_height_length: 15 + # correct line height for Noto Serif metrics + line_height_length: 12 + #font_size: 11.25 + #line_height_length: 18 + line_height: $base_line_height_length / $base_font_size + font_size_large: round($base_font_size * 1.25) + font_size_small: round($base_font_size * 0.85) + font_size_min: $base_font_size * 0.75 + font_style: normal + border_color: eeeeee + border_radius: 4 + border_width: 0.5 +# FIXME vertical_rhythm is weird; we should think in terms of ems +#vertical_rhythm: $base_line_height_length * 2 / 3 +# correct line height for Noto Serif metrics (comes with built-in line height) +vertical_rhythm: $base_line_height_length +horizontal_rhythm: $base_line_height_length +# QUESTION should vertical_spacing be block_spacing instead? +vertical_spacing: $vertical_rhythm +link: + font_color: 428bca +# literal is currently used for inline monospaced in prose and table cells +literal: + font_color: b12146 + font_family: M+ 1mn +menu_caret_content: " \u203a " +heading: + align: left + #font_color: 181818 + font_color: $base_font_color + font_family: $base_font_family + font_style: bold + # h1 is used for part titles (book doctype only) + h1_font_size: floor($base_font_size * 2.6) + # h2 is used for chapter titles (book doctype only) + h2_font_size: floor($base_font_size * 2.15) + h3_font_size: round($base_font_size * 1.7) + h4_font_size: $base_font_size_large + h5_font_size: $base_font_size + h6_font_size: $base_font_size_small + #line_height: 1.4 + # correct line height for Noto Serif metrics (comes with built-in line height) + line_height: 1 + margin_top: $vertical_rhythm * 0.4 + margin_bottom: $vertical_rhythm * 0.9 +title_page: + align: right + logo: + top: 10% + title: + top: 55% + font_size: $heading_h1_font_size + font_color: 999999 + line_height: 0.9 + subtitle: + font_size: $heading_h3_font_size + font_style: bold_italic + line_height: 1 + authors: + margin_top: $base_font_size * 1.25 + font_size: $base_font_size_large + font_color: 181818 + revision: + margin_top: $base_font_size * 1.25 +block: + margin_top: 0 + margin_bottom: $vertical_rhythm +caption: + align: left + font_style: italic + # FIXME perhaps set line_height instead of / in addition to margins? + margin_inside: $vertical_rhythm / 3 + #margin_inside: $vertical_rhythm / 4 + margin_outside: 0 +lead: + font_size: $base_font_size_large + line_height: 1.4 +abstract: + font_color: 5c6266 + font_size: $lead_font_size + line_height: $lead_line_height + font_style: italic + first_line_font_style: bold +admonition: + border_color: $base_border_color + border_width: $base_border_width + padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm] +# icon: +# tip: +# name: fa-lightbulb-o +# stroke_color: 111111 +# size: 24 +blockquote: + font_color: $base_font_color + font_size: $base_font_size_large + border_color: $base_border_color + border_width: 5 + padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_width / 2] + cite_font_size: $base_font_size_small + cite_font_color: 999999 +# code is used for source blocks (perhaps change to source or listing?) +code: + font_color: $base_font_color + font_family: $literal_font_family + font_size: ceil($base_font_size) + padding: $code_font_size + line_height: 1.25 + background_color: f5f5f5 + border_color: cccccc + border_radius: $base_border_radius + border_width: 0.75 +conum: + font_family: M+ 1mn + font_color: $literal_font_color + font_size: $base_font_size + line_height: 4 / 3 +example: + border_color: $base_border_color + border_radius: $base_border_radius + border_width: 0.75 + background_color: transparent + # FIXME reenable margin bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm] +image: + align: left +prose: + margin_top: $block_margin_top + margin_bottom: $block_margin_bottom +sidebar: + border_color: $page_background_color + border_radius: $base_border_radius + border_width: $base_border_width + background_color: eeeeee + # FIXME reenable margin bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25] + title: + align: center + font_color: $heading_font_color + font_family: $heading_font_family + font_size: $heading_h4_font_size + font_style: $heading_font_style +thematic_break: + border_color: $base_border_color + border_style: solid + border_width: $base_border_width + margin_top: $vertical_rhythm * 0.5 + margin_bottom: $vertical_rhythm * 1.5 +description_list: + term_font_style: italic + term_spacing: $vertical_rhythm / 4 + description_indent: $horizontal_rhythm * 1.25 +outline_list: + indent: $horizontal_rhythm * 1.5 + # NOTE item_spacing applies to list items that do not have complex content + item_spacing: $vertical_rhythm / 2 + #marker_font_color: 404040 +table: + background_color: $page_background_color + #head_background_color: + #head_font_color: $base_font_color + head_font_style: bold + even_row_background_color: f9f9f9 + #odd_row_background_color: + foot_background_color: f0f0f0 + border_color: dddddd + border_width: $base_border_width + # HACK accounting for line-height + cell_padding: [3, 3, 6, 3] +toc: + dot_leader_color: dddddd + #dot_leader_content: '. ' + indent: $horizontal_rhythm + line_height: 1.4 +# NOTE In addition to footer, header is also supported +footer: + font_size: $base_font_size_small + # NOTE if background_color is set, background and border will span width of page + border_color: dddddd + border_width: 0.25 + height: $base_line_height_length * 2.5 + line_height: 1 + padding: [$base_line_height_length / 2, 1, 0, 1] + vertical_align: top + #image_vertical_align: or + # additional attributes for content: + # * {page-count} + # * {page-number} + # * {document-title} + # * {document-subtitle} + # * {chapter-title} + # * {section-title} + # * {section-or-chapter-title} + recto: + #columns: "<50%,0%,>50%" + right: + content: '{page-number}' + #content: '{section-or-chapter-title} | {page-number}' + #content: '{document-title} | {page-number}' + #center: + # content: '{page-number}' + verso: + #columns: "<50%,0%,>50%" + left: + content: '{page-number}' + #content: '{page-number} | {chapter-title}' + #center: + # content: '{page-number}' diff --git a/resources/themes/owncloud-theme.yml b/resources/themes/owncloud-theme.yml new file mode 100644 index 0000000..b1d83d6 --- /dev/null +++ b/resources/themes/owncloud-theme.yml @@ -0,0 +1,284 @@ +font: + catalog: + # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols + Noto Serif: + normal: notoserif-regular.ttf + bold: notoserif-bold.ttf + italic: notoserif-italic.ttf + bold_italic: notoserif-bold_italic.ttf + # M+ 1mn supports ASCII and the circled numbers used for conums + M+ 1mn: + normal: mplus-1mn-regular.ttf + bold: mplus-1mn-bold.ttf + italic: mplus-1mn-thin.ttf + bold_italic: mplus-1mn-medium.ttf + # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols + # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font + M+ 1p Fallback: + normal: mplus-1p-regular.ttf + bold: mplus-1p-regular.ttf + italic: mplus-1p-regular.ttf + bold_italic: mplus-1p-regular.ttf + Open Sans: + normal: opensans-light.ttf + bold: opensans-bold.ttf + italic: opensans-italic.ttf + bold_italic: opensans-bolditalic.ttf + DejaVu Sans: + normal: dejavu-sans.ttf + bold: dejavu-sans-bold.ttf + italic: dejavu-sans-oblique.ttf + bold_italic: dejavu-sans-boldoblique.ttf + DejaVu Serif: + normal: dejavuserif.ttf + bold: dejavuserif-bold.ttf + italic: dejavuserif-italic.ttf + bold_italic: dejavuserif-bolditalic.ttf +page: + background_color: ffffff + layout: portrait + margin: [0.5in, 0.9in, 0.5in, 0.9in] + # margin_inner and margin_outer keys are used for recto/verso print margins when media=press + margin_inner: 0.75in + margin_outer: 0.59in + size: A4 +base: + align: left + font_color: 1c1c1c + font_family: "DejaVu Serif" + font_size: 10.5 + line_height_length: 11 + line_height: $base_line_height_length / $base_font_size + #line_height: 1 + font_size_large: round($base_font_size * 1.25) + font_size_small: round($base_font_size * 0.85) + font_size_min: $base_font_size * 0.75 + font_style: normal + border_color: eeeeee + border_radius: 4 + border_width: 0.5 +# FIXME vertical_rhythm is weird; we should think in terms of ems +#vertical_rhythm: $base_line_height_length * 2 / 3 +# correct line height for Noto Serif metrics (comes with built-in line height) +vertical_rhythm: $base_line_height_length +horizontal_rhythm: $base_line_height_length +# QUESTION should vertical_spacing be block_spacing instead? +vertical_spacing: $vertical_rhythm +link: + font_color: 3c7467 +# literal is currently used for inline monospaced in prose and table cells +literal: + font_color: b12146 + font_family: "DejaVu Sans" +menu_caret_content: " \u203a " +heading: + align: left + #font_color: 181818 + font_color: 24475f + font_family: "Open Sans" + font_style: bold + # h1 is used for part titles (book doctype only) + h1: + page_break_after: always + page_break_before: auto + font_size: floor($base_font_size * 2.7) + # h2 is used for chapter titles (book doctype only) + h2_font_size: floor($base_font_size * 2.0) + h3_font_size: round($base_font_size * 1.6) + h4_font_size: $base_font_size_large + h5_font_size: $base_font_size + h6_font_size: $base_font_size_small + #line_height: 1.4 + # correct line height for Noto Serif metrics (comes with built-in line height) + line_height: 1 + margin_top: $vertical_rhythm * 0.4 + margin_bottom: $vertical_rhythm * 0.9 +title_page: + align: right + logo: + top: 10% + title: + top: 55% + font_size: floor($base_font_size * 2.14) + font_color: 24475f + font_family: $heading_font_family + font_style: bold + line_height: 0.9 + subtitle: + font_size: floor($base_font_size * 1.7) + font_style: bold_italic + font_family: $heading_font_family + line_height: 1 + authors: + margin_top: $base_font_size * 1.25 + font_size: $base_font_size_large + font_color: 24475f + font_family: $heading_font_family + revision: + margin_top: $base_font_size * 1.25 + font_style: bold + font_color: 24475f +block: + margin_top: 0 + margin_bottom: $vertical_rhythm +caption: + align: left + font_style: italic + # FIXME perhaps set line_height instead of / in addition to margins? + margin_inside: $vertical_rhythm / 3 + #margin_inside: $vertical_rhythm / 4 + margin_outside: 0 +lead: + font_size: $base_font_size_large + line_height: 1.4 +abstract: + font_color: 5c6266 + font_size: $lead_font_size + line_height: $lead_line_height + font_style: italic + first_line_font_style: bold +admonition: + border_color: $base_border_color + border_width: $base_border_width + padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm] +# icon: +# tip: +# name: fa-lightbulb-o +# stroke_color: 111111 +# size: 24 +blockquote: + font_color: $base_font_color + font_size: $base_font_size_large + border_color: $base_border_color + border_width: 5 + padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_width / 2] + cite_font_size: $base_font_size_small + cite_font_color: 999999 +# code is used for source blocks (perhaps change to source or listing?) +code: + font_color: $base_font_color + font_family: "DejaVu Sans" + font_size: $base_font_size + padding: $code_font_size + line_height: 1.25 + background_color: f7f7f7 + border_color: efefef + border_radius: $base_border_radius + border_width: 0.75 +conum: + font_family: M+ 1mn + font_color: $literal_font_color + font_size: $base_font_size + line_height: 4 / 3 +example: + border_color: $base_border_color + border_radius: $base_border_radius + border_width: 0.75 + background_color: transparent + # FIXME reenable margin bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm] +image: + align: left +prose: + margin_top: $block_margin_top + margin_bottom: $block_margin_bottom +sidebar: + border_color: $page_background_color + border_radius: $base_border_radius + border_width: $base_border_width + background_color: eeeeee + # FIXME reenable margin bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25] + title: + align: center + font_color: $heading_font_color + font_family: $heading_font_family + font_size: $heading_h4_font_size + font_style: $heading_font_style +thematic_break: + border_color: $base_border_color + border_style: solid + border_width: $base_border_width + margin_top: $vertical_rhythm * 0.5 + margin_bottom: $vertical_rhythm * 1.5 +description_list: + term_font_style: italic + term_spacing: $vertical_rhythm / 4 + description_indent: $horizontal_rhythm * 1.25 +outline_list: + indent: $horizontal_rhythm * 1.5 + # NOTE item_spacing applies to list items that do not have complex content + item_spacing: $vertical_rhythm / 2 + #marker_font_color: 404040 +table: + background_color: $page_background_color + head_font_style: bold + head_font_family: Helvetica + even_row_background_color: f9f9f9 + foot_background_color: f0f0f0 + border_color: dddddd + border_width: $base_border_width + # HACK accounting for line-height + cell_padding: [3, 3, 3, 3] +toc: + dot_leader_color: dddddd + indent: $horizontal_rhythm + line_height: 1.4 + font_family: $heading_font_family +# NOTE In addition to footer, header is also supported +footer: + font_size: $base_font_size_small + font_family: Helvetica + font_style: bold + border_color: 1c1c1c + border_width: 0.25 + height: $base_line_height_length * 2.5 + line_height: 1 + padding: [$base_line_height_length / 2, 2, 1, 2] + vertical_align: top + #image_vertical_align: or + # additional attributes for content: + # * {page-count} + # * {page-number} + # * {document-title} + # * {document-subtitle} + # * {chapter-title} + # * {section-title} + # * {section-or-chapter-title} + recto: + #columns: "<50%,0%,>50%" + right: + #content: '{page-number}' + content: '{section-or-chapter-title} | {page-number}' + #content: '{document-title} | {page-number}' + #center: + # content: '{page-number}' + verso: + #columns: "<50%,0%,>50%" + left: + #content: '{page-number}' + content: '{page-number} | {section-or-chapter-title}' + #content: '{page-number} | {chapter-title}' + #center: + # content: '{page-number}' +header: + font_size: $base_font_size_small + font_family: "Noto Serif" + font_style: bold + border_color: 1c1c1c + border_width: 0.25 + height: $base_line_height_length * 2.5 + line_height: 1 + padding: [$base_line_height_length / 2, 1, 2, 1] + vertical_align: bottom + recto: + right: + content: '{document-title}, {appversion}' + #content: '{page-number}' + #content: '{section-or-chapter-title} | {page-number}' + #content: '{document-title} | {page-number}' + verso: + left: + content: '{document-title}, {appversion}' + #content: '{page-number}' + #content: '{page-number} | {chapter-title}' diff --git a/site.yml b/site.yml new file mode 100644 index 0000000..636633c --- /dev/null +++ b/site.yml @@ -0,0 +1,96 @@ +# note that this site.yml file is for local building and testing only +site: + title: ownCloud Main Page + url: https://doc.owncloud.com + start_page: docs_main::index.adoc + +content: + sources: + - url: . + branches: + - HEAD + +ui: + output_dir: assets + bundle: + snapshot: true + url: https://minio.owncloud.com/documentation/ui-bundle.zip + +output: + clean: true + dir: public + +asciidoc: + attributes: +# branch-specific-variables: 'see antora.yml' +# build relevant + # asciidoctor prefix for section IDs + idprefix: '' + idseparator: '-' + # Antora User Interface Macros (btn, menu) + experimental: true + # Antora pagination (prev page, next page) + page-pagination: true + # Custom attribute page-component-build-list + # Only embed named opengraph images in docs-ui via src/partials/head-meta-opengraph.hbs sourced from docs/overlay + page-component-build-list: 'android, branding, desktop, docs, ios-app, ocis, server, user, webui' +# common + docs-base-url: 'https://doc.owncloud.com' + oc-complete-base-url: 'https://download.owncloud.com/server/stable' + oc-contact-url: 'https://owncloud.com/contact/' + oc-help-url: 'https://owncloud.com/docs-guides/' + oc-marketplace-url: 'https://marketplace.owncloud.com' + oc-central-url: 'https://central.owncloud.org' + oc-support-url: 'https://owncloud.com/support' +# docs + latest-docs-version: 'next' + previous-docs-version: 'next' +# server + latest-server-version: '10.13' + latest-server-download-version: '10.13.4' + previous-server-version: '10.12' + current-server-version: '10.13' + oc-changelog-url: 'https://owncloud.com/changelog/server/' + oc-install-package-url: 'https://download.owncloud.com/server/stable/?sort=time&order=asc' + oc-examples-server-url: 'https://owncloud.install.com/owncloud' + oc-examples-server-ip: '127.0.0.1' + oc-examples-username: 'username' + oc-examples-password: 'password' + oc-complete-name: 'owncloud-complete-latest' + occ-command-example-prefix: 'sudo -u www-data ./occ' + occ-command-example-prefix-no-sudo: 'occ' + php-net-url: 'https://www.php.net' + php-supported-versions-url: 'https://www.php.net/supported-versions.php' + http-status-codes-base-url: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status' + std-port-http: '8080' + std-port-memcache: '11211' + std-port-mysql: '3306' + std-port-redis: '6379' +# ocis + latest-ocis-version: 'next' + previous-ocis-version: 'next' + # these versions are just for printing like in releases but not used for referencing + ocis-actual-version: '4.0.4' + ocis-former-version: '3.0.0' + ocis-compiled: '2023-10-06 00:00:00 +0000 UTC' + ocis-downloadpage-url: 'https://download.owncloud.com/ocis/ocis/stable/' +# webui + latest-webui-version: 'next' + previous-webui-version: 'next' +# desktop + latest-desktop-version: '5.2' + previous-desktop-version: '5.1' +# ios-app + latest-ios-version: '12.0' + previous-ios-version: '11.11' +# android + latest-android-version: '4.1' + previous-android-version: '4.0' +# branded + latest-branded-version: 'next' + previous-branded-version: 'next' + extensions: + - ./lib/extensions/tabs.js + - ./lib/extensions/remote-include-processor.js + - ./node_modules/asciidoctor-kroki/src/asciidoctor-kroki.js + diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..3a877e7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2422 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@antora/asciidoc-loader@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/asciidoc-loader/-/asciidoc-loader-2.3.4.tgz#b5c4b6447981e191cea8438226a8e76904fc1e7d" + integrity sha512-IQ0d/hnOCGZXzTYUwKAw2BlyRMI4Kg/zu7XejQ6ERIncjuUUv/+PhlzVxoJNT0r9uasJFHDlZ7l3X53Hn+MUuQ== + dependencies: + asciidoctor.js "1.5.9" + opal-runtime "1.0.11" + +"@antora/cli@^2.3": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/cli/-/cli-2.3.4.tgz#1b2df06eb5bbbfcb5c6ae8618e18c79dc1f6758e" + integrity sha512-KItaWFEf/X4LLY2XCidjD00oUp4Ay7y9Hu26+T8dPqV+qnMwOL+MGHhYXsJz+4JaeNJu1Ofwc4onmShpwHQruA== + dependencies: + "@antora/playbook-builder" "2.3.4" + commander "~6.1" + +"@antora/content-aggregator@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/content-aggregator/-/content-aggregator-2.3.4.tgz#6b1f4258fbf2a42c79be52886edbf36c2703a877" + integrity sha512-ZwlGm/t90PUnGVo+pir71O+wC+gyXnVuhoAed+9bBLjsiGI7EGUzwUEXSZqHRSihPx5XLFj6pZinoCGX+uabcw== + dependencies: + "@antora/expand-path-helper" "~1.0" + braces "~3.0" + cache-directory "~2.0" + camelcase-keys "~6.2" + fs-extra "~8.1" + isomorphic-git "0.78.5" + js-yaml "~3.14" + matcher "~2.1" + mime-types "~2.1" + multi-progress "~2.0" + picomatch "~2.2" + through2 "~4.0" + vinyl "~2.2" + vinyl-fs "~3.0" + +"@antora/content-classifier@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/content-classifier/-/content-classifier-2.3.4.tgz#a2c59d5e971ed3ed48860bee2fd4d93b02012f97" + integrity sha512-DR4I6dLSZEFOS3T0F/hYwLf3AGY2Rb3e9j8V8ygEFzdP8OySAAZWyTjjJPF4pJZqjWtqD7s7S1f5/cCI83977Q== + dependencies: + "@antora/asciidoc-loader" "2.3.4" + vinyl "~2.2" + +"@antora/document-converter@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/document-converter/-/document-converter-2.3.4.tgz#c787ebe0f24a3bc613843b557a1b04488f48c0be" + integrity sha512-Fo2SKdX3BlNrvfQEBOi2II+YmYzdEqKQ5+lO2pzxJuNBfqN0kJJYYk30jFPR27h6QuU43U/XZgufyDt+FjfdZg== + dependencies: + "@antora/asciidoc-loader" "2.3.4" + +"@antora/expand-path-helper@~1.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@antora/expand-path-helper/-/expand-path-helper-1.0.0.tgz#3bfd6938ab86d4709af8d869cbf3bb17b8fe8912" + integrity sha512-hg3y6M3OvRTb7jtLAnwwloYDxafbyKYttcf16kGCXvP7Wqosh7c+Ag+ltaZ7VSebpzpphO/umb/BXdpU7rxapw== + +"@antora/navigation-builder@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/navigation-builder/-/navigation-builder-2.3.4.tgz#aace46d61506ecf25de2d47f3a16f9d7debb47de" + integrity sha512-55I7p9tNTernQ/YR1+mp6RRXMV5EcU8q20Tdodt3mazdm3ObTe9E9XVAvUDFmDzRA27D0eb06jVRwLoth1gHYA== + dependencies: + "@antora/asciidoc-loader" "2.3.4" + +"@antora/page-composer@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/page-composer/-/page-composer-2.3.4.tgz#47f6438cce7d7140c3e2658d8224ef138471d256" + integrity sha512-xY0O9X87DzcoP6k/5Jx55ysy0iQIhgav3q1JbOQK/FoYQYHbiQgmVWOjJdqh5nZw57ih3yE20JROPuYqOYuUZA== + dependencies: + handlebars "~4.7" + require-from-string "~2.0" + +"@antora/playbook-builder@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/playbook-builder/-/playbook-builder-2.3.4.tgz#7f33d92a3800a3e3c78ebf17d4b0cd46644e0525" + integrity sha512-iPjBndcoZhWqpN608WOkXKUUD94b3JX38igebshiT5/NRINJbeEclpdEX/gPv8D1Z1JcrSVGURZQO1uML76dkg== + dependencies: + "@iarna/toml" "~2.2" + camelcase-keys "~6.2" + convict "~6.0" + js-yaml "~3.14" + json5 "~2.1" + +"@antora/redirect-producer@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/redirect-producer/-/redirect-producer-2.3.4.tgz#5f47337e8062d304518359fbbbcaaf75e82b656b" + integrity sha512-148amiLc+1Pod6kluAOBke8OATFWFUW3LZdTPFVfqX1lJolCp5ciOnGciy52sIIysSyVkQUjotEUhqGO9Af1EQ== + dependencies: + "@antora/asciidoc-loader" "2.3.4" + vinyl "~2.2" + +"@antora/site-generator-default@^2.3": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/site-generator-default/-/site-generator-default-2.3.4.tgz#1b4fe3e1097ea03aa8877f98d944f26921049418" + integrity sha512-uRiFJ/nG5bxjDmFOur27ae7A1J7r+OFVocEwx+vVLRvVYfNHxYP0fI2uUrmJTci8xJ92NLH9VLHpfsHypsoq9Q== + dependencies: + "@antora/asciidoc-loader" "2.3.4" + "@antora/content-aggregator" "2.3.4" + "@antora/content-classifier" "2.3.4" + "@antora/document-converter" "2.3.4" + "@antora/navigation-builder" "2.3.4" + "@antora/page-composer" "2.3.4" + "@antora/playbook-builder" "2.3.4" + "@antora/redirect-producer" "2.3.4" + "@antora/site-mapper" "2.3.4" + "@antora/site-publisher" "2.3.4" + "@antora/ui-loader" "2.3.4" + +"@antora/site-mapper@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/site-mapper/-/site-mapper-2.3.4.tgz#ea19fc1eff09bbb49f14a3e80f829867a695356e" + integrity sha512-GVghn6ausIWZlUfbEEdDD4YB7M1mWJAUMokyha9sE5w0gyYoWwukKWQiwCwk/JhvnwXunMLhEUm6y2nrHEmlLw== + dependencies: + "@antora/content-classifier" "2.3.4" + vinyl "~2.2" + +"@antora/site-publisher@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/site-publisher/-/site-publisher-2.3.4.tgz#cb3a931f39fd6973d10172a07c730cb0ce40208f" + integrity sha512-7xI/5OdjKq5tkdGzE0ABkl/QpIcgtnof+rnIWZweQKeQtA3LWutvEHtdIeXLQt0oNZmE/kf45FwC2XCg9/ptDg== + dependencies: + "@antora/expand-path-helper" "~1.0" + fs-extra "~8.1" + gulp-vinyl-zip "~2.2" + vinyl "~2.2" + vinyl-fs "~3.0" + +"@antora/ui-loader@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@antora/ui-loader/-/ui-loader-2.3.4.tgz#3c060c2da8752f42cf841569519396a6f4155cba" + integrity sha512-eorTmZW7zc6ZHgGLt3Vrq7mzPuobPeJnyfli50/m/DIQ91slkqjPKUYGcq4paPEz6IWoa7LT2ZwtwA5KzMyTPg== + dependencies: + "@antora/expand-path-helper" "~1.0" + bl "~4.0" + cache-directory "~2.0" + camelcase-keys "~6.2" + fs-extra "~8.1" + got "~9.6" + gulp-vinyl-zip "~2.2" + js-yaml "~3.14" + minimatch-all "~1.1" + through2 "~4.0" + vinyl "~2.2" + vinyl-fs "~3.0" + +"@asciidoctor/core@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@asciidoctor/core/-/core-3.0.2.tgz#05df6c8f6c8a975e1ecf1ac886e826af69c49d94" + integrity sha512-GbQWpqLlM/kN+90QrlLYISdU/vbGkUSeHsBQR9BzYNmVHDd6CEb/xfQZIFUo//EtT7e+QS3Sv3yYDzgjr96TbA== + dependencies: + "@asciidoctor/opal-runtime" "3.0.1" + unxhr "1.2.0" + +"@asciidoctor/opal-runtime@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@asciidoctor/opal-runtime/-/opal-runtime-3.0.1.tgz#b6d995fb36bdb27cc7350de39cece9dd302fce40" + integrity sha512-iW7ACahOG0zZft4A/4CqDcc7JX+fWRNjV5tFAVkNCzwZD+EnFolPaUOPYt8jzadc0+Bgd80cQTtRMQnaaV1kkg== + dependencies: + glob "8.1.0" + unxhr "1.2.0" + +"@elastic/elasticsearch@^7.17.13": + version "7.17.13" + resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-7.17.13.tgz#6f5c17ed0c09d92c00ba2f10d5081bbb5d4d247b" + integrity sha512-GMXtFVqd3FgUlTtPL/GDc+3GhwvfZ0kSuegCvVVqb58kd+0I6U6u7PL8QFRLHtwzqLEBmYLdwr4PRkBAWKGlzA== + dependencies: + debug "^4.3.1" + hpagent "^0.1.1" + ms "^2.1.3" + secure-json-parse "^2.4.0" + +"@iarna/toml@~2.2": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/node@*": + version "15.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" + integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +asciidoctor-kroki@^0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/asciidoctor-kroki/-/asciidoctor-kroki-0.18.1.tgz#95e55d58b94b54180282b1b5f2b791e5781c1770" + integrity sha512-eQxbBCaPTbyNoJtk62Gp+6h4LlJp2147g7eS0QIVjqaLpFa8sseH0BlMiBoATrJUYv1w3nR+FTzvloBJ/MioYg== + dependencies: + json5 "2.2.3" + mkdirp "2.1.3" + pako "2.1.0" + rusha "0.8.14" + unxhr "1.2.0" + +asciidoctor.js@1.5.9: + version "1.5.9" + resolved "https://registry.yarnpkg.com/asciidoctor.js/-/asciidoctor.js-1.5.9.tgz#28f8e8ee134b82627f0240e9b6a201b3d15d9524" + integrity sha512-k5JgwyV82TsiCpnYbDPReuHhzf/vRUt6NaZ+OGywkDDGeGG/CPfvN2Gd1MJ0iIZKDyuk4iJHOdY/2x1KBrWMzA== + dependencies: + opal-runtime "1.0.11" + +async-lock@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.3.0.tgz#0fba111bea8b9693020857eba4f9adca173df3e5" + integrity sha512-8A7SkiisnEgME2zEedtDYPxUPzdv3x//E7n5IFktPAtMYSEAV7eNJF0rMwrVyUFj6d/8rgajLantbjcNRQYXIg== + +async@^2.6.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784" + integrity sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q= + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +basic-auth@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +bhttp@^1.2.1: + version "1.2.8" + resolved "https://registry.yarnpkg.com/bhttp/-/bhttp-1.2.8.tgz#8172ef69f16239bd77c30fa67f72c89737af24b2" + integrity sha512-ZwEA5FKEUhc98EHRX+BkNmUOs48RTnglvfze2+p0HrMPwhQBtVw1aAYyylnCtRl6x6vltCkzGo2+twQ6LVfm6Q== + dependencies: + bluebird "^2.8.2" + concat-stream "^1.4.7" + debug "^2.1.1" + dev-null "^0.1.1" + errors "^0.2.0" + extend "^2.0.0" + form-data2 "^1.0.0" + form-fix-array "^1.0.0" + lodash.clonedeep "^4.5.0" + lodash.merge "^4.6.2" + stream-length "^1.0.2" + through2-sink "^1.0.0" + through2-spy "^1.2.0" + tough-cookie "^2.3.1" + +bl@~4.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.4.tgz#f4fda39f81a811d0df6368c1ed91dae499d1c900" + integrity sha512-7tdr4EpSd7jJ6tuQ21vu2ke8w7pNEstzj1O8wwq6sNNzO3UDi5MA8Gny/gquCj7r2C6fHudg8tKRGyjRgmvNxQ== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^2.3.5, bluebird@^2.6.2, bluebird@^2.8.1, bluebird@^2.8.2: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bops@~0.0.6: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bops/-/bops-0.0.7.tgz#b4a0a5a839a406454af0fe05a8b91a7a766a54e2" + integrity sha1-tKClqDmkBkVK8P4FqLkaenZqVOI= + dependencies: + base64-js "0.0.2" + to-utf8 "0.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +broken-link-checker@^0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/broken-link-checker/-/broken-link-checker-0.7.8.tgz#47ea837e1b43ec2feac220207dc3f44c03b49ec0" + integrity sha512-/zH4/nLMNKDeDH5nVuf/R6WYd0Yjnar1NpcdAO2+VlwjGKzJa6y42C03UO+imBSHwe6BefSkVi82fImE2Rb7yg== + dependencies: + bhttp "^1.2.1" + calmcard "~0.1.1" + chalk "^1.1.3" + char-spinner "^1.0.1" + condense-whitespace "^1.0.0" + default-user-agent "^1.0.0" + errno "~0.1.4" + extend "^3.0.0" + http-equiv-refresh "^1.0.0" + humanize-duration "^3.9.1" + is-stream "^1.0.1" + is-string "^1.0.4" + limited-request-queue "^2.0.0" + link-types "^1.1.0" + maybe-callback "^2.1.0" + nopter "~0.3.0" + parse5 "^3.0.2" + robot-directives "~0.3.0" + robots-txt-guard "~0.1.0" + robots-txt-parse "~0.0.4" + urlcache "~0.7.0" + urlobj "0.0.11" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cache-directory@~2.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cache-directory/-/cache-directory-2.0.0.tgz#0d8efa1abbb6d1dd926d255ce733b4f7c5ab2892" + integrity sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA== + dependencies: + xdg-basedir "^3.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-path@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +calmcard@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/calmcard/-/calmcard-0.1.1.tgz#35ac2b66492b0ed39ad06a893a0ff6e61124e449" + integrity sha1-NawrZkkrDtOa0GqJOg/25hEk5Ek= + +camelcase-keys@~6.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ= + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + +char-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" + integrity sha1-5upnvSR+EHESmDt6sEee02KAAIE= + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +clean-git-ref@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/clean-git-ref/-/clean-git-ref-2.0.1.tgz#dcc0ca093b90e527e67adb5a5e55b1af6816dcd9" + integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== + +cli-table@~0.3.1: + version "0.3.6" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" + integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== + dependencies: + colors "1.0.3" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +combined-stream2@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/combined-stream2/-/combined-stream2-1.1.2.tgz#f6e14b7a015666f8c7b0a1fac506240164ac3570" + integrity sha1-9uFLegFWZvjHsKH6xQYkAWSsNXA= + dependencies: + bluebird "^2.8.1" + debug "^2.1.1" + stream-length "^1.0.1" + +commander@~6.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" + integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.4.7: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +condense-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-1.0.0.tgz#8376d98ef028e6cb2cd2468e28ce42c5c65ab1a9" + integrity sha1-g3bZjvAo5sss0kaOKM5CxcZasak= + +convert-source-map@^1.5.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +convict@~6.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/convict/-/convict-6.0.1.tgz#d909a844d8a1187d1366d47d9bc21ec052e8bf0d" + integrity sha512-M4YNNq5NV4/VS8JhvBSHAokwvQRL4evEuU0VFe1GNPiqnj9TAkLXpf39ImCCVZlsp3CFp04bc/kRSWPGsJGJWg== + dependencies: + lodash.clonedeep "^4.5.0" + yargs-parser "^18.1.3" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +corser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= + +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +debug@^2.1.1: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +default-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6" + integrity sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY= + dependencies: + os-name "~1.0.3" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +dev-null@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818" + integrity sha1-WiBc48Ky73e2I41roXnrdMag6Bg= + +diff3@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/diff3/-/diff3-0.0.3.tgz#d4e5c3a4cdf4e5fe1211ab42e693fcb4321580fc" + integrity sha1-1OXDpM305f4SEatC5pP8tDIVgPw= + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.2.0, entities@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" + integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== + +eol@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.2.0.tgz#2f6db086a243a46e3e5dbd0e13435c7ebebf09dd" + integrity sha1-L22whqJDpG4+Xb0OE0Ncfr6/Cd0= + +errno@~0.1.4: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +errors@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/errors/-/errors-0.2.0.tgz#0f51e889daa3e11b19e7186d11f104aa66eb2403" + integrity sha1-D1Hoidqj4RsZ5xhtEfEEqmbrJAM= + +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +extend@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-2.0.2.tgz#1b74985400171b85554894459c978de6ef453ab7" + integrity sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ== + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" + integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== + +form-data2@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/form-data2/-/form-data2-1.0.4.tgz#9f91ebd83003f9e117f94f1ebd72665ae0b49a40" + integrity sha512-buz4C3F6/7Vpdxt7dNU/tSfjQO/5z9Pyjfb43VhlVvSos5zVhCcMuW9sF1yJ2FdxZRCD2sWQ9WhqUiYLt+AUVQ== + dependencies: + bluebird "^2.8.2" + combined-stream2 "^1.0.2" + debug "^2.1.1" + mime "^1.3.4" + uuid "^2.0.1" + +form-fix-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/form-fix-array/-/form-fix-array-1.0.0.tgz#a1347a47e53117ab7bcdbf3e2f3ec91c66769bc8" + integrity sha1-oTR6R+UxF6t7zb8+Lz7JHGZ2m8g= + +fs-extra@~8.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +git-apply-delta@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/git-apply-delta/-/git-apply-delta-0.0.7.tgz#fb76ae144540d79440b52b31de03e63c993c7219" + integrity sha1-+3auFEVA15RAtSsx3gPmPJk8chk= + dependencies: + bops "~0.0.6" + varint "0.0.3" + +glob-parent@^3.1.0, glob-parent@^6.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob@6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^7.1.1: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globalyzer@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" + integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +got@~9.6: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +gulp-vinyl-zip@~2.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/gulp-vinyl-zip/-/gulp-vinyl-zip-2.2.1.tgz#24a60230afeb3b88b1efba06d31653ef7145dfd8" + integrity sha512-9lwCZUkrENzP649hVQB2r+8GgeGtVrqA2fEeVDX6aYr6+yJjdczWu0r1C6WvbZdzhXcA61MtR5MEyjR9a3D7cw== + dependencies: + queue "^4.2.1" + through "^2.3.8" + through2 "^2.0.3" + vinyl "^2.0.2" + vinyl-fs "^3.0.3" + yauzl "^2.2.1" + yazl "^2.2.1" + +handlebars@~4.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4= + dependencies: + ansi-regex "^0.2.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hpagent@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-0.1.2.tgz#cab39c66d4df2d4377dbd212295d878deb9bdaa9" + integrity sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ== + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +html-entities@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-equiv-refresh@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz#8ec538866042be5f3f7afa737d198d94beb1b07b" + integrity sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs= + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-server@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e" + integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A== + dependencies: + basic-auth "^2.0.1" + chalk "^4.1.2" + corser "^2.0.1" + he "^1.2.0" + html-encoding-sniffer "^3.0.0" + http-proxy "^1.18.1" + mime "^1.6.0" + minimist "^1.2.6" + opener "^1.5.1" + portfinder "^1.0.28" + secure-compare "3.0.1" + union "~0.5.0" + url-join "^4.0.1" + +humanize-duration@^3.9.1: + version "3.27.0" + resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.0.tgz#3f781b7cf8022ad587f76b9839b60bc2b29636b2" + integrity sha512-qLo/08cNc3Tb0uD7jK0jAcU5cnqCM0n568918E7R2XhMr/+7F37p4EY062W/stg7tmzvknNn9b/1+UhVRzsYrQ== + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-browser@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9" + integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ== + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbot@^2.0.0: + version "2.5.7" + resolved "https://registry.yarnpkg.com/isbot/-/isbot-2.5.7.tgz#bc98f22200d1a925bc933c7e4fb6eca8dde70f7b" + integrity sha512-8P+oGrRDvuCpDdovK9oD4skHmSXu56bsK17K2ovXrkW7Ic4H9Y4AqnUUqlXqZxcqQ2358kid9Rb+fbLH5yeeUw== + +isomorphic-git@0.78.5: + version "0.78.5" + resolved "https://registry.yarnpkg.com/isomorphic-git/-/isomorphic-git-0.78.5.tgz#013f8f8c280b8e0f8bb10ffa251eb87e9bb1190b" + integrity sha512-LrF5t9x7RdFeg84NsYpZo9qF1MZeb56LpBm6Jv47qMjnWMv0Il/3wPTA8I/lUYywgVbvF/e7xypHauj5auKW3w== + dependencies: + async-lock "^1.1.0" + clean-git-ref "^2.0.1" + crc-32 "^1.2.0" + diff3 "0.0.3" + git-apply-delta "0.0.7" + globalyzer "^0.1.4" + globrex "^0.1.2" + ignore "^5.1.4" + marky "^1.2.1" + minimisted "^2.0.0" + pako "^1.0.10" + pify "^4.0.1" + readable-stream "^3.4.0" + sha.js "^2.4.9" + simple-get "^3.0.2" + +js-yaml@~3.14: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +json5@~2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +limited-request-queue@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/limited-request-queue/-/limited-request-queue-2.0.0.tgz#14c7c120b138060b19a2a1030abaf6693572650d" + integrity sha1-FMfBILE4BgsZoqEDCrr2aTVyZQ0= + dependencies: + is-browser "^2.0.1" + parse-domain "~0.2.0" + +link-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/link-types/-/link-types-1.1.0.tgz#af65e59db52e70c1ffb18ac4c3cb056bfe796830" + integrity sha1-r2XlnbUucMH/sYrEw8sFa/55aDA= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.14, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@4.1.x: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +map-obj@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== + +marky@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.2.tgz#4456765b4de307a13d263a69b0c79bf226e68323" + integrity sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ== + +matcher@~2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-2.1.0.tgz#64e1041c15b993e23b786f93320a7474bf833c28" + integrity sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ== + dependencies: + escape-string-regexp "^2.0.0" + +maybe-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maybe-callback/-/maybe-callback-2.1.0.tgz#8afa0ba7b691a7ab123e7f12f65e32bb5d1f8243" + integrity sha1-ivoLp7aRp6sSPn8S9l4yu10fgkM= + +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + +mime-types@~2.1: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + +mime@^1.3.4, mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +minimatch-all@~1.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minimatch-all/-/minimatch-all-1.1.0.tgz#40c496a27a2e128d19bf758e76bb01a0c7145787" + integrity sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c= + dependencies: + minimatch "^3.0.2" + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minimisted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minimisted/-/minimisted-2.0.1.tgz#d059fb905beecf0774bc3b308468699709805cb1" + integrity sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA== + dependencies: + minimist "^1.2.5" + +mkdirp@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" + integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== + +mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multi-progress@~2.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/multi-progress/-/multi-progress-2.0.0.tgz#29ccb42cf24874b1c6384f03127ce5dff7b22f2c" + integrity sha1-Kcy0LPJIdLHGOE8DEnzl3/eyLyw= + dependencies: + progress "^1.1.8" + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nopt@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/nopter/-/nopter-0.3.0.tgz#b9690e6fab8f256b37e4e7ccd23e2b38450cc71f" + integrity sha1-uWkOb6uPJWs35OfM0j4rOEUMxx8= + dependencies: + caller-path "~0.1.0" + camelcase "^1.0.2" + chalk "~0.5.1" + cli-table "~0.3.1" + eol "~0.2.0" + nopt "^3.0.1" + object-assign "^2.0.0" + splitargs "~0.0.3" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" + +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + dependencies: + boolbase "^1.0.0" + +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo= + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.0.4: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opal-runtime@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/opal-runtime/-/opal-runtime-1.0.11.tgz#81fc2a2084ae5f25d5609eada375b756a3dab036" + integrity sha512-L+6pnRvXPlDtbamBRnJAnB9mEMXmsIQ/b+0r/2xJ5/n/nxheEkLo+Pm5QNQ08LEbEN9TI6/kedhIspqRRu6tXA== + dependencies: + glob "6.0.4" + xmlhttprequest "1.8.0" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +os-name@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + integrity sha1-GzefZINa98Wn9JizV8uVIVwVnt8= + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + integrity sha1-8heRGigTaUmvG/kwiyQeJzfTzWw= + dependencies: + minimist "^1.1.0" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +pako@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + +pako@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-domain@~0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/parse-domain/-/parse-domain-0.2.2.tgz#188989b1e2e7398bff3c4f4fd7dca157eb51fac1" + integrity sha1-GImJseLnOYv/PE9P19yhV+tR+sE= + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +picomatch@~2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +portfinder@^1.0.28: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@^6.4.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue@^4.2.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/queue/-/queue-4.5.1.tgz#6e4290a2d7e99dc75b34494431633fe5437b0dac" + integrity sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw== + dependencies: + inherits "~2.0.0" + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +readable-stream@3, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@~1.0.17: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +require-from-string@~2.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +robot-directives@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/robot-directives/-/robot-directives-0.3.0.tgz#174fb1ffc2a9b97877301e87c89b395f429d1f65" + integrity sha1-F0+x/8KpuXh3MB6HyJs5X0KdH2U= + dependencies: + isbot "^2.0.0" + useragent "^2.1.8" + +robots-txt-guard@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/robots-txt-guard/-/robots-txt-guard-0.1.1.tgz#0dedec2dc325338989bb14158bef1f8539b705d4" + integrity sha512-6+nGkE6c2dI9/dmhmNcoMKVwJxlA6sgN/XNo0rm6LLdA0hnj4YkpgrZdhMPl58gJkAqeiHlf4+8tJcLM1tv1Ew== + +robots-txt-parse@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/robots-txt-parse/-/robots-txt-parse-0.0.4.tgz#f7d1f323f79921d7e9c6c4bbd25048f6e9810d71" + integrity sha1-99HzI/eZIdfpxsS70lBI9umBDXE= + dependencies: + bluebird "^2.3.5" + split "^0.3.0" + stream-combiner "^0.2.1" + through "^2.3.4" + +rusha@0.8.14: + version "0.8.14" + resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68" + integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +secure-compare@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= + +secure-json-parse@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.4.0.tgz#5aaeaaef85c7a417f76271a4f5b0cc3315ddca85" + integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== + +semver@^5.0.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +sha.js@^2.4.9: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + +splitargs@~0.0.3: + version "0.0.7" + resolved "https://registry.yarnpkg.com/splitargs/-/splitargs-0.0.7.tgz#fe9f7ae657371b33b10cb80da143cf8249cf6b3b" + integrity sha1-/p965lc3GzOxDLgNoUPPgknPazs= + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stream-combiner@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" + integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg= + dependencies: + duplexer "~0.1.1" + through "~2.3.4" + +stream-length@^1.0.1, stream-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00" + integrity sha1-gnfzy+5JpNqrz9tOL0qbXp8snwA= + dependencies: + bluebird "^2.6.2" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA= + dependencies: + ansi-regex "^0.2.1" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2-sink@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/through2-sink/-/through2-sink-1.0.0.tgz#5f106bba1d7330dad3cba5c0ab1863923256c399" + integrity sha1-XxBruh1zMNrTy6XAqxhjkjJWw5k= + dependencies: + through2 "~0.5.1" + xtend "~3.0.0" + +through2-spy@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/through2-spy/-/through2-spy-1.2.0.tgz#9c891ca9ca40e1e1e4cf31e1ac57f94cc9d248cb" + integrity sha1-nIkcqcpA4eHkzzHhrFf5TMnSSMs= + dependencies: + through2 "~0.5.1" + xtend "~3.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" + integrity sha1-390BLrnHAOIyP9M084rGIqs3Lac= + dependencies: + readable-stream "~1.0.17" + xtend "~3.0.0" + +through2@~4.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, through@^2.3.4, through@^2.3.8, through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@0.0.x: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +to-utf8@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/to-utf8/-/to-utf8-0.0.1.tgz#d17aea72ff2fba39b9e43601be7b3ff72e089852" + integrity sha1-0Xrqcv8vujm55DYBvns/9y4ImFI= + +tough-cookie@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4: + version "3.13.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b" + integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g== + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +union@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + dependencies: + qs "^6.4.0" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unxhr@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unxhr/-/unxhr-1.2.0.tgz#44d391cb882c268a2909cd258a9a4f1941a6cf57" + integrity sha512-6cGpm8NFXPD9QbSNx0cD2giy7teZ6xOkCUH3U89WKVkL9N9rBrWjlCwhR94Re18ZlAop4MOc3WU1M3Hv/bgpIw== + +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +urlcache@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/urlcache/-/urlcache-0.7.0.tgz#3ff6a1e10b3d200aba132efc9f41dc1ad6d91b80" + integrity sha512-xOW4t6wJDT07+VunsHwePemyXXRidCSOZ/1RIILJi2XnB+81FA5H0MRvS63/7joTWjGLajcJJGvR5odpbkV6hw== + dependencies: + urlobj "0.0.11" + +urlobj@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/urlobj/-/urlobj-0.0.11.tgz#ddd3060876ae1cf0ff9e38a91d0574332b73794c" + integrity sha512-Ncck0WWtuFBbZhSYwKjK1AU2V51V98P/KHUPkaEc+mFy4xkpAHFNyVQT+S5SgtsJAr94e4wiKUucJSfasV2kBw== + dependencies: + is-object "^1.0.1" + is-string "^1.0.4" + object-assign "^4.1.1" + +useragent@^2.1.8: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +varint@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/varint/-/varint-0.0.3.tgz#b821de9b04b38b3cd22f72c18d94a9fb72ab3518" + integrity sha1-uCHemwSzizzSL3LBjZSp+3KrNRg= + +vinyl-fs@^3.0.3, vinyl-fs@~3.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0, vinyl@^2.0.2, vinyl@~2.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" + integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk= + dependencies: + semver "^5.0.1" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= + +xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yauzl@^2.2.1: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yazl@^2.2.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3"