Skip to content
/ sosf Public

或许是国内访问最快的 OneDrive 免服务器图床程序,专为世纪互联用户打造

License

Notifications You must be signed in to change notification settings

beetcb/sosf

Repository files navigation

简介

Serverless OneDrive & SharePoint Function.

或许是国内访问最快的 OneDrive 免服务器图床程序(或视频床、音乐床、...床),专为世纪互联用户打造

注:SharePoint 文档储存功能和 OneDrive 网盘类似,本说明将他们统称为 OneDrive。

演示

SOSF 的前端 DEMO 页面:sosf.vercel.app

SOSF

特点

  • 使用 sstore 项目缓存 access_token,省去复杂的数据库配置和不必要带宽开销

  • 与现有免费图床服务的区别:我们有 OneDrive 😎,所以 sosf 可以托管任何文件(图片、视频、下载链接),并且无储存空间限制(几乎,你甚至还可以用 SharePoint 扩展空间)

  • 提供 API 接口模块 sor,良好的 DTS 支持,方便二次开发。 例如:

    一个列出 OneDrive 根目录所有文件的示例

    const { getToken, listChildren } = require('@beetcb/sor')
    
    async function handler() {
      const access_token = await getToken()
      const resource = await listChildren('/', access_token)
      if (resource) {
        return resource
      }
    }
    
    exports.main = handler
  • 访问速度快:sosf 使用国内 Serverless 供应商提供的免费服务(一般带有 CDN),访问国内的世纪互联,速度自然有质的飞跃

  • CLI 配置,简单快速:微软 Graph 的授权过程比较麻烦,为此我提供了一个 CLI 工具来加快部署。用户填入所有的配置项后,该工具自动写入配置文件,无需多余操作

  • 设计从简:sosf 只验证并获取 Onedrive 文件直链,并重定向过去(为方便文件查找,前端提供了简单的文件查找列表界面,让你简单高效地查找文件并复制文件链接)

  • 多平台部署支持:腾讯云开发 、Vercel
    • 腾讯云开发免费额度 (⚡):就速度而言它应该是最快的,缺点是每月有使用量限制 执行内存(GB) * 执行时间(s) 为 1000 GBs,云函数公网访问月流量限制为 1 GB,详见 免费额度。如果你觉得服务不错,也可按量付费表示支持

    • Vercel Serverless Func (🌸):它是国外服务器,速度不如前两家;不过国内访问速度也不错,不需要备案,免费额度也绝对够用:云函数使用量限制 执行内存(GB) * 执行时间(h) 为 100 GB-Hrs,月流量 100 GB, 详见 Fair Use Policy

  • 遵守合理使用规范:在我们使用这些云服务商表示支持的同时,也要优雅薅羊毛合理使用

部署指南

OneDrive 配置并授权

  1. Azure 控制台顶栏搜索应用注册⇢ 新注册 ⇢ 受支持的账户类型填入任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户⇢ 重定向 uri 填入 http://localhost⇢ 获取 应用程序(客户端) ID (client_id)

  2. 授权

  • OneDrive 用户左管理栏 API 权限 ⇢ 添加权限 offine-accessfiles.read.allfiles.read.write.all⇢ 左管理栏证书和密码 ⇢ 创建并获取 客户端密码 client-secret

  • SharePoint 用户左管理栏 API 权限 ⇢ 添加权限 offine-accesssites.read.allsites.read.write.all⇢ 左管理栏证书和密码 ⇢ 创建并获取 客户端密码 (client-secret) ⇢ 创建并获取 client-secret 和以下两项额外参数:

    • hostName: 你的 SharePoint Host,比如 cos.sharepoint.cn
    • sitePath: 你的 SharePoint 网站相对位置,比如 /sites/cos

    比如我的 SharePoint 访问网址为 https://odbeet.sharepoint.cn/sites/beet,则 hostName 值为 odbeet.sharepoint.cnsitePath 值为 /sites/beet,这是最快判断上述两者取值的方法

  1. 得到上述配置参数后,请保存好留作后用

云平台配置并部署

请在以下三种平台中根据你的需求任选其一:

一. 腾讯云开发 tcb

未开通云开发&新注册用户需要先开通云开发,具体过程为:在 此地址 注册登录,完成后再进入 开通地址 开通 ⇢ 不创建环境(请勾选),其它默认 ⇢ 跳转到授权界面并授权,开通成功 0. 点击此按钮一键部署:

  • 使用免费资源(记得勾选)

注意:直接部署计费模式为按量计费 + 免费额度,如果你需要使用包月类型的免费额度,请参考手动部署教程:

