pritunl

package module
v0.0.0-...-32183c0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 3, 2024 License: MIT Imports: 20 Imported by: 0

README

pritunl-client

a golang based pritunl http client, include create vpn server、add route、update mode of route,and an easy func to start a full function pritunl server

Documentation

Index

Constants

View Source
const (
	DEFAULT_ADMIN_USER   = "pritunl"
	DEFAULT_ORGANIZATION = "default"
	DEFAULT_ROUTE        = "0.0.0.0/0"
)

Variables

This section is empty.

Functions

func DeleteRoute

func DeleteRoute(c *Client, serverId, routeId string) error

DeleteRoute 删除指定路由

func UpdatePublicAccessAddress

func UpdatePublicAccessAddress(c *Client, newAddress string) (*http.Response, error)

UpdatePublicAccessAddress 更新系统对外提供的公网地址,这个地址会被客户端连接配置文件使用,只需要服务端返回200即可

Types

type AdminUser

type AdminUser struct {
	Id        string `json:"id"`
	Username  string `json:"username"`
	AuthApi   bool   `json:"auth_api"`
	Token     string `json:"token"`
	Secret    string `json:"secret"`
	SuperUser bool   `json:"super_user"`
}

AdminUser 管理账号配置

func GetAdminUserList

func GetAdminUserList(c *Client) ([]AdminUser, error)

GetAdminUserList 获取管理员账号列表

func UpdateAdminUserAuthConfig

func UpdateAdminUserAuthConfig(c *Client, adminUser AdminUser) (*AdminUser, error)

UpdateAdminUserAuthConfig 更新指定管理员账号配置, 如果adminUser的token和secret传了值,不管传什么值,服务端都是任意更新 响应体是adminUser

type AttachConf

type AttachConf struct {
	Id     string `json:"id"`             // 组织id
	Server string `json:"server"`         // server id
	Name   string `json:"name,omitempty"` // 组织名称
}

AttachConf 添加组织的配置

func AttachOrganizationToServer

func AttachOrganizationToServer(c *Client, conf AttachConf) (*AttachConf, error)

AttachOrganizationToServer 为server添加一个组织,一个在pritunl中,一个vpn server必须要属于某个组织

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client pritunl客户端

func NewClient

func NewClient(apiToken, apiSecret, host string, context context.Context) (*Client, error)

NewClient 获取pritunl客户端

func (*Client) Request

func (c *Client) Request(method, path string, options *RequestOpts) (*http.Response, error)

Request 执行具体的请求

type Config

type Config struct {
	ApiToken     string // api token
	ApiSecret    string // api secret
	HttpProtocol string // http协议类型,默认是https
	Host         string // pritunl主机地址
	Context      *context.Context
}

Config pritunl客户端配置

type ConnectionFile

type ConnectionFile struct {
	Name    string `json:"name"`    // 连接文件名,以.ovpn为后缀,可直接在openvpn客户端导入
	Content []byte `json:"content"` // 连接文件的内容
}

ConnectionFile 连接配置文件

func ExportUserConnectFile

func ExportUserConnectFile(c *Client, organizationId, userId string) (*ConnectionFile, error)

ExportUserConnectFile 导出用户的连接配置, 导出的是配置文件的tar包的内容,需要自己按需获取解压内容

type Organization

type Organization struct {
	Id         string `json:"id"`
	Name       string `json:"name"`
	AuthApi    bool   `json:"auth_api"`
	AuthToken  string `json:"auth_token"`
	AuthSecret string `json:"auth_secret"`
	UserCount  int    `json:"user_count"`
}

Organization 组织数据结构

func GetOrganizationList

func GetOrganizationList(c *Client) ([]Organization, error)

GetOrganizationList 获取组织列表

type PritunlTotalConfig

type PritunlTotalConfig struct {
	PublicAddress  string `json:"publicAddress"`  // 服务对外地址
	AdminUserId    string `json:"adminUserId"`    // 默认的管理员账号id
	ApiToken       string `json:"apiToken"`       // api token
	ApiSecret      string `json:"apiSecret"`      // api secret
	VpnServerName  string `json:"vpnServerName"`  // vpn server名称
	VpnServerId    string `json:"vpnServerId"`    // vpn server id
	VpnServerState string `json:"vpnServerState"` // vpn server的状态,online offline
	VpnNetwork     string `json:"vpnNetwork"`     // vpn网段
	VpnPort        int    `json:"vpnPort"`        // vpn端口
	OrganizationId string `json:"organizationId"` // 组织id
	Route          string `json:"route"`          // vpn连接的内部网络路由
	RouteId        string `json:"routeId"`        // vpn连接的内部网络的路由id
	RouteUseNat    bool   `json:"routeUseNat"`    // vpn连接的内部网络是否启用nat模式

}

PritunlTotalConfig 一个正常运行着的完整vpn服务所用到的配置

func InitVpnServer

func InitVpnServer(adminIp, publicAddr, network string, useNat bool, apiToken, apiSecret string) (*PritunlTotalConfig, error)

