Merge branch 'master' into kd-live

This commit is contained in:
2023-06-23 17:58:56 +09:00
3 changed files with 57 additions and 53 deletions

View File

@ -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)

View File

@ -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")

View File

@ -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
} }