+++ /dev/null
-package be.nikiroo.utils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A simple login facility using cookies.
- *
- * @author niki
- */
-public class LoginResult {
- private boolean success;
- private String cookie;
- private boolean badLogin;
- private boolean badCookie;
- private String option;
-
- /**
- * Generate a failed login.
- *
- * @param badLogin
- * TRUE if the login failed because of a who/key/subkey error
- * @param badCookie
- * TRUE if the login failed because of a bad cookie
- *
- */
- public LoginResult(boolean badLogin, boolean badCookie) {
- this.badLogin = badLogin;
- this.badCookie = badCookie;
- }
-
- /**
- * Generate a successful login for the given user.
- *
- * @param who
- * the user (can be NULL)
- * @param key
- * the password (can be NULL)
- * @param subkey
- * a sub-password (can be NULL)
- * @param option
- * an option assigned to this user (can be NULL)
- */
- public LoginResult(String who, String key, String subkey, String option) {
- String wookie = CookieUtils.generateCookie(who + key, 0);
-
- this.option = option;
- this.cookie = wookie + "~"
- + CookieUtils.generateCookie(
- wookie + (subkey == null ? "" : subkey) + option, 0)
- + "~" + option;
- this.success = true;
- }
-
- /**
- * Generate a login via this token and checks its validity.
- * <p>
- * Will fail with a NULL <tt>token</tt>, but
- * {@link LoginResult#isBadCookie()} will still be false.
- *
- * @param cookie
- * the token to check (if NULL, will simply fail but
- * {@link LoginResult#isBadCookie()} will still be false)
- * @param who
- * the user (can be NULL)
- * @param key
- * the password (can be NULL)
- */
- public LoginResult(String cookie, String who, String key) {
- this(cookie, who, key, null, true);
- }
-
- /**
- * Generate a login via this token and checks its validity.
- * <p>
- * Will fail with a NULL <tt>token</tt>, but
- * {@link LoginResult#isBadCookie()} will still be false.
- *
- * @param cookie
- * the token to check (if NULL, will simply fail but
- * {@link LoginResult#isBadCookie()} will still be false)
- * @param who
- * the user (can be NULL)
- * @param key
- * the password (can be NULL)
- * @param subkeys
- * the list of candidate subkey (can be NULL)
- * @param allowNoSubkey
- * allow the login if no subkey was present in the token
- */
- public LoginResult(String cookie, String who, String key,
- List<String> subkeys, boolean allowNoSubkey) {
- if (cookie != null) {
- String hashes[] = cookie.split("~");
- if (hashes.length >= 2) {
- String wookie = hashes[0];
- String rehashed = hashes[1];
- String opts = hashes.length > 2 ? hashes[2] : "";
-
- if (CookieUtils.validateCookie(who + key, wookie)) {
- if (subkeys == null) {
- subkeys = new ArrayList<String>();
- }
-
- if (allowNoSubkey) {
- subkeys = new ArrayList<String>(subkeys);
- subkeys.add("");
- }
-
- for (String subkey : subkeys) {
- if (CookieUtils.validateCookie(wookie + subkey + opts,
- rehashed)) {
- wookie = CookieUtils.generateCookie(who + key, 0);
- this.cookie = CookieUtils
- .generateCookie(wookie + subkey + opts, 0);
- this.option = opts;
- this.success = true;
- }
- }
- }
- }
-
- this.badCookie = !success;
- }
-
- // No token -> no bad token
- }
-
- /**
- * The login wa successful.
- *
- * @return TRUE if it is
- */
- public boolean isSuccess() {
- return success;
- }
-
- /**
- * The refreshed token if the login is successful (NULL if not).
- *
- * @return the token, or NULL
- */
- public String getCookie() {
- return cookie;
- }
-
- /**
- * An option that was used to generate this login (always NULL if the login
- * was not successful).
- * <p>
- * It can come from a manually generated {@link LoginResult}, but also from
- * a {@link LoginResult} generated with a token.
- *
- * @return the option
- */
- public String getOption() {
- return option;
- }
-
- /**
- * The login failed because of a who/key/subkey error.
- *
- * @return TRUE if it failed because of a who/key/subkey error
- */
- public boolean isBadLogin() {
- return badLogin;
- }
-
- /**
- * The login failed because the cookie was not accepted
- *
- * @return TRUE if it failed because the cookie was not accepted
- */
- public boolean isBadCookie() {
- return badCookie;
- }
-
- @Override
- public String toString() {
- if (success)
- return "Login succeeded";
-
- if (badLogin && badCookie)
- return "Login failed because of bad login and bad cookie";
-
- if (badLogin)
- return "Login failed because of bad login";
-
- if (badCookie)
- return "Login failed because of bad cookie";
-
- return "Login failed without giving a reason";
- }
-}
\ No newline at end of file