Merge branch 'master' into kd-live
This commit is contained in:
39
core/api.go
39
core/api.go
@ -75,7 +75,7 @@ func (fd *fileDocumentDesc) save() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (caller apiCaller) isAdmin() bool {
|
func (caller apiCaller) isAdmin() bool {
|
||||||
if *noauth {
|
if *devflag {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,14 +363,17 @@ var errApiTokenMissing = errors.New("mg-x-api-token is missing")
|
|||||||
|
|
||||||
func (caller apiCaller) configAPI(w http.ResponseWriter, r *http.Request) error {
|
func (caller apiCaller) configAPI(w http.ResponseWriter, r *http.Request) error {
|
||||||
mg := caller.mg
|
mg := caller.mg
|
||||||
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
|
||||||
if len(apitoken) == 0 {
|
|
||||||
return errApiTokenMissing
|
|
||||||
}
|
|
||||||
|
|
||||||
apitokenObj, _ := primitive.ObjectIDFromHex(apitoken)
|
if !*devflag {
|
||||||
if !mg.service().isValidToken(apitokenObj) {
|
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
||||||
return fmt.Errorf("mg-x-api-token is not valid : %s", apitoken)
|
if len(apitoken) == 0 {
|
||||||
|
return errApiTokenMissing
|
||||||
|
}
|
||||||
|
|
||||||
|
apitokenObj, _ := primitive.ObjectIDFromHex(apitoken)
|
||||||
|
if !mg.service().isValidToken(apitokenObj) {
|
||||||
|
return fmt.Errorf("mg-x-api-token is not valid : %s", apitoken)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -398,7 +401,7 @@ func (mg *Maingate) api(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
var userinfo map[string]any
|
var userinfo map[string]any
|
||||||
|
|
||||||
if !*noauth {
|
if !*devflag {
|
||||||
authheader := r.Header.Get("Authorization")
|
authheader := r.Header.Get("Authorization")
|
||||||
if len(authheader) == 0 {
|
if len(authheader) == 0 {
|
||||||
logger.Println("Authorization header is not valid :", authheader)
|
logger.Println("Authorization header is not valid :", authheader)
|
||||||
@ -441,16 +444,18 @@ func (mg *Maingate) api(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
apiToken := r.Header.Get("MG-X-API-TOKEN")
|
|
||||||
var apiTokenObj primitive.ObjectID
|
var apiTokenObj primitive.ObjectID
|
||||||
if len(apiToken) > 0 {
|
if !*devflag {
|
||||||
obj, err := primitive.ObjectIDFromHex(apiToken)
|
apiToken := r.Header.Get("MG-X-API-TOKEN")
|
||||||
if err != nil {
|
if len(apiToken) > 0 {
|
||||||
logger.Error(err)
|
obj, err := primitive.ObjectIDFromHex(apiToken)
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
if err != nil {
|
||||||
return
|
logger.Error(err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
apiTokenObj = obj
|
||||||
}
|
}
|
||||||
apiTokenObj = obj
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Println("api call :", r.URL.Path, r.Method, r.URL.Query(), userinfo)
|
logger.Println("api call :", r.URL.Path, r.Method, r.URL.Query(), userinfo)
|
||||||
|
|||||||
@ -433,40 +433,7 @@ func whitelistKey(email string) string {
|
|||||||
|
|
||||||
func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux, prefix string) error {
|
func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux, prefix string) error {
|
||||||
var allServices []*serviceDescription
|
var allServices []*serviceDescription
|
||||||
|
if err := mg.mongoClient.AllAs(CollectionService, &allServices, options.Find().SetReturnKey(false)); err != nil {
|
||||||
if *noauth {
|
|
||||||
host, _ := os.Hostname()
|
|
||||||
addrs, err := net.InterfaceAddrs()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
ipaddr := "127.0.0.1"
|
|
||||||
for _, addr := range addrs {
|
|
||||||
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
|
||||||
if ipnet.IP.To4() != nil && ipnet.IP.IsPrivate() {
|
|
||||||
ipaddr = ipnet.IP.String()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
empty := serviceDescription{
|
|
||||||
ServiceDescriptionSummary: ServiceDescriptionSummary{
|
|
||||||
ServiceCode: "000000000000",
|
|
||||||
},
|
|
||||||
Divisions: map[string]*Division{
|
|
||||||
host: {
|
|
||||||
DivisionForUser: DivisionForUser{
|
|
||||||
Priority: 0,
|
|
||||||
State: DivisionState_FullOpen,
|
|
||||||
},
|
|
||||||
|
|
||||||
Url: fmt.Sprintf("http://%s/warehouse", ipaddr),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
empty.prepare(mg)
|
|
||||||
allServices = append(allServices, &empty)
|
|
||||||
} else if err := mg.mongoClient.AllAs(CollectionService, &allServices, options.Find().SetReturnKey(false)); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,6 +448,34 @@ func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMu
|
|||||||
Id: primitive.NewObjectID(),
|
Id: primitive.NewObjectID(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if *devflag {
|
||||||
|
host, _ := os.Hostname()
|
||||||
|
addrs, err := net.InterfaceAddrs()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ipaddr := "127.0.0.1"
|
||||||
|
for _, addr := range addrs {
|
||||||
|
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||||
|
if ipnet.IP.To4() != nil && ipnet.IP.IsPrivate() {
|
||||||
|
ipaddr = ipnet.IP.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
empty.Divisions = map[string]*Division{
|
||||||
|
host: {
|
||||||
|
DivisionForUser: DivisionForUser{
|
||||||
|
Priority: 0,
|
||||||
|
State: DivisionState_FullOpen,
|
||||||
|
},
|
||||||
|
|
||||||
|
Url: fmt.Sprintf("http://%s/warehouse", ipaddr),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
empty.prepare(mg)
|
empty.prepare(mg)
|
||||||
atomic.StorePointer(&mg.serviceptr, unsafe.Pointer(&empty))
|
atomic.StorePointer(&mg.serviceptr, unsafe.Pointer(&empty))
|
||||||
|
|
||||||
@ -513,7 +508,7 @@ func (mg *Maingate) RegisterHandlers(ctx context.Context, serveMux *http.ServeMu
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if !*noauth {
|
if !*devflag {
|
||||||
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
||||||
if len(apitoken) == 0 {
|
if len(apitoken) == 0 {
|
||||||
logger.Println("MG-X-API-TOKEN is missing")
|
logger.Println("MG-X-API-TOKEN is missing")
|
||||||
@ -600,7 +595,7 @@ func (mg *Maingate) query(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !*noauth {
|
if !*devflag {
|
||||||
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
apitoken := r.Header.Get("MG-X-API-TOKEN")
|
||||||
if len(apitoken) == 0 {
|
if len(apitoken) == 0 {
|
||||||
logger.Println("MG-X-API-TOKEN is missing")
|
logger.Println("MG-X-API-TOKEN is missing")
|
||||||
|
|||||||
@ -156,6 +156,10 @@ type serviceDescription struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (sh *serviceDescription) isValidToken(apiToken primitive.ObjectID) bool {
|
func (sh *serviceDescription) isValidToken(apiToken primitive.ObjectID) bool {
|
||||||
|
if *devflag {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
if apiToken.IsZero() {
|
if apiToken.IsZero() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user