commit
cc597f6e32
3
.htaccess.disabled
Normal file
3
.htaccess.disabled
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
RewriteEngine on
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|spider|crawl|https?://|WhatsApp|SkypeUriPreview) [NC]
|
||||||
|
RewriteRule .* - [R=403,L]
|
8
.travis.yml
Normal file
8
.travis.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
language: php
|
||||||
|
sudo: false
|
||||||
|
php:
|
||||||
|
- 5.5
|
||||||
|
- 5.6
|
||||||
|
- 7.0
|
||||||
|
script:
|
||||||
|
- cd tst && phpunit
|
@ -17,3 +17,4 @@ Kuba Niewiarowski - Polish
|
|||||||
Gabbalo - German
|
Gabbalo - German
|
||||||
Draky50110 - French
|
Draky50110 - French
|
||||||
Filip Muki Dobranić - Slovene
|
Filip Muki Dobranić - Slovene
|
||||||
|
Jiawei Zhou - Chinese
|
||||||
|
773
LICENSE.md
Normal file
773
LICENSE.md
Normal file
@ -0,0 +1,773 @@
|
|||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
ZeroBin consists of PHP and JS code which was originally written by Sébastien
|
||||||
|
Sauvage in 2012 and falls unter the Zlib/libpng license. Also included are
|
||||||
|
libraries that fall under the LGPLv3 (RainTPL), GPLv2 (SJCL, rawinflate,
|
||||||
|
rawdeflate), BSD 2-clause (SJCL), BSD 3-clause (base64.js version 2.1.9,
|
||||||
|
Showdown), MIT (base64.js version 1.7, Bootstrap) and Apache (prettify.js)
|
||||||
|
licenses. All of these license terms can be found here below:
|
||||||
|
|
||||||
|
## Zlib/libpng license for ZeroBin
|
||||||
|
|
||||||
|
Copyright © 2012 Sébastien Sauvage
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty. In
|
||||||
|
no event will the authors be held liable for any damages arising from the use
|
||||||
|
of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose, including
|
||||||
|
commercial applications, and to alter it and redistribute it freely, subject to
|
||||||
|
the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim
|
||||||
|
that you wrote the original software. If you use this software in a product,
|
||||||
|
an acknowledgment in the product documentation would be appreciated but is
|
||||||
|
not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
## GNU Lesser General Public License, version 3.0, for RainTPL
|
||||||
|
|
||||||
|
_Version 3, 29 June 2007_
|
||||||
|
_Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
### 0. Additional Definitions
|
||||||
|
|
||||||
|
As used herein, “this License” refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the “GNU GPL” refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
“The Library” refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An “Application” is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A “Combined Work” is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the “Linked
|
||||||
|
Version”.
|
||||||
|
|
||||||
|
The “Minimal Corresponding Source” for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The “Corresponding Application Code” for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
### 1. Exception to Section 3 of the GNU GPL
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
### 2. Conveying Modified Versions
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
* **a)** under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
* **b)** under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
### 3. Object Code Incorporating Material from Library Header Files
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
* **a)** Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
* **b)** Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
### 4. Combined Works
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
* **a)** Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
* **c)** For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
* **d)** Do one of the following:
|
||||||
|
- **0)** Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
- **1)** Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that **(a)** uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and **(b)** will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
* **e)** Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option **4d0**, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option **4d1**, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
### 5. Combined Libraries
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
* **a)** Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
* **b)** Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
### 6. Revised Versions of the GNU Lesser General Public License
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser 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
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License “or any later version”
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
## GNU General Public License, version 2.0, for SJCL, rawdeflate and rawinflate
|
||||||
|
|
||||||
|
_Version 2, June 1991_
|
||||||
|
_Copyright © 1989, 1991 Free Software Foundation, Inc.,_
|
||||||
|
_51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA_
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
### Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: **(1)** copyright the software, and
|
||||||
|
**(2)** offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
### TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
**0.** This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The “Program”, below,
|
||||||
|
refers to any such program or work, and a “work based on the Program”
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term “modification”.) Each licensee is addressed as “you”.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
**1.** You may copy and distribute 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 and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
**2.** You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
* **a)** You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
* **b)** You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
* **c)** If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
**3.** You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
* **a)** Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
* **b)** Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
* **c)** Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
**4.** You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
**5.** You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
**6.** Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
**7.** If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
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
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
**8.** If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
**9.** The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the 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 a version number of this License which applies to it and “any
|
||||||
|
later version”, you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
**10.** If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
### NO WARRANTY
|
||||||
|
|
||||||
|
**11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
|
||||||
|
|
||||||
|
**12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE 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.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
## BSD 2-Clause License for SJCL
|
||||||
|
|
||||||
|
_Copyright © 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at Stanford University._
|
||||||
|
_All rights reserved._
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
## BSD 3-Clause License for Showdown
|
||||||
|
|
||||||
|
Showdown Copyright © 2007, John Fraser
|
||||||
|
<http://www.attacklab.net/>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Original Markdown copyright © 2004, John Gruber
|
||||||
|
<http://daringfireball.net/>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name "Markdown" nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without specific
|
||||||
|
prior written permission.
|
||||||
|
|
||||||
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
|
warranties of merchantability and fitness for a particular purpose are
|
||||||
|
disclaimed. In no event shall the copyright owner or contributors be liable for
|
||||||
|
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||||
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
|
loss of use, data, or profits; or business interruption) however caused and on
|
||||||
|
any theory of liability, whether in contract, strict liability, or tort
|
||||||
|
(including negligence or otherwise) arising in any way out of the use of this
|
||||||
|
software, even if advised of the possibility of such damage.
|
||||||
|
|
||||||
|
## BSD 3-Clause License for base64.js version 2.1.9
|
||||||
|
|
||||||
|
Copyright © 2014, Dan Kogai
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of base64.js nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without specific
|
||||||
|
prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
## MIT License for base64.js version 1.7
|
||||||
|
|
||||||
|
Copyright © 2012 Dan Kogai
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
## MIT License for Bootstrap
|
||||||
|
|
||||||
|
Copyright © 2011-2016 Twitter, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
## Apache License for prettify.js
|
||||||
|
|
||||||
|
_Version 2.0, January 2004_
|
||||||
|
_<http://www.apache.org/licenses/>_
|
||||||
|
|
||||||
|
### Terms and Conditions for use, reproduction, and distribution
|
||||||
|
|
||||||
|
#### 1. Definitions
|
||||||
|
|
||||||
|
“License” shall mean the terms and conditions for use, reproduction, and
|
||||||
|
distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
“Licensor” shall mean the copyright owner or entity authorized by the copyright
|
||||||
|
owner that is granting the License.
|
||||||
|
|
||||||
|
“Legal Entity” shall mean the union of the acting entity and all other entities
|
||||||
|
that control, are controlled by, or are under common control with that entity.
|
||||||
|
For the purposes of this definition, “control” means **(i)** the power, direct or
|
||||||
|
indirect, to cause the direction or management of such entity, whether by
|
||||||
|
contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or **(iii)** beneficial ownership of such entity.
|
||||||
|
|
||||||
|
“You” (or “Your”) shall mean an individual or Legal Entity exercising
|
||||||
|
permissions granted by this License.
|
||||||
|
|
||||||
|
“Source” form shall mean the preferred form for making modifications, including
|
||||||
|
but not limited to software source code, documentation source, and configuration
|
||||||
|
files.
|
||||||
|
|
||||||
|
“Object” form shall mean any form resulting from mechanical transformation or
|
||||||
|
translation of a Source form, including but not limited to compiled object code,
|
||||||
|
generated documentation, and conversions to other media types.
|
||||||
|
|
||||||
|
“Work” shall mean the work of authorship, whether in Source or Object form, made
|
||||||
|
available under the License, as indicated by a copyright notice that is included
|
||||||
|
in or attached to the work (an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
“Derivative Works” shall mean any work, whether in Source or Object form, that
|
||||||
|
is based on (or derived from) the Work and for which the editorial revisions,
|
||||||
|
annotations, elaborations, or other modifications represent, as a whole, an
|
||||||
|
original work of authorship. For the purposes of this License, Derivative Works
|
||||||
|
shall not include works that remain separable from, or merely link (or bind by
|
||||||
|
name) to the interfaces of, the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
“Contribution” shall mean any work of authorship, including the original version
|
||||||
|
of the Work and any modifications or additions to that Work or Derivative Works
|
||||||
|
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
||||||
|
by the copyright owner or by an individual or Legal Entity authorized to submit
|
||||||
|
on behalf of the copyright owner. For the purposes of this definition,
|
||||||
|
“submitted” means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems, and
|
||||||
|
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||||
|
the purpose of discussing and improving the Work, but excluding communication
|
||||||
|
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||||
|
owner as “Not a Contribution.”
|
||||||
|
|
||||||
|
“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
|
||||||
|
of whom a Contribution has been received by Licensor and subsequently
|
||||||
|
incorporated within the Work.
|
||||||
|
|
||||||
|
#### 2. Grant of Copyright License
|
||||||
|
|
||||||
|
Subject to the terms and conditions of this License, each Contributor hereby
|
||||||
|
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||||
|
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||||
|
Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
#### 3. Grant of Patent License
|
||||||
|
|
||||||
|
Subject to the terms and conditions of this License, each Contributor hereby
|
||||||
|
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||||
|
irrevocable (except as stated in this section) patent license to make, have
|
||||||
|
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
||||||
|
such license applies only to those patent claims licensable by such Contributor
|
||||||
|
that are necessarily infringed by their Contribution(s) alone or by combination
|
||||||
|
of their Contribution(s) with the Work to which such Contribution(s) was
|
||||||
|
submitted. If You institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||||
|
Contribution incorporated within the Work constitutes direct or contributory
|
||||||
|
patent infringement, then any patent licenses granted to You under this License
|
||||||
|
for that Work shall terminate as of the date such litigation is filed.
|
||||||
|
|
||||||
|
#### 4. Redistribution
|
||||||
|
|
||||||
|
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
||||||
|
in any medium, with or without modifications, and in Source or Object form,
|
||||||
|
provided that You meet the following conditions:
|
||||||
|
|
||||||
|
* **(a)** You must give any other recipients of the Work or Derivative Works a copy of
|
||||||
|
this License; and
|
||||||
|
* **(b)** You must cause any modified files to carry prominent notices stating that You
|
||||||
|
changed the files; and
|
||||||
|
* **(c)** You must retain, in the Source form of any Derivative Works that You distribute,
|
||||||
|
all copyright, patent, trademark, and attribution notices from the Source form
|
||||||
|
of the Work, excluding those notices that do not pertain to any part of the
|
||||||
|
Derivative Works; and
|
||||||
|
* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any
|
||||||
|
Derivative Works that You distribute must include a readable copy of the
|
||||||
|
attribution notices contained within such NOTICE file, excluding those notices
|
||||||
|
that do not pertain to any part of the Derivative Works, in at least one of the
|
||||||
|
following places: within a NOTICE text file distributed as part of the
|
||||||
|
Derivative Works; within the Source form or documentation, if provided along
|
||||||
|
with the Derivative Works; or, within a display generated by the Derivative
|
||||||
|
Works, if and wherever such third-party notices normally appear. The contents of
|
||||||
|
the NOTICE file are for informational purposes only and do not modify the
|
||||||
|
License. You may add Your own attribution notices within Derivative Works that
|
||||||
|
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||||
|
provided that such additional attribution notices cannot be construed as
|
||||||
|
modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and may provide
|
||||||
|
additional or different license terms and conditions for use, reproduction, or
|
||||||
|
distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||||
|
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||||
|
with the conditions stated in this License.
|
||||||
|
|
||||||
|
#### 5. Submission of Contributions
|
||||||
|
|
||||||
|
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
||||||
|
for inclusion in the Work by You to the Licensor shall be under the terms and
|
||||||
|
conditions of this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
||||||
|
any separate license agreement you may have executed with Licensor regarding
|
||||||
|
such Contributions.
|
||||||
|
|
||||||
|
#### 6. Trademarks
|
||||||
|
|
||||||
|
This License does not grant permission to use the trade names, trademarks,
|
||||||
|
service marks, or product names of the Licensor, except as required for
|
||||||
|
reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
#### 7. Disclaimer of Warranty
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, Licensor provides the
|
||||||
|
Work (and each Contributor provides its Contributions) on an “AS IS” BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||||
|
including, without limitation, any warranties or conditions of TITLE,
|
||||||
|
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
||||||
|
solely responsible for determining the appropriateness of using or
|
||||||
|
redistributing the Work and assume any risks associated with Your exercise of
|
||||||
|
permissions under this License.
|
||||||
|
|
||||||
|
#### 8. Limitation of Liability
|
||||||
|
|
||||||
|
In no event and under no legal theory, whether in tort (including negligence),
|
||||||
|
contract, or otherwise, unless required by applicable law (such as deliberate
|
||||||
|
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special, incidental,
|
||||||
|
or consequential damages of any character arising as a result of this License or
|
||||||
|
out of the use or inability to use the Work (including but not limited to
|
||||||
|
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||||
|
any and all other commercial damages or losses), even if such Contributor has
|
||||||
|
been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
#### 9. Accepting Warranty or Additional Liability
|
||||||
|
|
||||||
|
While redistributing the Work or Derivative Works thereof, You may choose to
|
||||||
|
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
||||||
|
other liability obligations and/or rights consistent with this License. However,
|
||||||
|
in accepting such obligations, You may act only on Your own behalf and on Your
|
||||||
|
sole responsibility, not on behalf of any other Contributor, and only if You
|
||||||
|
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason of your
|
||||||
|
accepting any such warranty or additional liability.
|
@ -31,7 +31,7 @@ without loosing any data.
|
|||||||
and any country the traffic passes not to inject any malicious javascript code.
|
and any country the traffic passes not to inject any malicious javascript code.
|
||||||
Ideally, the ZeroBin installation used would provide HTTPS, secured by
|
Ideally, the ZeroBin installation used would provide HTTPS, secured by
|
||||||
[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) and
|
[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) and
|
||||||
[HKPH](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning) using a
|
[HPKP](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning) using a
|
||||||
certificate either validated by a trusted third party (check the certificate
|
certificate either validated by a trusted third party (check the certificate
|
||||||
when first using a new ZeroBin instance) or self-signed by the server operator,
|
when first using a new ZeroBin instance) or self-signed by the server operator,
|
||||||
validated using a
|
validated using a
|
||||||
|
@ -32,6 +32,14 @@ body.navbar-spacing {
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pull-right .dropdown-menu {
|
||||||
|
margin-left: -56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
#image img {
|
#image img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
@ -46,6 +54,10 @@ body.navbar-spacing {
|
|||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pastelink > a {
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
#message {
|
#message {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
}
|
}
|
||||||
|
140
i18n/zh.json
Normal file
140
i18n/zh.json
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"en": "zh",
|
||||||
|
"Paste does not exist, has expired or has been deleted.":
|
||||||
|
"粘贴不存在,已过期或者已被删除。",
|
||||||
|
"ZeroBin requires php 5.2.6 or above to work. Sorry.":
|
||||||
|
"ZeroBin需要工作于PHP 5.2.6及以上版本,抱歉。",
|
||||||
|
"ZeroBin requires configuration section [%s] to be present in configuration file.":
|
||||||
|
"ZeroBin需要设置配置文件中 [%s] 的部分。",
|
||||||
|
"Please wait %d seconds between each post.":
|
||||||
|
"每 %d 秒只能粘贴一次。",
|
||||||
|
"Paste is limited to %s of encrypted data.":
|
||||||
|
"粘贴受限于 %s 加密数据。",
|
||||||
|
"Invalid data.":
|
||||||
|
"无效的数据。",
|
||||||
|
"You are unlucky. Try again.":
|
||||||
|
"请再试一次。",
|
||||||
|
"Error saving comment. Sorry.":
|
||||||
|
"存储评论时出现错误,抱歉。",
|
||||||
|
"Error saving paste. Sorry.":
|
||||||
|
"存储粘贴时出现错误,抱歉。",
|
||||||
|
"Invalid paste ID.":
|
||||||
|
"无效的ID。",
|
||||||
|
"Paste is not of burn-after-reading type.":
|
||||||
|
"粘贴不是阅后即焚类型。",
|
||||||
|
"Wrong deletion token. Paste was not deleted.":
|
||||||
|
"错误的删除token,粘贴没有被删除。",
|
||||||
|
"Paste was properly deleted.":
|
||||||
|
"粘贴已被正确删除。",
|
||||||
|
"ZeroBin": "ZeroBin",
|
||||||
|
"ZeroBin is a minimalist, opensource online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://github.com/elrido/ZeroBin/wiki\">project page</a>.":
|
||||||
|
"ZeroBin是一个极简,开源,对粘贴内容毫不知情的在线粘贴板,数据<i>在浏览器内</i>进行AES-256加密。更多信息请查看<a href=\"https://github.com/elrido/ZeroBin/wiki\">项目主页</a>。",
|
||||||
|
"Because ignorance is bliss":
|
||||||
|
"因为无知是福",
|
||||||
|
"Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.":
|
||||||
|
"ZeroBin需要JavaScript来进行加解密。<br />带来的不便敬请谅解。",
|
||||||
|
"ZeroBin requires a modern browser to work.":
|
||||||
|
"ZeroBin需要工作于现代化的浏览器。",
|
||||||
|
"Still using Internet Explorer? Do yourself a favor, switch to a modern browser:":
|
||||||
|
"还在使用Internet Explorer?帮自己个忙,换上一个现代化的浏览器:",
|
||||||
|
"New":
|
||||||
|
"新建",
|
||||||
|
"Send":
|
||||||
|
"送出",
|
||||||
|
"Clone":
|
||||||
|
"克隆",
|
||||||
|
"Raw text":
|
||||||
|
"纯文本",
|
||||||
|
"Expires":
|
||||||
|
"有效期",
|
||||||
|
"Burn after reading":
|
||||||
|
"阅后即焚",
|
||||||
|
"Open discussion":
|
||||||
|
"开放讨论",
|
||||||
|
"Password (recommended)":
|
||||||
|
"密码 (推荐)",
|
||||||
|
"Discussion":
|
||||||
|
"讨论",
|
||||||
|
"Toggle navigation":
|
||||||
|
"切换导航栏",
|
||||||
|
"%d seconds": ["%d 秒", "%d 秒"],
|
||||||
|
"%d minutes": ["%d 分钟", "%d 分钟"],
|
||||||
|
"%d hours": ["%d 小时", "%d 小时"],
|
||||||
|
"%d days": ["%d 天", "%d 天"],
|
||||||
|
"%d weeks": ["%d 周", "%d 周"],
|
||||||
|
"%d months": ["%d 个月", "%d 个月"],
|
||||||
|
"%d years": ["%d 年", "%d 年"],
|
||||||
|
"Never":
|
||||||
|
"永不过期",
|
||||||
|
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.":
|
||||||
|
"注意:这是一个测试服务,数据随时可能被删除。如果你滥用这个服务的话,小猫咪会死的。",
|
||||||
|
"This document will expire in %d seconds.":
|
||||||
|
["这份文档将在一秒后过期。", "这份文档将在 %d 秒后过期"],
|
||||||
|
"This document will expire in %d minutes.":
|
||||||
|
["这份文档将在一分钟后过期。", "这份文档将在 %d 分钟后过期。"],
|
||||||
|
"This document will expire in %d hours.":
|
||||||
|
["这份文档将在一小时后过期。", "这份文档将在 %d 小时后过期。"],
|
||||||
|
"This document will expire in %d days.":
|
||||||
|
["这份文档将在一天后过期。", "这份文档将在 %d 天后过期。"],
|
||||||
|
"This document will expire in %d months.":
|
||||||
|
["这份文档将在一个月后过期。", "这份文档将在 %d 个月后过期。"],
|
||||||
|
"Please enter the password for this paste:":
|
||||||
|
"请输入这份粘贴的密码:",
|
||||||
|
"Could not decrypt data (Wrong key?)":
|
||||||
|
"无法解密数据 (密钥错误?)",
|
||||||
|
"Could not delete the paste, it was not stored in burn after reading mode.":
|
||||||
|
"无法删除此粘贴,它没有以阅后即焚模式存储。",
|
||||||
|
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.":
|
||||||
|
"看!仔!细!了! 不要关闭窗口,否则你再也见不到这条消息了。",
|
||||||
|
"Could not decrypt comment; Wrong key?":
|
||||||
|
"无法解密评论; 密钥错误?",
|
||||||
|
"Reply":
|
||||||
|
"回复",
|
||||||
|
"Anonymous":
|
||||||
|
"匿名",
|
||||||
|
"Anonymous avatar (Vizhash of the IP address)":
|
||||||
|
"匿名头像 (由IP地址生成Vizhash)",
|
||||||
|
"Add comment":
|
||||||
|
"添加评论",
|
||||||
|
"Optional nickname...":
|
||||||
|
"可选昵称...",
|
||||||
|
"Post comment":
|
||||||
|
"评论",
|
||||||
|
"Sending comment...":
|
||||||
|
"评论发送中...",
|
||||||
|
"Comment posted.":
|
||||||
|
"评论已发送。",
|
||||||
|
"Could not refresh display: %s":
|
||||||
|
"无法刷新显示: %s",
|
||||||
|
"unknown status":
|
||||||
|
"未知状态",
|
||||||
|
"server error or not responding":
|
||||||
|
"服务器错误或无回应",
|
||||||
|
"Could not post comment: %s":
|
||||||
|
"无法发送评论: %s",
|
||||||
|
"Sending paste (Please move your mouse for more entropy)...":
|
||||||
|
"粘贴提交中 (请移动鼠标以产生更多熵)...",
|
||||||
|
"Sending paste...":
|
||||||
|
"粘贴提交中...",
|
||||||
|
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>":
|
||||||
|
"您的粘贴的链接是<a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 [Ctrl]+[c] 以复制)</span>",
|
||||||
|
"Delete data":
|
||||||
|
"删除数据",
|
||||||
|
"Could not create paste: %s":
|
||||||
|
"无法创建粘贴: %s",
|
||||||
|
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)":
|
||||||
|
"无法解密粘贴: URL中缺失解密密钥 (是否使用了重定向或者短链接导致密钥丢失?)",
|
||||||
|
"Format": "格式",
|
||||||
|
"Plain Text": "纯文本",
|
||||||
|
"Source Code": "源代码",
|
||||||
|
"Markdown": "Markdown",
|
||||||
|
"Download attachment": "下载附件",
|
||||||
|
"Cloned file attached.": "已附加克隆的文件",
|
||||||
|
"Attach a file": "添加一个附件",
|
||||||
|
"Remove attachment": "移除附件",
|
||||||
|
"Your browser does not support uploading encrypted files. Please use a newer browser.":
|
||||||
|
"您的浏览器不支持上传加密的文件,请使用更新的浏览器。",
|
||||||
|
"Invalid attachment.": "无效的附件",
|
||||||
|
"Options": "选项",
|
||||||
|
"Shorten URL": "缩短链接"
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
* @link http://sebsauvage.net/wiki/doku.php?id=php:zerobin
|
* @link http://sebsauvage.net/wiki/doku.php?id=php:zerobin
|
||||||
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||||
* @license http://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
* @license http://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||||
* @version 0.21.1
|
* @version 0.22
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// change this, if your php files and data is outside of your webservers document root
|
// change this, if your php files and data is outside of your webservers document root
|
||||||
|
1
js/showdown-1.4.1.js
Normal file
1
js/showdown-1.4.1.js
Normal file
File diff suppressed because one or more lines are too long
1296
js/showdown.js
1296
js/showdown.js
File diff suppressed because it is too large
Load Diff
@ -294,7 +294,7 @@ $(function() {
|
|||||||
/**
|
/**
|
||||||
* supported languages, minus the built in 'en'
|
* supported languages, minus the built in 'en'
|
||||||
*/
|
*/
|
||||||
supportedLanguages: ['de', 'fr', 'pl', 'sl'],
|
supportedLanguages: ['de', 'fr', 'pl', 'sl', 'zh'],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* translate a string, alias for translate()
|
* translate a string, alias for translate()
|
||||||
@ -363,6 +363,7 @@ $(function() {
|
|||||||
switch (this.language)
|
switch (this.language)
|
||||||
{
|
{
|
||||||
case 'fr':
|
case 'fr':
|
||||||
|
case 'zh':
|
||||||
return (n > 1 ? 1 : 0);
|
return (n > 1 ? 1 : 0);
|
||||||
case 'pl':
|
case 'pl':
|
||||||
return (n == 1 ? 0 : n%10 >= 2 && n %10 <=4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2);
|
return (n == 1 ? 0 : n%10 >= 2 && n %10 <=4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2);
|
||||||
@ -443,8 +444,7 @@ $(function() {
|
|||||||
*/
|
*/
|
||||||
cipher: function(key, password, message)
|
cipher: function(key, password, message)
|
||||||
{
|
{
|
||||||
password = (password || '').trim();
|
if ((password || '').trim().length == 0)
|
||||||
if (password.length == 0)
|
|
||||||
{
|
{
|
||||||
return sjcl.encrypt(key, this.compress(message));
|
return sjcl.encrypt(key, this.compress(message));
|
||||||
}
|
}
|
||||||
@ -560,17 +560,23 @@ $(function() {
|
|||||||
* use given format on paste, defaults to plain text
|
* use given format on paste, defaults to plain text
|
||||||
*
|
*
|
||||||
* @param string format
|
* @param string format
|
||||||
|
* @param string text
|
||||||
*/
|
*/
|
||||||
formatPaste: function(format)
|
formatPaste: function(format, text)
|
||||||
{
|
{
|
||||||
|
helper.setElementText(this.clearText, text);
|
||||||
|
helper.setElementText(this.prettyPrint, text);
|
||||||
switch (format || 'plaintext')
|
switch (format || 'plaintext')
|
||||||
{
|
{
|
||||||
case 'markdown':
|
case 'markdown':
|
||||||
if (typeof Showdown == 'object')
|
if (typeof showdown == 'object')
|
||||||
{
|
{
|
||||||
var converter = new Showdown.converter();
|
showdown.setOption('strikethrough', true);
|
||||||
|
showdown.setOption('tables', true);
|
||||||
|
showdown.setOption('tablesHeaderId', true);
|
||||||
|
var converter = new showdown.Converter();
|
||||||
this.clearText.html(
|
this.clearText.html(
|
||||||
converter.makeHtml(this.clearText.html())
|
converter.makeHtml(text)
|
||||||
);
|
);
|
||||||
this.clearText.removeClass('hidden');
|
this.clearText.removeClass('hidden');
|
||||||
}
|
}
|
||||||
@ -647,9 +653,7 @@ $(function() {
|
|||||||
this.passwordInput.val(password);
|
this.passwordInput.val(password);
|
||||||
if (cleartext.length > 0)
|
if (cleartext.length > 0)
|
||||||
{
|
{
|
||||||
helper.setElementText(this.clearText, cleartext);
|
this.formatPaste(paste.meta.formatter, cleartext);
|
||||||
helper.setElementText(this.prettyPrint, cleartext);
|
|
||||||
this.formatPaste(paste.meta.formatter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(err)
|
catch(err)
|
||||||
@ -990,10 +994,7 @@ $(function() {
|
|||||||
// We pre-select the link so that the user only has to [Ctrl]+[c] the link.
|
// We pre-select the link so that the user only has to [Ctrl]+[c] the link.
|
||||||
helper.selectText('pasteurl');
|
helper.selectText('pasteurl');
|
||||||
zerobin.showStatus('', false);
|
zerobin.showStatus('', false);
|
||||||
|
zerobin.formatPaste(data_to_send.formatter, zerobin.message.val());
|
||||||
helper.setElementText(zerobin.clearText, zerobin.message.val());
|
|
||||||
helper.setElementText(zerobin.prettyPrint, zerobin.message.val());
|
|
||||||
zerobin.formatPaste(data_to_send.formatter);
|
|
||||||
}
|
}
|
||||||
else if (data.status==1)
|
else if (data.status==1)
|
||||||
{
|
{
|
||||||
|
@ -382,7 +382,7 @@ class RainTPL{
|
|||||||
mkdir( $cache_dir, 0755, true );
|
mkdir( $cache_dir, 0755, true );
|
||||||
|
|
||||||
if( !is_writable( $cache_dir ) )
|
if( !is_writable( $cache_dir ) )
|
||||||
throw new RainTpl_Exception ('Cache directory ' . $cache_dir . 'doesn\'t have write permission. Set write permission or set RAINTPL_CHECK_TEMPLATE_UPDATE to false. More details on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Configuration/');
|
throw new RainTpl_Exception ('Cache directory ' . $cache_dir . ' doesn\'t have write permission. Set write permission or set RAINTPL_CHECK_TEMPLATE_UPDATE to false. More details on http://www.raintpl.com/Documentation/Documentation-for-PHP-developers/Configuration/');
|
||||||
|
|
||||||
//write compiled file
|
//write compiled file
|
||||||
file_put_contents( $compiled_filename, $template_compiled );
|
file_put_contents( $compiled_filename, $template_compiled );
|
||||||
|
@ -198,7 +198,8 @@ class i18n
|
|||||||
if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER))
|
if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER))
|
||||||
{
|
{
|
||||||
$languageRanges = explode(',', trim($_SERVER['HTTP_ACCEPT_LANGUAGE']));
|
$languageRanges = explode(',', trim($_SERVER['HTTP_ACCEPT_LANGUAGE']));
|
||||||
foreach ($languageRanges as $languageRange) {
|
foreach ($languageRanges as $languageRange)
|
||||||
|
{
|
||||||
if (preg_match(
|
if (preg_match(
|
||||||
'/(\*|[a-zA-Z0-9]{1,8}(?:-[a-zA-Z0-9]{1,8})*)(?:\s*;\s*q\s*=\s*(0(?:\.\d{0,3})|1(?:\.0{0,3})))?/',
|
'/(\*|[a-zA-Z0-9]{1,8}(?:-[a-zA-Z0-9]{1,8})*)(?:\s*;\s*q\s*=\s*(0(?:\.\d{0,3})|1(?:\.0{0,3})))?/',
|
||||||
trim($languageRange), $match
|
trim($languageRange), $match
|
||||||
@ -302,6 +303,7 @@ class i18n
|
|||||||
{
|
{
|
||||||
switch (self::$_language) {
|
switch (self::$_language) {
|
||||||
case 'fr':
|
case 'fr':
|
||||||
|
case 'zh':
|
||||||
return ($n > 1 ? 1 : 0);
|
return ($n > 1 ? 1 : 0);
|
||||||
case 'pl':
|
case 'pl':
|
||||||
return ($n == 1 ? 0 : $n%10 >= 2 && $n %10 <=4 && ($n%100 < 10 || $n%100 >= 20) ? 1 : 2);
|
return ($n == 1 ? 0 : $n%10 >= 2 && $n %10 <=4 && ($n%100 < 10 || $n%100 >= 20) ? 1 : 2);
|
||||||
@ -325,7 +327,8 @@ class i18n
|
|||||||
protected static function _getMatchingLanguage($acceptedLanguages, $availableLanguages) {
|
protected static function _getMatchingLanguage($acceptedLanguages, $availableLanguages) {
|
||||||
$matches = array();
|
$matches = array();
|
||||||
$any = false;
|
$any = false;
|
||||||
foreach ($acceptedLanguages as $acceptedQuality => $acceptedValues) {
|
foreach ($acceptedLanguages as $acceptedQuality => $acceptedValues)
|
||||||
|
{
|
||||||
$acceptedQuality = floatval($acceptedQuality);
|
$acceptedQuality = floatval($acceptedQuality);
|
||||||
if ($acceptedQuality === 0.0) continue;
|
if ($acceptedQuality === 0.0) continue;
|
||||||
foreach ($availableLanguages as $availableValue)
|
foreach ($availableLanguages as $availableValue)
|
||||||
|
107
lib/request.php
107
lib/request.php
@ -17,6 +17,27 @@
|
|||||||
*/
|
*/
|
||||||
class request
|
class request
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* MIME type for JSON
|
||||||
|
*
|
||||||
|
* @const string
|
||||||
|
*/
|
||||||
|
const MIME_JSON = 'application/json';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MIME type for HTML
|
||||||
|
*
|
||||||
|
* @const string
|
||||||
|
*/
|
||||||
|
const MIME_HTML = 'text/html';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MIME type for XHTML
|
||||||
|
*
|
||||||
|
* @const string
|
||||||
|
*/
|
||||||
|
const MIME_XHTML = 'application/xhtml+xml';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Input stream to use for PUT parameter parsing.
|
* Input stream to use for PUT parameter parsing.
|
||||||
*
|
*
|
||||||
@ -66,15 +87,7 @@ class request
|
|||||||
}
|
}
|
||||||
|
|
||||||
// decide if we are in JSON API or HTML context
|
// decide if we are in JSON API or HTML context
|
||||||
if (
|
$this->_isJsonApi = $this->_detectJsonRequest();
|
||||||
(array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) &&
|
|
||||||
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'JSONHttpRequest') ||
|
|
||||||
(array_key_exists('HTTP_ACCEPT', $_SERVER) &&
|
|
||||||
strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
$this->_isJsonApi = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse parameters, depending on request type
|
// parse parameters, depending on request type
|
||||||
switch (array_key_exists('REQUEST_METHOD', $_SERVER) ? $_SERVER['REQUEST_METHOD'] : 'GET')
|
switch (array_key_exists('REQUEST_METHOD', $_SERVER) ? $_SERVER['REQUEST_METHOD'] : 'GET')
|
||||||
@ -168,4 +181,80 @@ class request
|
|||||||
{
|
{
|
||||||
self::$_inputStream = $input;
|
self::$_inputStream = $input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* detect the clients supported media type and decide if its a JSON API call or not
|
||||||
|
*
|
||||||
|
* Adapted from: http://stackoverflow.com/questions/3770513/detect-browser-language-in-php#3771447
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function _detectJsonRequest()
|
||||||
|
{
|
||||||
|
$hasAcceptHeader = array_key_exists('HTTP_ACCEPT', $_SERVER);
|
||||||
|
$acceptHeader = $hasAcceptHeader ? $_SERVER['HTTP_ACCEPT'] : '';
|
||||||
|
|
||||||
|
// simple cases
|
||||||
|
if (
|
||||||
|
(array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) &&
|
||||||
|
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'JSONHttpRequest') ||
|
||||||
|
($hasAcceptHeader &&
|
||||||
|
strpos($acceptHeader, self::MIME_JSON) !== false &&
|
||||||
|
strpos($acceptHeader, self::MIME_HTML) === false &&
|
||||||
|
strpos($acceptHeader, self::MIME_XHTML) === false)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// advanced case: media type negotiation
|
||||||
|
$mediaTypes = array();
|
||||||
|
if ($hasAcceptHeader)
|
||||||
|
{
|
||||||
|
$mediaTypeRanges = explode(',', trim($acceptHeader));
|
||||||
|
foreach ($mediaTypeRanges as $mediaTypeRange)
|
||||||
|
{
|
||||||
|
if (preg_match(
|
||||||
|
'#(\*/\*|[a-z\-]+/[a-z\-+*]+(?:\s*;\s*[^q]\S*)*)(?:\s*;\s*q\s*=\s*(0(?:\.\d{0,3})|1(?:\.0{0,3})))?#',
|
||||||
|
trim($mediaTypeRange), $match
|
||||||
|
))
|
||||||
|
{
|
||||||
|
if (!isset($match[2]))
|
||||||
|
{
|
||||||
|
$match[2] = '1.0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$match[2] = (string) floatval($match[2]);
|
||||||
|
}
|
||||||
|
if (!isset($mediaTypes[$match[2]]))
|
||||||
|
{
|
||||||
|
$mediaTypes[$match[2]] = array();
|
||||||
|
}
|
||||||
|
$mediaTypes[$match[2]][] = strtolower($match[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
krsort($mediaTypes);
|
||||||
|
foreach ($mediaTypes as $acceptedQuality => $acceptedValues)
|
||||||
|
{
|
||||||
|
if ($acceptedQuality === 0.0) continue;
|
||||||
|
foreach ($acceptedValues as $acceptedValue)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
strpos($acceptedValue, self::MIME_HTML) === 0 ||
|
||||||
|
strpos($acceptedValue, self::MIME_XHTML) === 0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
elseif (strpos($acceptedValue, self::MIME_JSON) === 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -151,7 +151,7 @@ class zerobin
|
|||||||
// output JSON or HTML
|
// output JSON or HTML
|
||||||
if ($this->_request->isJsonApiCall())
|
if ($this->_request->isJsonApiCall())
|
||||||
{
|
{
|
||||||
header('Content-type: application/json');
|
header('Content-type: ' . request::MIME_JSON);
|
||||||
header('Access-Control-Allow-Origin: *');
|
header('Access-Control-Allow-Origin: *');
|
||||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
|
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
|
||||||
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
|
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
||||||
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
||||||
@ -158,7 +158,7 @@
|
|||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
||||||
</div>{/if}
|
</div>{/if}
|
||||||
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
||||||
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
||||||
</div>{/if}
|
</div>{/if}
|
||||||
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-error"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-error"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-error"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice" role="alert" class="hidden alert alert-error"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
||||||
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
||||||
</div>{/if}
|
</div>{/if}
|
||||||
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-error"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-error"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-error"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice" role="alert" class="hidden alert alert-error"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
||||||
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
||||||
</div>{/if}
|
</div>{/if}
|
||||||
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
|
||||||
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
|
||||||
</div>{/if}
|
</div>{/if}
|
||||||
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<script type="text/javascript" src="js/rawdeflate-0.5.js"></script>
|
<script type="text/javascript" src="js/rawdeflate-0.5.js"></script>
|
||||||
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
<script type="text/javascript" src="js/rawinflate-0.3.js"></script>{if="$SYNTAXHIGHLIGHTING"}
|
||||||
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
|
||||||
<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
|
<script type="text/javascript" src="js/showdown-1.4.1.js"></script>{/if}
|
||||||
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
@ -33,7 +33,7 @@
|
|||||||
<h1 class="title reloadlink">{function="t('ZeroBin')"}</h1><br />
|
<h1 class="title reloadlink">{function="t('ZeroBin')"}</h1><br />
|
||||||
<h2 class="title">{function="t('Because ignorance is bliss')"}</h2><br />
|
<h2 class="title">{function="t('Because ignorance is bliss')"}</h2><br />
|
||||||
<h3 class="title">{$VERSION}</h3>
|
<h3 class="title">{$VERSION}</h3>
|
||||||
<div id="noscript" class="nonworking">{function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
|
<noscript><div id="noscript" class="nonworking">{function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div></noscript>
|
||||||
<div id="oldienotice" class="nonworking">{function="t('ZeroBin requires a modern browser to work.')"}</div>
|
<div id="oldienotice" class="nonworking">{function="t('ZeroBin requires a modern browser to work.')"}</div>
|
||||||
<div id="ienotice">{function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
<div id="ienotice">{function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
|
||||||
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="http://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
|
@ -62,54 +62,36 @@ class RainTPLTest extends PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testTemplateRendersCorrectly()
|
public function testTemplateRendersCorrectly()
|
||||||
{
|
{
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPaste()['data'], ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPaste()['data'], ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]+id="errormessage"[^>]*>.*' . self::$error . '</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => self::$error
|
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<[^>]+id="password"[^>]*>#',
|
||||||
'id' => 'password',
|
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'password available if configured'
|
'password available if configured'
|
||||||
);
|
);
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
|
||||||
'id' => 'opendiscussion',
|
|
||||||
'attributes' => array(
|
|
||||||
'checked' => 'checked'
|
|
||||||
),
|
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'checked discussion if configured'
|
'checked discussion if configured'
|
||||||
);
|
);
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<[^>]+id="opendisc"[^>]*>#',
|
||||||
'id' => 'opendisc',
|
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'discussions available if configured'
|
'discussions available if configured'
|
||||||
);
|
);
|
||||||
// testing version number in JS address, since other instances may not be present in different templates
|
// testing version number in JS address, since other instances may not be present in different templates
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<script[^>]+src="js/zerobin.js\\?' . rawurlencode(self::$version) . '"[^>]*>#',
|
||||||
'tag' => 'script',
|
|
||||||
'attributes' => array(
|
|
||||||
'src' => 'js/zerobin.js?' . rawurlencode(self::$version)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
$this->_content,
|
$this->_content,
|
||||||
'outputs version correctly'
|
'outputs version correctly'
|
||||||
);
|
);
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
error_reporting( E_ALL | E_STRICT );
|
error_reporting( E_ALL | E_STRICT );
|
||||||
|
|
||||||
// change this, if your php files and data is outside of your webservers document root
|
// change this, if your php files and data is outside of your webservers document root
|
||||||
|
if (!defined('PUBLIC_PATH')) define('PUBLIC_PATH', '..');
|
||||||
if (!defined('PATH')) define('PATH', '..' . DIRECTORY_SEPARATOR);
|
if (!defined('PATH')) define('PATH', '..' . DIRECTORY_SEPARATOR);
|
||||||
if (!defined('CONF')) define('CONF', PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini');
|
if (!defined('CONF')) define('CONF', PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini');
|
||||||
if (!defined('PUBLIC_PATH')) define('PUBLIC_PATH', '..');
|
if (!is_file(CONF)) copy(CONF . '.sample', CONF);
|
||||||
|
|
||||||
require PATH . 'lib/auto.php';
|
require PATH . 'lib/auto.php';
|
||||||
|
|
||||||
|
@ -579,11 +579,10 @@ EOT;
|
|||||||
case 'Read':
|
case 'Read':
|
||||||
$code .= <<<'EOT'
|
$code .= <<<'EOT'
|
||||||
|
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPasteAsJson(), ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPasteAsJson(), ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -592,11 +591,8 @@ EOT;
|
|||||||
case 'Delete':
|
case 'Delete':
|
||||||
$code .= <<<'EOT'
|
$code .= <<<'EOT'
|
||||||
|
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted</div>#',
|
||||||
'id' => 'status',
|
|
||||||
'content' => 'Paste was properly deleted'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs deleted status correctly'
|
'outputs deleted status correctly'
|
||||||
);
|
);
|
||||||
|
@ -104,4 +104,52 @@ class requestTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('foo', $request->getParam('pasteid'));
|
$this->assertEquals('foo', $request->getParam('pasteid'));
|
||||||
$this->assertEquals('bar', $request->getParam('deletetoken'));
|
$this->assertEquals('bar', $request->getParam('deletetoken'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testReadWithNegotiation()
|
||||||
|
{
|
||||||
|
$this->reset();
|
||||||
|
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||||
|
$_SERVER['HTTP_ACCEPT'] = 'text/html,text/html; charset=UTF-8,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8, text/csv,application/json';
|
||||||
|
$_SERVER['QUERY_STRING'] = 'foo';
|
||||||
|
$request = new request;
|
||||||
|
$this->assertFalse($request->isJsonApiCall(), 'is HTML call');
|
||||||
|
$this->assertEquals('foo', $request->getParam('pasteid'));
|
||||||
|
$this->assertEquals('read', $request->getOperation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReadWithXhtmlNegotiation()
|
||||||
|
{
|
||||||
|
$this->reset();
|
||||||
|
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||||
|
$_SERVER['HTTP_ACCEPT'] = 'application/xhtml+xml,text/html,text/html; charset=UTF-8, application/xml;q=0.9,*/*;q=0.8, text/csv,application/json';
|
||||||
|
$_SERVER['QUERY_STRING'] = 'foo';
|
||||||
|
$request = new request;
|
||||||
|
$this->assertFalse($request->isJsonApiCall(), 'is HTML call');
|
||||||
|
$this->assertEquals('foo', $request->getParam('pasteid'));
|
||||||
|
$this->assertEquals('read', $request->getOperation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testApiReadWithNegotiation()
|
||||||
|
{
|
||||||
|
$this->reset();
|
||||||
|
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||||
|
$_SERVER['HTTP_ACCEPT'] = 'text/plain,text/csv, application/xml;q=0.9, application/json, text/html,text/html; charset=UTF-8,application/xhtml+xml, */*;q=0.8';
|
||||||
|
$_SERVER['QUERY_STRING'] = 'foo';
|
||||||
|
$request = new request;
|
||||||
|
$this->assertTrue($request->isJsonApiCall(), 'is JSON Api call');
|
||||||
|
$this->assertEquals('foo', $request->getParam('pasteid'));
|
||||||
|
$this->assertEquals('read', $request->getOperation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReadWithFailedNegotiation()
|
||||||
|
{
|
||||||
|
$this->reset();
|
||||||
|
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||||
|
$_SERVER['HTTP_ACCEPT'] = 'text/plain,text/csv, application/xml;q=0.9, */*;q=0.8';
|
||||||
|
$_SERVER['QUERY_STRING'] = 'foo';
|
||||||
|
$request = new request;
|
||||||
|
$this->assertFalse($request->isJsonApiCall(), 'is HTML call');
|
||||||
|
$this->assertEquals('foo', $request->getParam('pasteid'));
|
||||||
|
$this->assertEquals('read', $request->getOperation());
|
||||||
|
}
|
||||||
}
|
}
|
@ -37,21 +37,24 @@ class serversaltTest extends PHPUnit_Framework_TestCase
|
|||||||
$salt = serversalt::get();
|
$salt = serversalt::get();
|
||||||
|
|
||||||
// mcrypt mock
|
// mcrypt mock
|
||||||
if (!defined('MCRYPT_DEV_URANDOM')) define('MCRYPT_DEV_URANDOM', 1);
|
if (!function_exists('mcrypt_create_iv'))
|
||||||
function mcrypt_create_iv($int, $flag)
|
|
||||||
{
|
{
|
||||||
$randomSalt = '';
|
if (!defined('MCRYPT_DEV_URANDOM')) define('MCRYPT_DEV_URANDOM', 1);
|
||||||
for($i = 0; $i < 256; ++$i) {
|
function mcrypt_create_iv($int, $flag)
|
||||||
$randomSalt .= base_convert(mt_rand(), 10, 16);
|
|
||||||
}
|
|
||||||
// hex2bin requires an even length, pad if necessary
|
|
||||||
if (strlen($randomSalt) % 2)
|
|
||||||
{
|
{
|
||||||
$randomSalt = '0' . $randomSalt;
|
$randomSalt = '';
|
||||||
|
for($i = 0; $i < 256; ++$i) {
|
||||||
|
$randomSalt .= base_convert(mt_rand(), 10, 16);
|
||||||
|
}
|
||||||
|
// hex2bin requires an even length, pad if necessary
|
||||||
|
if (strlen($randomSalt) % 2)
|
||||||
|
{
|
||||||
|
$randomSalt = '0' . $randomSalt;
|
||||||
|
}
|
||||||
|
return hex2bin($randomSalt);
|
||||||
}
|
}
|
||||||
return hex2bin($randomSalt);
|
$this->assertNotEquals($salt, serversalt::generate());
|
||||||
}
|
}
|
||||||
$this->assertNotEquals($salt, serversalt::generate());
|
|
||||||
|
|
||||||
// try setting a different path and resetting it
|
// try setting a different path and resetting it
|
||||||
serversalt::setPath($this->_otherPath);
|
serversalt::setPath($this->_otherPath);
|
||||||
|
127
tst/zerobin.php
127
tst/zerobin.php
@ -36,18 +36,13 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<title>ZeroBin</title>',
|
||||||
'tag' => 'title',
|
|
||||||
'content' => 'ZeroBin'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs title correctly'
|
'outputs title correctly'
|
||||||
);
|
);
|
||||||
$this->assertNotTag(
|
$this->assertNotContains(
|
||||||
array(
|
'id="shortenbutton"',
|
||||||
'id' => 'shortenbutton'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'doesn\'t output shortener button'
|
'doesn\'t output shortener button'
|
||||||
);
|
);
|
||||||
@ -67,11 +62,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<title>ZeroBin</title>',
|
||||||
'tag' => 'title',
|
|
||||||
'content' => 'ZeroBin'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs title correctly'
|
'outputs title correctly'
|
||||||
);
|
);
|
||||||
@ -92,11 +84,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<title>ZeroBin</title>',
|
||||||
'tag' => 'title',
|
|
||||||
'content' => 'ZeroBin'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs title correctly'
|
'outputs title correctly'
|
||||||
);
|
);
|
||||||
@ -117,11 +106,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#id="shortenbutton"[^>]*data-shortener="' . preg_quote($shortener) . '"#',
|
||||||
'id' => 'shortenbutton',
|
|
||||||
'attributes' => array('data-shortener' => $shortener)
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs configured shortener URL correctly'
|
'outputs configured shortener URL correctly'
|
||||||
);
|
);
|
||||||
@ -248,6 +234,7 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
$_SERVER['HTTP_X_FORWARDED_FOR'] = '::1';
|
$_SERVER['HTTP_X_FORWARDED_FOR'] = '::1';
|
||||||
$_SERVER['HTTP_X_REQUESTED_WITH'] = 'JSONHttpRequest';
|
$_SERVER['HTTP_X_REQUESTED_WITH'] = 'JSONHttpRequest';
|
||||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||||
|
$_SERVER['REMOTE_ADDR'] = '::1';
|
||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
@ -642,11 +629,10 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPasteAsJson(), ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPasteAsJson(), ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -662,11 +648,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Invalid paste ID'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -682,11 +665,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Paste does not exist'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -704,11 +684,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Paste does not exist'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -726,11 +703,10 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPasteAsJson($burnPaste['meta']), ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPasteAsJson($burnPaste['meta']), ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -795,11 +771,10 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$meta['formatter'] = 'syntaxhighlighting';
|
$meta['formatter'] = 'syntaxhighlighting';
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPasteAsJson($meta), ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPasteAsJson($meta), ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -819,11 +794,10 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$oldPaste['meta']['formatter'] = 'plaintext';
|
$oldPaste['meta']['formatter'] = 'plaintext';
|
||||||
$this->assertTag(
|
$this->assertContains(
|
||||||
array(
|
'<div id="cipherdata" class="hidden">' .
|
||||||
'id' => 'cipherdata',
|
htmlspecialchars(helper::getPasteAsJson($oldPaste['meta']), ENT_NOQUOTES) .
|
||||||
'content' => htmlspecialchars(helper::getPasteAsJson($oldPaste['meta']), ENT_NOQUOTES)
|
'</div>',
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -842,11 +816,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted[^<]*</div>#s',
|
||||||
'id' => 'status',
|
|
||||||
'content' => 'Paste was properly deleted'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs deleted status correctly'
|
'outputs deleted status correctly'
|
||||||
);
|
);
|
||||||
@ -865,11 +836,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Invalid paste ID'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -887,11 +855,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Paste does not exist'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -909,11 +874,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Wrong deletion token[^<]*</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Wrong deletion token'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -976,11 +938,8 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
$this->assertTag(
|
$this->assertRegExp(
|
||||||
array(
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
||||||
'id' => 'errormessage',
|
|
||||||
'content' => 'Paste does not exist'
|
|
||||||
),
|
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user