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                    public void checkDynamicQuery(Class<?> implClass) {
194                    }
195    
196                    public void checkExpandoBridge(String className) {
197                    }
198    
199                    public void checkGetBeanProperty(
200                            String servletContextName, Class<?> clazz, String property) {
201                    }
202    
203                    public void checkGetClassLoader(String classLoaderReferenceId) {
204                    }
205    
206                    public void checkPortletBagPool(String portletId) {
207                    }
208    
209                    public void checkSearchEngine(String searchEngineId) {
210                    }
211    
212                    public void checkSetBeanProperty(
213                            String servletContextName, Class<?> clazz, String property) {
214                    }
215    
216                    public void checkThreadPoolExecutor(String name) {
217                    }
218    
219            }
220    
221            public static interface PACL {
222    
223                    public void checkDynamicQuery(Class<?> implClass);
224    
225                    public void checkExpandoBridge(String className);
226    
227                    public void checkGetBeanProperty(
228                            String servletContextName, Class<?> clazz, String property);
229    
230                    public void checkGetClassLoader(String classLoaderReferenceId);
231    
232                    public void checkPortletBagPool(String portletId);
233    
234                    public void checkSearchEngine(String searchEngineId);
235    
236                    public void checkSetBeanProperty(
237                            String servletContextName, Class<?> clazz, String property);
238    
239                    public void checkThreadPoolExecutor(String name);
240    
241            }
242    
243    }