001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package org.restlet.data;
020:
021: /**
022: * Challenge scheme used to authenticate remote clients.
023: *
024: * @author Jerome Louvel (contact@noelios.com)
025: */
026: public final class ChallengeScheme extends Metadata {
027: /** Custom scheme based on IP address or cookies or query params, etc. */
028: public static final ChallengeScheme CUSTOM = new ChallengeScheme(
029: "CUSTOM", "Custom", "Custom authentication");
030:
031: /** Amazon Web Services HTTP scheme. */
032: public static final ChallengeScheme HTTP_AWS = new ChallengeScheme(
033: "HTTP_AWS", "AWS",
034: "Amazon Web Services HTTP authentication");
035:
036: /** Basic HTTP scheme. */
037: public static final ChallengeScheme HTTP_BASIC = new ChallengeScheme(
038: "HTTP_BASIC", "Basic", "Basic HTTP authentication");
039:
040: /** Digest HTTP scheme. */
041: public static final ChallengeScheme HTTP_DIGEST = new ChallengeScheme(
042: "HTTP_DIGEST", "Digest", "Digest HTTP authentication");
043:
044: /** Microsoft NTML HTTP scheme. */
045: public static final ChallengeScheme HTTP_NTLM = new ChallengeScheme(
046: "HTTP_NTLM", "NTLM", "Microsoft NTLM HTTP authentication");
047:
048: /** Plain SMTP scheme. */
049: public static final ChallengeScheme SMTP_PLAIN = new ChallengeScheme(
050: "SMTP_PLAIN", "PLAIN", "Plain SMTP authentication");
051:
052: /**
053: * Returns the challenge scheme associated to a scheme name. If an existing
054: * constant exists then it is returned, otherwise a new instance is created.
055: *
056: * @param name
057: * The scheme name.
058: * @return The associated challenge scheme.
059: */
060: public static ChallengeScheme valueOf(final String name) {
061: ChallengeScheme result = null;
062:
063: if (name != null) {
064: if (name.equalsIgnoreCase(CUSTOM.getName())) {
065: result = CUSTOM;
066: } else if (name.equalsIgnoreCase(HTTP_AWS.getName())) {
067: result = HTTP_AWS;
068: } else if (name.equalsIgnoreCase(HTTP_BASIC.getName())) {
069: result = HTTP_BASIC;
070: } else if (name.equalsIgnoreCase(HTTP_DIGEST.getName())) {
071: result = HTTP_DIGEST;
072: } else if (name.equalsIgnoreCase(HTTP_NTLM.getName())) {
073: result = HTTP_NTLM;
074: } else if (name.equalsIgnoreCase(SMTP_PLAIN.getName())) {
075: result = SMTP_PLAIN;
076: } else {
077: result = new ChallengeScheme(name, null, null);
078: }
079: }
080:
081: return result;
082: }
083:
084: /** The technical name. */
085: private String technicalName;
086:
087: /**
088: * Constructor.
089: *
090: * @param name
091: * The unique name.
092: * @param technicalName
093: * The technical name.
094: */
095: public ChallengeScheme(final String name, final String technicalName) {
096: this (name, technicalName, null);
097: }
098:
099: /**
100: * Constructor.
101: *
102: * @param name
103: * The unique name.
104: * @param technicalName
105: * The technical name.
106: * @param description
107: * The description.
108: */
109: public ChallengeScheme(final String name,
110: final String technicalName, final String description) {
111: super (name, description);
112: this .technicalName = technicalName;
113: }
114:
115: /** {@inheritDoc} */
116: @Override
117: public boolean equals(final Object object) {
118: return (object instanceof ChallengeScheme)
119: && ((ChallengeScheme) object).getName()
120: .equalsIgnoreCase(getName());
121: }
122:
123: /**
124: * Returns the technical name (ex: BASIC).
125: *
126: * @return The technical name (ex: BASIC).
127: */
128: public String getTechnicalName() {
129: return this .technicalName;
130: }
131:
132: /** {@inheritDoc} */
133: @Override
134: public int hashCode() {
135: return (getName() == null) ? 0 : getName().toLowerCase()
136: .hashCode();
137: }
138: }
|