InitVpnServer 一键初始化一个vpn服务。包括修改默认的认证key,创建vpn server、配置组织、路由、启动服务等

type RequestOpts

type RequestOpts struct {
	// RequestParam 查询参数
	RequestParam map[string]string
	// JSONBody 可为空,如果不为空的话,content-type变为application/json,不能和RawBody同时使用
	JSONBody interface{}
	// RawBody 可为空,不为空的话,会直接赋值给http Request,且不会额外加application/json的头
	RawBody io.Reader
	// JSONResponse 如果被指定的话,响应体将会被解析到这个字段
	JSONResponse interface{}
	// OkCodes 指定属于正常响应的状态码
	OkCodes []int
	// MoreHeaders 特定的http 头,如果不指定,会被默认的请求头覆盖
	MoreHeaders map[string]string
	// OmitHeaders 默认的请求头
	OmitHeaders []string
	// KeepResponseBody 是否保留原始的响应体,如果上层业务有进一步解析的需求的话,应该置为true
	KeepResponseBody bool
}

type RouteAddOpts

type RouteAddOpts struct {
	Id      string `json:"id,omitempty"`
	Server  string `json:"server"`  // vpn server id
	Network string `json:"network"` // 路由的网段
	Nat     bool   `json:"nat"`     // 针对此网段是否采用nat模式,否则就是路由模式
}

RouteAddOpts 路由添加配置

type RouteDetail

type RouteDetail struct {
	Id      string `json:"id,omitempty"` // 路由id, 添加路由时可为空
	Server  string `json:"server"`       // vpn server id
	Network string `json:"network"`      // 路由的网段
	Nat     bool   `json:"nat"`          // 针对此网段是否采用nat模式,否则就是路由模式
}

RouteDetail 针对内部网段的路由配置信息

func AddRoute

func AddRoute(c *Client, route RouteAddOpts) (*RouteDetail, error)

AddRoute 添加路由

func GetServerRouteList

func GetServerRouteList(c *Client, serverId string) ([]RouteDetail, error)

GetServerRouteList 获取指定vpn服务的路由列表

func UpdateRoute

func UpdateRoute(c *Client, route RouteUpdateOpts) (*RouteDetail, error)

UpdateRoute 更新路由配置

type RouteUpdateOpts

type RouteUpdateOpts struct {
	Id      string `json:"id"`                // 路由id
	Server  string `json:"server"`            // vpn server id
	Network string `json:"network,omitempty"` // 路由的网段
	Nat     bool   `json:"nat,omitempty"`     // 针对此网段是否采用nat模式,否则就是路由模式
}

RouteUpdateOpts 路由添加配置

type UserAddOpts

type UserAddOpts struct {
	Name           string `json:"name"`
	OrganizationId string `json:"organizationId"`
}

UserAddOpts 用户添加配置

type UserDetail

type UserDetail struct {
	Id               string `json:"id"`
	Organization     string `json:"organization"`
	OrganizationName string `json:"organization_name"`
	Name             string `json:"name"`
	Email            string `json:"email"`
	Disabled         bool   `json:"disabled"` // 是否被禁用
}

UserDetail 用户详情

func AddUser

func AddUser(c *Client, user UserAddOpts) ([]UserDetail, error)

AddUser 向组织添加用户

func EnableDisableUser

func EnableDisableUser(c *Client, conf UserUpdateOpts) (*UserDetail, error)

EnableDisableUser 启用禁用用户

type UserUpdateOpts

type UserUpdateOpts struct {
	UserId         string `json:"userId"`
	OrganizationId string `json:"organizationId"`
	Disabled       bool   `json:"disabled"` // 是否禁用
}

UserUpdateOpts 用户更新选项

type VpnServer

type VpnServer struct {
	Name           string `json:"name,omitempty"`    // 不给的话由本包自动生成
	Id             string `json:"id,omitempty"`      // 创建server时不需要传递此参数
	Network        string `json:"network,omitempty"` // 不给的话由本包自动生成一个,必须满足[10,172,192].[0-255,16-31,168].[0-255].0/[8-24]
	Port           int    `json:"port,omitempty"`
	Protocol       string `json:"protocol,omitempty"` // 不给的话默认为udp
	Cipher         string `json:"cipher,omitempty"`   // 不给的话默认为aes128
	Hash           string `json:"hash,omitempty"`     // 不给的话默认为sha1
	RestrictRoutes bool   `json:"restrict_routes,omitempty"`
	NetworkMode    string `json:"network_mode,omitempty"` // 不给的话默认为tunnel
	Status         string `json:"status,omitempty"`       // 服务的状态
}

VpnServer vpn server实例配置

func CreateVpnServer

func CreateVpnServer(c *Client, server VpnServer) (*VpnServer, error)

CreateVpnServer 创建一个新的vpn server, 返回值是ServerCreateConfig

func StartStopServer

func StartStopServer(c *Client, serverId string, start bool) (*VpnServer, error)

StartStopServer 启动或者停止vpn server

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL