/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* 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 the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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 org.jasig.portlet.emailpreview.service.auth;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.NTCredentials;
import org.jasig.portlet.emailpreview.MailStoreConfiguration;
import org.jasig.portlet.emailpreview.service.ConfigurationParameter;
import org.jasig.portlet.emailpreview.service.IServiceBroker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Description
*
* @author James Wennmacher, jwennmacher@unicon.net
*/
public abstract class BaseCredentialsAuthenticationService implements IAuthenticationService {
private static final String MAIL_ATTRIBUTE = "mail";
protected List<ConfigurationParameter> userParameters =
Collections.<ConfigurationParameter>emptyList();
protected List<ConfigurationParameter> adminParameters =
Collections.<ConfigurationParameter>emptyList();
protected Map<String, ConfigurationParameter> configParams =
Collections.<String, ConfigurationParameter>emptyMap();
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public Map<String, ConfigurationParameter> getConfigurationParametersMap() {
return configParams;
}
@Override
public List<ConfigurationParameter> getAdminConfigurationParameters() {
return adminParameters;
}
@Override
public List<ConfigurationParameter> getUserConfigurationParameters() {
return userParameters;
}
protected void setUserParameters(List<ConfigurationParameter> params) {
userParameters = params;
}
protected void setAdminParameters(List<ConfigurationParameter> params) {
adminParameters = params;
}
protected void setConfigParams(Map<String, ConfigurationParameter> params) {
configParams = params;
}
protected String createMailAccountName(
String accountName, PortletRequest req, MailStoreConfiguration config) {
// If using Exchange Web Services and configured for using the email attribute instead of
// the username (optionally plus suffix), return the username.
String emailAddress;
if (IServiceBroker.EXCHANGE_WEB_SERVICES.equals(config.getProtocol())
&& config.isEwsUseMailAttribute()) {
final Map<String, String> userInfo =
(Map<String, String>) req.getAttribute(PortletRequest.USER_INFO);
emailAddress = userInfo.get(MAIL_ATTRIBUTE);
if (StringUtils.isNotBlank(emailAddress)) {
return emailAddress;
}
log.warn(
"Using EWS, configured to use mail attribute, and no email address in user attribute {}"
+ " for user {}. Falling back to constructing one from username",
MAIL_ATTRIBUTE,
accountName);
}
// Use a suffix?
final String suffix = config.getUsernameSuffix();
if (accountName != null && StringUtils.isNotBlank(suffix)) {
return accountName.concat(suffix);
}
return accountName;
}
protected Credentials createNTCredentials(String ntlmDomain, String username, String password) {
// For Exchange integration, only the username is applicable, not the email address. If present
// remove the @domain part of an email address in case the user or admin specified an email address
// and a password in the user config UI.
int index = username.indexOf("@");
username = index > 0 ? username.substring(0, index) : username;
// construct a credentials object from the username and password
return new NTCredentials(username, password, "paramDoesNotSeemToMatter", ntlmDomain);
}
}