code refactor

This commit is contained in:
MaysWind
2023-06-18 16:30:19 +08:00
parent 812bfc7cf5
commit 5f2819a961
8 changed files with 77 additions and 48 deletions
+8 -3
View File
@@ -147,7 +147,7 @@ func startWebServer(c *cli.Context) error {
{ {
if config.EnableMapDataFetchProxy { if config.EnableMapDataFetchProxy {
if config.MapProvider == settings.OpenStreetMapProvider { if config.MapProvider == settings.OpenStreetMapProvider {
proxyRoute.GET("/openstreetmap/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.OpenStreetMapTileImageProxyHandler)) proxyRoute.GET("/map/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.MapTileImageProxyHandler))
} }
} }
} }
@@ -332,7 +332,12 @@ func bindCsv(fn core.DataHandlerFunc) gin.HandlerFunc {
func bindProxy(fn core.ProxyHandlerFunc) gin.HandlerFunc { func bindProxy(fn core.ProxyHandlerFunc) gin.HandlerFunc {
return func(ginCtx *gin.Context) { return func(ginCtx *gin.Context) {
c := core.WrapContext(ginCtx) c := core.WrapContext(ginCtx)
proxy := fn(c) proxy, err := fn(c)
proxy.ServeHTTP(c.Writer, c.Request)
if err != nil {
utils.PrintDataErrorResult(c, "text/text", err)
} else {
proxy.ServeHTTP(c.Writer, c.Request)
}
} }
} }
+3 -2
View File
@@ -8,6 +8,7 @@ import (
"strings" "strings"
"github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/settings" "github.com/mayswind/ezbookkeeping/pkg/settings"
) )
@@ -25,7 +26,7 @@ var (
) )
// AmapApiProxyHandler returns amap api response // AmapApiProxyHandler returns amap api response
func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) *httputil.ReverseProxy { func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) (*httputil.ReverseProxy, *errs.Error) {
var targetUrl string var targetUrl string
if strings.HasPrefix(c.Request.RequestURI, "/_AMapService/v4/map/styles") { if strings.HasPrefix(c.Request.RequestURI, "/_AMapService/v4/map/styles") {
@@ -56,5 +57,5 @@ func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) *httputil.ReversePro
req.Host = targetUrl.Host req.Host = targetUrl.Host
} }
return &httputil.ReverseProxy{Director: director} return &httputil.ReverseProxy{Director: director}, nil
} }
+15 -4
View File
@@ -7,6 +7,8 @@ import (
"net/url" "net/url"
"github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/settings"
) )
const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/%s/%s/%s" // https://tile.openstreetmap.org/{z}/{x}/{y}.png const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/%s/%s/%s" // https://tile.openstreetmap.org/{z}/{x}/{y}.png
@@ -20,14 +22,23 @@ var (
MapImages = &MapImageProxy{} MapImages = &MapImageProxy{}
) )
// OpenStreetMapTileImageProxyHandler returns open street map tile image // MapTileImageProxyHandler returns map tile image
func (p *MapImageProxy) OpenStreetMapTileImageProxyHandler(c *core.Context) *httputil.ReverseProxy { func (p *MapImageProxy) MapTileImageProxyHandler(c *core.Context) (*httputil.ReverseProxy, *errs.Error) {
mapProvider := c.Query("provider")
targetUrl := ""
if mapProvider == settings.OpenStreetMapProvider {
targetUrl = openStreetMapTileImageUrlFormat
} else {
return nil, errs.ErrParameterInvalid
}
director := func(req *http.Request) { director := func(req *http.Request) {
zoomLevel := c.Param("zoomLevel") zoomLevel := c.Param("zoomLevel")
coordinateX := c.Param("coordinateX") coordinateX := c.Param("coordinateX")
fileName := c.Param("fileName") fileName := c.Param("fileName")
imageRawUrl := fmt.Sprintf(openStreetMapTileImageUrlFormat, zoomLevel, coordinateX, fileName) imageRawUrl := fmt.Sprintf(targetUrl, zoomLevel, coordinateX, fileName)
imageUrl, _ := url.Parse(imageRawUrl) imageUrl, _ := url.Parse(imageRawUrl)
req.URL = imageUrl req.URL = imageUrl
@@ -35,5 +46,5 @@ func (p *MapImageProxy) OpenStreetMapTileImageProxyHandler(c *core.Context) *htt
req.Host = imageUrl.Host req.Host = imageUrl.Host
} }
return &httputil.ReverseProxy{Director: director} return &httputil.ReverseProxy{Director: director}, nil
} }
+1 -1
View File
@@ -16,4 +16,4 @@ type ApiHandlerFunc func(*Context) (interface{}, *errs.Error)
type DataHandlerFunc func(*Context) ([]byte, string, *errs.Error) type DataHandlerFunc func(*Context) ([]byte, string, *errs.Error)
// ProxyHandlerFunc represents the reverse proxy handler function // ProxyHandlerFunc represents the reverse proxy handler function
type ProxyHandlerFunc func(*Context) *httputil.ReverseProxy type ProxyHandlerFunc func(*Context) (*httputil.ReverseProxy, *errs.Error)
+11
View File
@@ -0,0 +1,11 @@
const leafletTileSources = {
'openstreetmap': {
tileUrlFormat: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
tileUrlSubDomains: 'abc',
attribution : '&copy; <a href="http://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a>'
}
}
export default {
leafletTileSources: leafletTileSources
}
+13 -12
View File
@@ -1,4 +1,5 @@
import settings from "@/lib/settings.js"; import mapConstants from '@/consts/map.js';
import settings from '@/lib/settings.js';
import { import {
loadLeafletMapAssets, loadLeafletMapAssets,
@@ -7,7 +8,7 @@ import {
setLeafletMapCenterTo, setLeafletMapCenterTo,
setLeafletMapCenterMaker, setLeafletMapCenterMaker,
removeLeafletMapCenterMaker removeLeafletMapCenterMaker
} from './openstreetmap.js'; } from './leaflet.js';
import { import {
loadGoogleMapAssets, loadGoogleMapAssets,
@@ -37,7 +38,7 @@ import {
} from './amap.js'; } from './amap.js';
export function loadMapAssets(language) { export function loadMapAssets(language) {
if (settings.getMapProvider() === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
return loadLeafletMapAssets(language); return loadLeafletMapAssets(language);
} else if (settings.getMapProvider() === 'googlemap') { } else if (settings.getMapProvider() === 'googlemap') {
return loadGoogleMapAssets(language); return loadGoogleMapAssets(language);
@@ -49,14 +50,14 @@ export function loadMapAssets(language) {
} }
export function createMapHolder() { export function createMapHolder() {
if (settings.getMapProvider() === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
return createLeafletMapHolder(); return createLeafletMapHolder(settings.getMapProvider());
} else if (settings.getMapProvider() === 'googlemap') { } else if (settings.getMapProvider() === 'googlemap') {
return createGoogleMapHolder(); return createGoogleMapHolder(settings.getMapProvider());
} else if (settings.getMapProvider() === 'baidumap') { } else if (settings.getMapProvider() === 'baidumap') {
return createBaiduMapHolder(); return createBaiduMapHolder(settings.getMapProvider());
} else if (settings.getMapProvider() === 'amap') { } else if (settings.getMapProvider() === 'amap') {
return createAmapHolder(); return createAmapHolder(settings.getMapProvider());
} else { } else {
return null; return null;
} }
@@ -67,7 +68,7 @@ export function initMapInstance(mapHolder, mapContainer, options) {
return; return;
} }
if (mapHolder.mapProvider === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
createLeafletMapInstance(mapHolder, mapContainer, options); createLeafletMapInstance(mapHolder, mapContainer, options);
} else if (mapHolder.mapProvider === 'googlemap') { } else if (mapHolder.mapProvider === 'googlemap') {
createGoogleMapInstance(mapHolder, mapContainer, options); createGoogleMapInstance(mapHolder, mapContainer, options);
@@ -83,7 +84,7 @@ export function setMapCenterTo(mapHolder, center, zoomLevel) {
return; return;
} }
if (mapHolder.mapProvider === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
setLeafletMapCenterTo(mapHolder, center, zoomLevel); setLeafletMapCenterTo(mapHolder, center, zoomLevel);
} else if (mapHolder.mapProvider === 'googlemap') { } else if (mapHolder.mapProvider === 'googlemap') {
setGoogleMapCenterTo(mapHolder, center, zoomLevel); setGoogleMapCenterTo(mapHolder, center, zoomLevel);
@@ -99,7 +100,7 @@ export function setMapCenterMarker(mapHolder, position) {
return; return;
} }
if (mapHolder.mapProvider === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
setLeafletMapCenterMaker(mapHolder, position); setLeafletMapCenterMaker(mapHolder, position);
} else if (mapHolder.mapProvider === 'googlemap') { } else if (mapHolder.mapProvider === 'googlemap') {
setGoogleMapCenterMaker(mapHolder, position); setGoogleMapCenterMaker(mapHolder, position);
@@ -115,7 +116,7 @@ export function removeMapCenterMarker(mapHolder) {
return; return;
} }
if (mapHolder.mapProvider === 'openstreetmap') { if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
removeLeafletMapCenterMaker(mapHolder); removeLeafletMapCenterMaker(mapHolder);
} else if (mapHolder.mapProvider === 'googlemap') { } else if (mapHolder.mapProvider === 'googlemap') {
removeGoogleMapCenterMaker(mapHolder); removeGoogleMapCenterMaker(mapHolder);
@@ -1,4 +1,6 @@
import services from "@/lib/services.js"; import mapConstants from '@/consts/map.js';
import settings from '@/lib/settings.js';
import services from '@/lib/services.js';
const leafletHolder = { const leafletHolder = {
leaflet: null leaflet: null
@@ -11,9 +13,9 @@ export function loadLeafletMapAssets() {
]); ]);
} }
export function createLeafletMapHolder() { export function createLeafletMapHolder(mapProvider) {
return { return {
mapProvider: 'openstreetmap', mapProvider: mapProvider,
dependencyLoaded: !!leafletHolder.leaflet, dependencyLoaded: !!leafletHolder.leaflet,
inited: false, inited: false,
defaultZoomLevel: 14, defaultZoomLevel: 14,
@@ -38,11 +40,18 @@ export function createLeafletMapInstance(mapHolder, mapContainer, options) {
attributionControl: false, attributionControl: false,
zoomControl: false zoomControl: false
}); });
let mapTileSource = mapConstants.leafletTileSources[mapHolder.mapProvider];
const mapTileImageUrl = services.generateOpenStreetMapTileImageUrl(); if (settings.isMapDataFetchProxyEnabled()) {
const mapProxyTileImageUrl = services.generateMapProxyTileImageUrl(mapHolder.mapProvider);
mapTileSource = Object.assign({}, mapTileSource, {
tileUrlFormat: mapProxyTileImageUrl,
tileUrlSubDomains: ''
});
}
const tileLayer = leaflet.tileLayer(mapTileImageUrl.url, { const tileLayer = leaflet.tileLayer(mapTileSource.tileUrlFormat, {
subdomains: mapTileImageUrl.subDomains, subdomains: mapTileSource.tileUrlSubDomains,
maxZoom: 19 maxZoom: 19
}); });
tileLayer.addTo(leafletInstance); tileLayer.addTo(leafletInstance);
@@ -53,16 +62,18 @@ export function createLeafletMapInstance(mapHolder, mapContainer, options) {
}); });
zoomControl.addTo(leafletInstance); zoomControl.addTo(leafletInstance);
const attribution = leaflet.control.attribution({ if (mapTileSource.attribution) {
prefix: false const attribution = leaflet.control.attribution({
}); prefix: false
attribution.addAttribution('&copy; <a href="http://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a>'); });
attribution.addTo(leafletInstance); attribution.addAttribution(mapTileSource.attribution);
attribution.addTo(leafletInstance);
mapHolder.leafletAttribution = attribution;
}
mapHolder.leafletInstance = leafletInstance; mapHolder.leafletInstance = leafletInstance;
mapHolder.leafletTileLayer = tileLayer; mapHolder.leafletTileLayer = tileLayer;
mapHolder.leafletZoomControl = zoomControl; mapHolder.leafletZoomControl = zoomControl;
mapHolder.leafletAttribution = attribution;
mapHolder.inited = true; mapHolder.inited = true;
} }
+3 -14
View File
@@ -396,20 +396,9 @@ export default {
ignoreError: !!ignoreError ignoreError: !!ignoreError
}); });
}, },
generateOpenStreetMapTileImageUrl: () => { generateMapProxyTileImageUrl: (mapProvider) => {
if (settings.isMapDataFetchProxyEnabled()) { const token = userState.getToken();
const token = userState.getToken(); return `${api.baseProxyUrlPath}/map/tile/{z}/{x}/{y}.png?provider=${mapProvider}&token=${token}`;
return {
url: api.baseProxyUrlPath + '/openstreetmap/tile/{z}/{x}/{y}.png?token=' + token,
subDomains: ''
};
} else {
return {
url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
subDomains: 'abc'
};
}
}, },
generateGoogleMapJavascriptUrl: (language, callbackFnName) => { generateGoogleMapJavascriptUrl: (language, callbackFnName) => {
if (language) { if (language) {