mirror of
https://github.com/ONLYOFFICE/server.git
synced 2026-04-07 14:04:35 +08:00
Merge remote-tracking branch 'remotes/origin/release/v7.1.0' into develop
This commit is contained in:
@ -83,7 +83,7 @@
|
||||
"fileInfoBlockList" : ["FileUrl"],
|
||||
"wordView": ["pdf", "djvu", "xps", "oxps", "doc", "dotx", "dotm", "dot", "fodt", "ott", "rtf", "mht", "html", "htm", "xml", "epub", "fb2"],
|
||||
"wordEdit": ["docx", "docm", "docxf", "oform", "odt", "txt"],
|
||||
"cellView": ["xls", "xltx", "xltm", "xlt", "fods", "ots"],
|
||||
"cellView": ["xls", "xlsb", "xltx", "xltm", "xlt", "fods", "ots"],
|
||||
"cellEdit": ["xlsx", "xlsm", "ods", "csv"],
|
||||
"slideView": ["ppt", "ppsx", "ppsm", "pps", "potx", "potm", "pot", "fodp", "otp"],
|
||||
"slideEdit": ["pptx", "pptm", "odp"],
|
||||
@ -122,7 +122,9 @@
|
||||
"openProtectedFile": true,
|
||||
"editorDataStorage": "editorDataMemory",
|
||||
"assemblyFormatAsOrigin": true,
|
||||
"newFileTemplate" : "../../document-templates/new"
|
||||
"newFileTemplate" : "../../document-templates/new",
|
||||
"downloadFileAllowExt": ["pdf"],
|
||||
"tokenRequiredParams": true
|
||||
},
|
||||
"requestDefaults": {
|
||||
"headers": {
|
||||
@ -216,15 +218,13 @@
|
||||
},
|
||||
"inbox": {
|
||||
"header": "Authorization",
|
||||
"prefix": "Bearer ",
|
||||
"inBody": false
|
||||
"prefix": "Bearer "
|
||||
},
|
||||
"outbox": {
|
||||
"header": "Authorization",
|
||||
"prefix": "Bearer ",
|
||||
"algorithm": "HS256",
|
||||
"expires": "5m",
|
||||
"inBody": false,
|
||||
"urlExclusionRegex": ""
|
||||
},
|
||||
"session": {
|
||||
|
||||
225
Common/npm-shrinkwrap.json
generated
225
Common/npm-shrinkwrap.json
generated
@ -70,18 +70,18 @@
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"aws-sdk": {
|
||||
"version": "2.346.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.346.0.tgz",
|
||||
"integrity": "sha512-4nJfbsK5Chu1ujIHHuvzRz7Ypu9Rbb8KQ/9T5QkVKUaQkl7AUnaUyENykIjhUybQlyg6uqPXg4JTK0801P+OfA==",
|
||||
"version": "2.1074.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1074.0.tgz",
|
||||
"integrity": "sha512-tD478mkukglutjs+mq5FQmYFzz+l/wddl5u3tTMWTNa+j1eSL+AqaHPFM1rC3O9h98QqpKKzeKbLrPhGDvYaRg==",
|
||||
"requires": {
|
||||
"buffer": "4.9.1",
|
||||
"buffer": "4.9.2",
|
||||
"events": "1.1.1",
|
||||
"ieee754": "1.1.8",
|
||||
"jmespath": "0.15.0",
|
||||
"ieee754": "1.1.13",
|
||||
"jmespath": "0.16.0",
|
||||
"querystring": "0.2.0",
|
||||
"sax": "1.2.1",
|
||||
"url": "0.10.3",
|
||||
"uuid": "3.1.0",
|
||||
"uuid": "3.3.2",
|
||||
"xml2js": "0.4.19"
|
||||
}
|
||||
},
|
||||
@ -96,9 +96,9 @@
|
||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
||||
},
|
||||
"base64-js": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
|
||||
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
||||
},
|
||||
"bcrypt-pbkdf": {
|
||||
"version": "1.0.2",
|
||||
@ -144,9 +144,9 @@
|
||||
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
|
||||
},
|
||||
"buffer": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||
"version": "4.9.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
|
||||
"integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
|
||||
"requires": {
|
||||
"base64-js": "^1.0.2",
|
||||
"ieee754": "^1.1.4",
|
||||
@ -175,11 +175,6 @@
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||
},
|
||||
"circular-json": {
|
||||
"version": "0.5.9",
|
||||
"resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
|
||||
"integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ=="
|
||||
},
|
||||
"clone": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
|
||||
@ -228,9 +223,9 @@
|
||||
}
|
||||
},
|
||||
"date-format": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
|
||||
"integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg="
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz",
|
||||
"integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ=="
|
||||
},
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
@ -301,6 +296,11 @@
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
||||
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
|
||||
},
|
||||
"flatted": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
|
||||
"integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||
@ -369,9 +369,9 @@
|
||||
}
|
||||
},
|
||||
"ieee754": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
|
||||
"integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
|
||||
"version": "1.1.13",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
|
||||
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
|
||||
},
|
||||
"imurmurhash": {
|
||||
"version": "0.1.4",
|
||||
@ -409,20 +409,15 @@
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||
},
|
||||
"jmespath": {
|
||||
"version": "0.15.0",
|
||||
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
|
||||
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
|
||||
"version": "0.16.0",
|
||||
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
|
||||
"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
|
||||
@ -466,14 +461,21 @@
|
||||
}
|
||||
},
|
||||
"jsprim": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
|
||||
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.3.0",
|
||||
"json-schema": "0.2.3",
|
||||
"json-schema": "0.4.0",
|
||||
"verror": "1.10.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"json-schema": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
|
||||
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"jwa": {
|
||||
@ -549,15 +551,30 @@
|
||||
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
|
||||
},
|
||||
"log4js": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
|
||||
"integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
|
||||
"version": "6.4.1",
|
||||
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz",
|
||||
"integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
|
||||
"requires": {
|
||||
"circular-json": "^0.5.5",
|
||||
"date-format": "^1.2.0",
|
||||
"debug": "^3.1.0",
|
||||
"rfdc": "^1.1.2",
|
||||
"streamroller": "0.7.0"
|
||||
"date-format": "^4.0.3",
|
||||
"debug": "^4.3.3",
|
||||
"flatted": "^3.2.4",
|
||||
"rfdc": "^1.3.0",
|
||||
"streamroller": "^3.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
|
||||
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"make-dir": {
|
||||
@ -619,9 +636,12 @@
|
||||
}
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||
"version": "2.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"node-forge": {
|
||||
"version": "0.10.0",
|
||||
@ -666,11 +686,6 @@
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.29",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
|
||||
@ -762,9 +777,9 @@
|
||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||
},
|
||||
"rfdc": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
|
||||
"integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA=="
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
|
||||
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
|
||||
},
|
||||
"rhea": {
|
||||
"version": "0.3.9",
|
||||
@ -819,42 +834,56 @@
|
||||
}
|
||||
},
|
||||
"streamroller": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
|
||||
"integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
|
||||
"integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==",
|
||||
"requires": {
|
||||
"date-format": "^1.2.0",
|
||||
"debug": "^3.1.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"readable-stream": "^2.3.0"
|
||||
"date-format": "^4.0.3",
|
||||
"debug": "^4.1.1",
|
||||
"fs-extra": "^10.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"debug": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
|
||||
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"fs-extra": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
|
||||
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.9",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
|
||||
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
|
||||
},
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6",
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -884,6 +913,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||
@ -935,15 +969,10 @@
|
||||
"requires-port": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
|
||||
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
||||
},
|
||||
"verror": {
|
||||
"version": "1.10.0",
|
||||
@ -955,6 +984,20 @@
|
||||
"extsprintf": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"requires": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"win-ca": {
|
||||
"version": "3.4.5",
|
||||
"resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.4.5.tgz",
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"amqplib": "^0.8.0",
|
||||
"aws-sdk": "^2.346.0",
|
||||
"aws-sdk": "^2.1074.0",
|
||||
"co": "^4.6.0",
|
||||
"config": "^2.0.1",
|
||||
"content-disposition": "^0.5.3",
|
||||
@ -15,7 +15,7 @@
|
||||
"fs-extra": "^7.0.0",
|
||||
"ipaddr.js": "^1.8.1",
|
||||
"jsonwebtoken": "^8.3.0",
|
||||
"log4js": "^3.0.6",
|
||||
"log4js": "^6.4.1",
|
||||
"mime": "^2.3.1",
|
||||
"mkdirp": "^0.5.1",
|
||||
"ms": "^2.1.1",
|
||||
|
||||
@ -794,6 +794,8 @@ function OutputSfcData(key) {
|
||||
this['notmodified'] = undefined;
|
||||
this['forcesavetype'] = undefined;
|
||||
this['encrypted'] = undefined;
|
||||
|
||||
this['token'] = undefined;
|
||||
}
|
||||
OutputSfcData.prototype.getKey = function() {
|
||||
return this['key'];
|
||||
@ -879,6 +881,12 @@ OutputSfcData.prototype.getEncrypted = function() {
|
||||
OutputSfcData.prototype.setEncrypted = function(v) {
|
||||
this['encrypted'] = v;
|
||||
};
|
||||
OutputSfcData.prototype.getToken = function() {
|
||||
return this['token']
|
||||
};
|
||||
OutputSfcData.prototype.setToken = function(v) {
|
||||
this['token'] = v;
|
||||
};
|
||||
|
||||
function OutputMailMerge(mailMergeSendData) {
|
||||
if (mailMergeSendData) {
|
||||
|
||||
@ -36,7 +36,6 @@ var url = require('url');
|
||||
var path = require('path');
|
||||
var AWS = require('aws-sdk');
|
||||
var mime = require('mime');
|
||||
var s3urlSigner = require('amazon-s3-url-signer');
|
||||
var utils = require('./utils');
|
||||
const ms = require('ms');
|
||||
const commonDefines = require('./../../Common/sources/commondefines');
|
||||
|
||||
@ -76,7 +76,6 @@ var cfgSignatureSecretOutbox = config.get('services.CoAuthoring.secret.outbox');
|
||||
var cfgVisibilityTimeout = config.get('queue.visibilityTimeout');
|
||||
var cfgQueueRetentionPeriod = config.get('queue.retentionPeriod');
|
||||
var cfgRequestDefaults = config.get('services.CoAuthoring.requestDefaults');
|
||||
const cfgTokenOutboxInBody = config.get('services.CoAuthoring.token.outbox.inBody');
|
||||
const cfgTokenEnableRequestOutbox = config.get('services.CoAuthoring.token.enable.request.outbox');
|
||||
const cfgTokenOutboxUrlExclusionRegex = config.get('services.CoAuthoring.token.outbox.urlExclusionRegex');
|
||||
const cfgPasswordEncrypt = config.get('openpgpjs.encrypt');
|
||||
@ -331,6 +330,10 @@ function downloadUrlPromiseWithoutRedirect(uri, optTimeout, optLimit, opt_Author
|
||||
};
|
||||
}
|
||||
let fResponse = function(response) {
|
||||
if (opt_streamWriter) {
|
||||
//Set-Cookie resets browser session
|
||||
response.caseless.del('Set-Cookie');
|
||||
}
|
||||
var contentLength = response.caseless.get('content-length');
|
||||
if (contentLength && (contentLength - 0) > sizeLimit) {
|
||||
raiseError(this, 'EMSGSIZE', 'Error response: content-length:' + contentLength);
|
||||
@ -843,17 +846,15 @@ function getSecret(docId, secretElem, opt_iss, opt_token) {
|
||||
return getSecretByElem(secretElem);
|
||||
}
|
||||
exports.getSecret = getSecret;
|
||||
function fillJwtForRequest(opt_payload) {
|
||||
function fillJwtForRequest(payload, opt_inBody) {
|
||||
//todo refuse prototypes in payload(they are simple getter/setter).
|
||||
//JSON.parse/stringify is more universal but Object.assign is enough for our inputs
|
||||
payload = Object.assign(Object.create(null), payload);
|
||||
let data;
|
||||
if (cfgTokenOutboxInBody) {
|
||||
//todo refuse prototypes in opt_payload(they are simple getter/setter).
|
||||
//JSON.parse/stringify is more universal but Object.assign is enough for our inputs
|
||||
data = Object.assign(Object.create(null), opt_payload);
|
||||
if (opt_inBody) {
|
||||
data = payload;
|
||||
} else {
|
||||
data = {};
|
||||
if(opt_payload){
|
||||
data.payload = opt_payload;
|
||||
}
|
||||
data = {payload: payload};
|
||||
}
|
||||
|
||||
let options = {algorithm: cfgTokenOutboxAlgorithm, expiresIn: cfgTokenOutboxExpires};
|
||||
|
||||
39
DocService/npm-shrinkwrap.json
generated
39
DocService/npm-shrinkwrap.json
generated
@ -28,6 +28,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"ajv": {
|
||||
"version": "8.9.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
|
||||
"integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"apicache": {
|
||||
"version": "1.6.2",
|
||||
"resolved": "https://registry.npmjs.org/apicache/-/apicache-1.6.2.tgz",
|
||||
@ -433,6 +444,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"faye-websocket": {
|
||||
"version": "0.11.4",
|
||||
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
|
||||
@ -512,6 +528,11 @@
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
|
||||
},
|
||||
"json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||
@ -846,6 +867,11 @@
|
||||
"ipaddr.js": "1.9.1"
|
||||
}
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
@ -920,6 +946,11 @@
|
||||
"resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-1.3.0.tgz",
|
||||
"integrity": "sha1-gG6+e7+3005NfB6e8oLvz60EEmo="
|
||||
},
|
||||
"require-from-string": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
|
||||
},
|
||||
"retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
@ -1095,6 +1126,14 @@
|
||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"utf7": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/utf7/-/utf7-1.0.2.tgz",
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
"prepare4shutdown": "sources/shutdown.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": "^8.9.0",
|
||||
"apicache": "^1.6.2",
|
||||
"base64-stream": "^1.0.0",
|
||||
"body-parser": "^1.18.3",
|
||||
|
||||
@ -134,8 +134,6 @@ const cfgTokenSessionAlgorithm = config.get('token.session.algorithm');
|
||||
const cfgTokenSessionExpires = ms(config.get('token.session.expires'));
|
||||
const cfgTokenInboxHeader = config.get('token.inbox.header');
|
||||
const cfgTokenInboxPrefix = config.get('token.inbox.prefix');
|
||||
const cfgTokenInboxInBody = config.get('token.inbox.inBody');
|
||||
const cfgTokenOutboxInBody = config.get('token.outbox.inBody');
|
||||
const cfgTokenBrowserSecretFromInbox = config.get('token.browser.secretFromInbox');
|
||||
const cfgTokenVerifyOptions = config.get('token.verifyOptions');
|
||||
const cfgSecretBrowser = config.get('secret.browser');
|
||||
@ -152,6 +150,7 @@ const cfgWarningLimitPercents = configCommon.get('license.warning_limit_percents
|
||||
const cfgErrorFiles = configCommon.get('FileConverter.converter.errorfiles');
|
||||
const cfgOpenProtectedFile = config.get('server.openProtectedFile');
|
||||
const cfgRefreshLockInterval = ms(configCommon.get('wopi.refreshLockInterval'));
|
||||
const cfgTokenRequiredParams = config.get('server.tokenRequiredParams');
|
||||
|
||||
const EditorTypes = {
|
||||
document : 0,
|
||||
@ -658,18 +657,18 @@ function* getOriginalParticipantsId(docId) {
|
||||
return result;
|
||||
}
|
||||
|
||||
function* sendServerRequest(docId, uri, dataObject, opt_checkAuthorization) {
|
||||
function* sendServerRequest(docId, uri, dataObject, opt_checkAndFixAuthorizationLength) {
|
||||
logger.debug('postData request: docId = %s;url = %s;data = %j', docId, uri, dataObject);
|
||||
let auth;
|
||||
if (utils.canIncludeOutboxAuthorization(uri)) {
|
||||
auth = utils.fillJwtForRequest(dataObject);
|
||||
if (cfgTokenOutboxInBody) {
|
||||
dataObject = {token: auth};
|
||||
auth = undefined;
|
||||
} else if (opt_checkAuthorization && !opt_checkAuthorization(auth, dataObject)) {
|
||||
auth = utils.fillJwtForRequest(dataObject);
|
||||
logger.warn('authorization reduced to: docId = %s; length=%d', docId, auth.length);
|
||||
let bodyToken = utils.fillJwtForRequest(dataObject, true);
|
||||
auth = utils.fillJwtForRequest(dataObject, false);
|
||||
let authLen = auth.length;
|
||||
if (opt_checkAndFixAuthorizationLength && !opt_checkAndFixAuthorizationLength(auth, dataObject)) {
|
||||
auth = utils.fillJwtForRequest(dataObject, false);
|
||||
logger.warn('authorization too large. Use body token instead. size reduced from %d to %d: docId = %s', authLen, auth.length, docId);
|
||||
}
|
||||
dataObject.setToken(bodyToken);
|
||||
}
|
||||
let postRes = yield utils.postRequestPromise(uri, JSON.stringify(dataObject), undefined, cfgCallbackRequestTimeout, auth);
|
||||
logger.debug('postData response: docId = %s;data = %s', docId, postRes.body);
|
||||
@ -1169,18 +1168,7 @@ function checkJwtHeader(docId, req, opt_header, opt_prefix, opt_secretType) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function checkJwtPayloadHash(docId, hash, body, token) {
|
||||
var res = false;
|
||||
if (body && Buffer.isBuffer(body)) {
|
||||
var decoded = jwt.decode(token, {complete: true});
|
||||
var hmac = jwa(decoded.header.alg);
|
||||
var secret = utils.getSecret(docId, cfgSecretInbox, null, token);
|
||||
var signature = hmac.sign(body, secret);
|
||||
res = (hash === signature);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
function getRequestParams(docId, req, opt_isNotInBody, opt_tokenAssign) {
|
||||
function getRequestParams(docId, req, opt_isNotInBody) {
|
||||
let res = {code: constants.NO_ERROR, params: undefined};
|
||||
if (req.body && Buffer.isBuffer(req.body) && req.body.length > 0 && !opt_isNotInBody) {
|
||||
res.params = JSON.parse(req.body.toString('utf8'));
|
||||
@ -1190,33 +1178,26 @@ function getRequestParams(docId, req, opt_isNotInBody, opt_tokenAssign) {
|
||||
if (cfgTokenEnableRequestInbox) {
|
||||
res.code = constants.VKEY;
|
||||
let checkJwtRes;
|
||||
if (cfgTokenInboxInBody && !opt_isNotInBody) {
|
||||
if (res.params.token) {
|
||||
checkJwtRes = checkJwt(docId, res.params.token, commonDefines.c_oAscSecretType.Inbox);
|
||||
} else {
|
||||
//for compatibility
|
||||
checkJwtRes = checkJwtHeader(docId, req);
|
||||
}
|
||||
if (checkJwtRes) {
|
||||
if (checkJwtRes.decoded) {
|
||||
res.code = constants.NO_ERROR;
|
||||
if (cfgTokenInboxInBody && !opt_tokenAssign) {
|
||||
res.params = checkJwtRes.decoded;
|
||||
} else {
|
||||
//for compatibility
|
||||
if (!utils.isEmptyObject(checkJwtRes.decoded.payload)) {
|
||||
Object.assign(res.params, checkJwtRes.decoded.payload);
|
||||
} else if (checkJwtRes.decoded.payloadhash) {
|
||||
if (!checkJwtPayloadHash(docId, checkJwtRes.decoded.payloadhash, req.body, checkJwtRes.token)) {
|
||||
res.code = constants.VKEY;
|
||||
}
|
||||
} else if (!utils.isEmptyObject(checkJwtRes.decoded.query)) {
|
||||
Object.assign(res.params, checkJwtRes.decoded.query);
|
||||
}
|
||||
if (cfgTokenRequiredParams) {
|
||||
res.params = {};
|
||||
}
|
||||
} else {
|
||||
if (constants.JWT_EXPIRED_CODE == checkJwtRes.code) {
|
||||
res.code = constants.VKEY_KEY_EXPIRE;
|
||||
Object.assign(res.params, checkJwtRes.decoded);
|
||||
if (!utils.isEmptyObject(checkJwtRes.decoded.payload)) {
|
||||
Object.assign(res.params, checkJwtRes.decoded.payload);
|
||||
}
|
||||
if (!utils.isEmptyObject(checkJwtRes.decoded.query)) {
|
||||
Object.assign(res.params, checkJwtRes.decoded.query);
|
||||
}
|
||||
} else if (constants.JWT_EXPIRED_CODE == checkJwtRes.code) {
|
||||
res.code = constants.VKEY_KEY_EXPIRE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1273,7 +1254,6 @@ exports.getExternalChangeInfo = getExternalChangeInfo;
|
||||
exports.checkJwt = checkJwt;
|
||||
exports.getRequestParams = getRequestParams;
|
||||
exports.checkJwtHeader = checkJwtHeader;
|
||||
exports.checkJwtPayloadHash = checkJwtPayloadHash;
|
||||
exports.install = function(server, callbackFunction) {
|
||||
var sockjs_echo = sockjs.createServer(cfgSockjs),
|
||||
urlParse = new RegExp("^/doc/([" + constants.DOC_ID_PATTERN + "]*)/c.+", 'i');
|
||||
@ -1950,6 +1930,27 @@ exports.install = function(server, callbackFunction) {
|
||||
//not '=' because if it jwt from previous version, we must use values from data
|
||||
Object.assign(data.permissions, permissions);
|
||||
}
|
||||
|
||||
//issuer for secret
|
||||
if (decoded.iss) {
|
||||
data.iss = decoded.iss;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
function validateAuthToken(data, decoded) {
|
||||
var res = "";
|
||||
if (!decoded?.document?.key) {
|
||||
res = "document.key";
|
||||
} else if (!decoded?.document?.permissions) {
|
||||
res = "document.permissions";
|
||||
} else if (!decoded?.document?.url) {
|
||||
res = "document.url";
|
||||
} else if (data.documentCallbackUrl && !decoded?.editorConfig?.callbackUrl) {
|
||||
//todo callbackUrl required
|
||||
res = "editorConfig.callbackUrl";
|
||||
} else if (data.mode && !decoded?.editorConfig?.mode) {
|
||||
res = "editorConfig.mode";
|
||||
}
|
||||
return res;
|
||||
}
|
||||
function fillDataFromJwt(decoded, data) {
|
||||
@ -1965,6 +1966,9 @@ exports.install = function(server, callbackFunction) {
|
||||
}
|
||||
if(doc.permissions) {
|
||||
res = deepEqual(data.permissions, doc.permissions, {strict: true});
|
||||
if (!res) {
|
||||
logger.warn('fillDataFromJwt token has modified permissions docId = %s', data.docid);
|
||||
}
|
||||
if(!data.permissions){
|
||||
data.permissions = {};
|
||||
}
|
||||
@ -2013,7 +2017,7 @@ exports.install = function(server, callbackFunction) {
|
||||
if (edit.user) {
|
||||
var dataUser = data.user;
|
||||
var user = edit.user;
|
||||
if (null != user.id) {
|
||||
if (user.id) {
|
||||
dataUser.id = user.id;
|
||||
if (openCmd) {
|
||||
openCmd.userid = user.id;
|
||||
@ -2022,25 +2026,28 @@ exports.install = function(server, callbackFunction) {
|
||||
if (null != user.index) {
|
||||
dataUser.indexUser = user.index;
|
||||
}
|
||||
if (null != user.firstname) {
|
||||
if (user.firstname) {
|
||||
dataUser.firstname = user.firstname;
|
||||
}
|
||||
if (null != user.lastname) {
|
||||
if (user.lastname) {
|
||||
dataUser.lastname = user.lastname;
|
||||
}
|
||||
if (user.name) {
|
||||
dataUser.username = user.name;
|
||||
}
|
||||
if (user.group) {
|
||||
//like in Common.Utils.fillUserInfo(web-apps/apps/common/main/lib/util/utils.js)
|
||||
dataUser.username = user.group.toString() + String.fromCharCode(160) + dataUser.username;
|
||||
}
|
||||
}
|
||||
if (edit.user && edit.user.name) {
|
||||
data.denyChangeName = true;
|
||||
}
|
||||
}
|
||||
|
||||
res = res && fillDataFromWopiJwt(decoded, data);
|
||||
|
||||
//todo make required fields
|
||||
if (decoded.url || decoded.payload|| (decoded.key && !decoded.fileInfo)) {
|
||||
logger.warn('fillDataFromJwt token has invalid format docId = %s', data.docid);
|
||||
res = false;
|
||||
}
|
||||
|
||||
@ -2088,7 +2095,29 @@ exports.install = function(server, callbackFunction) {
|
||||
commonDefines.c_oAscSecretType.Browser;
|
||||
const checkJwtRes = checkJwt(docId, data.jwtSession || data.jwtOpen, secretType);
|
||||
if (checkJwtRes.decoded) {
|
||||
if (!fillDataFromJwt(checkJwtRes.decoded, data)) {
|
||||
let decoded = checkJwtRes.decoded;
|
||||
let fillDataFromJwtRes = false;
|
||||
if (decoded.fileInfo) {
|
||||
//wopi
|
||||
fillDataFromJwtRes = fillDataFromWopiJwt(decoded, data);
|
||||
} else if (decoded.editorConfig && undefined !== decoded.editorConfig.ds_view) {
|
||||
//reconnection
|
||||
fillDataFromJwtRes = fillDataFromJwt(decoded, data);
|
||||
} else {
|
||||
//opening
|
||||
let validationErr = validateAuthToken(data, decoded);
|
||||
if (!validationErr) {
|
||||
fillDataFromJwtRes = fillDataFromJwt(decoded, data);
|
||||
} else if (cfgTokenRequiredParams) {
|
||||
logger.error("auth missing required parameter %s (since 7.1 version): docId = %s ", validationErr, docId);
|
||||
conn.close(constants.JWT_ERROR_CODE, constants.JWT_ERROR_REASON);
|
||||
return;
|
||||
} else {
|
||||
logger.warn("auth missing required parameter %s (since 7.1 version): docId = %s ", validationErr, docId);
|
||||
fillDataFromJwtRes = fillDataFromJwt(decoded, data);
|
||||
}
|
||||
}
|
||||
if(!fillDataFromJwtRes) {
|
||||
logger.warn("fillDataFromJwt return false: docId = %s", docId);
|
||||
conn.close(constants.ACCESS_DENIED_CODE, constants.ACCESS_DENIED_REASON);
|
||||
return;
|
||||
@ -2718,7 +2747,7 @@ exports.install = function(server, callbackFunction) {
|
||||
}
|
||||
yield* publish({type: commonDefines.c_oPublishType.changes, docId: docId, userId: userId,
|
||||
changes: changesToSend, startIndex: startIndex, changesIndex: puckerIndex,
|
||||
locks: arrLocks, excelAdditionalInfo: data.excelAdditionalInfo}, docId, userId);
|
||||
locks: arrLocks, excelAdditionalInfo: data.excelAdditionalInfo, endSaveChanges: data.endSaveChanges}, docId, userId);
|
||||
}
|
||||
// Автоматически снимаем lock сами и посылаем индекс для сохранения
|
||||
yield* unSaveLock(conn, changesIndex, newChangesLastTime);
|
||||
@ -2736,7 +2765,7 @@ exports.install = function(server, callbackFunction) {
|
||||
}
|
||||
let isPublished = yield* publish({type: commonDefines.c_oPublishType.changes, docId: docId, userId: userId,
|
||||
changes: changesToSend, startIndex: startIndex, changesIndex: puckerIndex,
|
||||
locks: [], excelAdditionalInfo: undefined}, docId, userId);
|
||||
locks: [], excelAdditionalInfo: undefined, endSaveChanges: data.endSaveChanges}, docId, userId);
|
||||
sendData(conn, {type: 'savePartChanges', changesIndex: changesIndex});
|
||||
if (!isPublished) {
|
||||
//stub for lockDocumentsTimerId
|
||||
@ -3025,7 +3054,8 @@ exports.install = function(server, callbackFunction) {
|
||||
return;
|
||||
}
|
||||
sendData(participant, {type: 'saveChanges', changes: changes,
|
||||
changesIndex: data.changesIndex, locks: data.locks, excelAdditionalInfo: data.excelAdditionalInfo});
|
||||
changesIndex: data.changesIndex, endSaveChanges: data.endSaveChanges,
|
||||
locks: data.locks, excelAdditionalInfo: data.excelAdditionalInfo});
|
||||
});
|
||||
}
|
||||
break;
|
||||
@ -3367,8 +3397,8 @@ exports.licenseInfo = function(req, res) {
|
||||
var precisionSum = {};
|
||||
for (let i = 0; i < PRECISION.length; ++i) {
|
||||
precisionSum[PRECISION[i].name] = {
|
||||
edit: {min: Number.MAX_VALUE, sum: 0, count: 0, max: 0},
|
||||
view: {min: Number.MAX_VALUE, sum: 0, count: 0, max: 0}
|
||||
edit: {min: Number.MAX_VALUE, sum: 0, count: 0, intervalsInPresision: PRECISION[i].val / expDocumentsStep, max: 0},
|
||||
view: {min: Number.MAX_VALUE, sum: 0, count: 0, intervalsInPresision: PRECISION[i].val / expDocumentsStep, max: 0}
|
||||
};
|
||||
output.connectionsStat[PRECISION[i].name] = {
|
||||
edit: {min: 0, avr: 0, max: 0},
|
||||
@ -3377,37 +3407,45 @@ exports.licenseInfo = function(req, res) {
|
||||
}
|
||||
var redisRes = yield editorData.getEditorConnections();
|
||||
const now = Date.now();
|
||||
var precisionIndex = 0;
|
||||
for (let i = redisRes.length - 1; i >= 1; i -= 2) {
|
||||
for (let j = precisionIndex; j < PRECISION.length; ++j) {
|
||||
if (redisRes.length > 0) {
|
||||
let expDocumentsStep95 = expDocumentsStep * 0.95;
|
||||
let prevTime = Number.MAX_VALUE;
|
||||
var precisionIndex = 0;
|
||||
for (let i = redisRes.length - 1; i >= 0; i--) {
|
||||
let elem = redisRes[i];
|
||||
if (now - elem.time < PRECISION[j].val) {
|
||||
let precision = precisionSum[PRECISION[j].name];
|
||||
precision.edit.min = Math.min(precision.edit.min, elem.edit);
|
||||
precision.edit.max = Math.max(precision.edit.max, elem.edit);
|
||||
precision.edit.sum += elem.edit;
|
||||
precision.edit.count++;
|
||||
precision.view.min = Math.min(precision.view.min, elem.view);
|
||||
precision.view.max = Math.max(precision.view.max, elem.view);
|
||||
precision.view.sum += elem.view;
|
||||
precision.view.count++;
|
||||
} else {
|
||||
precisionIndex = j + 1;
|
||||
//skip duplicates in cluster
|
||||
if (prevTime - elem.time >= expDocumentsStep95) {
|
||||
for (let j = precisionIndex; j < PRECISION.length; ++j) {
|
||||
if (now - elem.time < PRECISION[j].val) {
|
||||
let precision = precisionSum[PRECISION[j].name];
|
||||
precision.edit.min = Math.min(precision.edit.min, elem.edit);
|
||||
precision.edit.max = Math.max(precision.edit.max, elem.edit);
|
||||
precision.edit.sum += elem.edit;
|
||||
precision.edit.count++;
|
||||
precision.view.min = Math.min(precision.view.min, elem.view);
|
||||
precision.view.max = Math.max(precision.view.max, elem.view);
|
||||
precision.view.sum += elem.view;
|
||||
precision.view.count++;
|
||||
} else {
|
||||
precisionIndex = j + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
prevTime = elem.time;
|
||||
}
|
||||
}
|
||||
for (let i in precisionSum) {
|
||||
let precision = precisionSum[i];
|
||||
let precisionOut = output.connectionsStat[i];
|
||||
if (precision.edit.count > 0) {
|
||||
precisionOut.edit.avr = Math.round(precision.edit.sum / precision.edit.count);
|
||||
precisionOut.edit.min = precision.edit.min;
|
||||
precisionOut.edit.max = precision.edit.max;
|
||||
}
|
||||
if (precision.view.count > 0) {
|
||||
precisionOut.view.avr = Math.round(precision.view.sum / precision.view.count);
|
||||
precisionOut.view.min = precision.view.min;
|
||||
precisionOut.view.max = precision.view.max;
|
||||
for (let i in precisionSum) {
|
||||
let precision = precisionSum[i];
|
||||
let precisionOut = output.connectionsStat[i];
|
||||
if (precision.edit.count > 0) {
|
||||
precisionOut.edit.avr = Math.round(precision.edit.sum / precision.edit.intervalsInPresision);
|
||||
precisionOut.edit.min = precision.edit.min;
|
||||
precisionOut.edit.max = precision.edit.max;
|
||||
}
|
||||
if (precision.view.count > 0) {
|
||||
precisionOut.view.avr = Math.round(precision.view.sum / precision.view.intervalsInPresision);
|
||||
precisionOut.view.min = precision.view.min;
|
||||
precisionOut.view.max = precision.view.max;
|
||||
}
|
||||
}
|
||||
}
|
||||
const nowUTC = getLicenseNowUtc();
|
||||
|
||||
@ -71,6 +71,7 @@ const cfgAssemblyFormatAsOrigin = config.get('services.CoAuthoring.server.assemb
|
||||
const cfgCallbackRequestTimeout = config.get('services.CoAuthoring.server.callbackRequestTimeout');
|
||||
const cfgDownloadMaxBytes = config.get('FileConverter.converter.maxDownloadBytes');
|
||||
const cfgDownloadTimeout = config.get('FileConverter.converter.downloadTimeout');
|
||||
const cfgDownloadFileAllowExt = config.get('services.CoAuthoring.server.downloadFileAllowExt');
|
||||
|
||||
var SAVE_TYPE_PART_START = 0;
|
||||
var SAVE_TYPE_PART = 1;
|
||||
@ -621,7 +622,7 @@ function* commandImgurls(conn, cmd, outputData) {
|
||||
}
|
||||
for (let i = 0; i < urls.length; ++i) {
|
||||
if (utils.canIncludeOutboxAuthorization(urls[i])) {
|
||||
authorizations[i] = [utils.fillJwtForRequest({url: urls[i]})];
|
||||
authorizations[i] = [utils.fillJwtForRequest({url: urls[i]}, false)];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -822,14 +823,12 @@ function* commandChangeDocInfo(conn, cmd, outputData) {
|
||||
outputData.setData(constants.CHANGE_DOC_INFO);
|
||||
}
|
||||
}
|
||||
function checkAuthorizationLength(authorization, data){
|
||||
function checkAndFixAuthorizationLength(authorization, data){
|
||||
//todo it is stub (remove in future versions)
|
||||
//8kb(https://stackoverflow.com/questions/686217/maximum-on-http-header-values) - 1kb(for other header)
|
||||
//8kb(https://stackoverflow.com/questions/686217/maximum-on-http-header-values) - 1kb(for other headers)
|
||||
let res = authorization.length < 7168;
|
||||
if (!res) {
|
||||
logger.warn('authorization too long: docId = %s; length=%d', data.getKey(), authorization.length);
|
||||
data.setChangeUrl(undefined);
|
||||
//for backward compatibility. remove this when Community is ready
|
||||
data.setChangeHistory({});
|
||||
}
|
||||
return res;
|
||||
@ -983,7 +982,7 @@ function* commandSfcCallback(cmd, isSfcm, isEncrypted) {
|
||||
if (wopiParams) {
|
||||
replyStr = yield processWopiPutFile(docId, wopiParams, savePathDoc, userLastChangeId);
|
||||
} else {
|
||||
replyStr = yield* docsCoServer.sendServerRequest(docId, uri, outputSfc, checkAuthorizationLength);
|
||||
replyStr = yield* docsCoServer.sendServerRequest(docId, uri, outputSfc, checkAndFixAuthorizationLength);
|
||||
}
|
||||
let replyData = docsCoServer.parseReplyData(docId, replyStr);
|
||||
isSfcmSuccess = replyData && commonDefines.c_oAscServerCommandErrors.NoError == replyData.error;
|
||||
@ -1015,7 +1014,7 @@ function* commandSfcCallback(cmd, isSfcm, isEncrypted) {
|
||||
if (wopiParams) {
|
||||
replyStr = yield processWopiPutFile(docId, wopiParams, savePathDoc, userLastChangeId);
|
||||
} else {
|
||||
replyStr = yield* docsCoServer.sendServerRequest(docId, uri, outputSfc, checkAuthorizationLength);
|
||||
replyStr = yield* docsCoServer.sendServerRequest(docId, uri, outputSfc, checkAndFixAuthorizationLength);
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('sendServerRequest error: docId = %s;url = %s;data = %j\r\n%s', docId, uri, outputSfc, err.stack);
|
||||
@ -1078,9 +1077,12 @@ function* commandSfcCallback(cmd, isSfcm, isEncrypted) {
|
||||
logger.error('Error storeForgotten: docId = %s\r\n%s', docId, err.stack);
|
||||
}
|
||||
if (!isSfcm) {
|
||||
//todo simultaneous opening
|
||||
//to unlock wopi file
|
||||
yield docsCoServer.cleanDocumentOnExitPromise(docId, true, callbackUserIndex);
|
||||
//cleanupRes can be false in case of simultaneous opening. it is OK
|
||||
let cleanupRes = yield cleanupCacheIf(updateMask);
|
||||
logger.debug('storeForgotten cleanupRes=%s', cleanupRes);
|
||||
logger.debug('storeForgotten cleanupRes=%s: docId = %s', cleanupRes, docId);
|
||||
}
|
||||
}
|
||||
if (forceSave) {
|
||||
@ -1472,15 +1474,26 @@ exports.downloadFile = function(req, res) {
|
||||
let authorization;
|
||||
if (cfgTokenEnableBrowser) {
|
||||
let checkJwtRes = docsCoServer.checkJwtHeader(docId, req, 'Authorization', 'Bearer ', commonDefines.c_oAscSecretType.Browser);
|
||||
let errorDescription;
|
||||
if (checkJwtRes.decoded) {
|
||||
url = checkJwtRes.decoded.changesUrl;
|
||||
let decoded = checkJwtRes.decoded;
|
||||
if (decoded.changesUrl) {
|
||||
url = decoded.changesUrl;
|
||||
} else if (decoded.document && -1 !== cfgDownloadFileAllowExt.indexOf(decoded.document.fileType)) {
|
||||
url = decoded.document.url;
|
||||
} else {
|
||||
errorDescription = 'access deny';
|
||||
}
|
||||
} else {
|
||||
logger.warn('Error downloadFile jwt: docId = %s description = %s', docId, checkJwtRes.description);
|
||||
errorDescription = checkJwtRes.description;
|
||||
}
|
||||
if (errorDescription) {
|
||||
logger.warn('Error downloadFile jwt: docId = %s description = %s', docId, errorDescription);
|
||||
res.sendStatus(403);
|
||||
return;
|
||||
}
|
||||
if (utils.canIncludeOutboxAuthorization(url)) {
|
||||
authorization = utils.fillJwtForRequest({url: url});
|
||||
authorization = utils.fillJwtForRequest({url: url}, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -248,6 +248,9 @@ function convertRequest(req, res, isJson) {
|
||||
if (params.region && locale[params.region.toLowerCase()]) {
|
||||
cmd.setLCID(locale[params.region.toLowerCase()].id);
|
||||
}
|
||||
if (params.documentLayout) {
|
||||
cmd.setJsonParams(JSON.stringify({'documentLayout': params.documentLayout}));
|
||||
}
|
||||
if (params.spreadsheetLayout) {
|
||||
cmd.setJsonParams(JSON.stringify({'spreadsheetLayout': params.spreadsheetLayout}));
|
||||
}
|
||||
@ -287,24 +290,23 @@ function convertRequest(req, res, isJson) {
|
||||
cmd.setOutputFormat(constants.AVS_OFFICESTUDIO_FILE_IMAGE);
|
||||
}
|
||||
}
|
||||
var textParams = params.textParams;
|
||||
if (textParams) {
|
||||
if (typeof textParams === 'string') {
|
||||
textParams = JSON.parse(textParams);
|
||||
var documentRenderer = params.documentRenderer;
|
||||
if (documentRenderer) {
|
||||
if (typeof documentRenderer === 'string') {
|
||||
documentRenderer = JSON.parse(documentRenderer);
|
||||
}
|
||||
var textParamsData = new commonDefines.CTextParams(textParams);
|
||||
//todo text
|
||||
switch (textParams.association) {
|
||||
case 'block':
|
||||
var textParamsData = new commonDefines.CTextParams();
|
||||
switch (documentRenderer.textAssociation) {
|
||||
case 'plainParagraph':
|
||||
textParamsData.setAssociation(3);
|
||||
break;
|
||||
case 'noFrames':
|
||||
case 'plainLine':
|
||||
textParamsData.setAssociation(2);
|
||||
break;
|
||||
case 'line':
|
||||
case 'blockLine':
|
||||
textParamsData.setAssociation(1);
|
||||
break;
|
||||
case 'char':
|
||||
case 'blockChar':
|
||||
default:
|
||||
textParamsData.setAssociation(0);
|
||||
break;
|
||||
@ -352,7 +354,7 @@ function builderRequest(req, res) {
|
||||
let authRes;
|
||||
if (!utils.isEmptyObject(req.query)) {
|
||||
//todo this is a stub for compatibility. remove in future version
|
||||
authRes = docsCoServer.getRequestParams(docId, req, true, true);
|
||||
authRes = docsCoServer.getRequestParams(docId, req, true);
|
||||
} else {
|
||||
authRes = docsCoServer.getRequestParams(docId, req);
|
||||
}
|
||||
|
||||
@ -350,7 +350,7 @@ EditorData.prototype.setLicense = function(key, val) {
|
||||
return Promise.resolve();
|
||||
};
|
||||
EditorData.prototype.getLicense = function(key) {
|
||||
return Promise.resolve(false);
|
||||
return Promise.resolve(null);
|
||||
};
|
||||
|
||||
EditorData.prototype.isConnected = function() {
|
||||
|
||||
@ -316,7 +316,7 @@ function* downloadFile(docId, uri, fileFrom, withAuthorization, filterPrivate, o
|
||||
try {
|
||||
let authorization;
|
||||
if (utils.canIncludeOutboxAuthorization(uri) && withAuthorization) {
|
||||
authorization = utils.fillJwtForRequest({url: uri});
|
||||
authorization = utils.fillJwtForRequest({url: uri}, false);
|
||||
}
|
||||
let getRes = yield utils.downloadUrlPromise(uri, cfgDownloadTimeout, cfgDownloadMaxBytes, authorization, filterPrivate, opt_headers);
|
||||
data = getRes.body;
|
||||
|
||||
197
npm-shrinkwrap.json
generated
197
npm-shrinkwrap.json
generated
@ -70,9 +70,9 @@
|
||||
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
|
||||
},
|
||||
"async": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
|
||||
"integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
|
||||
"version": "3.2.3",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
|
||||
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
|
||||
},
|
||||
"atob": {
|
||||
"version": "2.1.2",
|
||||
@ -696,24 +696,24 @@
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
|
||||
"version": "4.2.9",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
|
||||
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
|
||||
},
|
||||
"grunt": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz",
|
||||
"integrity": "sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA==",
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz",
|
||||
"integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==",
|
||||
"requires": {
|
||||
"dateformat": "~3.0.3",
|
||||
"eventemitter2": "~0.4.13",
|
||||
"exit": "~0.1.2",
|
||||
"findup-sync": "~0.3.0",
|
||||
"glob": "~7.1.6",
|
||||
"grunt-cli": "~1.3.2",
|
||||
"grunt-known-options": "~1.1.0",
|
||||
"grunt-cli": "~1.4.2",
|
||||
"grunt-known-options": "~2.0.0",
|
||||
"grunt-legacy-log": "~3.0.0",
|
||||
"grunt-legacy-util": "~2.0.0",
|
||||
"grunt-legacy-util": "~2.0.1",
|
||||
"iconv-lite": "~0.4.13",
|
||||
"js-yaml": "~3.14.0",
|
||||
"minimatch": "~3.0.4",
|
||||
@ -723,15 +723,15 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"grunt-cli": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
|
||||
"integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==",
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
|
||||
"integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
|
||||
"requires": {
|
||||
"grunt-known-options": "~1.1.0",
|
||||
"grunt-known-options": "~2.0.0",
|
||||
"interpret": "~1.1.0",
|
||||
"liftoff": "~2.5.0",
|
||||
"liftup": "~3.0.1",
|
||||
"nopt": "~4.0.1",
|
||||
"v8flags": "~3.1.1"
|
||||
"v8flags": "~3.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"nopt": {
|
||||
@ -801,9 +801,9 @@
|
||||
}
|
||||
},
|
||||
"grunt-known-options": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
|
||||
"integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ=="
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
|
||||
"integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA=="
|
||||
},
|
||||
"grunt-legacy-log": {
|
||||
"version": "3.0.0",
|
||||
@ -834,9 +834,9 @@
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
@ -877,9 +877,9 @@
|
||||
}
|
||||
},
|
||||
"grunt-mkdir": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/grunt-mkdir/-/grunt-mkdir-1.0.0.tgz",
|
||||
"integrity": "sha1-c+GiasJKCFljY/TdlUsNMkheWOk="
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/grunt-mkdir/-/grunt-mkdir-1.1.0.tgz",
|
||||
"integrity": "sha512-FRE17OYVveNbVJFX8GPGa5bzH2ZiAdBx3q0Kwk2Dg6l+TzLGaTdufUxiUWUbS2MERFacnmXZwDDOR5ZbYW0o+Q=="
|
||||
},
|
||||
"grunt-stripcomments": {
|
||||
"version": "0.7.2",
|
||||
@ -1017,9 +1017,9 @@
|
||||
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
||||
},
|
||||
"is-core-module": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
|
||||
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
|
||||
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
|
||||
"requires": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
@ -1140,9 +1140,9 @@
|
||||
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "3.14.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
|
||||
"integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
||||
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"esprima": "^4.0.0"
|
||||
@ -1153,31 +1153,77 @@
|
||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
|
||||
},
|
||||
"liftoff": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
|
||||
"integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
|
||||
"liftup": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
|
||||
"integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
|
||||
"requires": {
|
||||
"extend": "^3.0.0",
|
||||
"findup-sync": "^2.0.0",
|
||||
"fined": "^1.0.1",
|
||||
"flagged-respawn": "^1.0.0",
|
||||
"extend": "^3.0.2",
|
||||
"findup-sync": "^4.0.0",
|
||||
"fined": "^1.2.0",
|
||||
"flagged-respawn": "^1.0.1",
|
||||
"is-plain-object": "^2.0.4",
|
||||
"object.map": "^1.0.0",
|
||||
"rechoir": "^0.6.2",
|
||||
"resolve": "^1.1.7"
|
||||
"object.map": "^1.0.1",
|
||||
"rechoir": "^0.7.0",
|
||||
"resolve": "^1.19.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"requires": {
|
||||
"fill-range": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"requires": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"findup-sync": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
|
||||
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
|
||||
"integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
|
||||
"requires": {
|
||||
"detect-file": "^1.0.0",
|
||||
"is-glob": "^3.1.0",
|
||||
"micromatch": "^3.0.4",
|
||||
"is-glob": "^4.0.0",
|
||||
"micromatch": "^4.0.2",
|
||||
"resolve-dir": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"is-glob": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
||||
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
||||
},
|
||||
"micromatch": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
|
||||
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
|
||||
"requires": {
|
||||
"braces": "^3.0.1",
|
||||
"picomatch": "^2.2.3"
|
||||
}
|
||||
},
|
||||
"to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"requires": {
|
||||
"is-number": "^7.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1275,9 +1321,9 @@
|
||||
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
|
||||
},
|
||||
"mout": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/mout/-/mout-1.2.2.tgz",
|
||||
"integrity": "sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA=="
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/mout/-/mout-1.2.3.tgz",
|
||||
"integrity": "sha512-vtE+eZcSj/sBkIp6gxB87MznryWP+gHIp0XX9SKrzA5TAkvz6y7VTuNruBjYdJozd8NY5i9XVIsn8cn3SwNjzg=="
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
@ -1444,17 +1490,22 @@
|
||||
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
|
||||
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||
},
|
||||
"posix-character-classes": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
||||
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
|
||||
},
|
||||
"rechoir": {
|
||||
"version": "0.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
||||
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
|
||||
"integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
|
||||
"requires": {
|
||||
"resolve": "^1.1.6"
|
||||
"resolve": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"regex-not": {
|
||||
@ -1467,9 +1518,9 @@
|
||||
}
|
||||
},
|
||||
"repeat-element": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
|
||||
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
|
||||
"integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ=="
|
||||
},
|
||||
"repeat-string": {
|
||||
"version": "1.6.1",
|
||||
@ -1477,12 +1528,13 @@
|
||||
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
|
||||
"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
|
||||
"version": "1.21.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
|
||||
"integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
|
||||
"requires": {
|
||||
"is-core-module": "^2.1.0",
|
||||
"path-parse": "^1.0.6"
|
||||
"is-core-module": "^2.8.0",
|
||||
"path-parse": "^1.0.7",
|
||||
"supports-preserve-symlinks-flag": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"resolve-dir": {
|
||||
@ -1666,9 +1718,9 @@
|
||||
}
|
||||
},
|
||||
"source-map-url": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
||||
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
|
||||
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw=="
|
||||
},
|
||||
"split-string": {
|
||||
"version": "3.1.0",
|
||||
@ -1715,6 +1767,11 @@
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
||||
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
|
||||
},
|
||||
"supports-preserve-symlinks-flag": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
||||
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
|
||||
},
|
||||
"to-object-path": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
|
||||
@ -1838,9 +1895,9 @@
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"v8flags": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
|
||||
"integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
|
||||
"integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
|
||||
"requires": {
|
||||
"homedir-polyfill": "^1.0.1"
|
||||
}
|
||||
|
||||
@ -54,12 +54,12 @@
|
||||
"./build/server/Metrics"
|
||||
],
|
||||
"dependencies": {
|
||||
"grunt": "^1.3.0",
|
||||
"grunt": "^1.4.1",
|
||||
"grunt-banner": "^0.6.0",
|
||||
"grunt-check-dependencies": "^1.0.0",
|
||||
"grunt-contrib-clean": "^2.0.0",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-stripcomments": "^0.7.2",
|
||||
"grunt-mkdir": "^1.0.0"
|
||||
"grunt-mkdir": "^1.1.0",
|
||||
"grunt-stripcomments": "^0.7.2"
|
||||
}
|
||||
}
|
||||
|
||||
86
schema/json-api/opening-file.json
Normal file
86
schema/json-api/opening-file.json
Normal file
@ -0,0 +1,86 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema",
|
||||
"$id": "https://example.com/example.json",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"document",
|
||||
"editorConfig"
|
||||
],
|
||||
"properties": {
|
||||
"document": {
|
||||
"$id": "#/properties/document",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"key",
|
||||
"permissions",
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"key": {
|
||||
"$id": "#/properties/document/properties/key",
|
||||
"type": "string"
|
||||
},
|
||||
"permissions": {
|
||||
"$id": "#/properties/document/properties/permissions",
|
||||
"type": "object",
|
||||
"required": [],
|
||||
"additionalProperties": true
|
||||
},
|
||||
"url": {
|
||||
"$id": "#/properties/document/properties/url",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
},
|
||||
"editorConfig": {
|
||||
"$id": "#/properties/editorConfig",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"callbackUrl",
|
||||
"mode"
|
||||
],
|
||||
"properties": {
|
||||
"callbackUrl": {
|
||||
"$id": "#/properties/editorConfig/properties/callbackUrl",
|
||||
"type": "string"
|
||||
},
|
||||
"mode": {
|
||||
"$id": "#/properties/editorConfig/properties/mode",
|
||||
"type": "string"
|
||||
},
|
||||
"user": {
|
||||
"$id": "#/properties/editorConfig/properties/user",
|
||||
"type": "object",
|
||||
"required": [],
|
||||
"properties": {
|
||||
"group": {
|
||||
"$id": "#/properties/editorConfig/properties/user/properties/group",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"$id": "#/properties/editorConfig/properties/user/properties/id",
|
||||
"anyOf": [
|
||||
{
|
||||
"$id": "#/properties/editorConfig/properties/user/properties/id/anyOf/0",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"$id": "#/properties/editorConfig/properties/user/properties/id/anyOf/1",
|
||||
"type": "integer"
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": {
|
||||
"$id": "#/properties/editorConfig/properties/user/properties/name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
Reference in New Issue
Block a user