1 // 2 // The Antville Project 3 // http://code.google.com/p/antville 4 // 5 // Copyright 2001-2007 by The Antville People 6 // 7 // Licensed under the Apache License, Version 2.0 (the ``License''); 8 // you may not use this file except in compliance with the License. 9 // You may obtain a copy of the License at 10 // 11 // http://www.apache.org/licenses/LICENSE-2.0 12 // 13 // Unless required by applicable law or agreed to in writing, software 14 // distributed under the License is distributed on an ``AS IS'' BASIS, 15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 // See the License for the specific language governing permissions and 17 // limitations under the License. 18 // 19 // $Revision$ 20 // $LastChangedBy$ 21 // $LastChangedDate$ 22 // $URL$ 23 // 24 25 /** 26 * @fileOverview Defines the Api prototype. 27 */ 28 29 /** 30 * 31 * @param {Site} site 32 * @param {User} user 33 */ 34 Api.constrain = function(site, user) { 35 res.handlers.site = site; 36 res.handlers.membership = Membership.getByName(user.name); 37 return; 38 } 39 40 /** @ignore */ 41 Api.dispatch = function() { 42 } 43 44 /** 45 * 46 * @param {String} name 47 * @param {String} password 48 * @throws {Error} 49 * @returns {User} 50 */ 51 Api.getUser = function(name, password) { 52 var user = User.getByName(name); 53 if (!user) { 54 throw Error("User " + name + " does not exist on this server"); 55 } else if (user.hash !== String(password + user.salt).md5()) { 56 throw Error("Authentication failed for user " + name); 57 } else if (user.status === User.BLOCKED) { 58 throw Error("The user account " + name + " is currently blocked"); 59 } 60 session.login(user); 61 return user; 62 } 63 64 /** 65 * 66 * @param {String} name 67 * @throws {Error} 68 * @returns {Site} 69 */ 70 Api.getSite = function(name) { 71 var site = Site.getByName(String(name)); 72 if (!site) { 73 throw Error("Site " + name + " does not exist on this server"); 74 } else if (site.status === Site.BLOCKED) { 75 throw Error("The site " + name + " is blocked"); 76 } 77 return site; 78 } 79 80 /** 81 * 82 * @param {Number} id 83 * @throws {Error} 84 * @returns {Story} 85 */ 86 Api.getStory = function(id) { 87 var story = Story.getById(id); 88 if (!story) { 89 throw Error("Story #" + id + " does not exist on this server"); 90 } 91 return story; 92 } 93 94 /** 95 * @name Api 96 * @constructor 97 * @extends HopObject 98 */ 99 100 /** 101 * @returns {Boolean} 102 */ 103 Api.prototype.getPermission = function(){ 104 return true; 105 } 106 107 Api.prototype.main_action = function() { 108 res.data.title = gettext("Application Programming Interfaces"); 109 res.data.body = this.renderSkinAsString("$Api#main"); 110 res.handlers.site.renderSkin("Site#page"); 111 return; 112 } 113 114 Api.prototype.callback_action = function() { 115 var ping = function(data) { 116 if (data.type !== "Story" && data.type !== "Comment") { 117 return; 118 } 119 var remote = new Remote("http://rpc.weblogs.com/RPC2"); 120 var call = remote.weblogUpdates.ping(data.site, data.origin); 121 if (call.error || call.result.flerror) { 122 app.debug("Error invoking weblogs.com ping() method for " + 123 data.site + ": " + call.error || call.result.message); 124 } else { 125 app.debug(call.result); 126 } 127 return; 128 }; 129 130 if (req.isGet()) { 131 res.data.title = gettext("Default Callback Url"); 132 res.data.body = this.renderSkinAsString("$Api#callback", 133 {name: req.action, code: ping.toString()}); 134 res.handlers.site.renderSkin("Site#page"); 135 } else if (req.isPost()) { 136 app.debug("Invoked default callback with POST params: " + req.postParams); 137 app.invokeAsync(this, ping, [req.postParams], 1000); 138 } 139 return; 140 } 141 142 /** 143 * 144 * @param {String} methodName 145 * @throws {Error} 146 */ 147 Api.prototype.main_action_xmlrpc = function(methodName) { 148 if (!methodName) { 149 return false; 150 } 151 var parts = methodName.split("."); 152 var method = parts[1]; 153 if (method && !method.startsWith("_")) { 154 var handler = Api[parts[0]]; 155 if (handler && handler[method]) { 156 var args = Array.prototype.splice.call(arguments, 1); 157 return handler[method].apply(null, args); 158 } 159 } 160 throw Error("Method " + methodName + "() is not implemented"); 161 return; 162 } 163