mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-01 00:59:34 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package handler
 | |
| 
 | |
| import (
 | |
| 	"encoding/xml"
 | |
| 	"log"
 | |
| 	"net/http"
 | |
| 	"os/exec"
 | |
| )
 | |
| 
 | |
| const BufferSize = 2048
 | |
| 
 | |
| type ClientRequest struct {
 | |
| 	XMLName              xml.Name       `xml:"config-auth"`
 | |
| 	Client               string         `xml:"client,attr"`                 // 一般都是 vpn
 | |
| 	Type                 string         `xml:"type,attr"`                   // 请求类型 init logout auth-reply
 | |
| 	AggregateAuthVersion string         `xml:"aggregate-auth-version,attr"` // 一般都是 2
 | |
| 	Version              string         `xml:"version"`                     // 客户端版本号
 | |
| 	GroupAccess          string         `xml:"group-access"`                // 请求的地址
 | |
| 	GroupSelect          string         `xml:"group-select"`                // 选择的组名
 | |
| 	SessionId            string         `xml:"session-id"`
 | |
| 	SessionToken         string         `xml:"session-token"`
 | |
| 	Auth                 auth           `xml:"auth"`
 | |
| 	DeviceId             deviceId       `xml:"device-id"`
 | |
| 	MacAddressList       macAddressList `xml:"mac-address-list"`
 | |
| }
 | |
| 
 | |
| type auth struct {
 | |
| 	Username string `xml:"username"`
 | |
| 	Password string `xml:"password"`
 | |
| }
 | |
| 
 | |
| type deviceId struct {
 | |
| 	ComputerName    string `xml:"computer-name,attr"`
 | |
| 	DeviceType      string `xml:"device-type,attr"`
 | |
| 	PlatformVersion string `xml:"platform-version,attr"`
 | |
| 	UniqueId        string `xml:"unique-id,attr"`
 | |
| 	UniqueIdGlobal  string `xml:"unique-id-global,attr"`
 | |
| }
 | |
| 
 | |
| type macAddressList struct {
 | |
| 	MacAddress string `xml:"mac-address"`
 | |
| }
 | |
| 
 | |
| func setCommonHeader(w http.ResponseWriter) {
 | |
| 	// Content-Length Date 默认已经存在
 | |
| 	w.Header().Set("Content-Type", "text/html; charset=utf-8")
 | |
| 	w.Header().Set("Cache-Control", "no-store")
 | |
| 	w.Header().Set("Pragma", "no-cache")
 | |
| 	w.Header().Set("Transfer-Encoding", "chunked")
 | |
| 	w.Header().Set("Connection", "keep-alive")
 | |
| 	w.Header().Set("X-Frame-Options", "SAMEORIGIN")
 | |
| 	w.Header().Set("X-Aggregate-Auth", "1")
 | |
| 	w.Header().Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
 | |
| }
 | |
| 
 | |
| func execCmd(cmdStrs []string) error {
 | |
| 	for _, cmdStr := range cmdStrs {
 | |
| 		cmd := exec.Command("bash", "-c", cmdStr)
 | |
| 		b, err := cmd.CombinedOutput()
 | |
| 		if err != nil {
 | |
| 			log.Println(string(b), err)
 | |
| 			return err
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |