|
| 1 | +import mapboxgl from 'mapbox-gl'; |
| 2 | +import mbglmap from '../../tool/mock_mapboxgl_map'; |
| 3 | +import { FetchRequest } from '../../../src/common/util/FetchRequest'; |
| 4 | +import cipher from 'node-forge/lib/cipher'; |
| 5 | +import { MapExtend } from '../../../src/mapboxgl/core/MapExtend'; |
| 6 | +import { decryptSources } from '../../../src/mapboxgl/core/decryptSource'; |
| 7 | + |
| 8 | +describe('getServiceKey', () => { |
| 9 | + let originalTimeout; |
| 10 | + const url = 'http:/fake:8090/iserver/iserver/services/map-China107/rest/maps/A'; |
| 11 | + MapExtend; |
| 12 | + beforeEach(() => { |
| 13 | + spyOn(mapboxgl, 'Map').and.callFake(mbglmap); |
| 14 | + window.atob = () => |
| 15 | + `ú\x86\x00ë\x14ø\n0Ø\x9C¶¬\x1D\x16ü\x99\x19rì;c\x8A\x8F\x83» þH©ü*TÂ.ÒxæêÏKëÔ|^¯à\x14*h\x96à\x80\x1E|\x8E¢\x8F)ÔÐ÷Á-/ì@iCð×F7û\x8B\x01k\x13\x18\x9BA\x88\x923]bSáÒLºÎ\v[váÐÁÆZi\x87\x1DþV\x91o\x97\x02~rÃñ¾\x051¥¬\x1CL\x01úºüê\x95\x0EEs¸/\\{6\x9A\x9DwRËÂ{¨~6T\x91\x19\x12\x1C_\x9Bb÷vhB\f{\x03éØ\x19w-Âϳ/\x1B»²C²\x1F\x97¢\x99\x88C\x8DÁCÂ8ð\x96t)ZùÞÓ\x03¨f\x1E´*\x97\x8Fµ±´í\x8B\x9ChíMlÅ\x06\x9Biþ\x03k¢\x83\x9A\x95\x8Fé\x03ùÓ¶N\x02qR?CÙê·Æ\x89\x854 ÞÐÒræéø¢]\x81ú®Ã0\x89ßMòPkå²E\x8DF\x1C¶æ\x84Bj¦\x99'[CÁ\x14ýaP\x1AÛu ×úHÃ:.\x1Eû\x0Eå\x0Féê\x91\x82ÓKÞ6T\x92é6©\x91v¨\f\x1A\x85·\x02¾\x87͵V[ç\x14DÑ8\x1Bm\x82ö\x1BBÿ\x87þí¬§f´¶\x9Fé\x1Ds¼:µt@\x15Í\x96bÛ"ý\x16~H0¥#l®\x02b`; |
| 16 | + cipher.createDecipher = () => ({ |
| 17 | + start: () => {}, |
| 18 | + update: () => {}, |
| 19 | + finish: () => true, |
| 20 | + output: { |
| 21 | + data: `{"headers":{"X-Frame-Options":"SAMEORIGIN","Access-Control-Expose-Headers":"Access-Control-Allow-Origin,Access-Control-Allow-Credentials","Access-Control-Allow-Origin":"*","Set-Cookie":"rememberMe=deleteMe; Path=/iserver; Max-Age=0; Expires=Tue, 19-Mar-2024 01:43:12 GMT; SameSite=lax"},"data":"P8h08GonNjuCB4+CAykAGmLYwNsiv4G6H8KFrFi7Afk=","status":200}` |
| 22 | + } |
| 23 | + }); |
| 24 | + spyOn(FetchRequest, 'get').and.callFake((url) => { |
| 25 | + if (url.includes('map-China107')) { |
| 26 | + return Promise.resolve( |
| 27 | + new Response( |
| 28 | + JSON.stringify([ |
| 29 | + { |
| 30 | + componentType: 'com.supermap.services.components.impl.MapImpl', |
| 31 | + interfaceType: 'com.supermap.services.rest.RestServlet', |
| 32 | + additions: [ |
| 33 | + 'China', |
| 34 | + 'China_4326', |
| 35 | + 'ChinaDark', |
| 36 | + 'China_4490', |
| 37 | + 'China_4610', |
| 38 | + 'China_4214', |
| 39 | + 'China1', |
| 40 | + 'China_Capital_pt@China', |
| 41 | + 'A' |
| 42 | + ], |
| 43 | + name: 'map-China107/rest', |
| 44 | + alias: 'map-China107', |
| 45 | + serviceEncryptInfo: { |
| 46 | + encrptSpec: { |
| 47 | + keyLength: 256, |
| 48 | + attributes: 'abcd', |
| 49 | + version: '1.1', |
| 50 | + algorithm: 'AES' |
| 51 | + }, |
| 52 | + updateTime: 'Tue Mar 19 09:34:18 CST 2024', |
| 53 | + encrptKeyID: 'keyIDNAME' |
| 54 | + }, |
| 55 | + url: 'http://fake:8090/iserver/services/map-China107/rest', |
| 56 | + status: 'OK' |
| 57 | + }, |
| 58 | + { |
| 59 | + componentType: 'com.supermap.services.components.impl.MapImpl', |
| 60 | + interfaceType: 'com.supermap.services.rest.JaxrsServletForJersey', |
| 61 | + additions: [ |
| 62 | + 'China', |
| 63 | + 'China_4326', |
| 64 | + 'ChinaDark', |
| 65 | + 'China_4490', |
| 66 | + 'China_4610', |
| 67 | + 'China_4214', |
| 68 | + 'China1', |
| 69 | + 'China_Capital_pt@China', |
| 70 | + 'A' |
| 71 | + ], |
| 72 | + name: 'map-China107/restjsr', |
| 73 | + alias: 'map-China107', |
| 74 | + serviceEncryptInfo: { |
| 75 | + encrptSpec: { |
| 76 | + keyLength: 256, |
| 77 | + attributes: 'abcd', |
| 78 | + version: '1.1', |
| 79 | + algorithm: 'AES' |
| 80 | + }, |
| 81 | + updateTime: 'Tue Mar 19 09:34:18 CST 2024', |
| 82 | + encrptKeyID: 'keyIDNAME' |
| 83 | + }, |
| 84 | + url: 'http://fake:8090/iserver/services/map-China107/restjsr', |
| 85 | + status: 'OK' |
| 86 | + } |
| 87 | + ]) |
| 88 | + ) |
| 89 | + ); |
| 90 | + } |
| 91 | + if (url.includes('publickey')) { |
| 92 | + return Promise.resolve( |
| 93 | + new Response( |
| 94 | + JSON.stringify({ |
| 95 | + keyLength: 2048, |
| 96 | + publicKey: |
| 97 | + 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnYZxbL+oTbMDGQsFtVR674Zm/v04PhupLBrnm+BRja0bKV0zEsIWNUJ+fcOHBimCBPlU1ykZa2zibKRy+NOsfAIXUjd33Q8dPOOoF3m2ydbDxL7v6PB+f38jyXmvLd8EgyiMFuYUBvbnrHDPuodjWWUqNqdaBFl4wqp2fKTjsmsHevDwsf3plnCOu7mfsTemzCqlnD6W2uGbS71VI91VmYfIQMbExixAXjQ6CT35sV4b3CHmxhq+BrKnsiVpxvNrLkWrcli0DQDz1Opv7NdiGtw+bHNN2kxcQym/uDP3ClXDPmCYzsvB+GIW5GM78b7nsZjYy8VHjtyVdAkQwY27jQIDAQAB', |
| 98 | + keyScheme: 'PKCS#8' |
| 99 | + }) |
| 100 | + ) |
| 101 | + ); |
| 102 | + } |
| 103 | + if (url.includes('vectorstyles')) { |
| 104 | + return Promise.resolve(new Response(JSON.stringify({}))); |
| 105 | + } |
| 106 | + }); |
| 107 | + spyOn(FetchRequest, 'post').and.callFake((url) => { |
| 108 | + if ( |
| 109 | + url.includes( |
| 110 | + 'tunnels/RmcvL1VHcVcyZU1ldXk5bW5rbGFTdkI4b1owWnRUVGg5K0E5aGo3MUQrTWRDbWdnMzhwSWlGSjRydFJoV0s4YjJlSjJZWHBoUnRRRnNMVDlLc3hmdXZDOFRqUnYzMUJtcXVqa0VTRE05Ukx2QjZLVTh2VGZUVzRndlM4Rmw4b1BsNTVNUVYzL215WXJIbkE4MC9GZzcrZnhrRUY2YUpsMmI1azBtQmljREZMUnREUkljdVBuWGFhK01jWmtUZDFUZjUxUnkwSlNsUFRuR1ZoWGV3VmZnOFI2bnM5K01yWWtPZm1kVnJManUxVmh5NUlIRmEyZXNUbzRHVDVKR3I2ZHpkOWVwRXFGdFdaMmxMMFM2YmhjNEorZHlvZXVQMmg3VGlCOGVYV1FJanE4bVYvcTNTRE5JRjRqR2RkSkJ6MENRSmVqcXpTbVdidnRxNm5jdDlmeDZBPT0=' |
| 111 | + ) |
| 112 | + ) { |
| 113 | + return Promise.resolve( |
| 114 | + new Response( |
| 115 | + '4xwVfv35tWo01yLmIV8Yf5t+lJUl8kERVP9aOH+x/1iynjFKx6cpbxCPPCTvUK5RlX3xjFGMMz+hBTOt7Ke911tE8wlUkClWMNuDbJGdxuinM2BF9MyBd6U7NNiwSWvfk3tRdY8+sGlquYyXRRc1HTkKUSoaJNhqgx9xZMi740AxArOINgOqBnl1tS2i5R2MyjyJcrYDUfjb8wZL5LLU/y/jysUCBtiNrrdlY3hV1BgtWUSgHPdTSxXA595CbdK3Nx0DhGIhNCQWby9QJUDhTHAqsdcWYyTAozMf/J8Q8vmwf2pHEMbvWyq0Etstg6IJeUqcdPG2XNcmNX3/xpsgjseg1/AJhvMnv1morsXNsN+hDYg8NJgCyZ6fnTL2EC5y3ivhNgzccFIgPcaZRtAveOx3iiU8SAy9hP3tkR5toqeZsU//8awh4RZgFDDM+QKX7ipUVO+YihkIYmNlXwMMpsSg2SMKfeqUV/3D8CvxQZPlTA==' |
| 116 | + ) |
| 117 | + ); |
| 118 | + } |
| 119 | + if (url.includes('tunnels')) { |
| 120 | + return Promise.resolve( |
| 121 | + new Response( |
| 122 | + JSON.stringify({ |
| 123 | + blockedUrlRegex: { |
| 124 | + DELETE: [], |
| 125 | + POST: [ |
| 126 | + '.*/_setup/v2/querylicense.?(json|rjson)', |
| 127 | + '.*/services/security/login.?(json|rjson)', |
| 128 | + '.*/services/security/tokens.?(json|rjson)', |
| 129 | + '.*/manager/serviceSynchronizingJobs.?(json|rjson)', |
| 130 | + '.*/services/geoprocessing/restjsr/gpmodeler/runmodel', |
| 131 | + '.*/services/geoprocessing/restjsr/gpmodeler/modelui' |
| 132 | + ], |
| 133 | + GET: [ |
| 134 | + '.*/_setup/v2.?(json|rjson)', |
| 135 | + '.*/_setup/v2/currentlicense.?(json|rjson)', |
| 136 | + '.*/_setup.?(json|rjson)', |
| 137 | + '.*/_setup/currentuserlicenseinfo.?(json|rjson)', |
| 138 | + '.*/services/geoprocessing/restjsr/gpmodeler/list/.*/property', |
| 139 | + '.*/services/security/svckeys/[a-zA-Z]+\\.json' |
| 140 | + ], |
| 141 | + PUT: [ |
| 142 | + '.*/_setup/v2.?(json|rjson)', |
| 143 | + '.*/_setup/v2/querylicense.?(json|rjson)', |
| 144 | + '.*/_setup/v2/activelicense.?(json|rjson)', |
| 145 | + '.*/_setup.?(json|rjson)', |
| 146 | + '.*/_setup/cloudlicenselogin.?(json|rjson)', |
| 147 | + '.*/_setup/weblicense.?(json|rjson)', |
| 148 | + '.*/_setup/edulicense.?(json|rjson)', |
| 149 | + '.*/_setup/activecloudlicense.?(json|rjson)', |
| 150 | + '.*/_setup/activeWebLicense.?(json|rjson)', |
| 151 | + '.*/_setup/activeEduLicense.?(json|rjson)', |
| 152 | + '.*/services/security/profile.?(json|rjson)', |
| 153 | + '.*/manager/servicestorage.?(json|rjson)', |
| 154 | + '.*/services/geoprocessing/restjsr/gpmodeler/list/.*/property' |
| 155 | + ] |
| 156 | + }, |
| 157 | + tunnelUrl: |
| 158 | + 'http://fake:8090/iserver/services/security/tunnel/v1/tunnels/RmcvL1VHcVcyZU1ldXk5bW5rbGFTdkI4b1owWnRUVGg5K0E5aGo3MUQrTWRDbWdnMzhwSWlGSjRydFJoV0s4YjJlSjJZWHBoUnRRRnNMVDlLc3hmdXZDOFRqUnYzMUJtcXVqa0VTRE05Ukx2QjZLVTh2VGZUVzRndlM4Rmw4b1BsNTVNUVYzL215WXJIbkE4MC9GZzcrZnhrRUY2YUpsMmI1azBtQmljREZMUnREUkljdVBuWGFhK01jWmtUZDFUZjUxUnkwSlNsUFRuR1ZoWGV3VmZnOFI2bnM5K01yWWtPZm1kVnJManUxVmh5NUlIRmEyZXNUbzRHVDVKR3I2ZHpkOWVwRXFGdFdaMmxMMFM2YmhjNEorZHlvZXVQMmg3VGlCOGVYV1FJanE4bVYvcTNTRE5JRjRqR2RkSkJ6MENRSmVqcXpTbVdidnRxNm5jdDlmeDZBPT0=' |
| 159 | + }) |
| 160 | + ) |
| 161 | + ); |
| 162 | + } |
| 163 | + }); |
| 164 | + originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; |
| 165 | + jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000; |
| 166 | + }); |
| 167 | + |
| 168 | + afterEach(() => { |
| 169 | + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; |
| 170 | + }); |
| 171 | + |
| 172 | + it('getServiceKey', async () => { |
| 173 | + try { |
| 174 | + const source = { |
| 175 | + tiles: [ |
| 176 | + 'http://172.16.13.234:8090/iserver/services/map-China107/rest/maps/A/tileFeature.mvt?returnAttributes=true&width=512&height=512&z={z}&x={x}&y={y}' |
| 177 | + ], |
| 178 | + bounds: [-180, -90, 180, 90], |
| 179 | + type: 'vector' |
| 180 | + }; |
| 181 | + const vectorSource = new mapboxgl.VectorTileSource('A', source, () => {}, {}); |
| 182 | + await vectorSource.beforeLoad('A', source); |
| 183 | + expect(vectorSource.decryptKey).toEqual(undefined); |
| 184 | + decryptSources.set(['A']); |
| 185 | + decryptSources.add('B'); |
| 186 | + expect(decryptSources.values).toEqual(['A', 'B']); |
| 187 | + await vectorSource.beforeLoad('A', source); |
| 188 | + expect(vectorSource.decryptKey).toEqual('P8h08GonNjuCB4+CAykAGmLYwNsiv4G6H8KFrFi7Afk='); |
| 189 | + } catch (error) { |
| 190 | + expect(error).toEqual(new Error('mapbox-gl cannot support plane coordinate system.')); |
| 191 | + } |
| 192 | + }); |
| 193 | +}); |
0 commit comments