All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.milton.ldap.MemoryUserSessionFactory Maven / Gradle / Ivy

Go to download

Milton Community Edition: Supports DAV level 1 and is available on Apache2 license

There is a newer version: 4.0.3.2215
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package io.milton.ldap;

import io.milton.resource.LdapContact;
import io.milton.common.LogUtils;
import io.milton.http.Auth;
import io.milton.http.Request;
import io.milton.http.Request.Method;
import io.milton.http.exceptions.BadRequestException;
import io.milton.http.exceptions.NotAuthorizedException;
import io.milton.annotations.BeanPropertyResource;
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author brad
 */
public class MemoryUserSessionFactory implements UserFactory {

	private static final Logger log = LoggerFactory.getLogger(MemoryUserSessionFactory.class);
	private final Map users;

	public MemoryUserSessionFactory(Map users) {
		this.users = users;
	}

	public MemoryUserSessionFactory() {
		this.users = new HashMap<>();
	}

	public void addUser(String name, String password, String givenName, String surname, String email) {
		MemoryUser u = new MemoryUser(name, password, givenName, surname);
		u.setMail(email);
		users.put(name, u);
	}

	public MemoryUser getUser(String userName) {
		MemoryUser u = users.get(userName);
		LogUtils.debug(log, "getUser", userName, "result=", u);
		return u;
	}

	@Override
	public String getUserPassword(String userName) {
		MemoryUser user = getUser(userName);
		if (user == null) {
			LogUtils.warn(log, "getUserPassword: user not found", userName);
			return null;
		} else {
			return user.getPassword();
		}
	}

	@Override
	public LdapPrincipal getUser(String userName, String password) {
		MemoryUser user = getUser(userName);
		if (user == null) {
			LogUtils.warn(log, "getUser: user not found", userName);
			return null;
		} else {
			if (password.equals(user.getPassword())) {
				LogUtils.debug(log, "getUser: user authentuicated ok", userName);
				return user;
			} else {
				LogUtils.warn(log, "getUser: incorrect password", userName);
				return null;
			}
		}
	}

	@Override
	public List galFind(Condition condition, int sizeLimit) throws NotAuthorizedException, BadRequestException{
		log.trace("galFind");
		List results = new ArrayList<>();
		for (MemoryUser user : users.values()) {
			if (condition == null || condition.isMatch(user)) {
				LogUtils.debug(log, "searchContacts: add to results", user.userName);
				results.add(user);
				if (results.size() >= sizeLimit) {
					break;
				}
			}
		}
		LogUtils.debug(log, "galFind: results: ", results.size());
		return results;
	}


	/**
	 * The BeanPropertyResource annotation makes the bean properties on this class
	 * available to milton property resolution. The value is the namespace that 
	 * these properties will be mapped to.
	 * 
	 * Note that the LDAP support will, by default, map properties to the "ldap"
	 * namespace, which must correspond to the namespace used here
	 * 
	 */
	@BeanPropertyResource(value="ldap")
	public static class MemoryUser extends MapContact implements LdapPrincipal, LdapContact {

		private final String userName;
		private String password;

		public MemoryUser(String alias, String password, String givenName,String surname) {
			super(alias);
			this.userName = alias;
			this.password = password;
			put("imapUid", alias);
			put("uid", alias);
			put("etag", alias + this.hashCode());
			Date dtBirth = new Date();
			String sBirth = LdapUtils.getZuluDateFormat().format(dtBirth);
			put("birth", sBirth);
			put("bday", sBirth);
			put("im", alias);
			setGivenName(givenName);
			setSurName(surname);
			put("cn", givenName + " " + surname);
		}

		@Override
		public List searchContacts(Condition condition, int maxCount) {
			return Collections.emptyList();
		}

		public String getPassword() {
			return password;
		}

		public void setPassword(String password) {
			this.password = password;
		}

		public String getEtag() {
			return this.hashCode() + "";
		}

		public String getGivenName() {
			return get("givenName");
		}

		public final void setGivenName(String givenName) {
			put("givenName", givenName);
		}

		public String getSurName() {
			return get("sn");
		}

		public final void setSurName(String surname) {
			put("sn", surname);
		}

		public String getMail() {
			return get("mail");
		}

		public void setMail(String s) {
			put("mail", s);
		}
		
		public String getCommonName() {
			return getGivenName() + " " + getSurName();
		}

		@Override
		public Date getCreateDate() {
			return null;
		}

		@Override
		public String getName() {
			return userName;
		}

		@Override
		public Object authenticate(String user, String password) {
			throw new UnsupportedOperationException("Not supported yet.");
		}

		@Override
		public boolean authorise(Request request, Method method, Auth auth) {
			throw new UnsupportedOperationException("Not supported yet.");
		}

		@Override
		public String getRealm() {
			return "ldap";
		}

		@Override
		public Date getModifiedDate() {
			return null;
		}

		@Override
		public String checkRedirect(Request request) {
			return null;
		}
		
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy