资讯专栏INFORMATION COLUMN

使用Cloudflare Workers反代OneDrive

Tecode / 3091人阅读

摘要:注册登陆账号创建子域名创建替换成你的网址替换成你的网址下面的配置都不用动自己自定义前缀,点击保存并部署,会得到一个网址此时打开链接应该是登陆的界面反代链接对接版本加入了反代功能

注册/登陆账号
https://dash.cloudflare.com/sign-up

创建子域名

创建Workers

// 替换成你OneDrive的网址
const upstream = *-my.sharepoint.com

// 替换成你OneDrive的网址
const upstream_mobile = *-my.sharepoint.com

// 下面的配置都不用动
const upstream_path = /

const blocked_region = [KP SY PK CU]

const blocked_ip_address = [0.0.0.0 127.0.0.1]

const https = true

const disable_cache = false

const replace_dict = {

$upstream: $custom_domain
//sunpma.com: 

}

addEventListener(fetch event => {

event.respondWith(fetchAndApply(event.request));

})

async function fetchAndApply(request) {

const region = request.headers.get(cf-ipcountry).toUpperCase();
const ip_address = request.headers.get(cf-connecting-ip);
const user_agent = request.headers.get(user-agent);

let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;

if (https == true) {
    url.protocol = https:;
} else {
    url.protocol = http:;
}

if (await device_status(user_agent)) {
    var upstream_domain = upstream;
} else {
    var upstream_domain = upstream_mobile;
}

url.host = upstream_domain;
if (url.pathname == /) {
    url.pathname = upstream_path;
} else {
    url.pathname = upstream_path + url.pathname;
}

if (blocked_region.includes(region)) {
    response = new Response(Access denied: WorkersProxy is not available in your region yet. {
        status: 403
    });
} else if (blocked_ip_address.includes(ip_address)) {
    response = new Response(Access denied: Your IP address is blocked by WorkersProxy. {
        status: 403
    });
} else {
    let method = request.method;
    let request_headers = request.headers;
    let new_request_headers = new Headers(request_headers);

    new_request_headers.set(Host upstream_domain);
    new_request_headers.set(Referer url.protocol + // + url_hostname);

    let original_response = await fetch(url.href {
        method: method
        headers: new_request_headers
    })

    connection_upgrade = new_request_headers.get("Upgrade");
    if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") {
        return original_response;
    }

    let original_response_clone = original_response.clone();
    let original_text = null;
    let response_headers = original_response.headers;
    let new_response_headers = new Headers(response_headers);
    let status = original_response.status;
    
    if (disable_cache) {
        new_response_headers.set(Cache-Control no-store);
    }

    new_response_headers.set(access-control-allow-origin *);
    new_response_headers.set(access-control-allow-credentials true);
    new_response_headers.delete(content-security-policy);
    new_response_headers.delete(content-security-policy-report-only);
    new_response_headers.delete(clear-site-data);
    
    if (new_response_headers.get("x-pjax-url")) {
        new_response_headers.set("x-pjax-url" response_headers.get("x-pjax-url").replace("//" + upstream_domain "//" + url_hostname));
    }
    
    const content_type = new_response_headers.get(content-type);
    if (content_type != null && content_type.includes(text/html) && content_type.includes(UTF-8)) {
        original_text = await replace_response_text(original_response_clone upstream_domain url_hostname);
    } else {
        original_text = original_response_clone.body
    }
    
    response = new Response(original_text {
        status
        headers: new_response_headers
    })
}
return response;

}

async function replace_response_text(response upstream_domain host_name) {

let text = await response.text()

var i j;
for (i in replace_dict) {
    j = replace_dict[i]
    if (i == $upstream) {
        i = upstream_domain
    } else if (i == $custom_domain) {
        i = host_name
    }

    if (j == $upstream) {
        j = upstream_domain
    } else if (j == $custom_domain) {
        j = host_name
    }

    let re = new RegExp(i g)
    text = text.replace(re j);
}
return text;

}

async function device_status(user_agent_info) {

var agents = ["Android" "iPhone" "SymbianOS" "Windows Phone" "iPad" "iPod"];
var flag = true;
for (var v = 0; v < agents.length; v++) {
    if (user_agent_info.indexOf(agents[v]) > 0) {
        flag = false;
        break;
    }
}
return flag;

}
自己自定义前缀,点击保存并部署,会得到一个网址 https://*.workers.dev/

此时打开链接应该是office登陆的界面

反代链接对接Cloudreve、onemanager
Cloudreve V3.2.1版本加入了OneDrive反代功能,对接存储时把反代链接填上就行

onemanager自带反代地址,直接填入即可

本文源自网络,cf反代代码来自github。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/126414.html

相关文章

  • 【转载】自动获取cloudflare的ip解决假墙

    摘要:转载自动获取的解决假墙前段时间很多人遇到了标签假墙下的日志假墙的问题,这玩意是啥呢是通过利用的漏洞,他模拟访问一些包含非法关键词的地址。对于用户访问有一定的影响,但是这也是目前最好的解决办法了。 【转载】自动获取cloudflare的ip解决假墙 前段时间很多人遇到了假墙的问题,这玩意是啥呢?是通过利用GFW的漏洞,他模拟访问一些包含非法关键词的U...

    邹立鹏 评论0 收藏0
  • 使用 CF-Worker-Dir 在 Cloudflare Worker 上免费搭建导航网站

    摘要:使用在上免费搭建导航网站,可以用这个替换掉浏览器自带的主页,自用还是比较香的首先了解一下是提供的无服务器应用程序,有免费版,可以用来测试脚本有大佬利用它开发了导航程序并开源,下面就教大家如何安装,非常简单材料地址的的开源地址使用 CF-Worker-Dir 在 Cloudflare Worker 上免费搭建导航网站,可以用这个替换掉浏览器自带的主页,自用还是比较香的!首先了解一下 Cloud...

    Tecode 评论0 收藏0
  • ZFile自建免费公共网盘服务-支持阿里云OSS,OneDrive,FTP,S3协议等云存储

    对于网站存储的需求,大多数人还是以私有网盘为主,目的是为了可以存储属于私人的视频、文档、音频等资料。但是,也有不少的人想要搭建一个公共的网盘,主要目的是可以方便所有人查看、浏览和下载、使用,同时也提供视频在线播放,变成影视站点。这样的公共网盘服务搭建起来并不是很复杂,但是苦于高昂的存储费用,有的人盯上了超大容量且免费的网盘服务,例如OneDrive,团队版甚至可以达到TB以上,将OneDrive变...

    番茄西红柿 评论0 收藏2637
  • 宝塔面板安装iFileSpace,一键搭建专属的私人网盘系统

    摘要:这篇文章还是利用宝塔来搭建,宝塔服务器面板,一键全能部署及管理,送你元礼包,点我领取程序的功能如下支持第三方存储目前支持阿里云,华为云,。iFileSpace 是一个在线个人文件管理工具,在线网盘程序,可快速一键搭建私人云盘,支持本地存储和对象存储(目前支持阿里云oss,华为云obs,OneDrive), 如部署在公网服务器,可替代百度网盘等在线网盘,自主搭建,数据完全自主管理!也可部署在家...

    Alex 评论0 收藏0
  • “以假乱真” 网络钓鱼活动巧妙使用 UPS.com XSS 漏洞分发恶意软件

    摘要:此漏洞允许威胁行为者通过远程工作人员分发恶意文档,但使其看起来像是直接从下载的。目前显示,的跨站漏洞已经修复。而以上钓鱼攻击利用的是中第二普遍的安全问题,存在于近三分之二的应用中。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidde...

    KoreyLee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<