001: /**
002: * Copyright (c) 2003-2007, David A. Czarnecki
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
009: * following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
011: * following disclaimer in the documentation and/or other materials provided with the distribution.
012: * Neither the name of "David A. Czarnecki" and "blojsom" nor the names of its contributors may be used to
013: * endorse or promote products derived from this software without specific prior written permission.
014: * Products derived from this software may not be called "blojsom", nor may "blojsom" appear in their name,
015: * without prior written permission of David A. Czarnecki.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
018: * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
019: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
020: * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
021: * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
022: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
025: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
026: * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
029: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: */package org.blojsom.extension.xmlrpc.handler;
031:
032: import org.apache.xmlrpc.XmlRpcException;
033: import org.blojsom.authorization.AuthorizationException;
034: import org.blojsom.authorization.AuthorizationProvider;
035: import org.blojsom.blog.Blog;
036: import org.blojsom.event.EventBroadcaster;
037: import org.blojsom.fetcher.Fetcher;
038:
039: import javax.servlet.ServletConfig;
040: import javax.servlet.http.HttpServletRequest;
041: import javax.servlet.http.HttpServletResponse;
042: import java.util.HashMap;
043: import java.util.Properties;
044:
045: /**
046: * API Handler
047: *
048: * @author David Czarnecki
049: * @since blojsom 3.0
050: * @version $Id: APIHandler.java,v 1.4 2007/01/17 02:35:07 czarneckid Exp $
051: */
052: public abstract class APIHandler {
053:
054: protected static final int AUTHORIZATION_EXCEPTION = 1;
055: protected static final String AUTHORIZATION_EXCEPTION_MSG = "Invalid username and/or password";
056:
057: protected static final int UNKNOWN_EXCEPTION = 1000;
058: protected static final String UNKNOWN_EXCEPTION_MSG = "An error occured processing your request";
059:
060: protected static final int UNSUPPORTED_EXCEPTION = 1001;
061: protected static final String UNSUPPORTED_EXCEPTION_MSG = "Unsupported method";
062:
063: protected static final int INVALID_POSTID = 2000;
064: protected static final String INVALID_POSTID_MSG = "The entry postid you submitted is invalid";
065:
066: protected static final int NOBLOGS_EXCEPTION = 3000;
067: protected static final String NOBLOGS_EXCEPTION_MSG = "There are no categories defined";
068:
069: protected static final int PERMISSION_EXCEPTION = 4000;
070: protected static final String PERMISSION_EXCEPTION_MSG = "User does not have permission to use this XML-RPC method";
071:
072: protected static final String ALL_XMLRPC_EDIT_PERMISSION = "all_xmlrpc_edit_permission";
073:
074: protected AuthorizationProvider _authorizationProvider;
075: protected Fetcher _fetcher;
076: protected Blog _blog;
077: protected HttpServletRequest _httpServletRequest;
078: protected HttpServletResponse _httpServletResponse;
079: protected EventBroadcaster _eventBroadcaster;
080: protected Properties _properties;
081: protected ServletConfig _servletConfig;
082:
083: /**
084: * Set the {@link AuthorizationProvider}
085: *
086: * @param authorizationProvider {@link AuthorizationProvider}
087: */
088: public void setAuthorizationProvider(
089: AuthorizationProvider authorizationProvider) {
090: _authorizationProvider = authorizationProvider;
091: }
092:
093: /**
094: * Set the {@link Fetcher}
095: *
096: * @param fetcher {@link Fetcher}
097: */
098: public void setFetcher(Fetcher fetcher) {
099: _fetcher = fetcher;
100: }
101:
102: /**
103: * Set the {@link Blog}
104: *
105: * @param blog {@link Blog}
106: */
107: public void setBlog(Blog blog) {
108: _blog = blog;
109: }
110:
111: /**
112: * Set the {@link HttpServletRequest}
113: *
114: * @param httpServletRequest {@link HttpServletRequest}
115: */
116: public void setHttpServletRequest(
117: HttpServletRequest httpServletRequest) {
118: _httpServletRequest = httpServletRequest;
119: }
120:
121: /**
122: * Set the {@link HttpServletResponse}
123: *
124: * @param httpServletResponse {@link HttpServletResponse}
125: */
126: public void setHttpServletResponse(
127: HttpServletResponse httpServletResponse) {
128: _httpServletResponse = httpServletResponse;
129: }
130:
131: /**
132: * Set the {@link EventBroadcaster}
133: *
134: * @param eventBroadcaster {@link EventBroadcaster}
135: */
136: public void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
137: _eventBroadcaster = eventBroadcaster;
138: }
139:
140: /**
141: * Set the {@link ServletConfig}
142: *
143: * @param servletConfig {@link ServletConfig}
144: */
145: public void setServletConfig(ServletConfig servletConfig) {
146: _servletConfig = servletConfig;
147: }
148:
149: /**
150: * Set the properties for the handler
151: *
152: * @param properties Handler properties
153: */
154: public void setProperties(Properties properties) {
155: _properties = properties;
156: }
157:
158: /**
159: * Retrieve the API handler name
160: *
161: * @return API handler name
162: */
163: public abstract String getName();
164:
165: /**
166: * Check XML-RPC permissions for a given username
167: *
168: * @param username Username
169: * @param permission Permisison to check
170: * @throws org.apache.xmlrpc.XmlRpcException If the username does not have the required permission
171: */
172: protected void checkXMLRPCPermission(String username,
173: String permission) throws XmlRpcException {
174: try {
175: _authorizationProvider.checkPermission(_blog,
176: new HashMap(), username, permission);
177: } catch (AuthorizationException e) {
178: throw new XmlRpcException(PERMISSION_EXCEPTION,
179: PERMISSION_EXCEPTION_MSG);
180: }
181: }
182: }
|