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            public static interface PACL {
141    
142                    public void checkDynamicQuery(Class<?> implClass);
143    
144                    public void checkExpandoBridge(String className);
145    
146                    public void checkGetBeanProperty(
147                            String servletContextName, Class<?> clazz, String property);
148    
149                    public void checkGetClassLoader(String classLoaderReferenceId);
150    
151                    public void checkPortletBagPool(String portletId);
152    
153                    public void checkSearchEngine(String searchEngineId);
154    
155                    public void checkSetBeanProperty(
156                            String servletContextName, Class<?> clazz, String property);
157    
158                    public void checkThreadPoolExecutor(String name);
159    
160            }
161    
162            /**
163             * This method ensures the calls stack is the proper length.
164             */
165            private static void _checkGetBeanProperty(
166                    String servletContextName, Class<?> clazz, String property) {
167    
168                    _pacl.checkGetBeanProperty(servletContextName, clazz, property);
169            }
170    
171            private static String _createLongName(
172                    String name, String servletContextName, String subject) {
173    
174                    StringBundler sb = new StringBundler(5);
175    
176                    sb.append(name);
177                    sb.append(StringPool.POUND);
178    
179                    if (Validator.isNull(servletContextName)) {
180                            sb.append("portal");
181                    }
182                    else {
183                            sb.append(servletContextName);
184                    }
185    
186                    sb.append(StringPool.POUND);
187                    sb.append(subject);
188    
189                    return sb.toString();
190            }
191    
192            private void _init() {
193                    String[] nameParts = StringUtil.split(getName(), StringPool.POUND);
194    
195                    if (nameParts.length != 3) {
196                            throw new IllegalArgumentException(
197                                    "Name " + getName() + " does not follow the format " +
198                                            "[name]#[servletContextName]#[subject]");
199                    }
200    
201                    _shortName = nameParts[0];
202                    _servletContextName = nameParts[1];
203                    _subject = nameParts[2];
204            }
205    
206            private static PACL _pacl = new NoPACL();
207    
208            private String _property;
209            private String _servletContextName;
210            private String _shortName;
211            private String _subject;
212    
213            private static class NoPACL implements PACL {
214    
215                    @Override
216                    public void checkDynamicQuery(Class<?> implClass) {
217                    }
218    
219                    @Override
220                    public void checkExpandoBridge(String className) {
221                    }
222    
223                    @Override
224                    public void checkGetBeanProperty(
225                            String servletContextName, Class<?> clazz, String property) {
226                    }
227    
228                    @Override
229                    public void checkGetClassLoader(String classLoaderReferenceId) {
230                    }
231    
232                    @Override
233                    public void checkPortletBagPool(String portletId) {
234                    }
235    
236                    @Override
237                    public void checkSearchEngine(String searchEngineId) {
238                    }
239    
240                    @Override
241                    public void checkSetBeanProperty(
242                            String servletContextName, Class<?> clazz, String property) {
243                    }
244    
245                    @Override
246                    public void checkThreadPoolExecutor(String name) {
247                    }
248    
249            }
250    
251    }