001
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.exception.SystemException;
020 import com.liferay.portal.kernel.io.ProtectedObjectInputStream;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.util.Base64;
024 import com.liferay.portal.kernel.util.CharPool;
025 import com.liferay.portal.kernel.util.PropsKeys;
026 import com.liferay.portal.kernel.util.StringPool;
027 import com.liferay.portal.kernel.util.StringUtil;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.model.Account;
030 import com.liferay.portal.model.CacheField;
031 import com.liferay.portal.model.Company;
032 import com.liferay.portal.model.CompanyConstants;
033 import com.liferay.portal.model.Group;
034 import com.liferay.portal.model.LayoutSet;
035 import com.liferay.portal.model.Shard;
036 import com.liferay.portal.model.User;
037 import com.liferay.portal.model.VirtualHost;
038 import com.liferay.portal.service.AccountLocalServiceUtil;
039 import com.liferay.portal.service.GroupLocalServiceUtil;
040 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
041 import com.liferay.portal.service.ShardLocalServiceUtil;
042 import com.liferay.portal.service.UserLocalServiceUtil;
043 import com.liferay.portal.service.VirtualHostLocalServiceUtil;
044 import com.liferay.portal.util.PortalUtil;
045 import com.liferay.portal.util.PrefsPropsUtil;
046 import com.liferay.portal.util.PropsValues;
047
048 import java.io.ByteArrayInputStream;
049 import java.io.IOException;
050 import java.io.InvalidClassException;
051 import java.io.ObjectInputStream;
052 import java.io.ObjectStreamClass;
053
054 import java.security.Key;
055 import java.security.KeyRep;
056
057 import java.util.Locale;
058 import java.util.TimeZone;
059
060
063 public class CompanyImpl extends CompanyBaseImpl {
064
065 public CompanyImpl() {
066 }
067
068 @Override
069 public int compareTo(Company company) {
070 String webId1 = getWebId();
071 String webId2 = company.getWebId();
072
073 if (webId1.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
074 return -1;
075 }
076 else if (webId2.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
077 return 1;
078 }
079 else {
080 return webId1.compareTo(webId2);
081 }
082 }
083
084 @Override
085 public Account getAccount() throws PortalException, SystemException {
086 return AccountLocalServiceUtil.getAccount(
087 getCompanyId(), getAccountId());
088 }
089
090 @Override
091 public String getAdminName() {
092 return "Administrator";
093 }
094
095 @Override
096 public String getAuthType() throws SystemException {
097 return PrefsPropsUtil.getString(
098 getCompanyId(), PropsKeys.COMPANY_SECURITY_AUTH_TYPE,
099 PropsValues.COMPANY_SECURITY_AUTH_TYPE);
100 }
101
102 @Override
103 public User getDefaultUser() throws PortalException, SystemException {
104 return UserLocalServiceUtil.getDefaultUser(getCompanyId());
105 }
106
107 @Override
108 public String getDefaultWebId() {
109 return PropsValues.COMPANY_DEFAULT_WEB_ID;
110 }
111
112 @Override
113 public String getEmailAddress() {
114
115
116
117 return "admin@" + getMx();
118 }
119
120 @Override
121 public Group getGroup() throws PortalException, SystemException {
122 if (getCompanyId() > CompanyConstants.SYSTEM) {
123 return GroupLocalServiceUtil.getCompanyGroup(getCompanyId());
124 }
125
126 return new GroupImpl();
127 }
128
129 @Override
130 public long getGroupId() throws PortalException, SystemException {
131 Group group = getGroup();
132
133 return group.getGroupId();
134 }
135
136 @Override
137 public Key getKeyObj() {
138 if (_keyObj == null) {
139 String key = getKey();
140
141 if (Validator.isBlank(key)) {
142 return _keyObj;
143 }
144
145 try {
146 ObjectInputStream ois = new CompanyKeyObjectInputStream(key);
147
148 _keyObj = (Key)ois.readObject();
149 }
150 catch (Exception e) {
151 _log.error(
152 "Unable to deserialize " + key +
153 ", possible Java deserialization attack",
154 e);
155 }
156 }
157
158 return _keyObj;
159 }
160
161 @Override
162 public Locale getLocale() throws PortalException, SystemException {
163 return getDefaultUser().getLocale();
164 }
165
166 @AutoEscape
167 @Override
168 public String getName() throws PortalException, SystemException {
169 return getAccount().getName();
170 }
171
172 @Override
173 public String getPortalURL(long groupId)
174 throws PortalException, SystemException {
175
176 int portalPort = PortalUtil.getPortalPort(false);
177
178 String portalURL = PortalUtil.getPortalURL(
179 getVirtualHostname(), portalPort, false);
180
181 if (groupId <= 0) {
182 return portalURL;
183 }
184
185 Group group = GroupLocalServiceUtil.getGroup(groupId);
186
187 if (group.hasPublicLayouts()) {
188 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
189 groupId, false);
190
191 if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
192 portalURL = PortalUtil.getPortalURL(
193 layoutSet.getVirtualHostname(), portalPort, false);
194 }
195 }
196 else if (group.hasPrivateLayouts()) {
197 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
198 groupId, true);
199
200 if (Validator.isNotNull(layoutSet.getVirtualHostname())) {
201 portalURL = PortalUtil.getPortalURL(
202 layoutSet.getVirtualHostname(), portalPort, false);
203 }
204 }
205
206 return portalURL;
207 }
208
209 @Override
210 public String getShardName() throws PortalException, SystemException {
211 Shard shard = ShardLocalServiceUtil.getShard(
212 Company.class.getName(), getCompanyId());
213
214 return shard.getName();
215 }
216
217 @Override
218 public String getShortName() throws PortalException, SystemException {
219 return getName();
220 }
221
222 @Override
223 public TimeZone getTimeZone() throws PortalException, SystemException {
224 return getDefaultUser().getTimeZone();
225 }
226
227 @Override
228 public String getVirtualHostname() {
229 if (_virtualHostname != null) {
230 return _virtualHostname;
231 }
232
233 VirtualHost virtualHost = null;
234
235 try {
236 virtualHost = VirtualHostLocalServiceUtil.fetchVirtualHost(
237 getCompanyId(), 0);
238 }
239 catch (Exception e) {
240 }
241
242 if (virtualHost == null) {
243 return StringPool.BLANK;
244 }
245
246 _virtualHostname = virtualHost.getHostname();
247
248 return _virtualHostname;
249 }
250
251 @Override
252 public boolean hasCompanyMx(String emailAddress) throws SystemException {
253 emailAddress = StringUtil.toLowerCase(emailAddress.trim());
254
255 int pos = emailAddress.indexOf(CharPool.AT);
256
257 if (pos == -1) {
258 return false;
259 }
260
261 String mx = emailAddress.substring(pos + 1);
262
263 if (mx.equals(getMx())) {
264 return true;
265 }
266
267 String[] mailHostNames = PrefsPropsUtil.getStringArray(
268 getCompanyId(), PropsKeys.ADMIN_MAIL_HOST_NAMES,
269 StringPool.NEW_LINE, PropsValues.ADMIN_MAIL_HOST_NAMES);
270
271 for (int i = 0; i < mailHostNames.length; i++) {
272 if (StringUtil.equalsIgnoreCase(mx, mailHostNames[i])) {
273 return true;
274 }
275 }
276
277 return false;
278 }
279
280 @Override
281 public boolean isAutoLogin() throws SystemException {
282 return PrefsPropsUtil.getBoolean(
283 getCompanyId(), PropsKeys.COMPANY_SECURITY_AUTO_LOGIN,
284 PropsValues.COMPANY_SECURITY_AUTO_LOGIN);
285 }
286
287 @Override
288 public boolean isSendPassword() throws SystemException {
289 return PrefsPropsUtil.getBoolean(
290 getCompanyId(), PropsKeys.COMPANY_SECURITY_SEND_PASSWORD,
291 PropsValues.COMPANY_SECURITY_SEND_PASSWORD);
292 }
293
294 @Override
295 public boolean isSendPasswordResetLink() throws SystemException {
296 return PrefsPropsUtil.getBoolean(
297 getCompanyId(), PropsKeys.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK,
298 PropsValues.COMPANY_SECURITY_SEND_PASSWORD_RESET_LINK);
299 }
300
301 @Override
302 public boolean isSiteLogo() throws SystemException {
303 return PrefsPropsUtil.getBoolean(
304 getCompanyId(), PropsKeys.COMPANY_SECURITY_SITE_LOGO,
305 PropsValues.COMPANY_SECURITY_SITE_LOGO);
306 }
307
308 @Override
309 public boolean isStrangers() throws SystemException {
310 return PrefsPropsUtil.getBoolean(
311 getCompanyId(), PropsKeys.COMPANY_SECURITY_STRANGERS,
312 PropsValues.COMPANY_SECURITY_STRANGERS);
313 }
314
315 @Override
316 public boolean isStrangersVerify() throws SystemException {
317 return PrefsPropsUtil.getBoolean(
318 getCompanyId(), PropsKeys.COMPANY_SECURITY_STRANGERS_VERIFY,
319 PropsValues.COMPANY_SECURITY_STRANGERS_VERIFY);
320 }
321
322 @Override
323 public boolean isStrangersWithMx() throws SystemException {
324 return PrefsPropsUtil.getBoolean(
325 getCompanyId(), PropsKeys.COMPANY_SECURITY_STRANGERS_WITH_MX,
326 PropsValues.COMPANY_SECURITY_STRANGERS_WITH_MX);
327 }
328
329 @Override
330 public void setKey(String key) {
331 _keyObj = null;
332
333 super.setKey(key);
334 }
335
336 @Override
337 public void setKeyObj(Key keyObj) {
338 _keyObj = keyObj;
339 }
340
341 @Override
342 public void setVirtualHostname(String virtualHostname) {
343 _virtualHostname = virtualHostname;
344 }
345
346 @CacheField
347 private Key _keyObj;
348
349 @CacheField
350 private String _virtualHostname;
351
352 private static Log _log = LogFactoryUtil.getLog(CompanyImpl.class);
353
354 class CompanyKeyObjectInputStream extends ProtectedObjectInputStream {
355
356 public CompanyKeyObjectInputStream(String key) throws IOException {
357 super(new ByteArrayInputStream(Base64.decode(key)));
358 }
359
360 @Override
361 protected Class<?> doResolveClass(ObjectStreamClass objectStreamClass)
362 throws ClassNotFoundException, IOException {
363
364 Class streamClass = super.doResolveClass(objectStreamClass);
365
366 if (streamClass == null) {
367 return null;
368 }
369
370 if (_log.isDebugEnabled()) {
371 _log.debug("Deserializating " + streamClass);
372 }
373
374 if ((streamClass.isArray() &&
375 streamClass.getComponentType().isPrimitive()) ||
376 Key.class.isAssignableFrom(streamClass) ||
377 KeyRep.class.isAssignableFrom(streamClass) ||
378 Enum.class.isAssignableFrom(streamClass)) {
379
380 return streamClass;
381 }
382
383 throw new InvalidClassException(
384 "Rejected resolving of illegal class " +
385 objectStreamClass.getName());
386 }
387 }
388
389 }