"本文是[链接]的一个章节,该系列文章将介绍 [链接] 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 自动同步 GitHub 仓库 自动同步仓库包含了两个功能: 每 24 小时定时拉取用 .."

Solo 自动同步 GitHub 仓库

本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

自动同步 GitHub 仓库

自动同步仓库包含了两个功能:

  1. 每 24 小时定时拉取用户 GitHub 账号下的公有仓库,然后生成一篇文章并在加入到导航中,实际效果请参看这里
  2. 每 24 小时定时导出用户的公开文章到用户的 GitHub 仓库(solo-blog),实际效果请参考这里

拉取并展示仓库

仓库数据是通过社区接口获取的,GitHubs#getGitHubRepos

public static JSONArray getGitHubRepos(final String githubUserId) {
    try {
        final HttpResponse res = HttpRequest.get("https://hacpai.com/github/repos?id=" + githubUserId).trustAllCerts(true).
                connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
        if (HttpServletResponse.SC_OK != res.statusCode()) {
            return null;
        }
        res.charset("UTF-8");
        final JSONObject result = new JSONObject(res.bodyText());
        if (0 != result.optInt(Keys.STATUS_CODE)) {
            return null;
        }
        final JSONObject data = result.optJSONObject(Common.DATA);
        final JSONArray ret = data.optJSONArray("githubrepos");

        return ret;
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, "Gets GitHub repos failed", e);

        return null;
    }
}

社区会定时调用 GitHub Repos API 获取用户仓库数据,然后持久化到数据库中,Solo 请求数据时查库返回。

导出文章到仓库

应用场景与动机:

使用说明:

  1. 登录博客后台,在工具 -> 偏好设定 -> 参数设置中勾选允许同步 GitHub 仓库
  2. 启动后 10 分钟进行第一次同步,后续每 24 小时触发一次

请注意:不需要 fork 我的那个仓库,程序会自动创建名为 solo-blog 的仓库。

实现流程:

  1. 博客端定时触发同步请求,将所有公开(非加密)文章导出 md 打 zip 包
  2. 将包发送至社区服务器,由社区服务器完成仓库创建 / 更新、文件提交

由社区服务器进行 GitHub 操作主要考虑到两点:

凭证授权

目前博客端在进行 GitHub 登录时申请的权限包括:

具体细节可以通过该文档了解。我们仅在用户同意授权使用该功能的情况下做操作(博客端会在设置中增加是否需要同步仓库的选项,默认不同步),大家进行公开监督,避免产生不必要的误会。

凭证使用

凭证统一在社区存储,由社区统一进行运维操作,尽量避免潜在的安全泄露。所以博客端不进行凭证相关的任何存储和操作以降低风险。如果发现安全问题,我们会在 GitHub 上注销所有凭证,将安全问题产生的影响降到最低程度。

代码实现

请参考 ExportService#exportGitHubRepo


回到全文目录:《Solo 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    655 引用 • 4983 回帖 • 710 关注
  • 设计
    85 引用 • 528 回帖 • 1 关注
  • 文档
    51 引用 • 926 回帖 • 1 关注
回帖   
请输入回帖内容...