OS X Wiki/博客服务器API

问题描述 投票:0回答:2

我正在开发一个 iOS 客户端应用程序,用于编辑 Mac OS X 服务器(Snow Leopard 和 Lion)上的内置 Wiki/博客。

看来我们可以使用MetaWeblog、Atom API(我尝试过但失败了)或XML-RPC。 但是,我找不到任何API文档。

所以我的问题是,在哪里可以找到文档或一些开源示例? 我发现的所有示例都无法处理 OS X Server。

非常感谢!

更新:

这是 Wiki 系统的标准结构:

我什至无法获取 ~/Groups/

下的“group_name”列表

Wiki Structure

ios macos blogs wiki
2个回答
1
投票

wiki 的 JavaScript 源代码没有被混淆,而且看起来足够简单,可以作为文档。例如认证过程:

sendAuthenticationPlain: function() {
    $('webauth').addClassName('verifying').removeClassName('error');
    var username = $F('username');
    var password = $F('password');
    var csrf = $F('authenticity_token');
    var plainResponse = "username="+username+"&password="+password
    this.setRememberMeCookie();
    var ajaxReq = new Ajax.Request(window.location.protocol + '//' + window.location.host + "/auth/plain_login", {
        method: 'post',
        requestHeaders: {'X-CSRF-Token': csrf},
        onComplete: this.gotAuthentication.bind(this),
        postBody: plainResponse
    });
    return false;
},
gotAuthentication: function(origRequest) {
    if (origRequest.responseJSON) {
        var jsonObject = origRequest.responseJSON
        if (jsonObject['success']) {
            var redirect = jsonObject['redirect'];
            var authToken = jsonObject['auth_token'];
            this.successCallback(authToken, redirect);
        } else {
            var errorString = jsonObject['error_string']
            this.failureCallback(errorString);
        }
    }
},

因此,您向 auth/plain_login 发送 POST 请求,其中仅包含 POST 数据中的用户名/密码和 X-CSRF-Token 标头,该标头的值来自页面上的

<input type="hidden" name="authenticity_token" />
元素。服务器返回一个包含“成功”布尔值的 JSON 字符串。

您还可以使用 safari/chrome 的开发者工具来监控发往/来自服务器的 ajax 请求,例如这是保存 wiki 页面的 PUT 请求的 JSON 内容:

wiki save put request


1
投票

我正在开发最新的 Lion 服务器,以便通过应用程序进行访问。 Lion服务器Web服务的结构基于Ruby on Rails,并且很容易理解(我以前没有Ruby经验)。然而,整个系统(对于实现的部分)并不是为API访问而设计的。例如,身份验证系统是基于Cookie身份验证(会话ID或其他东西)。并非所有请求的输出都有 json 响应。没有任何带有 json 正文的失败请求响应。

所有的工作都需要你自己完成。

首先是向服务器进行身份验证。所有过程都暴露给你:

'wiki/api/csrf' to get the X-CSRF-Token value
'auth/challenge_advanced?username=xxxx' to get a challenge parameters
'auth/digest_login' to use md5-sess digest to login

同时,md5-sess摘要是由您自己的代码按照digest.js计算的(对我来说是objective-c,带有CC_md5 lib)

然后您可以为您所需的控制器添加 json 渲染支持,例如,

respond_to do |format|
  format.html
  format.js  { render_js_pagination_response(@search, 'people/entitylist_item') }
  format.json { #new added json support
    rs = []
    @search.results.each do |r|
      nr = filterUserInfo r  # I only need some of the all properties
      rs.push nr
    end
    render :json => rs
  }
end

一件重要的事情是,lion 服务器使用 Web auth/cookie 来授权访问,因此您的请求 lib/api 必须处理 cookie。

以上是 api/json 访问的最简单解决方案,但不是最好的解决方案。你最好重新处理所有访问进度以适应api访问。

顺便说一句:您可以将整个 /usr/share/collabd/ 复制到您自己的项目目录中,然后修改所有/您的项目路径/collab/coreclient/config/collabcore{1,2,3,4}.yml,更改生产到开发。

所以你可以在 collab/coreclient 下启动开发服务器应用程序:

sudo -u _teamsserver thin start

通过 http://localhost:3000 访问服务器

© www.soinside.com 2019 - 2024. All rights reserved.