// WithIsCountryAllowedByIP a more advanced function. It expects from the context // the store.ManagerReader ... func (s *Service) WithIsCountryAllowedByIP() ctxhttp.Middleware { return func(h ctxhttp.Handler) ctxhttp.Handler { return ctxhttp.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) error { _, requestedStore, err := store.FromContextReader(ctx) if err != nil { if PkgLog.IsDebug() { PkgLog.Debug("geoip.WithCountryByIP.FromContextManagerReader", "err", err) } return errgo.Mask(err) } var ipCountry *IPCountry ctx, ipCountry, err = s.newContextCountryByIP(ctx, r) if err != nil { ctx = NewContextWithError(ctx, err) return h.ServeHTTPContext(ctx, w, r) } allowedCountries, err := directory.AllowedCountries(requestedStore.Config) if err != nil { if PkgLog.IsDebug() { PkgLog.Debug("geoip.WithCountryByIP.directory.AllowedCountries", "err", err, "st.Config", requestedStore.Config) } return errgo.Mask(err) } if false == s.IsAllowed(requestedStore, ipCountry, allowedCountries, r) { h = s.altHandlerByID(requestedStore) } return h.ServeHTTPContext(ctx, w, r) }) } }
func TestAllowedCountriesDefault(t *testing.T) { cr := config.NewMockReader( config.WithMockValues(config.MockPV{}), ) haveCountries, err := directory.AllowedCountries(cr.NewScoped(1, 1, 1)) assert.NoError(t, err) assert.True(t, len(haveCountries) > 100) }
func TestAllowedCountriesFound(t *testing.T) { cr := config.NewMockReader( config.WithMockValues(config.MockPV{ config.MockPathScopeStore(1, directory.PathCountryAllowed): "DE,AU,CH,AT", }), ) haveCountries, err := directory.AllowedCountries(cr.NewScoped(1, 1, 1)) assert.NoError(t, err) assert.Exactly(t, utils.StringSlice{"DE", "AU", "CH", "AT"}, haveCountries) }