mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package nodes
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
						|
	"io/ioutil"
 | 
						|
	"net/http"
 | 
						|
)
 | 
						|
 | 
						|
// 执行认证
 | 
						|
func (this *HTTPRequest) doAuth() (shouldStop bool) {
 | 
						|
	if this.web.Auth == nil || !this.web.Auth.IsOn {
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	for _, ref := range this.web.Auth.PolicyRefs {
 | 
						|
		if !ref.IsOn || ref.AuthPolicy == nil || !ref.AuthPolicy.IsOn {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		b, err := ref.AuthPolicy.Filter(this.RawReq, func(subReq *http.Request) (status int, err error) {
 | 
						|
			subReq.TLS = this.RawReq.TLS
 | 
						|
			subReq.RemoteAddr = this.RawReq.RemoteAddr
 | 
						|
			subReq.Host = this.RawReq.Host
 | 
						|
			subReq.Proto = this.RawReq.Proto
 | 
						|
			subReq.ProtoMinor = this.RawReq.ProtoMinor
 | 
						|
			subReq.ProtoMajor = this.RawReq.ProtoMajor
 | 
						|
			subReq.Body = ioutil.NopCloser(bytes.NewReader([]byte{}))
 | 
						|
			subReq.Header.Set("Referer", this.requestFullURL())
 | 
						|
			var writer = NewEmptyResponseWriter(this.writer)
 | 
						|
			this.doSubRequest(writer, subReq)
 | 
						|
			return writer.StatusCode(), nil
 | 
						|
		}, this.Format)
 | 
						|
		if err != nil {
 | 
						|
			this.write50x(err, http.StatusInternalServerError)
 | 
						|
			return
 | 
						|
		}
 | 
						|
		if b {
 | 
						|
			return
 | 
						|
		} else {
 | 
						|
			if ref.AuthPolicy.Type == serverconfigs.HTTPAuthTypeBasicAuth {
 | 
						|
				var method = ref.AuthPolicy.Method().(*serverconfigs.HTTPAuthBasicMethod)
 | 
						|
				var headerValue = "Basic realm=\""
 | 
						|
				if len(method.Realm) > 0 {
 | 
						|
					headerValue += method.Realm
 | 
						|
				} else {
 | 
						|
					headerValue += this.Host
 | 
						|
				}
 | 
						|
				headerValue += "\""
 | 
						|
				if len(method.Charset) > 0 {
 | 
						|
					headerValue += ", charset=\"" + method.Charset + "\""
 | 
						|
				}
 | 
						|
				this.writer.Header()["WWW-Authenticate"] = []string{headerValue}
 | 
						|
			}
 | 
						|
			this.writer.WriteHeader(http.StatusUnauthorized)
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return
 | 
						|
}
 |