Awesome Open Source
Awesome Open Source

Pritunl HTTP API

Pritunl 是一个基于OpenVPN协议实现的企业级VPN方案, 免费版本可以拥有一个服务器的创建, 付费版有更多的功能.

安装配置文档

由于开源版不提供API调用,故有此项目, 通过模拟登陆的方式实现的一套HTTP API接口

安装运行

下载二进制文件即可

配置文件

# 配置文件中的${},首先从环境变量获取,获取不到则使用后边的默认值

appname = pritunl-http-api
autorender = false
copyrequestbody = true
EnableDocs = false

# 运行模式 dev | prod
runmode = "${PRITUNL_HTTP_API_RUNMODE||dev}"

# 监听地址
httpaddr = "${PRITUNL_HTTP_API_LISTEN_IP||127.0.0.1}"

# 监听端口
httpport = "${PRITUNL_HTTP_API_PORT||30080}"

[log]
# 日志路径
logPath = "${PRITUNL_HTTP_API_LOGPATH||logs/pritunl.log}"

[security]
# 是否启用token认证,启用会要求在请求头部加入token头

# true | false
enableToken = false

# 请求头中 token头名称
tokenName = "${PRITUNL_HTTP_API_TOKEN_NAME||PRITUNL-HTTP-API-TOKEN}"

# token 值
token = "${PRITUNL_HTTP_API_TOKEN||CyNINFvjdJTh4QTfqsPVJuNdRDUGvHnU}"


[common-vpn-wenba]
# common 是一个标识,代表的是那台服务器,可以随意定义, 比如有多台pritunl服务器,在调接口的时候会用到
# wenba 是pritunl里面一个organization的名称, pritunl里面可以包含多个organization, 在调接口的时候会用到
# common-vpn-wenba 三者结合起来指的就是要操作那台服务器的那个organization

# url是pritunl控制台地址
url = "${PRITUNL_COMMON_URL||https://x.x.x.x}"

# 登录的用户名和密码
username = "${PRITUNL_COMMON_USERNAME||wenba}"
password = "${PRITUNL_COMMON_PASSWORD||123456}"

# organization id 是对应上边wenba
organization = "${PRITUNL_COMMON_WENBA_ORG||123456}"

# debug 用于调试
# true | false
debug = "${PRITUNL_COMMON_DEBUG||false}"

如何获取 organization 的 名称 和 id?

先登录到pritunl web 控制台

chrome可以通过按F12或者右键检查菜单打开开发者工具,监控Network

切换到 Users 选项卡, 找到该接口的响应

/organization?page=0

里面有组织的名称和ID,在调用接口的时候会需要用到这2个值

接口

添加用户

POST /pritunl?vpn-name=VPN名称&org-name=组织名称&username=用户名

vpn-name 就是配置文件里面配置的名称, 如: common
org-name organization组织的名称, 如: wenba
username 用户名
email 可选

通过 vpn-name 和 org-name 在配置文件中找到对应的配置

返回

{
    "data": {
        "profileLink": "https://x.x.x.x/k/u3yUsEcL",
        "userId": "5d008e164ed924023806d388",
        "username": "test7777"
    },
    "entryType": "Pritunl OpenVPN Operation",
    "error": "",
    "statusCode": 0
}

profileLink 是下载配置文件的和配置2步验证的URL

删除用户

DELETE /pritunl?vpn-name=VPN名称&org-name=组织名称&username=用户名

返回

{
    "data": {
        "status": "deleted",
        "username": "test7777"
    },
    "entryType": "Pritunl OpenVPN Operation",
    "error": "",
    "statusCode": 0
}

禁用用户

PUT /pritunl?vpn-name=VPN名称&org-name=组织名称&username=用户名&status=disable

返回

{
    "data": {
        "status": "disabled",
        "username": "test7777"
    },
    "entryType": "Pritunl OpenVPN Operation",
    "error": "",
    "statusCode": 0
}

启用用户

PUT /pritunl?vpn-name=VPN名称&org-name=组织名称&username=用户名&status=enable

返回

{
    "data": {
        "status": "enabled",
        "username": "test7777"
    },
    "entryType": "Pritunl OpenVPN Operation",
    "error": "",
    "statusCode": 0
}

批量添加用户

POST /pritunl?vpn-name=VPN名称&org-name=组织名称&username=用户名&multi=yes

json请求体

请求头: Content-Type application/json

[
	{
		"name": "test5555",
		"email": null
	},
	{
		"name": "test6666",
		"email": null
	}
]

返回

{
    "data": [
        {
            "profileLink": "https://x.x.x.x/k/aP25mrUn",
            "userId": "5cff8b174ed92402380625f7",
            "username": "test5555"
        },
        {
            "profileLink": "https://x.x.x.x/k/x47p83KG",
            "userId": "5cff8b974ed924023806264f",
            "username": "test6666"
        }
    ],
    "entryType": "Pritunl OpenVPN Operation",
    "error": "",
    "statusCode": 0
}

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Golang (172,446
User (46,561
Json (40,096
Web (37,769
Network (37,423
Http (30,293
Types (29,772
Openvpn (1,833
Beego (449
Pritunl (26