001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.model.impl;
016    
017    import com.liferay.portal.kernel.bean.AutoEscape;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.model.Account;
020    import com.liferay.portal.kernel.model.Company;
021    import com.liferay.portal.kernel.model.CompanyConstants;
022    import com.liferay.portal.kernel.model.Group;
023    import com.liferay.portal.kernel.model.LayoutSet;
024    import com.liferay.portal.kernel.model.User;
025    import com.liferay.portal.kernel.model.VirtualHost;
026    import com.liferay.portal.kernel.model.cache.CacheField;
027    import com.liferay.portal.kernel.service.AccountLocalServiceUtil;
028    import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
029    import com.liferay.portal.kernel.service.LayoutSetLocalServiceUtil;
030    import com.liferay.portal.kernel.service.UserLocalServiceUtil;
031    import com.liferay.portal.kernel.service.VirtualHostLocalServiceUtil;
032    import com.liferay.portal.kernel.util.CharPool;
033    import com.liferay.portal.kernel.util.GetterUtil;
034    import com.liferay.portal.kernel.util.PortalUtil;
035    import com.liferay.portal.kernel.util.PropsKeys;
036    import com.liferay.portal.kernel.util.StringPool;
037    import com.liferay.portal.kernel.util.StringUtil;
038    import com.liferay.portal.kernel.util.Validator;
039    import com.liferay.portal.util.PrefsPropsUtil;
040    import com.liferay.portal.util.PropsUtil;
041    import com.liferay.portal.util.PropsValues;
042    import com.liferay.util.Encryptor;
043    
044    import java.io.Serializable;
045    
046    import java.security.Key;
047    
048    import java.util.Locale;
049    import java.util.TimeZone;
050    
051    import javax.portlet.PortletPreferences;
052    
053    /**
054     * @author Brian Wing Shun Chan
055     */
056    public class CompanyImpl extends CompanyBaseImpl {
057    
058            @Override
059            public int compareTo(Company company) {
060                    String webId1 = getWebId();
061                    String webId2 = company.getWebId();
062    
063                    if (webId1.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
064                            return -1;
065                    }
066                    else if (webId2.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
067                            return 1;
068                    }
069                    else {
070                            return webId1.compareTo(webId2);
071                    }
072            }
073    
074            @Override
075            public Account getAccount() throws PortalException {
076                    return AccountLocalServiceUtil.getAccount(
077                            getCompanyId(), getAccountId());
078            }
079    
080            @Override
081            public String getAdminName() {
082                    return "Administrator";
083            }
084    
085            @Override
086            public String getAuthType() {
087                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
088    
089                    return companySecurityBag._authType;
090            }
091    
092            @Override
093            public CompanySecurityBag getCompanySecurityBag() {
094                    if (_companySecurityBag == null) {
095                            _companySecurityBag = new CompanySecurityBag(this);
096                    }
097    
098                    return _companySecurityBag;
099            }
100    
101            @Override
102            public User getDefaultUser() throws PortalException {
103                    return UserLocalServiceUtil.getDefaultUser(getCompanyId());
104            }
105    
106            @Override
107            public String getDefaultWebId() {
108                    return PropsValues.COMPANY_DEFAULT_WEB_ID;
109            }
110    
111            @Override
112            public String getEmailAddress() {
113    
114                    // Primary email address
115    
116                    return "admin@" + getMx();
117            }
118    
119            @Override
120            public Group getGroup() throws PortalException {
121                    if (getCompanyId() > CompanyConstants.SYSTEM) {
122                            return GroupLocalServiceUtil.getCompanyGroup(getCompanyId());
123                    }
124    
125                    return new GroupImpl();
126            }
127    
128            @Override
129            public long getGroupId() throws PortalException {
130                    Group group = getGroup();
131    
132                    return group.getGroupId();
133            }
134    
135            @Override
136            public Key getKeyObj() {
137                    if (_keyObj == null) {
138                            String key = getKey();
139    
140                            if (Validator.isNotNull(key)) {
141                                    _keyObj = Encryptor.deserializeKey(key);
142                            }
143                    }
144    
145                    return _keyObj;
146            }
147    
148            @Override
149            public Locale getLocale() throws PortalException {
150                    return getDefaultUser().getLocale();
151            }
152    
153            @AutoEscape
154            @Override
155            public String getName() throws PortalException {
156                    return getAccount().getName();
157            }
158    
159            @Override
160            public String getPortalURL(long groupId) throws PortalException {
161                    int portalPort = PortalUtil.getPortalServerPort(false);
162    
163                    String portalURL = PortalUtil.getPortalURL(
164                            getVirtualHostname(), portalPort, false);
165    
166                    if (groupId <= 0) {
167                            return portalURL;
168                    }
169    
170                    Group group = GroupLocalServiceUtil.getGroup(groupId);
171    
172                    if (group.hasPublicLayouts()) {
173                            LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
174                                    groupId, false);
175    
176                            if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
177                                    portalURL = PortalUtil.getPortalURL(
178                                            layoutSet.getVirtualHostname(), portalPort, false);
179                            }
180                    }
181                    else if (group.hasPrivateLayouts()) {
182                            LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
183                                    groupId, true);
184    
185                            if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
186                                    portalURL = PortalUtil.getPortalURL(
187                                            layoutSet.getVirtualHostname(), portalPort, false);
188                            }
189                    }
190    
191                    return portalURL;
192            }
193    
194            @Override
195            public String getShortName() throws PortalException {
196                    return getName();
197            }
198    
199            @Override
200            public TimeZone getTimeZone() throws PortalException {
201                    return getDefaultUser().getTimeZone();
202            }
203    
204            @Override
205            public String getVirtualHostname() {
206                    if (_virtualHostname != null) {
207                            return _virtualHostname;
208                    }
209    
210                    VirtualHost virtualHost = null;
211    
212                    try {
213                            virtualHost = VirtualHostLocalServiceUtil.fetchVirtualHost(
214                                    getCompanyId(), 0);
215                    }
216                    catch (Exception e) {
217                    }
218    
219                    if (virtualHost == null) {
220                            return StringPool.BLANK;
221                    }
222    
223                    _virtualHostname = virtualHost.getHostname();
224    
225                    return _virtualHostname;
226            }
227    
228            @Override
229            public boolean hasCompanyMx(String emailAddress) {
230                    emailAddress = StringUtil.toLowerCase(emailAddress.trim());
231    
232                    int pos = emailAddress.indexOf(CharPool.AT);
233    
234                    if (pos == -1) {
235                            return false;
236                    }
237    
238                    String mx = emailAddress.substring(pos + 1);
239    
240                    if (mx.equals(getMx())) {
241                            return true;
242                    }
243    
244                    String[] mailHostNames = PrefsPropsUtil.getStringArray(
245                            getCompanyId(), PropsKeys.ADMIN_MAIL_HOST_NAMES,
246                            StringPool.NEW_LINE, PropsValues.ADMIN_MAIL_HOST_NAMES);
247    
248                    for (int i = 0; i < mailHostNames.length; i++) {
249                            if (StringUtil.equalsIgnoreCase(mx, mailHostNames[i])) {
250                                    return true;
251                            }
252                    }
253    
254                    return false;
255            }
256    
257            @Override
258            public boolean isAutoLogin() {
259                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
260    
261                    return companySecurityBag._autoLogin;
262            }
263    
264            @Override
265            public boolean isSendPassword() {
266                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
267    
268                    return companySecurityBag._sendPassword;
269            }
270    
271            @Override
272            public boolean isSendPasswordResetLink() {
273                    return PrefsPropsUtil.getBoolean(
274                            getCompanyId(), PropsKeys.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK,
275                            PropsValues.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK);
276            }
277    
278            @Override
279            public boolean isSiteLogo() {
280                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
281    
282                    return companySecurityBag._siteLogo;
283            }
284    
285            @Override
286            public boolean isStrangers() {
287                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
288    
289                    return companySecurityBag._strangers;
290            }
291    
292            @Override
293            public boolean isStrangersVerify() {
294                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
295    
296                    return companySecurityBag._strangersVerify;
297            }
298    
299            @Override
300            public boolean isStrangersWithMx() {
301                    CompanySecurityBag companySecurityBag = getCompanySecurityBag();
302    
303                    return companySecurityBag._strangersWithMx;
304            }
305    
306            public void setCompanySecurityBag(Object companySecurityBag) {
307                    _companySecurityBag = (CompanySecurityBag)companySecurityBag;
308            }
309    
310            @Override
311            public void setKey(String key) {
312                    _keyObj = null;
313    
314                    super.setKey(key);
315            }
316    
317            @Override
318            public void setKeyObj(Key keyObj) {
319                    _keyObj = keyObj;
320            }
321    
322            @Override
323            public void setVirtualHostname(String virtualHostname) {
324                    _virtualHostname = virtualHostname;
325            }
326    
327            public static class CompanySecurityBag implements Serializable {
328    
329                    private CompanySecurityBag(Company company) {
330                            PortletPreferences preferences = PrefsPropsUtil.getPreferences(
331                                    company.getCompanyId(), true);
332    
333                            _authType = _getPrefsPropsString(
334                                    preferences, company, PropsKeys.COMPANY_SECURITY_AUTH_TYPE,
335                                    PropsValues.COMPANY_SECURITY_AUTH_TYPE);
336                            _autoLogin = _getPrefsPropsBoolean(
337                                    preferences, company, PropsKeys.COMPANY_SECURITY_AUTO_LOGIN,
338                                    PropsValues.COMPANY_SECURITY_AUTO_LOGIN);
339                            _sendPassword = _getPrefsPropsBoolean(
340                                    preferences, company, PropsKeys.COMPANY_SECURITY_SEND_PASSWORD,
341                                    PropsValues.COMPANY_SECURITY_SEND_PASSWORD);
342                            _siteLogo = _getPrefsPropsBoolean(
343                                    preferences, company, PropsKeys.COMPANY_SECURITY_SITE_LOGO,
344                                    PropsValues.COMPANY_SECURITY_SITE_LOGO);
345                            _strangers = _getPrefsPropsBoolean(
346                                    preferences, company, PropsKeys.COMPANY_SECURITY_STRANGERS,
347                                    PropsValues.COMPANY_SECURITY_STRANGERS);
348                            _strangersVerify = _getPrefsPropsBoolean(
349                                    preferences, company,
350                                    PropsKeys.COMPANY_SECURITY_STRANGERS_VERIFY,
351                                    PropsValues.COMPANY_SECURITY_STRANGERS_VERIFY);
352                            _strangersWithMx = _getPrefsPropsBoolean(
353                                    preferences, company,
354                                    PropsKeys.COMPANY_SECURITY_STRANGERS_WITH_MX,
355                                    PropsValues.COMPANY_SECURITY_STRANGERS_WITH_MX);
356                    }
357    
358                    private final String _authType;
359                    private final boolean _autoLogin;
360                    private final boolean _sendPassword;
361                    private final boolean _siteLogo;
362                    private final boolean _strangers;
363                    private final boolean _strangersVerify;
364                    private final boolean _strangersWithMx;
365    
366            }
367    
368            private static boolean _getPrefsPropsBoolean(
369                    PortletPreferences portletPreferences, Company company, String name,
370                    boolean defaultValue) {
371    
372                    String value = portletPreferences.getValue(
373                            name, PropsUtil.get(company, name));
374    
375                    if (value != null) {
376                            return GetterUtil.getBoolean(value);
377                    }
378    
379                    return defaultValue;
380            }
381    
382            private static String _getPrefsPropsString(
383                    PortletPreferences portletPreferences, Company company, String name,
384                    String defaultValue) {
385    
386                    String value = portletPreferences.getValue(
387                            name, PropsUtil.get(company, name));
388    
389                    if (value != null) {
390                            return value;
391                    }
392    
393                    return defaultValue;
394            }
395    
396            @CacheField
397            private CompanySecurityBag _companySecurityBag;
398    
399            @CacheField(propagateToInterface = true)
400            private Key _keyObj;
401    
402            @CacheField(propagateToInterface = true)
403            private String _virtualHostname;
404    
405    }