点击展开手动部署教程

  1. 配置机密环境变量:

    git clone https://github.com/beetcb/sosf.git
    npm i
    npm run auth
    # 在此根据提示开始配置

    配置完成后,该工具会创建一个 .env 文件,内容大致如下:

    client_id = xxx
    client_secret = xxx
    redirect_uri = http://localhost
    auth_endpoint = https://login.partner.microsoftonline.cn/common/oauth2/v2.0
    refresh_token = 0.AAAAQnNGiYmnI0CvMoN0bxMYyyzk3YwiZepNl9MOI6F2AGAB
    drive_api = https://microsoftgraph.chinacloudapi.cn/v1.0/sites/xx.sharepoint.cn,b4df3221/drive
    

    你可以在此增加配置项,详见 部署配置

  2. 进入云开发控制台 ⇢ 空模板 ⇢ 确保选择计费方式包年包月, 套餐版本免费版(这样能够确保免费额度超出后不继续扣费,当然如果你觉得服务不错,请付费表示支持) ⇢ 进入控制台

  3. 安装 tcb cli 并授权登录:

    npm i -g @cloudbase/cli
    tcb login

    此时需手动修改云开发配置文件中 envId 项为你的环境 ID

  4. 部署云函数:

    tcb fn deploy
  5. 指定 HTTP 访问路径:

    tcb service create -p / -f sosf
    # 让函数在根目录触发
  6. 等待几分钟,就可以开始预览了,访问示例:https://your.app/path/to/file.md

  1. 本地获取机密环境变量:

    git clone https://github.com/beetcb/sosf.git
    npm i
    npm run auth
    # 在此根据提示开始配置

    配置完成后,该工具会创建一个 .env 文件,内容大致如下:

    client_id = xxx
    client_secret = xxx
    redirect_uri = http://localhost
    auth_endpoint = https://login.partner.microsoftonline.cn/common/oauth2/v2.0
    refresh_token = 0.AAAAQnNGiYmnI0CvMoN0bxMYyyzk3YwiZepNl9MOI6F2AGAB
    drive_api = https://microsoftgraph.chinacloudapi.cn/v1.0/sites/xx.sharepoint.cn,b4df3221/drive
    

    你可以在此增加配置项,详见 部署配置

  2. 进入刚刚创建的环境 ⇢ 左栏云函数 ⇢ 在线代码编辑器 ⇢ 将本地 .env 文件里的内容粘贴到在线编辑的 .env 文件中并保存,然后点击测试,无报错则配置成功

  3. 到此,应该部署成功了,如需自定义域名,请配置 HTTP 访问服务。访问示例:https://domain.com/path/to/file.md

  4. (可选)配置 GitHub 持续部署,更新功能更便捷:fork 本项目,在 Actions 栏下开启 sosf ,下一步需要配置部署机密,在 Settings -> Secrets -> 依次添加以下四个 Secrets:

    DOTENV   之前生成的 .env 文件的内容
    ENVID    云开发 ENVID
    SECRETID 腾讯云的访问密钥 ID
    SECRETKEY   腾讯云的访问密钥 KEY
    

    github-actions

    然后请通过 [push] 来测试,成功以后每次的 [push] 操作都会部署 sosf 到你的云开发环境

二. Vercel Serverless Func

  1. 本地获取机密环境变量:

    git clone https://github.com/beetcb/sosf.git
    npm i
    npm run auth
    # 在此根据提示开始配置

    配置完成后,该工具会创建一个 .env 文件,内容大致如下:

    client_id = xxx
    client_secret = xxx
    redirect_uri = http://localhost
    auth_endpoint = https://login.partner.microsoftonline.cn/common/oauth2/v2.0
    refresh_token = 0.AAAAQnNGiYmnI0CvMoN0bxMYyyzk3YwiZepNl9MOI6F2AGAB
    drive_api = https://microsoftgraph.chinacloudapi.cn/v1.0/sites/xx.sharepoint.cn,b4df3221/drive
    

    你可以在此增加配置项,详见 部署配置

  2. 安装 vercel cli 并登录:

    npm i -g vercel
    vercel login
  3. 部署:

    vercel --prod

    到此部署完成,访问地址可以在命令行或 vercel 官网看到。需要使用自定义域名,请参考 custom-domains

  4. 访问地址示例:https://your.app/?path=/path/to/file.md

  5. (可选)配置 Vercel 持续部署,更新功能更便捷:fork 本项目,在 Vercel 导入新的 GitHub 项目:

    vercel-import

    ROOT DIRECTORYplatforms/vercel/sosf,Environmental Variables 填入之前生成的 .env 中的键值对 (也就是说你需要手动添加多次,目前还没有找到好的解决方案,欢迎开 Issue 讨论解法)

    vercel-import-success

部署配置

你可以直接使用 .env 文件自定义配置如下内容:

base_dir = 需要部署的根目录文件夹,默认为 /
access_key = 前端界面鉴权密钥,持有此密钥才能访问文件夹内容,默认为空

使用 access_key 访问前端列表的方法:https://static.beetcb.com?key={{access_key}}

作者

作者:beetcb

邮箱: i@beetcb.com

sosf - Licensed under under MIT

鸣谢