213 lines
6.6 KiB
JavaScript
213 lines
6.6 KiB
JavaScript
//
|
|
// The Antville Project
|
|
// http://code.google.com/p/antville
|
|
//
|
|
// Copyright 2001-2007 by The Antville People
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the ``License'');
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an ``AS IS'' BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// $Revision$
|
|
// $LastChangedBy$
|
|
// $LastChangedDate$
|
|
// $URL$
|
|
//
|
|
|
|
// Functions that implement Blogger's XML-RPC API
|
|
// see http://www.blogger.com/developers/api/1_docs/ for further details
|
|
// blogger.getTemplate and blogger.setTemplate are not supported
|
|
|
|
Api.blogger = {};
|
|
|
|
Api.blogger.util = {
|
|
getContentParts: function(content) {
|
|
content && (content = content.trim());
|
|
content || (content = "");
|
|
var result = {};
|
|
if (!content.startsWith("<title>")) {
|
|
result.text = content;
|
|
} else {
|
|
var pos = content.lastIndexOf("</title>");
|
|
if (pos > 0) {
|
|
result.title = content.substring(7, pos);
|
|
result.text = content.substring (pos + 8);
|
|
} else {
|
|
result.text = content;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
Api.blogger.getUserInfo = function(appKey, name, password) {
|
|
var user = User.getByName(name);
|
|
if (!user) {
|
|
throw Error("User " + name + " does not exist on this server");
|
|
}
|
|
return {
|
|
userid: name,
|
|
nickname: name,
|
|
url: user.url
|
|
}
|
|
}
|
|
|
|
Api.blogger.getUsersBlogs = function(appKey, name, password) {
|
|
var user = Api.getUser(name, password);
|
|
var result = [];
|
|
user.forEach(function() {
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.membership = this;
|
|
res.handlers.site = this.site;
|
|
if (this.site.stories.getPermission("create")) {
|
|
result.push({
|
|
blogid: this.site.name,
|
|
blogName: this.site.title,
|
|
url: this.site.href()
|
|
});
|
|
}
|
|
return;
|
|
});
|
|
return result;
|
|
}
|
|
|
|
Api.blogger.getRecentPosts = function(appKey, id, name, password, limit) {
|
|
var user = Api.getUser(name, password);
|
|
var site = Api.getSite(id);
|
|
if (!site) {
|
|
throw Error("Site " + id + " does not exist on this server");
|
|
}
|
|
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.site = site;
|
|
res.handlers.membership = Membership.getByName(user.name);
|
|
if (!site.stories.getPermission("main")) {
|
|
throw Error("Permission denied for user " + user.name +
|
|
" to access site " + site.name);
|
|
}
|
|
|
|
var result = [];
|
|
var stories = res.handlers.membership.stories;
|
|
var max = Math.min(stories.size(), limit || Infinity, 20);
|
|
for each (var story in stories.list(0, max)) {
|
|
result.push({
|
|
postid: story._id,
|
|
userid: story.creator.name,
|
|
dateCreated: story.created,
|
|
content: story.title ? "<title>" + story.title +
|
|
"</title>" + story.text : story.text
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Api.blogger.getPost = function(appKey, id, name, password) {
|
|
var user = Api.getUser(name, password);
|
|
var story = Story.getById(id);
|
|
if (!story) {
|
|
throw Error("Story #" + id + " does not exist on this server");
|
|
}
|
|
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.site = story.site;
|
|
res.handlers.membership = Membership.getByName(user.name);
|
|
if (!story.getPermission("main")) {
|
|
throw Error("Permission denied for user " + name +
|
|
" to access story #" + id);
|
|
}
|
|
|
|
return {
|
|
content: story.title ? "<title>" + story.title +
|
|
"</title>" + story.text : story.text,
|
|
userid: story.creator.name,
|
|
postid: story._id,
|
|
dateCreated: story.created
|
|
}
|
|
}
|
|
|
|
Api.blogger.newPost = function(appKey, id, name, password, content, publish) {
|
|
var user = Api.getUser(name, password);
|
|
var site = Api.getSite(id);
|
|
if (!site) {
|
|
throw Error("Site " + id + " does not exist on this server");
|
|
}
|
|
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.site = site;
|
|
res.handlers.membership = Membership.getByName(user.name);
|
|
if (!site.stories.getPermission("create")) {
|
|
throw Error("Permission denied for user " + user.name +
|
|
" to add a story to site " + site.name);
|
|
}
|
|
|
|
var parts = Api.blogger.util.getContentParts(content);
|
|
var story = new Story;
|
|
story.site = site;
|
|
story.creator = user;
|
|
story.update({
|
|
title: parts.title,
|
|
text: parts.text,
|
|
status: publish ? Story.PUBLIC : Story.CLOSED,
|
|
mode: Story.FEATURED
|
|
});
|
|
|
|
return story._id;
|
|
}
|
|
|
|
Api.blogger.editPost = function(appkey, id, name, password, content, publish) {
|
|
var user = Api.getUser(name, password);
|
|
var story = Story.getById(id);
|
|
if (!story) {
|
|
throw Error("Story #" + id + " does not exist on this server");
|
|
}
|
|
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.site = story.site;
|
|
res.handlers.membership = Membership.getByName(user.name);
|
|
if (!story.getPermission("edit")) {
|
|
throw Error("Permission denied for user " + name +
|
|
" to edit story #" + id);
|
|
}
|
|
|
|
var parts = Api.blogger.util.getContentParts(content);
|
|
story.update({
|
|
title: parts.title,
|
|
text: parts.text,
|
|
status: publish ? Story.PUBLIC : Story.CLOSED,
|
|
modifier: user,
|
|
modified: new Date
|
|
});
|
|
return true;
|
|
}
|
|
|
|
Api.blogger.deletePost = function(appKey, id, name, password, publish) {
|
|
var user = Api.getUser(name, password);
|
|
var story = Story.getById(id);
|
|
if (!story) {
|
|
throw Error("Story #" + id + " does not exist on this server");
|
|
} else {
|
|
// FIXME: This should become obsolete (needs refactoring of
|
|
// permission model or modification of URL entrypoint)
|
|
res.handlers.site = story.site;
|
|
res.handlers.membership = Membership.getByName(user.name);
|
|
if (!story.getPermission("delete")) {
|
|
throw Error("Permission denied for user " + name +
|
|
" to delete story #" + id);
|
|
}
|
|
}
|
|
Story.remove.call(story);
|
|
return true;
|
|
}
|