mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 13:41:21 +00:00
Merge guacamole-ext.
This commit is contained in:
2
guacamole-ext/.gitignore
vendored
Normal file
2
guacamole-ext/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
target/
|
||||||
|
*~
|
18
guacamole-ext/ChangeLog
Normal file
18
guacamole-ext/ChangeLog
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
2012-10-15 Michael Jumper <zhangmaike@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Updated to latest guacamole-common
|
||||||
|
|
||||||
|
2012-08-11 Michael Jumper <zhangmaike@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Improved documentation
|
||||||
|
|
||||||
|
2012-05-04 Michael Jumper <zhangmaike@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Renamed to guacamole-ext
|
||||||
|
* Generic HTTP-based Credentials object
|
||||||
|
* Added support for listeners and hooks
|
||||||
|
|
||||||
|
2011-12-11 Michael Jumper <zhangmaike@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Initial release
|
||||||
|
|
470
guacamole-ext/LICENSE
Normal file
470
guacamole-ext/LICENSE
Normal file
@@ -0,0 +1,470 @@
|
|||||||
|
MOZILLA PUBLIC LICENSE
|
||||||
|
Version 1.1
|
||||||
|
|
||||||
|
---------------
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
1.0.1. "Commercial Use" means distribution or otherwise making the
|
||||||
|
Covered Code available to a third party.
|
||||||
|
|
||||||
|
1.1. "Contributor" means each entity that creates or contributes to
|
||||||
|
the creation of Modifications.
|
||||||
|
|
||||||
|
1.2. "Contributor Version" means the combination of the Original
|
||||||
|
Code, prior Modifications used by a Contributor, and the Modifications
|
||||||
|
made by that particular Contributor.
|
||||||
|
|
||||||
|
1.3. "Covered Code" means the Original Code or Modifications or the
|
||||||
|
combination of the Original Code and Modifications, in each case
|
||||||
|
including portions thereof.
|
||||||
|
|
||||||
|
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
||||||
|
accepted in the software development community for the electronic
|
||||||
|
transfer of data.
|
||||||
|
|
||||||
|
1.5. "Executable" means Covered Code in any form other than Source
|
||||||
|
Code.
|
||||||
|
|
||||||
|
1.6. "Initial Developer" means the individual or entity identified
|
||||||
|
as the Initial Developer in the Source Code notice required by Exhibit
|
||||||
|
A.
|
||||||
|
|
||||||
|
1.7. "Larger Work" means a work which combines Covered Code or
|
||||||
|
portions thereof with code not governed by the terms of this License.
|
||||||
|
|
||||||
|
1.8. "License" means this document.
|
||||||
|
|
||||||
|
1.8.1. "Licensable" means having the right to grant, to the maximum
|
||||||
|
extent possible, whether at the time of the initial grant or
|
||||||
|
subsequently acquired, any and all of the rights conveyed herein.
|
||||||
|
|
||||||
|
1.9. "Modifications" means any addition to or deletion from the
|
||||||
|
substance or structure of either the Original Code or any previous
|
||||||
|
Modifications. When Covered Code is released as a series of files, a
|
||||||
|
Modification is:
|
||||||
|
A. Any addition to or deletion from the contents of a file
|
||||||
|
containing Original Code or previous Modifications.
|
||||||
|
|
||||||
|
B. Any new file that contains any part of the Original Code or
|
||||||
|
previous Modifications.
|
||||||
|
|
||||||
|
1.10. "Original Code" means Source Code of computer software code
|
||||||
|
which is described in the Source Code notice required by Exhibit A as
|
||||||
|
Original Code, and which, at the time of its release under this
|
||||||
|
License is not already Covered Code governed by this License.
|
||||||
|
|
||||||
|
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
||||||
|
hereafter acquired, including without limitation, method, process,
|
||||||
|
and apparatus claims, in any patent Licensable by grantor.
|
||||||
|
|
||||||
|
1.11. "Source Code" means the preferred form of the Covered Code for
|
||||||
|
making modifications to it, including all modules it contains, plus
|
||||||
|
any associated interface definition files, scripts used to control
|
||||||
|
compilation and installation of an Executable, or source code
|
||||||
|
differential comparisons against either the Original Code or another
|
||||||
|
well known, available Covered Code of the Contributor's choice. The
|
||||||
|
Source Code can be in a compressed or archival form, provided the
|
||||||
|
appropriate decompression or de-archiving software is widely available
|
||||||
|
for no charge.
|
||||||
|
|
||||||
|
1.12. "You" (or "Your") means an individual or a legal entity
|
||||||
|
exercising rights under, and complying with all of the terms of, this
|
||||||
|
License or a future version of this License issued under Section 6.1.
|
||||||
|
For legal entities, "You" includes any entity which controls, is
|
||||||
|
controlled by, or is under common control with You. For purposes of
|
||||||
|
this definition, "control" means (a) the power, direct or indirect,
|
||||||
|
to cause the direction or management of such entity, whether by
|
||||||
|
contract or otherwise, or (b) ownership of more than fifty percent
|
||||||
|
(50%) of the outstanding shares or beneficial ownership of such
|
||||||
|
entity.
|
||||||
|
|
||||||
|
2. Source Code License.
|
||||||
|
|
||||||
|
2.1. The Initial Developer Grant.
|
||||||
|
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||||
|
non-exclusive license, subject to third party intellectual property
|
||||||
|
claims:
|
||||||
|
(a) under intellectual property rights (other than patent or
|
||||||
|
trademark) Licensable by Initial Developer to use, reproduce,
|
||||||
|
modify, display, perform, sublicense and distribute the Original
|
||||||
|
Code (or portions thereof) with or without Modifications, and/or
|
||||||
|
as part of a Larger Work; and
|
||||||
|
|
||||||
|
(b) under Patents Claims infringed by the making, using or
|
||||||
|
selling of Original Code, to make, have made, use, practice,
|
||||||
|
sell, and offer for sale, and/or otherwise dispose of the
|
||||||
|
Original Code (or portions thereof).
|
||||||
|
|
||||||
|
(c) the licenses granted in this Section 2.1(a) and (b) are
|
||||||
|
effective on the date Initial Developer first distributes
|
||||||
|
Original Code under the terms of this License.
|
||||||
|
|
||||||
|
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
||||||
|
granted: 1) for code that You delete from the Original Code; 2)
|
||||||
|
separate from the Original Code; or 3) for infringements caused
|
||||||
|
by: i) the modification of the Original Code or ii) the
|
||||||
|
combination of the Original Code with other software or devices.
|
||||||
|
|
||||||
|
2.2. Contributor Grant.
|
||||||
|
Subject to third party intellectual property claims, each Contributor
|
||||||
|
hereby grants You a world-wide, royalty-free, non-exclusive license
|
||||||
|
|
||||||
|
(a) under intellectual property rights (other than patent or
|
||||||
|
trademark) Licensable by Contributor, to use, reproduce, modify,
|
||||||
|
display, perform, sublicense and distribute the Modifications
|
||||||
|
created by such Contributor (or portions thereof) either on an
|
||||||
|
unmodified basis, with other Modifications, as Covered Code
|
||||||
|
and/or as part of a Larger Work; and
|
||||||
|
|
||||||
|
(b) under Patent Claims infringed by the making, using, or
|
||||||
|
selling of Modifications made by that Contributor either alone
|
||||||
|
and/or in combination with its Contributor Version (or portions
|
||||||
|
of such combination), to make, use, sell, offer for sale, have
|
||||||
|
made, and/or otherwise dispose of: 1) Modifications made by that
|
||||||
|
Contributor (or portions thereof); and 2) the combination of
|
||||||
|
Modifications made by that Contributor with its Contributor
|
||||||
|
Version (or portions of such combination).
|
||||||
|
|
||||||
|
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
||||||
|
effective on the date Contributor first makes Commercial Use of
|
||||||
|
the Covered Code.
|
||||||
|
|
||||||
|
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
||||||
|
granted: 1) for any code that Contributor has deleted from the
|
||||||
|
Contributor Version; 2) separate from the Contributor Version;
|
||||||
|
3) for infringements caused by: i) third party modifications of
|
||||||
|
Contributor Version or ii) the combination of Modifications made
|
||||||
|
by that Contributor with other software (except as part of the
|
||||||
|
Contributor Version) or other devices; or 4) under Patent Claims
|
||||||
|
infringed by Covered Code in the absence of Modifications made by
|
||||||
|
that Contributor.
|
||||||
|
|
||||||
|
3. Distribution Obligations.
|
||||||
|
|
||||||
|
3.1. Application of License.
|
||||||
|
The Modifications which You create or to which You contribute are
|
||||||
|
governed by the terms of this License, including without limitation
|
||||||
|
Section 2.2. The Source Code version of Covered Code may be
|
||||||
|
distributed only under the terms of this License or a future version
|
||||||
|
of this License released under Section 6.1, and You must include a
|
||||||
|
copy of this License with every copy of the Source Code You
|
||||||
|
distribute. You may not offer or impose any terms on any Source Code
|
||||||
|
version that alters or restricts the applicable version of this
|
||||||
|
License or the recipients' rights hereunder. However, You may include
|
||||||
|
an additional document offering the additional rights described in
|
||||||
|
Section 3.5.
|
||||||
|
|
||||||
|
3.2. Availability of Source Code.
|
||||||
|
Any Modification which You create or to which You contribute must be
|
||||||
|
made available in Source Code form under the terms of this License
|
||||||
|
either on the same media as an Executable version or via an accepted
|
||||||
|
Electronic Distribution Mechanism to anyone to whom you made an
|
||||||
|
Executable version available; and if made available via Electronic
|
||||||
|
Distribution Mechanism, must remain available for at least twelve (12)
|
||||||
|
months after the date it initially became available, or at least six
|
||||||
|
(6) months after a subsequent version of that particular Modification
|
||||||
|
has been made available to such recipients. You are responsible for
|
||||||
|
ensuring that the Source Code version remains available even if the
|
||||||
|
Electronic Distribution Mechanism is maintained by a third party.
|
||||||
|
|
||||||
|
3.3. Description of Modifications.
|
||||||
|
You must cause all Covered Code to which You contribute to contain a
|
||||||
|
file documenting the changes You made to create that Covered Code and
|
||||||
|
the date of any change. You must include a prominent statement that
|
||||||
|
the Modification is derived, directly or indirectly, from Original
|
||||||
|
Code provided by the Initial Developer and including the name of the
|
||||||
|
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
||||||
|
Executable version or related documentation in which You describe the
|
||||||
|
origin or ownership of the Covered Code.
|
||||||
|
|
||||||
|
3.4. Intellectual Property Matters
|
||||||
|
(a) Third Party Claims.
|
||||||
|
If Contributor has knowledge that a license under a third party's
|
||||||
|
intellectual property rights is required to exercise the rights
|
||||||
|
granted by such Contributor under Sections 2.1 or 2.2,
|
||||||
|
Contributor must include a text file with the Source Code
|
||||||
|
distribution titled "LEGAL" which describes the claim and the
|
||||||
|
party making the claim in sufficient detail that a recipient will
|
||||||
|
know whom to contact. If Contributor obtains such knowledge after
|
||||||
|
the Modification is made available as described in Section 3.2,
|
||||||
|
Contributor shall promptly modify the LEGAL file in all copies
|
||||||
|
Contributor makes available thereafter and shall take other steps
|
||||||
|
(such as notifying appropriate mailing lists or newsgroups)
|
||||||
|
reasonably calculated to inform those who received the Covered
|
||||||
|
Code that new knowledge has been obtained.
|
||||||
|
|
||||||
|
(b) Contributor APIs.
|
||||||
|
If Contributor's Modifications include an application programming
|
||||||
|
interface and Contributor has knowledge of patent licenses which
|
||||||
|
are reasonably necessary to implement that API, Contributor must
|
||||||
|
also include this information in the LEGAL file.
|
||||||
|
|
||||||
|
(c) Representations.
|
||||||
|
Contributor represents that, except as disclosed pursuant to
|
||||||
|
Section 3.4(a) above, Contributor believes that Contributor's
|
||||||
|
Modifications are Contributor's original creation(s) and/or
|
||||||
|
Contributor has sufficient rights to grant the rights conveyed by
|
||||||
|
this License.
|
||||||
|
|
||||||
|
3.5. Required Notices.
|
||||||
|
You must duplicate the notice in Exhibit A in each file of the Source
|
||||||
|
Code. If it is not possible to put such notice in a particular Source
|
||||||
|
Code file due to its structure, then You must include such notice in a
|
||||||
|
location (such as a relevant directory) where a user would be likely
|
||||||
|
to look for such a notice. If You created one or more Modification(s)
|
||||||
|
You may add your name as a Contributor to the notice described in
|
||||||
|
Exhibit A. You must also duplicate this License in any documentation
|
||||||
|
for the Source Code where You describe recipients' rights or ownership
|
||||||
|
rights relating to Covered Code. You may choose to offer, and to
|
||||||
|
charge a fee for, warranty, support, indemnity or liability
|
||||||
|
obligations to one or more recipients of Covered Code. However, You
|
||||||
|
may do so only on Your own behalf, and not on behalf of the Initial
|
||||||
|
Developer or any Contributor. You must make it absolutely clear than
|
||||||
|
any such warranty, support, indemnity or liability obligation is
|
||||||
|
offered by You alone, and You hereby agree to indemnify the Initial
|
||||||
|
Developer and every Contributor for any liability incurred by the
|
||||||
|
Initial Developer or such Contributor as a result of warranty,
|
||||||
|
support, indemnity or liability terms You offer.
|
||||||
|
|
||||||
|
3.6. Distribution of Executable Versions.
|
||||||
|
You may distribute Covered Code in Executable form only if the
|
||||||
|
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||||
|
and if You include a notice stating that the Source Code version of
|
||||||
|
the Covered Code is available under the terms of this License,
|
||||||
|
including a description of how and where You have fulfilled the
|
||||||
|
obligations of Section 3.2. The notice must be conspicuously included
|
||||||
|
in any notice in an Executable version, related documentation or
|
||||||
|
collateral in which You describe recipients' rights relating to the
|
||||||
|
Covered Code. You may distribute the Executable version of Covered
|
||||||
|
Code or ownership rights under a license of Your choice, which may
|
||||||
|
contain terms different from this License, provided that You are in
|
||||||
|
compliance with the terms of this License and that the license for the
|
||||||
|
Executable version does not attempt to limit or alter the recipient's
|
||||||
|
rights in the Source Code version from the rights set forth in this
|
||||||
|
License. If You distribute the Executable version under a different
|
||||||
|
license You must make it absolutely clear that any terms which differ
|
||||||
|
from this License are offered by You alone, not by the Initial
|
||||||
|
Developer or any Contributor. You hereby agree to indemnify the
|
||||||
|
Initial Developer and every Contributor for any liability incurred by
|
||||||
|
the Initial Developer or such Contributor as a result of any such
|
||||||
|
terms You offer.
|
||||||
|
|
||||||
|
3.7. Larger Works.
|
||||||
|
You may create a Larger Work by combining Covered Code with other code
|
||||||
|
not governed by the terms of this License and distribute the Larger
|
||||||
|
Work as a single product. In such a case, You must make sure the
|
||||||
|
requirements of this License are fulfilled for the Covered Code.
|
||||||
|
|
||||||
|
4. Inability to Comply Due to Statute or Regulation.
|
||||||
|
|
||||||
|
If it is impossible for You to comply with any of the terms of this
|
||||||
|
License with respect to some or all of the Covered Code due to
|
||||||
|
statute, judicial order, or regulation then You must: (a) comply with
|
||||||
|
the terms of this License to the maximum extent possible; and (b)
|
||||||
|
describe the limitations and the code they affect. Such description
|
||||||
|
must be included in the LEGAL file described in Section 3.4 and must
|
||||||
|
be included with all distributions of the Source Code. Except to the
|
||||||
|
extent prohibited by statute or regulation, such description must be
|
||||||
|
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||||
|
understand it.
|
||||||
|
|
||||||
|
5. Application of this License.
|
||||||
|
|
||||||
|
This License applies to code to which the Initial Developer has
|
||||||
|
attached the notice in Exhibit A and to related Covered Code.
|
||||||
|
|
||||||
|
6. Versions of the License.
|
||||||
|
|
||||||
|
6.1. New Versions.
|
||||||
|
Netscape Communications Corporation ("Netscape") may publish revised
|
||||||
|
and/or new versions of the License from time to time. Each version
|
||||||
|
will be given a distinguishing version number.
|
||||||
|
|
||||||
|
6.2. Effect of New Versions.
|
||||||
|
Once Covered Code has been published under a particular version of the
|
||||||
|
License, You may always continue to use it under the terms of that
|
||||||
|
version. You may also choose to use such Covered Code under the terms
|
||||||
|
of any subsequent version of the License published by Netscape. No one
|
||||||
|
other than Netscape has the right to modify the terms applicable to
|
||||||
|
Covered Code created under this License.
|
||||||
|
|
||||||
|
6.3. Derivative Works.
|
||||||
|
If You create or use a modified version of this License (which you may
|
||||||
|
only do in order to apply it to code which is not already Covered Code
|
||||||
|
governed by this License), You must (a) rename Your license so that
|
||||||
|
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
||||||
|
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
||||||
|
license (except to note that your license differs from this License)
|
||||||
|
and (b) otherwise make it clear that Your version of the license
|
||||||
|
contains terms which differ from the Mozilla Public License and
|
||||||
|
Netscape Public License. (Filling in the name of the Initial
|
||||||
|
Developer, Original Code or Contributor in the notice described in
|
||||||
|
Exhibit A shall not of themselves be deemed to be modifications of
|
||||||
|
this License.)
|
||||||
|
|
||||||
|
7. DISCLAIMER OF WARRANTY.
|
||||||
|
|
||||||
|
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||||
|
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||||
|
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||||
|
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||||
|
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||||
|
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||||
|
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||||
|
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||||
|
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||||
|
|
||||||
|
8. TERMINATION.
|
||||||
|
|
||||||
|
8.1. This License and the rights granted hereunder will terminate
|
||||||
|
automatically if You fail to comply with terms herein and fail to cure
|
||||||
|
such breach within 30 days of becoming aware of the breach. All
|
||||||
|
sublicenses to the Covered Code which are properly granted shall
|
||||||
|
survive any termination of this License. Provisions which, by their
|
||||||
|
nature, must remain in effect beyond the termination of this License
|
||||||
|
shall survive.
|
||||||
|
|
||||||
|
8.2. If You initiate litigation by asserting a patent infringement
|
||||||
|
claim (excluding declatory judgment actions) against Initial Developer
|
||||||
|
or a Contributor (the Initial Developer or Contributor against whom
|
||||||
|
You file such action is referred to as "Participant") alleging that:
|
||||||
|
|
||||||
|
(a) such Participant's Contributor Version directly or indirectly
|
||||||
|
infringes any patent, then any and all rights granted by such
|
||||||
|
Participant to You under Sections 2.1 and/or 2.2 of this License
|
||||||
|
shall, upon 60 days notice from Participant terminate prospectively,
|
||||||
|
unless if within 60 days after receipt of notice You either: (i)
|
||||||
|
agree in writing to pay Participant a mutually agreeable reasonable
|
||||||
|
royalty for Your past and future use of Modifications made by such
|
||||||
|
Participant, or (ii) withdraw Your litigation claim with respect to
|
||||||
|
the Contributor Version against such Participant. If within 60 days
|
||||||
|
of notice, a reasonable royalty and payment arrangement are not
|
||||||
|
mutually agreed upon in writing by the parties or the litigation claim
|
||||||
|
is not withdrawn, the rights granted by Participant to You under
|
||||||
|
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
||||||
|
the 60 day notice period specified above.
|
||||||
|
|
||||||
|
(b) any software, hardware, or device, other than such Participant's
|
||||||
|
Contributor Version, directly or indirectly infringes any patent, then
|
||||||
|
any rights granted to You by such Participant under Sections 2.1(b)
|
||||||
|
and 2.2(b) are revoked effective as of the date You first made, used,
|
||||||
|
sold, distributed, or had made, Modifications made by that
|
||||||
|
Participant.
|
||||||
|
|
||||||
|
8.3. If You assert a patent infringement claim against Participant
|
||||||
|
alleging that such Participant's Contributor Version directly or
|
||||||
|
indirectly infringes any patent where such claim is resolved (such as
|
||||||
|
by license or settlement) prior to the initiation of patent
|
||||||
|
infringement litigation, then the reasonable value of the licenses
|
||||||
|
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
||||||
|
into account in determining the amount or value of any payment or
|
||||||
|
license.
|
||||||
|
|
||||||
|
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
||||||
|
all end user license agreements (excluding distributors and resellers)
|
||||||
|
which have been validly granted by You or any distributor hereunder
|
||||||
|
prior to termination shall survive termination.
|
||||||
|
|
||||||
|
9. LIMITATION OF LIABILITY.
|
||||||
|
|
||||||
|
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||||
|
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||||
|
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||||
|
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
||||||
|
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||||
|
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||||
|
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||||
|
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||||
|
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||||
|
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||||
|
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||||
|
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||||
|
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
||||||
|
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
10. U.S. GOVERNMENT END USERS.
|
||||||
|
|
||||||
|
The Covered Code is a "commercial item," as that term is defined in
|
||||||
|
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
||||||
|
software" and "commercial computer software documentation," as such
|
||||||
|
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||||
|
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||||
|
all U.S. Government End Users acquire Covered Code with only those
|
||||||
|
rights set forth herein.
|
||||||
|
|
||||||
|
11. MISCELLANEOUS.
|
||||||
|
|
||||||
|
This License represents the complete agreement concerning subject
|
||||||
|
matter hereof. If any provision of this License is held to be
|
||||||
|
unenforceable, such provision shall be reformed only to the extent
|
||||||
|
necessary to make it enforceable. This License shall be governed by
|
||||||
|
California law provisions (except to the extent applicable law, if
|
||||||
|
any, provides otherwise), excluding its conflict-of-law provisions.
|
||||||
|
With respect to disputes in which at least one party is a citizen of,
|
||||||
|
or an entity chartered or registered to do business in the United
|
||||||
|
States of America, any litigation relating to this License shall be
|
||||||
|
subject to the jurisdiction of the Federal Courts of the Northern
|
||||||
|
District of California, with venue lying in Santa Clara County,
|
||||||
|
California, with the losing party responsible for costs, including
|
||||||
|
without limitation, court costs and reasonable attorneys' fees and
|
||||||
|
expenses. The application of the United Nations Convention on
|
||||||
|
Contracts for the International Sale of Goods is expressly excluded.
|
||||||
|
Any law or regulation which provides that the language of a contract
|
||||||
|
shall be construed against the drafter shall not apply to this
|
||||||
|
License.
|
||||||
|
|
||||||
|
12. RESPONSIBILITY FOR CLAIMS.
|
||||||
|
|
||||||
|
As between Initial Developer and the Contributors, each party is
|
||||||
|
responsible for claims and damages arising, directly or indirectly,
|
||||||
|
out of its utilization of rights under this License and You agree to
|
||||||
|
work with Initial Developer and Contributors to distribute such
|
||||||
|
responsibility on an equitable basis. Nothing herein is intended or
|
||||||
|
shall be deemed to constitute any admission of liability.
|
||||||
|
|
||||||
|
13. MULTIPLE-LICENSED CODE.
|
||||||
|
|
||||||
|
Initial Developer may designate portions of the Covered Code as
|
||||||
|
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
||||||
|
Developer permits you to utilize portions of the Covered Code under
|
||||||
|
Your choice of the NPL or the alternative licenses, if any, specified
|
||||||
|
by the Initial Developer in the file described in Exhibit A.
|
||||||
|
|
||||||
|
EXHIBIT A -Mozilla Public License.
|
||||||
|
|
||||||
|
``The contents of this file are subject to the Mozilla Public License
|
||||||
|
Version 1.1 (the "License"); you may not use this file except in
|
||||||
|
compliance with the License. You may obtain a copy of the License at
|
||||||
|
http://www.mozilla.org/MPL/
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS"
|
||||||
|
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing rights and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
The Original Code is ______________________________________.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is ________________________.
|
||||||
|
Portions created by ______________________ are Copyright (C) ______
|
||||||
|
_______________________. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s): ______________________________________.
|
||||||
|
|
||||||
|
Alternatively, the contents of this file may be used under the terms
|
||||||
|
of the _____ license (the "[___] License"), in which case the
|
||||||
|
provisions of [______] License are applicable instead of those
|
||||||
|
above. If you wish to allow use of your version of this file only
|
||||||
|
under the terms of the [____] License and not to allow others to use
|
||||||
|
your version of this file under the MPL, indicate your decision by
|
||||||
|
deleting the provisions above and replace them with the notice and
|
||||||
|
other provisions required by the [___] License. If you do not delete
|
||||||
|
the provisions above, a recipient may use your version of this file
|
||||||
|
under either the MPL or the [___] License."
|
||||||
|
|
||||||
|
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
||||||
|
the notices in the Source Code files of the Original Code. You should
|
||||||
|
use the text of this Exhibit A rather than the text found in the
|
||||||
|
Original Code Source Code for Your Modifications.]
|
||||||
|
|
79
guacamole-ext/README
Normal file
79
guacamole-ext/README
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
About this README
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
This README is intended to provide quick and to-the-point documentation for
|
||||||
|
technical users intending to compile parts of Guacamole themselves.
|
||||||
|
|
||||||
|
Distribution-specific packages are available from the files section of the main
|
||||||
|
project page:
|
||||||
|
|
||||||
|
http://sourceforge.net/projects/guacamole/files/
|
||||||
|
|
||||||
|
Distribution-specific documentation is provided on the Guacamole wiki:
|
||||||
|
|
||||||
|
http://guac-dev.org/
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
What is guacamole-common-auth?
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
guacamole-common-auth is a Java library used by the Guacamole web
|
||||||
|
application to allow its built-in authentication to be extended or
|
||||||
|
modified and reused.
|
||||||
|
|
||||||
|
guacamole-common-auth provides an interface for retrieving a set of
|
||||||
|
authorized connection configurations for a given set of arbitrary
|
||||||
|
credentials. Classes implementing this interface can be referenced in
|
||||||
|
guacamole.properties to allow different authentication mechanisms
|
||||||
|
(such as LDAP) to be used.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
Compiling and installing guacamole-common-auth
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
guacamole-common-auth is built using Maven. Building guacamole-common-auth
|
||||||
|
compiles all classes and packages them into a redistributable .jar file. This
|
||||||
|
.jar file can be easily included in other Maven-based projects (like Guacamole).
|
||||||
|
|
||||||
|
Note that prebuilt versions of guacamole-common-auth are available from the
|
||||||
|
main guac-dev.org Maven repository which is referenced in all Maven
|
||||||
|
projects in Guacamole. Unless you want to make changes to guacamole-common-auth
|
||||||
|
or you want to use a newer, unreleased version (such as the unstable branch),
|
||||||
|
you do not need to build this manually. You can let Maven download it for
|
||||||
|
you when you build Guacamole.
|
||||||
|
|
||||||
|
1) Run mvn package
|
||||||
|
|
||||||
|
$ mvn package
|
||||||
|
|
||||||
|
Maven will download any needed dependencies for building the .jar file.
|
||||||
|
Once all dependencies have been downloaded, the .jar file will be
|
||||||
|
created in the target/ subdirectory of the current directory.
|
||||||
|
|
||||||
|
2) Run mvn install
|
||||||
|
|
||||||
|
$ mvn install
|
||||||
|
|
||||||
|
DO NOT RUN THIS AS ROOT!
|
||||||
|
|
||||||
|
Maven will install guacamole-common-auth to your user's local Maven
|
||||||
|
repository where it can be used in future builds. It will not install
|
||||||
|
into a system-wide repository and does not require root privileges.
|
||||||
|
|
||||||
|
Once installed, building other Maven projects that depend on
|
||||||
|
guacamole-common-auth (such as Guacamole) will be possible.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
Reporting problems
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
Please report any bugs encountered by opening a new ticket at the Trac system
|
||||||
|
hosted at:
|
||||||
|
|
||||||
|
http://guac-dev.org/trac/
|
||||||
|
|
62
guacamole-ext/pom.xml
Normal file
62
guacamole-ext/pom.xml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>net.sourceforge.guacamole</groupId>
|
||||||
|
<artifactId>guacamole-ext</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<version>0.8.0</version>
|
||||||
|
<name>guacamole-ext</name>
|
||||||
|
<url>http://guac-dev.org/</url>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<!-- Written for 1.6 -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- Java servlet API -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
<version>2.5</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Guacamole Java API -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sourceforge.guacamole</groupId>
|
||||||
|
<artifactId>guacamole-common</artifactId>
|
||||||
|
<version>0.8.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
|
||||||
|
<!-- Central Guacamole repository -->
|
||||||
|
<repository>
|
||||||
|
<id>guac-dev</id>
|
||||||
|
<url>http://guac-dev.org/repo</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
</project>
|
@@ -0,0 +1,104 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic implementation of a Guacamole connection.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class AbstractConnection implements Connection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unique identifier associated with this connection.
|
||||||
|
*/
|
||||||
|
private String identifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The GuacamoleConfiguration associated with this connection.
|
||||||
|
*/
|
||||||
|
private GuacamoleConfiguration configuration;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIdentifier(String identifier) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GuacamoleConfiguration getConfiguration() {
|
||||||
|
return configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setConfiguration(GuacamoleConfiguration configuration) {
|
||||||
|
this.configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
if (identifier == null) return 0;
|
||||||
|
return identifier.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
|
// Not equal if null or not a User
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (!(obj instanceof AbstractConnection)) return false;
|
||||||
|
|
||||||
|
// Get identifier
|
||||||
|
String objIdentifier = ((AbstractConnection) obj).identifier;
|
||||||
|
|
||||||
|
// If null, equal only if this identifier is null
|
||||||
|
if (objIdentifier == null) return identifier == null;
|
||||||
|
|
||||||
|
// Otherwise, equal only if strings are identical
|
||||||
|
return objIdentifier.equals(identifier);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,105 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic implementation of a Guacamole user which uses the username to
|
||||||
|
* determine equality. Username comparison is case-sensitive.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class AbstractUser implements User {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of this user.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This user's password. Note that while this provides a means for the
|
||||||
|
* password to be set, the data stored in this String is not necessarily
|
||||||
|
* the user's actual password. It may be hashed, it may be arbitrary.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
if (username == null) return 0;
|
||||||
|
return username.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
|
// Not equal if null or not a User
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (!(obj instanceof AbstractUser)) return false;
|
||||||
|
|
||||||
|
// Get username
|
||||||
|
String objUsername = ((AbstractUser) obj).username;
|
||||||
|
|
||||||
|
// If null, equal only if this username is null
|
||||||
|
if (objUsername == null) return username == null;
|
||||||
|
|
||||||
|
// Otherwise, equal only if strings are identical
|
||||||
|
return objUsername.equals(username);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides means of accessing and managing the available
|
||||||
|
* GuacamoleConfiguration objects and User objects. Access to each configuration
|
||||||
|
* and each user is limited by a given Credentials object.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface AuthenticationProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the UserContext of the user authorized by the given credentials.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials to use to retrieve the environment.
|
||||||
|
* @return The UserContext of the user authorized by the given credentials,
|
||||||
|
* or null if the credentials are not authorized.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while creating the
|
||||||
|
* UserContext.
|
||||||
|
*/
|
||||||
|
UserContext getUserContext(Credentials credentials)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleSocket;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleClientInformation;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a pairing of a GuacamoleConfiguration with a unique,
|
||||||
|
* human-readable identifier, and abstracts the connection process. The
|
||||||
|
* backing GuacamoleConfiguration may be intentionally obfuscated or tokenized
|
||||||
|
* to protect sensitive configuration information.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface Connection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the unique identifier assigned to this Connection.
|
||||||
|
* @return The unique identifier assigned to this Connection.
|
||||||
|
*/
|
||||||
|
public String getIdentifier();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the identifier assigned to this Connection.
|
||||||
|
*
|
||||||
|
* @param identifier The identifier to assign.
|
||||||
|
*/
|
||||||
|
public void setIdentifier(String identifier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the GuacamoleConfiguration associated with this Connection. Note
|
||||||
|
* that because configurations may contain sensitive information, some data
|
||||||
|
* in this configuration may be omitted or tokenized.
|
||||||
|
*
|
||||||
|
* @return The GuacamoleConfiguration associated with this Connection.
|
||||||
|
*/
|
||||||
|
public GuacamoleConfiguration getConfiguration();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the GuacamoleConfiguration associated with this Connection.
|
||||||
|
*
|
||||||
|
* @param config The GuacamoleConfiguration to associate with this
|
||||||
|
* Connection.
|
||||||
|
*/
|
||||||
|
public void setConfiguration(GuacamoleConfiguration config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establishes a connection to guacd using the GuacamoleConfiguration
|
||||||
|
* associated with this Connection, and returns the resulting, connected
|
||||||
|
* GuacamoleSocket. The GuacamoleSocket will be pre-configured and will
|
||||||
|
* already have passed the handshake stage.
|
||||||
|
*
|
||||||
|
* @param info Information associated with the connecting client.
|
||||||
|
* @return A fully-established GuacamoleSocket.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while connecting to guacd,
|
||||||
|
* or if permission to connect is denied.
|
||||||
|
*/
|
||||||
|
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of ConnectionRecords representing the usage history
|
||||||
|
* of this Connection, including any active users. ConnectionRecords
|
||||||
|
* in this list will be sorted in descending order of end time (active
|
||||||
|
* connections are first), and then in descending order of start time
|
||||||
|
* (newer connections are first).
|
||||||
|
*
|
||||||
|
* @return A list of ConnectionRecrods representing the usage history
|
||||||
|
* of this Connection.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while reading the history
|
||||||
|
* of this connection, or if permission is
|
||||||
|
* denied.
|
||||||
|
*/
|
||||||
|
public List<? extends ConnectionRecord> getHistory() throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,83 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth-mock.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A logging record describing when a user started and ended usage of a
|
||||||
|
* particular connection.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface ConnectionRecord {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the date and time the connection began.
|
||||||
|
*
|
||||||
|
* @return The date and time the connection began.
|
||||||
|
*/
|
||||||
|
public Date getStartDate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the date and time the connection ended, if applicable.
|
||||||
|
*
|
||||||
|
* @return The date and time the connection ended, or null if the
|
||||||
|
* connection is still running or if the end time is unknown.
|
||||||
|
*/
|
||||||
|
public Date getEndDate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the user who used or is using the connection at the
|
||||||
|
* times given by this connection record.
|
||||||
|
*
|
||||||
|
* @return The name of the user who used or is using the associated
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
public String getUsername();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the connection associated with this record is still
|
||||||
|
* active.
|
||||||
|
*
|
||||||
|
* @return true if the connection associated with this record is still
|
||||||
|
* active, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isActive();
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,152 @@
|
|||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple arbitrary set of credentials, including a username/password pair,
|
||||||
|
* the HttpServletRequest associated with the request for authorization
|
||||||
|
* (if any) and the HttpSession associated with that request.
|
||||||
|
*
|
||||||
|
* This class is used along with AuthenticationProvider to provide arbitrary
|
||||||
|
* HTTP-based authentication for Guacamole.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class Credentials implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unique identifier associated with this specific version of Credentials.
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An arbitrary username.
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An arbitrary password.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The HttpServletRequest carrying additional credentials, if any.
|
||||||
|
*/
|
||||||
|
private transient HttpServletRequest request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The HttpSession carrying additional credentials, if any.
|
||||||
|
*/
|
||||||
|
private transient HttpSession session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the password associated with this set of credentials.
|
||||||
|
* @return The password associated with this username/password pair, or
|
||||||
|
* null if no password has been set.
|
||||||
|
*/
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the password associated with this set of credentials.
|
||||||
|
* @param password The password to associate with this username/password
|
||||||
|
* pair.
|
||||||
|
*/
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the username associated with this set of credentials.
|
||||||
|
* @return The username associated with this username/password pair, or
|
||||||
|
* null if no username has been set.
|
||||||
|
*/
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the username associated with this set of credentials.
|
||||||
|
* @param username The username to associate with this username/password
|
||||||
|
* pair.
|
||||||
|
*/
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the HttpServletRequest associated with this set of credentials.
|
||||||
|
* @return The HttpServletRequest associated with this set of credentials,
|
||||||
|
* or null if no such request exists.
|
||||||
|
*/
|
||||||
|
public HttpServletRequest getRequest() {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the HttpServletRequest associated with this set of credentials.
|
||||||
|
* @param request The HttpServletRequest to associated with this set of
|
||||||
|
* credentials.
|
||||||
|
*/
|
||||||
|
public void setRequest(HttpServletRequest request) {
|
||||||
|
this.request = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the HttpSession associated with this set of credentials.
|
||||||
|
* @return The HttpSession associated with this set of credentials, or null
|
||||||
|
* if no such request exists.
|
||||||
|
*/
|
||||||
|
public HttpSession getSession() {
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the HttpSession associated with this set of credentials.
|
||||||
|
* @param session The HttpSession to associated with this set of
|
||||||
|
* credentials.
|
||||||
|
*/
|
||||||
|
public void setSession(HttpSession session) {
|
||||||
|
this.session = session;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,117 @@
|
|||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides access to a collection of all objects with associated identifiers,
|
||||||
|
* and allows user manipulation and removal. Objects stored within a
|
||||||
|
* Directory are not necessarily returned to the use as references to
|
||||||
|
* the stored objects, thus updating an object requires calling an update
|
||||||
|
* function.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
* @param <IdentifierType> The type of identifier used to identify objects
|
||||||
|
* stored within this Directory.
|
||||||
|
* @param <ObjectType> The type of objects stored within this Directory.
|
||||||
|
*/
|
||||||
|
public interface Directory<IdentifierType, ObjectType> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the object having the given identifier. Note that changes to
|
||||||
|
* the object returned will not necessarily affect the object stored within
|
||||||
|
* the Directory. To update an object stored within an
|
||||||
|
* Directory such that future calls to get() will return the updated
|
||||||
|
* object, you must call update() on the object after modification.
|
||||||
|
*
|
||||||
|
* @param identifier The identifier to use when locating the object to
|
||||||
|
* return.
|
||||||
|
* @return The object having the given identifier, or null if no such object
|
||||||
|
* exists.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while retrieving the
|
||||||
|
* object, or if permission for retrieving the
|
||||||
|
* object is denied.
|
||||||
|
*/
|
||||||
|
ObjectType get(IdentifierType identifier) throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a Set containing all identifiers for all objects within this
|
||||||
|
* Directory.
|
||||||
|
*
|
||||||
|
* @return A Set of all identifiers.
|
||||||
|
* @throws GuacamoleException If an error occurs while retrieving
|
||||||
|
* the identifiers.
|
||||||
|
*/
|
||||||
|
Set<IdentifierType> getIdentifiers() throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the given object to the overall set.
|
||||||
|
*
|
||||||
|
* @param object The object to add.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while adding the object , or
|
||||||
|
* if adding the object is not allowed.
|
||||||
|
*/
|
||||||
|
void add(ObjectType object)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the stored object with the data contained in the given object.
|
||||||
|
*
|
||||||
|
* @param object The object which will supply the data for the update.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while updating the object,
|
||||||
|
* or if updating the object is not allowed.
|
||||||
|
*/
|
||||||
|
void update(ObjectType object)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the object with the given identifier from the overall set.
|
||||||
|
*
|
||||||
|
* @param identifier The identifier of the object to remove.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while removing the object,
|
||||||
|
* or if removing object is not allowed.
|
||||||
|
*/
|
||||||
|
void remove(IdentifierType identifier) throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,129 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.permission.Permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user of the Guacamole web application.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface User {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of this user, which must be unique across all users.
|
||||||
|
*
|
||||||
|
* @return The name of this user.
|
||||||
|
*/
|
||||||
|
public String getUsername();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the name of this user, which must be unique across all users.
|
||||||
|
*
|
||||||
|
* @param username The name of this user.
|
||||||
|
*/
|
||||||
|
public void setUsername(String username);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns this user's password. Note that the password returned may be
|
||||||
|
* hashed or completely arbitrary.
|
||||||
|
*
|
||||||
|
* @return A String which may (or may not) be the user's password.
|
||||||
|
*/
|
||||||
|
public String getPassword();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this user's password. Note that while this function is guaranteed
|
||||||
|
* to change the password of this User object, there is no guarantee that
|
||||||
|
* getPassword() will return the value given to setPassword().
|
||||||
|
*
|
||||||
|
* @param password The password to set.
|
||||||
|
*/
|
||||||
|
public void setPassword(String password);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all permissions given to this user.
|
||||||
|
*
|
||||||
|
* @return A Set of all permissions granted to this user.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while retrieving
|
||||||
|
* permissions, or if reading all permissions
|
||||||
|
* is not allowed.
|
||||||
|
*/
|
||||||
|
Set<Permission> getPermissions() throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests whether this user has the specified permission.
|
||||||
|
*
|
||||||
|
* @param permission The permission to check.
|
||||||
|
* @return true if the permission is granted to this user, false otherwise.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while checking permissions,
|
||||||
|
* or if permissions cannot be checked due to
|
||||||
|
* lack of permissions to do so.
|
||||||
|
*/
|
||||||
|
boolean hasPermission(Permission permission) throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified permission to this user.
|
||||||
|
*
|
||||||
|
* @param permission The permission to add.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while adding the
|
||||||
|
* permission. or if permission to add
|
||||||
|
* permissions is denied.
|
||||||
|
*/
|
||||||
|
void addPermission(Permission permission) throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified permission from this specified user.
|
||||||
|
*
|
||||||
|
* @param permission The permission to remove.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while removing the
|
||||||
|
* permission. or if permission to remove
|
||||||
|
* permissions is denied.
|
||||||
|
*/
|
||||||
|
void removePermission(Permission permission) throws GuacamoleException;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,86 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The context of an active user. The functions of this class enforce all
|
||||||
|
* permissions and act only within the rights of the associated user.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface UserContext {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the User whose access rights control the operations of this
|
||||||
|
* UserContext.
|
||||||
|
*
|
||||||
|
* @return The User whose access rights control the operations of this
|
||||||
|
* UserContext.
|
||||||
|
*/
|
||||||
|
User self();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a Directory which can be used to view and manipulate other
|
||||||
|
* users, but only as allowed by the permissions given to the user of this
|
||||||
|
* UserContext.
|
||||||
|
*
|
||||||
|
* @return A Directory whose operations are bound by the restrictions
|
||||||
|
* of this UserContext.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while creating the
|
||||||
|
* Directory.
|
||||||
|
*/
|
||||||
|
Directory<String, User> getUserDirectory() throws GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a Directory which can be used to view and manipulate
|
||||||
|
* connections and their configurations, but only as allowed by the
|
||||||
|
* permissions given to the user of this UserContext.
|
||||||
|
*
|
||||||
|
* @return A Directory whose operations are bound by the restrictions
|
||||||
|
* of this UserContext.
|
||||||
|
*
|
||||||
|
* @throws GuacamoleException If an error occurs while creating the
|
||||||
|
* Directory.
|
||||||
|
*/
|
||||||
|
Directory<String, Connection> getConnectionDirectory()
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides classes which can be used to extend or replace the authentication
|
||||||
|
* functionality of the Guacamole web application.
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.net.auth;
|
||||||
|
|
@@ -0,0 +1,121 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A permission which controls operations that directly affect a specific
|
||||||
|
* GuacamoleConfiguration. Note that this permission only refers to the
|
||||||
|
* GuacamoleConfiguration by its identifier. The actual GuacamoleConfiguration
|
||||||
|
* is not stored within.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class ConnectionPermission
|
||||||
|
implements ObjectPermission<String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifier of the GuacamoleConfiguration associated with the
|
||||||
|
* operation affected by this permission.
|
||||||
|
*/
|
||||||
|
private String identifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of operation affected by this permission.
|
||||||
|
*/
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new ConnectionPermission having the given type
|
||||||
|
* and identifier. The identifier must be the unique identifier assigned
|
||||||
|
* to the GuacamoleConfiguration by the AuthenticationProvider in use.
|
||||||
|
*
|
||||||
|
* @param type The type of operation affected by this permission.
|
||||||
|
* @param identifier The identifier of the GuacamoleConfiguration associated
|
||||||
|
* with the operation affected by this permission.
|
||||||
|
*/
|
||||||
|
public ConnectionPermission(Type type, String identifier) {
|
||||||
|
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getObjectIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 5;
|
||||||
|
if (identifier != null) hash = 47 * hash + identifier.hashCode();
|
||||||
|
if (type != null) hash = 47 * hash + type.hashCode();
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
|
// Not equal if null or wrong type
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (getClass() != obj.getClass()) return false;
|
||||||
|
|
||||||
|
final ConnectionPermission other =
|
||||||
|
(ConnectionPermission) obj;
|
||||||
|
|
||||||
|
// Not equal if different type
|
||||||
|
if (this.type != other.type)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// If null identifier, equality depends on whether other identifier
|
||||||
|
// is null
|
||||||
|
if (identifier == null)
|
||||||
|
return other.identifier == null;
|
||||||
|
|
||||||
|
// Otherwise, equality depends entirely on identifier
|
||||||
|
return identifier.equals(other.identifier);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A permission which affects a specific object, rather than the system as a
|
||||||
|
* whole.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
* @param <T> The type of identifier used by the object this permission affects.
|
||||||
|
*/
|
||||||
|
public interface ObjectPermission<T> extends Permission<ObjectPermission.Type> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specific types of object-level permissions. Each permission type is
|
||||||
|
* related to a specific class of object-level operation.
|
||||||
|
*/
|
||||||
|
public enum Type {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read data within an object.
|
||||||
|
*/
|
||||||
|
READ,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update data within an object.
|
||||||
|
*/
|
||||||
|
UPDATE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an object.
|
||||||
|
*/
|
||||||
|
DELETE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change who has access to an object.
|
||||||
|
*/
|
||||||
|
ADMINISTER
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the identifier of the specific object affected by this
|
||||||
|
* permission.
|
||||||
|
*
|
||||||
|
* @return The identifier of the specific object affected by this
|
||||||
|
* permission.
|
||||||
|
*/
|
||||||
|
public T getObjectIdentifier();
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A permission which affects a specific type of operation, where all available
|
||||||
|
* operation types are defined by an enumeration.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
* @param <Type> The enumeration of all available operation types that this
|
||||||
|
* permission can affect.
|
||||||
|
*/
|
||||||
|
public interface Permission<Type extends Enum> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the type of operation affected by this permission.
|
||||||
|
* @return The type of operation affected by this permission.
|
||||||
|
*/
|
||||||
|
public Type getType();
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,115 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A permission which affects the system as a whole, rather than an individual
|
||||||
|
* object.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SystemPermission implements Permission<SystemPermission.Type> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specific types of system-level permissions. Each permission type is
|
||||||
|
* related to a specific class of system-level operation.
|
||||||
|
*/
|
||||||
|
public enum Type {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create users.
|
||||||
|
*/
|
||||||
|
CREATE_USER,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create connections.
|
||||||
|
*/
|
||||||
|
CREATE_CONNECTION,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Administer the system in general, including adding permissions
|
||||||
|
* which affect the system (like user creation, connection creation,
|
||||||
|
* and system administration).
|
||||||
|
*/
|
||||||
|
ADMINISTER
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of operation affected by this permission.
|
||||||
|
*/
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SystemPermission with the given
|
||||||
|
* type.
|
||||||
|
*
|
||||||
|
* @param type The type of operation controlled by this permission.
|
||||||
|
*/
|
||||||
|
public SystemPermission(Type type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return type.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
|
// Not equal if null or wrong type
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (getClass() != obj.getClass()) return false;
|
||||||
|
|
||||||
|
final SystemPermission other = (SystemPermission) obj;
|
||||||
|
|
||||||
|
// Compare types
|
||||||
|
if (type != other.type)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,116 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A permission which controls operations that directly affect a specific
|
||||||
|
* User.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class UserPermission implements ObjectPermission<String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The username of the User associated with the operation affected by this
|
||||||
|
* permission.
|
||||||
|
*/
|
||||||
|
private String identifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of operation affected by this permission.
|
||||||
|
*/
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new UserPermission having the given type and identifier. The
|
||||||
|
* identifier must be the user's username.
|
||||||
|
*
|
||||||
|
* @param type The type of operation affected by this permission.
|
||||||
|
* @param identifier The username of the User associated with the operation
|
||||||
|
* affected by this permission.
|
||||||
|
*/
|
||||||
|
public UserPermission(Type type, String identifier) {
|
||||||
|
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getObjectIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 5;
|
||||||
|
if (identifier != null) hash = 47 * hash + identifier.hashCode();
|
||||||
|
if (type != null) hash = 47 * hash + type.hashCode();
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
|
// Not equal if null or wrong type
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (getClass() != obj.getClass()) return false;
|
||||||
|
|
||||||
|
final UserPermission other = (UserPermission) obj;
|
||||||
|
|
||||||
|
// Not equal if different type
|
||||||
|
if (this.type != other.type)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// If null identifier, equality depends on whether other identifier
|
||||||
|
// is null
|
||||||
|
if (identifier == null)
|
||||||
|
return other.identifier == null;
|
||||||
|
|
||||||
|
// Otherwise, equality depends entirely on identifier
|
||||||
|
return identifier.equals(other.identifier);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides classes which describe the various permissions a Guacamole user
|
||||||
|
* can be granted.
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.net.auth.permission;
|
||||||
|
|
@@ -0,0 +1,100 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.AuthenticationProvider;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
import net.sourceforge.guacamole.net.auth.User;
|
||||||
|
import net.sourceforge.guacamole.net.auth.UserContext;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides means of retrieving a set of named GuacamoleConfigurations for a
|
||||||
|
* given Credentials object. This is a simple AuthenticationProvider
|
||||||
|
* implementation intended to be easily extended. It is useful for simple
|
||||||
|
* authentication situations where access to web-based administration and
|
||||||
|
* complex users and permissions are not required.
|
||||||
|
*
|
||||||
|
* The interface provided by SimpleAuthenticationProvider is similar to that of
|
||||||
|
* the AuthenticationProvider interface of older Guacamole releases.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class SimpleAuthenticationProvider
|
||||||
|
implements AuthenticationProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given an arbitrary credentials object, returns a Map containing all
|
||||||
|
* configurations authorized by those credentials. The keys of this Map
|
||||||
|
* are Strings which uniquely identify each configuration.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials to use to retrieve authorized
|
||||||
|
* configurations.
|
||||||
|
* @return A Map of all configurations authorized by the given credentials,
|
||||||
|
* or null if the credentials given are not authorized.
|
||||||
|
* @throws GuacamoleException If an error occurs while retrieving
|
||||||
|
* configurations.
|
||||||
|
*/
|
||||||
|
public abstract Map<String, GuacamoleConfiguration>
|
||||||
|
getAuthorizedConfigurations(Credentials credentials)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserContext getUserContext(Credentials credentials)
|
||||||
|
throws GuacamoleException {
|
||||||
|
|
||||||
|
// Get configurations
|
||||||
|
Map<String, GuacamoleConfiguration> configs =
|
||||||
|
getAuthorizedConfigurations(credentials);
|
||||||
|
|
||||||
|
// Return as unauthorized if not authorized to retrieve configs
|
||||||
|
if (configs == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Build new user from credentials
|
||||||
|
User user = new SimpleUser(credentials.getUsername(), configs);
|
||||||
|
|
||||||
|
// Return user context restricted to authorized configs
|
||||||
|
return new SimpleUserContext(user, configs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,112 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleSocket;
|
||||||
|
import net.sourceforge.guacamole.net.InetGuacamoleSocket;
|
||||||
|
import net.sourceforge.guacamole.net.auth.AbstractConnection;
|
||||||
|
import net.sourceforge.guacamole.net.auth.ConnectionRecord;
|
||||||
|
import net.sourceforge.guacamole.properties.GuacamoleProperties;
|
||||||
|
import net.sourceforge.guacamole.protocol.ConfiguredGuacamoleSocket;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleClientInformation;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An extremely basic Connection implementation.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SimpleConnection extends AbstractConnection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backing configuration, containing all sensitive information.
|
||||||
|
*/
|
||||||
|
private GuacamoleConfiguration config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a completely uninitialized SimpleConnection.
|
||||||
|
*/
|
||||||
|
public SimpleConnection() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SimpleConnection having the given identifier and
|
||||||
|
* GuacamoleConfiguration.
|
||||||
|
*
|
||||||
|
* @param identifier The identifier to associated with this connection.
|
||||||
|
* @param config The configuration describing how to connect to this
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
public SimpleConnection(String identifier,
|
||||||
|
GuacamoleConfiguration config) {
|
||||||
|
|
||||||
|
// Set identifier
|
||||||
|
setIdentifier(identifier);
|
||||||
|
|
||||||
|
// Set config
|
||||||
|
setConfiguration(config);
|
||||||
|
this.config = config;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||||
|
throws GuacamoleException {
|
||||||
|
|
||||||
|
// Get guacd connection parameters
|
||||||
|
String hostname = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_HOSTNAME);
|
||||||
|
int port = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_PORT);
|
||||||
|
|
||||||
|
// Return connected socket
|
||||||
|
return new ConfiguredGuacamoleSocket(
|
||||||
|
new InetGuacamoleSocket(hostname, port),
|
||||||
|
config, info
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ConnectionRecord> getHistory() throws GuacamoleException {
|
||||||
|
return Collections.EMPTY_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,111 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleSecurityException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Connection;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Directory;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An extremely simple read-only implementation of a Directory of
|
||||||
|
* GuacamoleConfigurations which provides access to a pre-defined Map of
|
||||||
|
* GuacamoleConfigurations.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SimpleConnectionDirectory
|
||||||
|
implements Directory<String, Connection> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Map of Connections to provide access to.
|
||||||
|
*/
|
||||||
|
private Map<String, Connection> connections =
|
||||||
|
new HashMap<String, Connection>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SimpleConnectionDirectory which provides
|
||||||
|
* access to the configurations contained within the given Map.
|
||||||
|
*
|
||||||
|
* @param configs The Map of GuacamoleConfigurations to provide access to.
|
||||||
|
*/
|
||||||
|
public SimpleConnectionDirectory(
|
||||||
|
Map<String, GuacamoleConfiguration> configs) {
|
||||||
|
|
||||||
|
// Create connections for each config
|
||||||
|
for (Entry<String, GuacamoleConfiguration> entry : configs.entrySet())
|
||||||
|
connections.put(entry.getKey(),
|
||||||
|
new SimpleConnection(entry.getKey(), entry.getValue()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection get(String identifier)
|
||||||
|
throws GuacamoleException {
|
||||||
|
return connections.get(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getIdentifiers() throws GuacamoleException {
|
||||||
|
return connections.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(Connection connection)
|
||||||
|
throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(Connection connection)
|
||||||
|
throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(String identifier) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleSecurityException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.AbstractUser;
|
||||||
|
import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission;
|
||||||
|
import net.sourceforge.guacamole.net.auth.permission.ObjectPermission;
|
||||||
|
import net.sourceforge.guacamole.net.auth.permission.Permission;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An extremely basic User implementation.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SimpleUser extends AbstractUser {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The set of all permissions available to this user.
|
||||||
|
*/
|
||||||
|
private Set<Permission> permissions = new HashSet<Permission>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a completely uninitialized SimpleUser.
|
||||||
|
*/
|
||||||
|
public SimpleUser() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SimpleUser having the given username.
|
||||||
|
*
|
||||||
|
* @param username The username to assign to this SimpleUser.
|
||||||
|
* @param configs All configurations this user has read access to.
|
||||||
|
*/
|
||||||
|
public SimpleUser(String username,
|
||||||
|
Map<String, GuacamoleConfiguration> configs) {
|
||||||
|
|
||||||
|
// Set username
|
||||||
|
setUsername(username);
|
||||||
|
|
||||||
|
// Add permissions
|
||||||
|
for (String identifier : configs.keySet()) {
|
||||||
|
|
||||||
|
// Create permission
|
||||||
|
Permission permission = new ConnectionPermission(
|
||||||
|
ObjectPermission.Type.READ,
|
||||||
|
identifier
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add to set
|
||||||
|
permissions.add(permission);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Permission> getPermissions() throws GuacamoleException {
|
||||||
|
return permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(Permission permission) throws GuacamoleException {
|
||||||
|
return permissions.contains(permission);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPermission(Permission permission) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removePermission(Permission permission) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,114 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Connection;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Directory;
|
||||||
|
import net.sourceforge.guacamole.net.auth.User;
|
||||||
|
import net.sourceforge.guacamole.net.auth.UserContext;
|
||||||
|
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An extremely simple UserContext implementation which provides access to
|
||||||
|
* a defined and restricted set of GuacamoleConfigurations. Access to
|
||||||
|
* querying or modifying either users or permissions is denied.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SimpleUserContext implements UserContext {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to the user whose permissions dictate the configurations
|
||||||
|
* accessible within this UserContext.
|
||||||
|
*/
|
||||||
|
private final User self;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Directory with access only to those Connections that the User
|
||||||
|
* associated with this UserContext has access to.
|
||||||
|
*/
|
||||||
|
private final Directory<String, Connection> connectionDirectory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Directory with access only to the User associated with this
|
||||||
|
* UserContext.
|
||||||
|
*/
|
||||||
|
private final Directory<String, User> userDirectory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SimpleUserContext which provides access to only those
|
||||||
|
* configurations within the given Map. The User given must be the user
|
||||||
|
* that owns this UserContext, and the Map given must contain only
|
||||||
|
* GuacamoleConfigurations that the given User has read access to.
|
||||||
|
*
|
||||||
|
* @param self The owner of this UserContext.
|
||||||
|
* @param configs A Map of all configurations for which the user associated
|
||||||
|
* with this UserContext has read access.
|
||||||
|
*/
|
||||||
|
public SimpleUserContext(User self,
|
||||||
|
Map<String, GuacamoleConfiguration> configs) {
|
||||||
|
|
||||||
|
this.self = self;
|
||||||
|
|
||||||
|
this.connectionDirectory =
|
||||||
|
new SimpleConnectionDirectory(configs);
|
||||||
|
|
||||||
|
this.userDirectory = new SimpleUserDirectory(self);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User self() {
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Directory<String, Connection> getConnectionDirectory()
|
||||||
|
throws GuacamoleException {
|
||||||
|
return connectionDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Directory<String, User> getUserDirectory()
|
||||||
|
throws GuacamoleException {
|
||||||
|
return userDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,103 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-auth.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Set;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleSecurityException;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Directory;
|
||||||
|
import net.sourceforge.guacamole.net.auth.User;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An extremely simple read-only implementation of a Directory of Users which
|
||||||
|
* provides access to a single pre-defined User.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class SimpleUserDirectory implements Directory<String, User> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The only user to be contained within this directory.
|
||||||
|
*/
|
||||||
|
private User user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new SimpleUserDirectory which provides access to the single
|
||||||
|
* user provided.
|
||||||
|
*
|
||||||
|
* @param user The user to provide access to.
|
||||||
|
*/
|
||||||
|
public SimpleUserDirectory(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User get(String username) throws GuacamoleException {
|
||||||
|
|
||||||
|
// If username matches, return the user
|
||||||
|
if (user.getUsername().equals(username))
|
||||||
|
return user;
|
||||||
|
|
||||||
|
// Otherwise, not found
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getIdentifiers() throws GuacamoleException {
|
||||||
|
return Collections.singleton(user.getUsername());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(User user) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(User user) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(String username) throws GuacamoleException {
|
||||||
|
throw new GuacamoleSecurityException("Permission denied.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a basic AuthenticationProvider base class that can be used to create
|
||||||
|
* simple AuthenticationProviders in the same way allowed by the old
|
||||||
|
* authentication API.
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.net.auth.simple;
|
||||||
|
|
@@ -0,0 +1,34 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event which is triggered whenever a user's credentials fail to be
|
||||||
|
* authenticated. The credentials that failed to be authenticated are included
|
||||||
|
* within this event, and can be retrieved using getCredentials().
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class AuthenticationFailureEvent implements CredentialEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The credentials which failed authentication.
|
||||||
|
*/
|
||||||
|
private Credentials credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new AuthenticationFailureEvent which represents the failure
|
||||||
|
* to authenticate the given credentials.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials which failed authentication.
|
||||||
|
*/
|
||||||
|
public AuthenticationFailureEvent(Credentials credentials) {
|
||||||
|
this.credentials = credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Credentials getCredentials() {
|
||||||
|
return credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,34 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event which is triggered whenever a user's credentials pass
|
||||||
|
* authentication. The credentials that passed authentication are included
|
||||||
|
* within this event, and can be retrieved using getCredentials().
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class AuthenticationSuccessEvent implements CredentialEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The credentials which passed authentication.
|
||||||
|
*/
|
||||||
|
private Credentials credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new AuthenticationSuccessEvent which represents a successful
|
||||||
|
* authentication attempt with the given credentials.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials which passed authentication.
|
||||||
|
*/
|
||||||
|
public AuthenticationSuccessEvent(Credentials credentials) {
|
||||||
|
this.credentials = credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Credentials getCredentials() {
|
||||||
|
return credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,21 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract basis for events which may have associated user credentials when
|
||||||
|
* triggered.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface CredentialEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current credentials of the user triggering the event, if any.
|
||||||
|
*
|
||||||
|
* @return The current credentials of the user triggering the event, if
|
||||||
|
* any, or null if no credentials are associated with the event.
|
||||||
|
*/
|
||||||
|
Credentials getCredentials();
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,50 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleTunnel;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event which is triggered whenever a tunnel is being closed. The tunnel
|
||||||
|
* being closed can be accessed through getTunnel(), and the set of all
|
||||||
|
* credentials available from the request which is closing the tunnel can be
|
||||||
|
* retrieved using getCredentials().
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class TunnelCloseEvent implements CredentialEvent, TunnelEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The credentials associated with the request that is closing the
|
||||||
|
* tunnel, if any.
|
||||||
|
*/
|
||||||
|
private Credentials credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The tunnel being closed.
|
||||||
|
*/
|
||||||
|
private GuacamoleTunnel tunnel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new TunnelCloseEvent which represents the closing of the
|
||||||
|
* given tunnel via a request associated with the given credentials.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials associated with the request
|
||||||
|
* closing the tunnel.
|
||||||
|
* @param tunnel The tunnel being closed.
|
||||||
|
*/
|
||||||
|
public TunnelCloseEvent(Credentials credentials, GuacamoleTunnel tunnel) {
|
||||||
|
this.credentials = credentials;
|
||||||
|
this.tunnel = tunnel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Credentials getCredentials() {
|
||||||
|
return credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GuacamoleTunnel getTunnel() {
|
||||||
|
return tunnel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,50 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleTunnel;
|
||||||
|
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event which is triggered whenever a tunnel is being connected. The tunnel
|
||||||
|
* being connected can be accessed through getTunnel(), and the set of all
|
||||||
|
* credentials available from the request which is connecting the tunnel can be
|
||||||
|
* retrieved using getCredentials().
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class TunnelConnectEvent implements CredentialEvent, TunnelEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The credentials associated with the request that is connecting the
|
||||||
|
* tunnel, if any.
|
||||||
|
*/
|
||||||
|
private Credentials credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The tunnel being connected.
|
||||||
|
*/
|
||||||
|
private GuacamoleTunnel tunnel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new TunnelConnectEvent which represents the connecting of the
|
||||||
|
* given tunnel via a request associated with the given credentials.
|
||||||
|
*
|
||||||
|
* @param credentials The credentials associated with the request
|
||||||
|
* connecting the tunnel.
|
||||||
|
* @param tunnel The tunnel being connected.
|
||||||
|
*/
|
||||||
|
public TunnelConnectEvent(Credentials credentials, GuacamoleTunnel tunnel) {
|
||||||
|
this.credentials = credentials;
|
||||||
|
this.tunnel = tunnel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Credentials getCredentials() {
|
||||||
|
return credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GuacamoleTunnel getTunnel() {
|
||||||
|
return tunnel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,20 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleTunnel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract basis for events associated with tunnels.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface TunnelEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the tunnel associated with this event, if any.
|
||||||
|
*
|
||||||
|
* @return The tunnel associated with this event, if any, or null if no
|
||||||
|
* tunnel is associated with this event.
|
||||||
|
*/
|
||||||
|
GuacamoleTunnel getTunnel();
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,29 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event.listener;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.event.AuthenticationFailureEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A listener whose authenticationFailed() hook will fire immediately
|
||||||
|
* after a user's authentication attempt fails. Note that this hook cannot
|
||||||
|
* be used to cancel the authentication failure.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface AuthenticationFailureListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event hook which fires immediately after a user's authentication attempt
|
||||||
|
* fails.
|
||||||
|
*
|
||||||
|
* @param e The AuthenticationFailureEvent describing the authentication
|
||||||
|
* failure that just occurred.
|
||||||
|
* @throws GuacamoleException If an error occurs while handling the
|
||||||
|
* authentication failure event. Note that
|
||||||
|
* throwing an exception will NOT cause the
|
||||||
|
* authentication failure to be canceled.
|
||||||
|
*/
|
||||||
|
void authenticationFailed(AuthenticationFailureEvent e)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,34 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event.listener;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.event.AuthenticationSuccessEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A listener whose hooks will fire immediately before and after a user's
|
||||||
|
* authentication attempt succeeds. If a user successfully authenticates,
|
||||||
|
* the authenticationSucceeded() hook has the opportunity to cancel the
|
||||||
|
* authentication and force it to fail.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface AuthenticationSuccessListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event hook which fires immediately after a user's authentication attempt
|
||||||
|
* succeeds. The return value of this hook dictates whether the
|
||||||
|
* successful authentication attempt is canceled.
|
||||||
|
*
|
||||||
|
* @param e The AuthenticationFailureEvent describing the authentication
|
||||||
|
* failure that just occurred.
|
||||||
|
* @return true if the successful authentication attempt should be
|
||||||
|
* allowed, or false if the attempt should be denied, causing
|
||||||
|
* the attempt to effectively fail.
|
||||||
|
* @throws GuacamoleException If an error occurs while handling the
|
||||||
|
* authentication success event. Throwing an
|
||||||
|
* exception will also cancel the authentication
|
||||||
|
* success.
|
||||||
|
*/
|
||||||
|
boolean authenticationSucceeded(AuthenticationSuccessEvent e)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,31 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event.listener;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.event.TunnelCloseEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A listener whose tunnelClosed() hook will fire immediately after an
|
||||||
|
* existing tunnel is closed.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface TunnelCloseListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event hook which fires immediately after an existing tunnel is closed.
|
||||||
|
* The return value of this hook dictates whether the tunnel is allowed to
|
||||||
|
* be closed.
|
||||||
|
*
|
||||||
|
* @param e The TunnelCloseEvent describing the tunnel being closed and
|
||||||
|
* any associated credentials.
|
||||||
|
* @return true if the tunnel should be allowed to be closed, or false
|
||||||
|
* if the attempt should be denied, causing the attempt to
|
||||||
|
* effectively fail.
|
||||||
|
* @throws GuacamoleException If an error occurs while handling the
|
||||||
|
* tunnel close event. Throwing an exception
|
||||||
|
* will also stop the tunnel from being closed.
|
||||||
|
*/
|
||||||
|
boolean tunnelClosed(TunnelCloseEvent e)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
package net.sourceforge.guacamole.net.event.listener;
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.net.event.TunnelConnectEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A listener whose tunnelConnected() hook will fire immediately after a new
|
||||||
|
* tunnel is connected.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface TunnelConnectListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event hook which fires immediately after a new tunnel is connected.
|
||||||
|
* The return value of this hook dictates whether the tunnel is made visible
|
||||||
|
* to the session.
|
||||||
|
*
|
||||||
|
* @param e The TunnelConnectEvent describing the tunnel being connected and
|
||||||
|
* any associated credentials.
|
||||||
|
* @return true if the tunnel should be allowed to be connected, or false
|
||||||
|
* if the attempt should be denied, causing the attempt to
|
||||||
|
* effectively fail.
|
||||||
|
* @throws GuacamoleException If an error occurs while handling the
|
||||||
|
* tunnel connect event. Throwing an exception
|
||||||
|
* will also stop the tunnel from being made
|
||||||
|
* visible to the session.
|
||||||
|
*/
|
||||||
|
boolean tunnelConnected(TunnelConnectEvent e)
|
||||||
|
throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides classes for hooking into various events that take place as
|
||||||
|
* users log into and use the Guacamole web application. These event
|
||||||
|
* hooks can be used to take action upon occurrence of an event and,
|
||||||
|
* in some cases, prevent the web application from allowing the
|
||||||
|
* event to continue for the user that triggered it.
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.net.event.listener;
|
||||||
|
|
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides classes for storing information about events that are
|
||||||
|
* triggered when users log into and use the Guacamole web application.
|
||||||
|
* These event classes are most useful when used with hooks implemented
|
||||||
|
* using listener classes.
|
||||||
|
*
|
||||||
|
* @see net.sourceforge.guacamole.net.event.listener
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.net.event;
|
||||||
|
|
@@ -0,0 +1,72 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleServerException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A GuacamoleProperty whose value is an boolean. Legal true values are "true",
|
||||||
|
* or "false". Case does not matter.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class BooleanGuacamoleProperty implements GuacamoleProperty<Boolean> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean parseValue(String value) throws GuacamoleException {
|
||||||
|
|
||||||
|
// If no property provided, return null.
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// If "true", return true
|
||||||
|
if (value.equalsIgnoreCase("true"))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// If "false", return false
|
||||||
|
if (value.equalsIgnoreCase("false"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Otherwise, fail
|
||||||
|
throw new GuacamoleServerException("Property \"" + getName()
|
||||||
|
+ "\" must be either \"true\" or \"false\".");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A GuacamoleProperty whose value is a filename.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class FileGuacamoleProperty implements GuacamoleProperty<File> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File parseValue(String value) throws GuacamoleException {
|
||||||
|
|
||||||
|
// If no property provided, return null.
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return new File(value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract representation of the Guacamole configuration directory.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class GuacamoleHome {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GuacamoleHome is a utility class and cannot be instantiated.
|
||||||
|
*/
|
||||||
|
private GuacamoleHome() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Guacamole home directory by checking, in order:
|
||||||
|
* the guacamole.home system property, the GUACAMOLE_HOME environment
|
||||||
|
* variable, and finally the .guacamole directory in the home directory of
|
||||||
|
* the user running the servlet container.
|
||||||
|
*
|
||||||
|
* @return The File representing the Guacamole home directory, which may
|
||||||
|
* or may not exist, and may turn out to not be a directory.
|
||||||
|
*/
|
||||||
|
public static File getDirectory() {
|
||||||
|
|
||||||
|
// Attempt to find Guacamole home
|
||||||
|
File guacHome;
|
||||||
|
|
||||||
|
// Use system property by default
|
||||||
|
String desiredDir = System.getProperty("guacamole.home");
|
||||||
|
|
||||||
|
// Failing that, try the GUACAMOLE_HOME environment variable
|
||||||
|
if (desiredDir == null) desiredDir = System.getenv("GUACAMOLE_HOME");
|
||||||
|
|
||||||
|
// If successful, use explicitly specified directory
|
||||||
|
if (desiredDir != null)
|
||||||
|
guacHome = new File(desiredDir);
|
||||||
|
|
||||||
|
// If not explicitly specified, use ~/.guacamole
|
||||||
|
else
|
||||||
|
guacHome = new File(System.getProperty("user.home"), ".guacamole");
|
||||||
|
|
||||||
|
// Return discovered directory
|
||||||
|
return guacHome;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,210 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleServerException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple utility class for reading properties from the guacamole.properties
|
||||||
|
* file. The guacamole.properties file is preferably located in the servlet
|
||||||
|
* container's user's home directory, in a subdirectory called .guacamole, or
|
||||||
|
* in the directory set by the system property: guacamole.home.
|
||||||
|
*
|
||||||
|
* If none of those locations are possible, guacamole.properties will also
|
||||||
|
* be read from the root of the classpath.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class GuacamoleProperties {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GuacamoleProperties is a utility class and cannot be instantiated.
|
||||||
|
*/
|
||||||
|
private GuacamoleProperties() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The hostname of the server where guacd (the Guacamole proxy server) is
|
||||||
|
* running.
|
||||||
|
*/
|
||||||
|
public static final StringGuacamoleProperty GUACD_HOSTNAME = new StringGuacamoleProperty() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return "guacd-hostname"; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port that guacd (the Guacamole proxy server) is listening on.
|
||||||
|
*/
|
||||||
|
public static final IntegerGuacamoleProperty GUACD_PORT = new IntegerGuacamoleProperty() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return "guacd-port"; }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All properties read from guacamole.properties when this class was first
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
private static final Properties properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any error encountered when reading guacamole.properties was last
|
||||||
|
* attempted.
|
||||||
|
*/
|
||||||
|
private static GuacamoleException exception;
|
||||||
|
|
||||||
|
static {
|
||||||
|
|
||||||
|
properties = new Properties();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
// Attempt to find Guacamole home
|
||||||
|
File guacHome = GuacamoleHome.getDirectory();
|
||||||
|
|
||||||
|
InputStream stream;
|
||||||
|
|
||||||
|
// If not a directory, load from classpath
|
||||||
|
if (!guacHome.isDirectory()) {
|
||||||
|
|
||||||
|
// Read from classpath
|
||||||
|
stream = GuacamoleProperties.class.getResourceAsStream("/guacamole.properties");
|
||||||
|
if (stream == null)
|
||||||
|
throw new IOException(
|
||||||
|
"guacamole.properties not loaded from " + guacHome
|
||||||
|
+ " (not a directory), and guacamole.properties could"
|
||||||
|
+ " not be found as a resource in the classpath.");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, try to load from file
|
||||||
|
else
|
||||||
|
stream = new FileInputStream(new File(guacHome, "guacamole.properties"));
|
||||||
|
|
||||||
|
// Load properties, always close stream
|
||||||
|
try { properties.load(stream); }
|
||||||
|
finally { stream.close(); }
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
exception = new GuacamoleServerException("Error reading guacamole.properties", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a GuacamoleProperty, parses and returns the value set for that
|
||||||
|
* property in guacamole.properties, if any.
|
||||||
|
*
|
||||||
|
* @param <Type> The type that the given property is parsed into.
|
||||||
|
* @param property The property to read from guacamole.properties.
|
||||||
|
* @return The parsed value of the property as read from
|
||||||
|
* guacamole.properties.
|
||||||
|
* @throws GuacamoleException If an error occurs while parsing the value
|
||||||
|
* for the given property in
|
||||||
|
* guacamole.properties.
|
||||||
|
*/
|
||||||
|
public static <Type> Type getProperty(GuacamoleProperty<Type> property) throws GuacamoleException {
|
||||||
|
|
||||||
|
if (exception != null)
|
||||||
|
throw exception;
|
||||||
|
|
||||||
|
return property.parseValue(properties.getProperty(property.getName()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a GuacamoleProperty, parses and returns the value set for that
|
||||||
|
* property in guacamole.properties, if any. If no value is found, the
|
||||||
|
* provided default value is returned.
|
||||||
|
*
|
||||||
|
* @param <Type> The type that the given property is parsed into.
|
||||||
|
* @param property The property to read from guacamole.properties.
|
||||||
|
* @param defaultValue The value to return if no value was given in
|
||||||
|
* guacamole.properties.
|
||||||
|
* @return The parsed value of the property as read from
|
||||||
|
* guacamole.properties, or the provided default value if no value
|
||||||
|
* was found.
|
||||||
|
* @throws GuacamoleException If an error occurs while parsing the value
|
||||||
|
* for the given property in
|
||||||
|
* guacamole.properties.
|
||||||
|
*/
|
||||||
|
public static <Type> Type getProperty(GuacamoleProperty<Type> property,
|
||||||
|
Type defaultValue) throws GuacamoleException {
|
||||||
|
|
||||||
|
Type value = getProperty(property);
|
||||||
|
if (value == null)
|
||||||
|
return defaultValue;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a GuacamoleProperty, parses and returns the value set for that
|
||||||
|
* property in guacamole.properties. An exception is thrown if the value
|
||||||
|
* is not provided.
|
||||||
|
*
|
||||||
|
* @param <Type> The type that the given property is parsed into.
|
||||||
|
* @param property The property to read from guacamole.properties.
|
||||||
|
* @return The parsed value of the property as read from
|
||||||
|
* guacamole.properties.
|
||||||
|
* @throws GuacamoleException If an error occurs while parsing the value
|
||||||
|
* for the given property in
|
||||||
|
* guacamole.properties, or if the property is
|
||||||
|
* not specified.
|
||||||
|
*/
|
||||||
|
public static <Type> Type getRequiredProperty(GuacamoleProperty<Type> property)
|
||||||
|
throws GuacamoleException {
|
||||||
|
|
||||||
|
Type value = getProperty(property);
|
||||||
|
if (value == null)
|
||||||
|
throw new GuacamoleServerException("Property " + property.getName() + " is required.");
|
||||||
|
|
||||||
|
return value;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,71 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An abstract representation of a property in the guacamole.properties file,
|
||||||
|
* which parses into a specific type.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
* @param <Type> The type this GuacamoleProperty will parse into.
|
||||||
|
*/
|
||||||
|
public interface GuacamoleProperty<Type> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the property in guacamole.properties that this
|
||||||
|
* GuacamoleProperty will parse.
|
||||||
|
*
|
||||||
|
* @return The name of the property in guacamole.properties that this
|
||||||
|
* GuacamoleProperty will parse.
|
||||||
|
*/
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the given string value into the type associated with this
|
||||||
|
* GuacamoleProperty.
|
||||||
|
*
|
||||||
|
* @param value The string value to parse.
|
||||||
|
* @return The parsed value.
|
||||||
|
* @throws GuacamoleException If an error occurs while parsing the
|
||||||
|
* provided value.
|
||||||
|
*/
|
||||||
|
public Type parseValue(String value) throws GuacamoleException;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
import net.sourceforge.guacamole.GuacamoleServerException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A GuacamoleProperty whose value is an integer.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class IntegerGuacamoleProperty implements GuacamoleProperty<Integer> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer parseValue(String value) throws GuacamoleException {
|
||||||
|
|
||||||
|
// If no property provided, return null.
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Integer integer = new Integer(value);
|
||||||
|
return integer;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e) {
|
||||||
|
throw new GuacamoleServerException("Property \"" + getName() + "\" must be an integer.", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,54 @@
|
|||||||
|
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is guacamole-ext.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Michael Jumper.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A GuacamoleProperty whose value is a simple string.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public abstract class StringGuacamoleProperty implements GuacamoleProperty<String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String parseValue(String value) throws GuacamoleException {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Provides classes for reading properties from the web-application-wide
|
||||||
|
* guacamole.properties file.
|
||||||
|
*/
|
||||||
|
package net.sourceforge.guacamole.properties;
|
||||||
|
|
Reference in New Issue
Block a user