Merge remote-tracking branch 'remotes/origin/release/v7.1.0' into develop

This commit is contained in:
Sergey Konovalov
2022-03-24 15:32:42 +03:00
16 changed files with 574 additions and 287 deletions

View File

@ -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": {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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
View File

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

View File

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

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