/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.model.impl; import com.liferay.portal.kernel.bean.AutoEscape; import com.liferay.portal.kernel.cache.thread.local.Lifecycle; import com.liferay.portal.kernel.cache.thread.local.ThreadLocalCache; import com.liferay.portal.kernel.cache.thread.local.ThreadLocalCacheManager; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Account; import com.liferay.portal.kernel.model.Company; import com.liferay.portal.kernel.model.CompanyConstants; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.LayoutSet; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.model.VirtualHost; import com.liferay.portal.kernel.model.cache.CacheField; import com.liferay.portal.kernel.service.AccountLocalServiceUtil; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.portal.kernel.service.LayoutSetLocalServiceUtil; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.liferay.portal.kernel.service.VirtualHostLocalServiceUtil; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.PropsKeys; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.util.PrefsPropsUtil; import com.liferay.portal.util.PropsUtil; import com.liferay.portal.util.PropsValues; import com.liferay.util.Encryptor; import java.io.Serializable; import java.security.Key; import java.util.Locale; import java.util.TimeZone; import javax.portlet.PortletPreferences; /** * @author Brian Wing Shun Chan */ public class CompanyImpl extends CompanyBaseImpl { @Override public int compareTo(Company company) { String webId1 = getWebId(); String webId2 = company.getWebId(); if (webId1.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) { return -1; } else if (webId2.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) { return 1; } else { return webId1.compareTo(webId2); } } @Override public Account getAccount() throws PortalException { if (_account == null) { _account = AccountLocalServiceUtil.getAccount( getCompanyId(), getAccountId()); } return _account; } @Override public String getAdminName() { return "Administrator"; } @Override public String getAuthType() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._authType; } @Override public CompanySecurityBag getCompanySecurityBag() { if (_companySecurityBag == null) { _companySecurityBag = new CompanySecurityBag(this); } return _companySecurityBag; } @Override public User getDefaultUser() throws PortalException { return UserLocalServiceUtil.getDefaultUser(getCompanyId()); } @Override public String getDefaultWebId() { return PropsValues.COMPANY_DEFAULT_WEB_ID; } @Override public String getEmailAddress() { // Primary email address return "admin@" + getMx(); } @Override public Group getGroup() throws PortalException { if (getCompanyId() > CompanyConstants.SYSTEM) { ThreadLocalCache<Group> threadLocalCache = ThreadLocalCacheManager.getThreadLocalCache( Lifecycle.REQUEST, Company.class.getName()); String cacheKey = StringUtil.toHexString(getCompanyId()); Group companyGroup = threadLocalCache.get(cacheKey); if (companyGroup == null) { companyGroup = GroupLocalServiceUtil.getCompanyGroup( getCompanyId()); threadLocalCache.put(cacheKey, companyGroup); } return companyGroup; } return new GroupImpl(); } @Override public long getGroupId() throws PortalException { Group group = getGroup(); return group.getGroupId(); } @Override public Key getKeyObj() { if (_keyObj == null) { String key = getKey(); if (Validator.isNotNull(key)) { _keyObj = Encryptor.deserializeKey(key); } } return _keyObj; } @Override public Locale getLocale() throws PortalException { return getDefaultUser().getLocale(); } @AutoEscape @Override public String getName() throws PortalException { return getAccount().getName(); } @Override public String getPortalURL(long groupId) throws PortalException { int portalPort = PortalUtil.getPortalServerPort(false); String portalURL = PortalUtil.getPortalURL( getVirtualHostname(), portalPort, false); if (groupId <= 0) { return portalURL; } Group group = GroupLocalServiceUtil.getGroup(groupId); if (group.hasPublicLayouts()) { LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet( groupId, false); if (Validator.isNotNull(layoutSet.getVirtualHostname())) { portalURL = PortalUtil.getPortalURL( layoutSet.getVirtualHostname(), portalPort, false); } } else if (group.hasPrivateLayouts()) { LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet( groupId, true); if (Validator.isNotNull(layoutSet.getVirtualHostname())) { portalURL = PortalUtil.getPortalURL( layoutSet.getVirtualHostname(), portalPort, false); } } return portalURL; } @Override public String getShortName() throws PortalException { return getName(); } @Override public TimeZone getTimeZone() throws PortalException { return getDefaultUser().getTimeZone(); } @Override public String getVirtualHostname() { if (_virtualHostname != null) { return _virtualHostname; } VirtualHost virtualHost = null; try { virtualHost = VirtualHostLocalServiceUtil.fetchVirtualHost( getCompanyId(), 0); } catch (Exception e) { } if (virtualHost == null) { return StringPool.BLANK; } _virtualHostname = virtualHost.getHostname(); return _virtualHostname; } @Override public boolean hasCompanyMx(String emailAddress) { emailAddress = StringUtil.toLowerCase(emailAddress.trim()); int pos = emailAddress.indexOf(CharPool.AT); if (pos == -1) { return false; } String mx = emailAddress.substring(pos + 1); if (mx.equals(getMx())) { return true; } String[] mailHostNames = PrefsPropsUtil.getStringArray( getCompanyId(), PropsKeys.ADMIN_MAIL_HOST_NAMES, StringPool.NEW_LINE, PropsValues.ADMIN_MAIL_HOST_NAMES); for (int i = 0; i < mailHostNames.length; i++) { if (StringUtil.equalsIgnoreCase(mx, mailHostNames[i])) { return true; } } return false; } @Override public boolean isAutoLogin() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._autoLogin; } @Override public boolean isSendPassword() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._sendPassword; } @Override public boolean isSendPasswordResetLink() { return PrefsPropsUtil.getBoolean( getCompanyId(), PropsKeys.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK, PropsValues.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK); } @Override public boolean isSiteLogo() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._siteLogo; } @Override public boolean isStrangers() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._strangers; } @Override public boolean isStrangersVerify() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._strangersVerify; } @Override public boolean isStrangersWithMx() { CompanySecurityBag companySecurityBag = getCompanySecurityBag(); return companySecurityBag._strangersWithMx; } public void setCompanySecurityBag(Object companySecurityBag) { _companySecurityBag = (CompanySecurityBag)companySecurityBag; } @Override public void setKey(String key) { _keyObj = null; super.setKey(key); } @Override public void setKeyObj(Key keyObj) { _keyObj = keyObj; } @Override public void setVirtualHostname(String virtualHostname) { _virtualHostname = virtualHostname; } public static class CompanySecurityBag implements Serializable { private CompanySecurityBag(Company company) { PortletPreferences preferences = PrefsPropsUtil.getPreferences( company.getCompanyId(), true); _authType = _getPrefsPropsString( preferences, company, PropsKeys.COMPANY_SECURITY_AUTH_TYPE, PropsValues.COMPANY_SECURITY_AUTH_TYPE); _autoLogin = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_AUTO_LOGIN, PropsValues.COMPANY_SECURITY_AUTO_LOGIN); _sendPassword = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_SEND_PASSWORD, PropsValues.COMPANY_SECURITY_SEND_PASSWORD); _siteLogo = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_SITE_LOGO, PropsValues.COMPANY_SECURITY_SITE_LOGO); _strangers = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_STRANGERS, PropsValues.COMPANY_SECURITY_STRANGERS); _strangersVerify = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_STRANGERS_VERIFY, PropsValues.COMPANY_SECURITY_STRANGERS_VERIFY); _strangersWithMx = _getPrefsPropsBoolean( preferences, company, PropsKeys.COMPANY_SECURITY_STRANGERS_WITH_MX, PropsValues.COMPANY_SECURITY_STRANGERS_WITH_MX); } private final String _authType; private final boolean _autoLogin; private final boolean _sendPassword; private final boolean _siteLogo; private final boolean _strangers; private final boolean _strangersVerify; private final boolean _strangersWithMx; } private static boolean _getPrefsPropsBoolean( PortletPreferences portletPreferences, Company company, String name, boolean defaultValue) { String value = portletPreferences.getValue( name, PropsUtil.get(company, name)); if (value != null) { return GetterUtil.getBoolean(value); } return defaultValue; } private static String _getPrefsPropsString( PortletPreferences portletPreferences, Company company, String name, String defaultValue) { String value = portletPreferences.getValue( name, PropsUtil.get(company, name)); if (value != null) { return value; } return defaultValue; } private Account _account; @CacheField private CompanySecurityBag _companySecurityBag; @CacheField(propagateToInterface = true) private Key _keyObj; @CacheField(propagateToInterface = true) private String _virtualHostname; }