001    /**
002     * Copyright (c) 2000-2013 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.kernel.security.pacl.permission;
016    
017    import com.liferay.portal.kernel.util.StringBundler;
018    import com.liferay.portal.kernel.util.StringPool;
019    import com.liferay.portal.kernel.util.StringUtil;
020    import com.liferay.portal.kernel.util.Validator;
021    
022    import java.security.BasicPermission;
023    
024    /**
025     * @author Brian Wing Shun Chan
026     * @author Raymond Aug??
027     */
028    public class PortalRuntimePermission extends BasicPermission {
029    
030            public static void checkDynamicQuery(Class<?> implClass) {
031                    _pacl.checkDynamicQuery(implClass);
032            }
033    
034            public static void checkExpandoBridge(String className) {
035                    _pacl.checkExpandoBridge(className);
036            }
037    
038            public static void checkGetBeanProperty(Class<?> clazz) {
039                    _checkGetBeanProperty("portal", clazz, null);
040            }
041    
042            public static void checkGetBeanProperty(Class<?> clazz, String property) {
043                    _checkGetBeanProperty("portal", clazz, property);
044            }
045    
046            public static void checkGetBeanProperty(
047                    String servletContextName, Class<?> clazz) {
048    
049                    _checkGetBeanProperty(servletContextName, clazz, null);
050            }
051    
052            public static void checkGetBeanProperty(
053                    String servletContextName, Class<?> clazz, String property) {
054    
055                    _checkGetBeanProperty(servletContextName, clazz, property);
056            }
057    
058            public static void checkGetClassLoader(String classLoaderReferenceId) {
059                    _pacl.checkGetClassLoader(classLoaderReferenceId);
060            }
061    
062            public static void checkPortletBagPool(String portletId) {
063                    _pacl.checkPortletBagPool(portletId);
064            }
065    
066            public static void checkSearchEngine(String searchEngineId) {
067                    _pacl.checkSearchEngine(searchEngineId);
068            }
069    
070            public static void checkSetBeanProperty(Class<?> clazz) {
071                    _pacl.checkSetBeanProperty("portal", clazz, null);
072            }
073    
074            public static void checkSetBeanProperty(Class<?> clazz, String property) {
075                    _pacl.checkSetBeanProperty("portal", clazz, property);
076            }
077    
078            public static void checkSetBeanProperty(
079                    String servletContextName, Class<?> clazz) {
080    
081                    _pacl.checkSetBeanProperty(servletContextName, clazz, null);
082            }
083    
084            public static void checkSetBeanProperty(
085                    String servletContextName, Class<?> clazz, String property) {
086    
087                    _pacl.checkSetBeanProperty(servletContextName, clazz, property);
088            }
089    
090            public static void checkThreadPoolExecutor(String name) {
091                    _pacl.checkThreadPoolExecutor(name);
092            }
093    
094            public PortalRuntimePermission(String name, String property) {
095                    super(name);
096    
097                    _property = property;
098    
099                    _init();
100            }
101    
102            public PortalRuntimePermission(
103                    String name, String servletContextName, String subject) {
104    
105                    this(name, servletContextName, subject, null);
106            }
107    
108            public PortalRuntimePermission(
109                    String name, String servletContextName, String subject,
110                    String property) {
111    
112                    super(_createLongName(name, servletContextName, subject));
113    
114                    _property = property;
115    
116                    _init();
117            }
118    
119            @Override
120            public String getActions() {
121                    return _property;
122            }
123    
124            public String getProperty() {
125                    return _property;
126            }
127    
128            public String getServletContextName() {
129                    return _servletContextName;
130            }
131    
132            public String getShortName() {
133                    return _shortName;
134            }
135    
136            public String getSubject() {
137                    return _subject;
138            }
139    
140            /**
141             * This method ensures the calls stack is the proper length.
142             */
143            private static void _checkGetBeanProperty(
144                    String servletContextName, Class<?> clazz, String property) {
145    
146                    _pacl.checkGetBeanProperty(servletContextName, clazz, property);
147            }
148    
149            private static String _createLongName(
150                    String name, String servletContextName, String subject) {
151    
152                    StringBundler sb = new StringBundler(5);
153    
154                    sb.append(name);
155                    sb.append(StringPool.POUND);
156    
157                    if (Validator.isNull(servletContextName)) {
158                            sb.append("portal");
159                    }
160                    else {
161                            sb.append(servletContextName);
162                    }
163    
164                    sb.append(StringPool.POUND);
165                    sb.append(subject);
166    
167                    return sb.toString();
168            }
169    
170            private void _init() {
171                    String[] nameParts = StringUtil.split(getName(), StringPool.POUND);
172    
173                    if (nameParts.length != 3) {
174                            throw new IllegalArgumentException(
175                                    "Name " + getName() + " does not follow the format " +
176                                            "[name]#[servletContextName]#[subject]");
177                    }
178    
179                    _shortName = nameParts[0];
180                    _servletContextName = nameParts[1];
181                    _subject = nameParts[2];
182            }
183    
184            private static PACL _pacl = new NoPACL();
185    
186            private String _property;
187            private String _servletContextName;
188            private String _shortName;
189            private String _subject;
190    
191            private static class NoPACL implements PACL {
192    
193                    @Override
194                    public void checkDynamicQuery(Class<?> implClass) {
195                    }
196    
197                    @Override
198                    public void checkExpandoBridge(String className) {
199                    }
200    
201                    @Override
202                    public void checkGetBeanProperty(
203                            String servletContextName, Class<?> clazz, String property) {
204                    }
205    
206                    @Override
207                    public void checkGetClassLoader(String classLoaderReferenceId) {
208                    }
209    
210                    @Override
211                    public void checkPortletBagPool(String portletId) {
212                    }
213    
214                    @Override
215                    public void checkSearchEngine(String searchEngineId) {
216                    }
217    
218                    @Override
219                    public void checkSetBeanProperty(
220                            String servletContextName, Class<?> clazz, String property) {
221                    }
222    
223                    @Override
224                    public void checkThreadPoolExecutor(String name) {
225                    }
226    
227            }
228    
229            public static interface PACL {
230    
231                    public void checkDynamicQuery(Class<?> implClass);
232    
233                    public void checkExpandoBridge(String className);
234    
235                    public void checkGetBeanProperty(
236                            String servletContextName, Class<?> clazz, String property);
237    
238                    public void checkGetClassLoader(String classLoaderReferenceId);
239    
240                    public void checkPortletBagPool(String portletId);
241    
242                    public void checkSearchEngine(String searchEngineId);
243    
244                    public void checkSetBeanProperty(
245                            String servletContextName, Class<?> clazz, String property);
246    
247                    public void checkThreadPoolExecutor(String name);
248    
249            }
250    
251    }