Merge branch 'fosscord:master' into master
This commit is contained in:
		
						commit
						553a3d5daf
					
				
							
								
								
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| # For most projects, this workflow file will not need changing; you simply need | ||||
| # to commit it to your repository. | ||||
| # | ||||
| # You may wish to alter this file to override the set of languages analyzed, | ||||
| # or to provide custom queries or build logic. | ||||
| # | ||||
| # ******** NOTE ******** | ||||
| # We have attempted to detect the languages in your repository. Please check | ||||
| # the `language` matrix defined below to confirm you have the correct set of | ||||
| # supported CodeQL languages. | ||||
| # | ||||
| name: "CodeQL" | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|   pull_request: | ||||
|     # The branches below must be a subset of the branches above | ||||
|     branches: [ master ] | ||||
|   schedule: | ||||
|     - cron: '25 10 * * 5' | ||||
| 
 | ||||
| jobs: | ||||
|   analyze: | ||||
|     name: Analyze | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       actions: read | ||||
|       contents: read | ||||
|       security-events: write | ||||
| 
 | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         language: [ 'javascript' ] | ||||
|         # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] | ||||
|         # Learn more: | ||||
|         # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed | ||||
| 
 | ||||
|     steps: | ||||
|     - name: Checkout repository | ||||
|       uses: actions/checkout@v2 | ||||
| 
 | ||||
|     # Initializes the CodeQL tools for scanning. | ||||
|     - name: Initialize CodeQL | ||||
|       uses: github/codeql-action/init@v1 | ||||
|       with: | ||||
|         languages: ${{ matrix.language }} | ||||
|         # If you wish to specify custom queries, you can do so here or in a config file. | ||||
|         # By default, queries listed here will override any specified in a config file. | ||||
|         # Prefix the list here with "+" to use these queries and those in the config file. | ||||
|         # queries: ./path/to/local/query, your-org/your-repo/queries@main | ||||
| 
 | ||||
|     # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java). | ||||
|     # If this step fails, then you should remove it and run the build manually (see below) | ||||
|     - name: Autobuild | ||||
|       uses: github/codeql-action/autobuild@v1 | ||||
| 
 | ||||
|     # ℹ️ Command-line programs to run using the OS shell. | ||||
|     # 📚 https://git.io/JvXDl | ||||
| 
 | ||||
|     # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines | ||||
|     #    and modify them (or add more) to build your code if your project | ||||
|     #    uses a compiled language | ||||
| 
 | ||||
|     #- run: | | ||||
|     #   make bootstrap | ||||
|     #   make release | ||||
| 
 | ||||
|     - name: Perform CodeQL Analysis | ||||
|       uses: github/codeql-action/analyze@v1 | ||||
							
								
								
									
										306
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										306
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -9,7 +9,7 @@ | ||||
| 			"version": "1.0.0", | ||||
| 			"license": "ISC", | ||||
| 			"dependencies": { | ||||
| 				"@fosscord/server-util": "^1.3.5", | ||||
| 				"@fosscord/server-util": "^1.3.9", | ||||
| 				"@types/jest": "^26.0.22", | ||||
| 				"@types/json-schema": "^7.0.7", | ||||
| 				"ajv": "^8.4.0", | ||||
| @ -18,6 +18,7 @@ | ||||
| 				"atomically": "^1.7.0", | ||||
| 				"bcrypt": "^5.0.1", | ||||
| 				"body-parser": "^1.19.0", | ||||
| 				"cheerio": "^1.0.0-rc.9", | ||||
| 				"dot-prop": "^6.0.1", | ||||
| 				"dotenv": "^8.2.0", | ||||
| 				"env-paths": "^2.2.1", | ||||
| @ -519,9 +520,9 @@ | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/@fosscord/server-util": { | ||||
| 			"version": "1.3.5", | ||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.5.tgz", | ||||
| 			"integrity": "sha512-gXtpiw1LoGeYxmIOKHVv6iAShye6SVYKuwjvLrnsrAXPeyE3h5/YwYAEnjycuKIVjafF9RVBWluWzWSj/TOPbA==", | ||||
| 			"version": "1.3.9", | ||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.9.tgz", | ||||
| 			"integrity": "sha512-1oOcMMOBVJO3BodyKQaP3ukg9ok8qfCeIAHSCcloO02lAq45Y+EI7Y7i5a8dotYl7CP8Uv8ke9mGqI3Tojg0Fw==", | ||||
| 			"dependencies": { | ||||
| 				"@types/jsonwebtoken": "^8.5.0", | ||||
| 				"@types/mongoose-autopopulate": "^0.10.1", | ||||
| @ -2441,6 +2442,11 @@ | ||||
| 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||||
| 			"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||||
| 		}, | ||||
| 		"node_modules/boolbase": { | ||||
| 			"version": "1.0.0", | ||||
| 			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||||
| 			"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" | ||||
| 		}, | ||||
| 		"node_modules/brace-expansion": { | ||||
| 			"version": "1.1.11", | ||||
| 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||
| @ -2917,6 +2923,41 @@ | ||||
| 				"node": ">=10" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/cheerio": { | ||||
| 			"version": "1.0.0-rc.9", | ||||
| 			"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", | ||||
| 			"integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", | ||||
| 			"dependencies": { | ||||
| 				"cheerio-select": "^1.4.0", | ||||
| 				"dom-serializer": "^1.3.1", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"htmlparser2": "^6.1.0", | ||||
| 				"parse5": "^6.0.1", | ||||
| 				"parse5-htmlparser2-tree-adapter": "^6.0.1", | ||||
| 				"tslib": "^2.2.0" | ||||
| 			}, | ||||
| 			"engines": { | ||||
| 				"node": ">= 6" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/cheeriojs/cheerio?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/cheerio-select": { | ||||
| 			"version": "1.4.0", | ||||
| 			"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", | ||||
| 			"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", | ||||
| 			"dependencies": { | ||||
| 				"css-select": "^4.1.2", | ||||
| 				"css-what": "^5.0.0", | ||||
| 				"domelementtype": "^2.2.0", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"domutils": "^2.6.0" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/sponsors/fb55" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/chokidar": { | ||||
| 			"version": "3.5.1", | ||||
| 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | ||||
| @ -3436,6 +3477,32 @@ | ||||
| 				"node": "*" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/css-select": { | ||||
| 			"version": "4.1.2", | ||||
| 			"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", | ||||
| 			"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", | ||||
| 			"dependencies": { | ||||
| 				"boolbase": "^1.0.0", | ||||
| 				"css-what": "^5.0.0", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"domutils": "^2.6.0", | ||||
| 				"nth-check": "^2.0.0" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/sponsors/fb55" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/css-what": { | ||||
| 			"version": "5.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", | ||||
| 			"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", | ||||
| 			"engines": { | ||||
| 				"node": ">= 6" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/sponsors/fb55" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/cssom": { | ||||
| 			"version": "0.4.4", | ||||
| 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | ||||
| @ -3941,6 +4008,19 @@ | ||||
| 			"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", | ||||
| 			"dev": true | ||||
| 		}, | ||||
| 		"node_modules/dom-serializer": { | ||||
| 			"version": "1.3.2", | ||||
| 			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", | ||||
| 			"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", | ||||
| 			"dependencies": { | ||||
| 				"domelementtype": "^2.0.1", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"entities": "^2.0.0" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/domain-browser": { | ||||
| 			"version": "1.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | ||||
| @ -3951,6 +4031,17 @@ | ||||
| 				"npm": ">=1.2" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/domelementtype": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", | ||||
| 			"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", | ||||
| 			"funding": [ | ||||
| 				{ | ||||
| 					"type": "github", | ||||
| 					"url": "https://github.com/sponsors/fb55" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"node_modules/domexception": { | ||||
| 			"version": "2.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | ||||
| @ -3972,6 +4063,33 @@ | ||||
| 				"node": ">=8" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/domhandler": { | ||||
| 			"version": "4.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", | ||||
| 			"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", | ||||
| 			"dependencies": { | ||||
| 				"domelementtype": "^2.2.0" | ||||
| 			}, | ||||
| 			"engines": { | ||||
| 				"node": ">= 4" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/fb55/domhandler?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/domutils": { | ||||
| 			"version": "2.6.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", | ||||
| 			"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", | ||||
| 			"dependencies": { | ||||
| 				"dom-serializer": "^1.0.1", | ||||
| 				"domelementtype": "^2.2.0", | ||||
| 				"domhandler": "^4.2.0" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/fb55/domutils?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/dot-prop": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | ||||
| @ -4106,6 +4224,14 @@ | ||||
| 				"once": "^1.4.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/entities": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", | ||||
| 			"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/fb55/entities?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/env-paths": { | ||||
| 			"version": "2.2.1", | ||||
| 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | ||||
| @ -5179,6 +5305,24 @@ | ||||
| 				"node": ">=0.10" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/htmlparser2": { | ||||
| 			"version": "6.1.0", | ||||
| 			"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||
| 			"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", | ||||
| 			"funding": [ | ||||
| 				"https://github.com/fb55/htmlparser2?sponsor=1", | ||||
| 				{ | ||||
| 					"type": "github", | ||||
| 					"url": "https://github.com/sponsors/fb55" | ||||
| 				} | ||||
| 			], | ||||
| 			"dependencies": { | ||||
| 				"domelementtype": "^2.0.1", | ||||
| 				"domhandler": "^4.0.0", | ||||
| 				"domutils": "^2.5.2", | ||||
| 				"entities": "^2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/http-errors": { | ||||
| 			"version": "1.7.2", | ||||
| 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | ||||
| @ -8781,6 +8925,17 @@ | ||||
| 				"set-blocking": "~2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/nth-check": { | ||||
| 			"version": "2.0.0", | ||||
| 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", | ||||
| 			"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", | ||||
| 			"dependencies": { | ||||
| 				"boolbase": "^1.0.0" | ||||
| 			}, | ||||
| 			"funding": { | ||||
| 				"url": "https://github.com/fb55/nth-check?sponsor=1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/number-is-nan": { | ||||
| 			"version": "1.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | ||||
| @ -9101,8 +9256,15 @@ | ||||
| 		"node_modules/parse5": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | ||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", | ||||
| 			"dev": true | ||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" | ||||
| 		}, | ||||
| 		"node_modules/parse5-htmlparser2-tree-adapter": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", | ||||
| 			"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", | ||||
| 			"dependencies": { | ||||
| 				"parse5": "^6.0.1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/parseurl": { | ||||
| 			"version": "1.3.3", | ||||
| @ -11531,6 +11693,11 @@ | ||||
| 				"node": ">=4" | ||||
| 			} | ||||
| 		}, | ||||
| 		"node_modules/tslib": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", | ||||
| 			"integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" | ||||
| 		}, | ||||
| 		"node_modules/tty-browserify": { | ||||
| 			"version": "0.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | ||||
| @ -12693,9 +12860,9 @@ | ||||
| 			} | ||||
| 		}, | ||||
| 		"@fosscord/server-util": { | ||||
| 			"version": "1.3.5", | ||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.5.tgz", | ||||
| 			"integrity": "sha512-gXtpiw1LoGeYxmIOKHVv6iAShye6SVYKuwjvLrnsrAXPeyE3h5/YwYAEnjycuKIVjafF9RVBWluWzWSj/TOPbA==", | ||||
| 			"version": "1.3.9", | ||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.9.tgz", | ||||
| 			"integrity": "sha512-1oOcMMOBVJO3BodyKQaP3ukg9ok8qfCeIAHSCcloO02lAq45Y+EI7Y7i5a8dotYl7CP8Uv8ke9mGqI3Tojg0Fw==", | ||||
| 			"requires": { | ||||
| 				"@types/jsonwebtoken": "^8.5.0", | ||||
| 				"@types/mongoose-autopopulate": "^0.10.1", | ||||
| @ -14296,6 +14463,11 @@ | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"boolbase": { | ||||
| 			"version": "1.0.0", | ||||
| 			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||||
| 			"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" | ||||
| 		}, | ||||
| 		"brace-expansion": { | ||||
| 			"version": "1.1.11", | ||||
| 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||
| @ -14722,6 +14894,32 @@ | ||||
| 			"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", | ||||
| 			"dev": true | ||||
| 		}, | ||||
| 		"cheerio": { | ||||
| 			"version": "1.0.0-rc.9", | ||||
| 			"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", | ||||
| 			"integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", | ||||
| 			"requires": { | ||||
| 				"cheerio-select": "^1.4.0", | ||||
| 				"dom-serializer": "^1.3.1", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"htmlparser2": "^6.1.0", | ||||
| 				"parse5": "^6.0.1", | ||||
| 				"parse5-htmlparser2-tree-adapter": "^6.0.1", | ||||
| 				"tslib": "^2.2.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"cheerio-select": { | ||||
| 			"version": "1.4.0", | ||||
| 			"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", | ||||
| 			"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", | ||||
| 			"requires": { | ||||
| 				"css-select": "^4.1.2", | ||||
| 				"css-what": "^5.0.0", | ||||
| 				"domelementtype": "^2.2.0", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"domutils": "^2.6.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"chokidar": { | ||||
| 			"version": "3.5.1", | ||||
| 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | ||||
| @ -15162,6 +15360,23 @@ | ||||
| 				"randomfill": "^1.0.3" | ||||
| 			} | ||||
| 		}, | ||||
| 		"css-select": { | ||||
| 			"version": "4.1.2", | ||||
| 			"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", | ||||
| 			"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", | ||||
| 			"requires": { | ||||
| 				"boolbase": "^1.0.0", | ||||
| 				"css-what": "^5.0.0", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"domutils": "^2.6.0", | ||||
| 				"nth-check": "^2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"css-what": { | ||||
| 			"version": "5.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", | ||||
| 			"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" | ||||
| 		}, | ||||
| 		"cssom": { | ||||
| 			"version": "0.4.4", | ||||
| 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | ||||
| @ -15605,12 +15820,27 @@ | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"dom-serializer": { | ||||
| 			"version": "1.3.2", | ||||
| 			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", | ||||
| 			"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", | ||||
| 			"requires": { | ||||
| 				"domelementtype": "^2.0.1", | ||||
| 				"domhandler": "^4.2.0", | ||||
| 				"entities": "^2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"domain-browser": { | ||||
| 			"version": "1.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | ||||
| 			"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", | ||||
| 			"dev": true | ||||
| 		}, | ||||
| 		"domelementtype": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", | ||||
| 			"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" | ||||
| 		}, | ||||
| 		"domexception": { | ||||
| 			"version": "2.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | ||||
| @ -15628,6 +15858,24 @@ | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"domhandler": { | ||||
| 			"version": "4.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", | ||||
| 			"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", | ||||
| 			"requires": { | ||||
| 				"domelementtype": "^2.2.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"domutils": { | ||||
| 			"version": "2.6.0", | ||||
| 			"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", | ||||
| 			"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", | ||||
| 			"requires": { | ||||
| 				"dom-serializer": "^1.0.1", | ||||
| 				"domelementtype": "^2.2.0", | ||||
| 				"domhandler": "^4.2.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"dot-prop": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | ||||
| @ -15749,6 +15997,11 @@ | ||||
| 				"once": "^1.4.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"entities": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", | ||||
| 			"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" | ||||
| 		}, | ||||
| 		"env-paths": { | ||||
| 			"version": "2.2.1", | ||||
| 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | ||||
| @ -16628,6 +16881,17 @@ | ||||
| 			"integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", | ||||
| 			"dev": true | ||||
| 		}, | ||||
| 		"htmlparser2": { | ||||
| 			"version": "6.1.0", | ||||
| 			"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||
| 			"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", | ||||
| 			"requires": { | ||||
| 				"domelementtype": "^2.0.1", | ||||
| 				"domhandler": "^4.0.0", | ||||
| 				"domutils": "^2.5.2", | ||||
| 				"entities": "^2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"http-errors": { | ||||
| 			"version": "1.7.2", | ||||
| 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | ||||
| @ -19560,6 +19824,14 @@ | ||||
| 				"set-blocking": "~2.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"nth-check": { | ||||
| 			"version": "2.0.0", | ||||
| 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", | ||||
| 			"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", | ||||
| 			"requires": { | ||||
| 				"boolbase": "^1.0.0" | ||||
| 			} | ||||
| 		}, | ||||
| 		"number-is-nan": { | ||||
| 			"version": "1.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | ||||
| @ -19812,8 +20084,15 @@ | ||||
| 		"parse5": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | ||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", | ||||
| 			"dev": true | ||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" | ||||
| 		}, | ||||
| 		"parse5-htmlparser2-tree-adapter": { | ||||
| 			"version": "6.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", | ||||
| 			"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", | ||||
| 			"requires": { | ||||
| 				"parse5": "^6.0.1" | ||||
| 			} | ||||
| 		}, | ||||
| 		"parseurl": { | ||||
| 			"version": "1.3.3", | ||||
| @ -21828,6 +22107,11 @@ | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"tslib": { | ||||
| 			"version": "2.2.0", | ||||
| 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", | ||||
| 			"integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" | ||||
| 		}, | ||||
| 		"tty-browserify": { | ||||
| 			"version": "0.0.1", | ||||
| 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | ||||
|  | ||||
| @ -29,7 +29,7 @@ | ||||
| 	}, | ||||
| 	"homepage": "https://github.com/fosscord/fosscord-api#readme", | ||||
| 	"dependencies": { | ||||
| 		"@fosscord/server-util": "^1.3.5", | ||||
| 		"@fosscord/server-util": "^1.3.9", | ||||
| 		"@types/jest": "^26.0.22", | ||||
| 		"@types/json-schema": "^7.0.7", | ||||
| 		"ajv": "^8.4.0", | ||||
| @ -38,6 +38,7 @@ | ||||
| 		"atomically": "^1.7.0", | ||||
| 		"bcrypt": "^5.0.1", | ||||
| 		"body-parser": "^1.19.0", | ||||
| 		"cheerio": "^1.0.0-rc.9", | ||||
| 		"dot-prop": "^6.0.1", | ||||
| 		"dotenv": "^8.2.0", | ||||
| 		"env-paths": "^2.2.1", | ||||
|  | ||||
| @ -4,7 +4,7 @@ import { HTTPError } from "lambert-server"; | ||||
| import { MessageCreateSchema } from "../../../../../schema/Message"; | ||||
| import { emitEvent } from "../../../../../util/Event"; | ||||
| import { check } from "../../../../../util/instanceOf"; | ||||
| import { handleMessage } from "../../../../../util/Message"; | ||||
| import { handleMessage, postHandleMessage } from "../../../../../util/Message"; | ||||
| 
 | ||||
| const router = Router(); | ||||
| 
 | ||||
| @ -40,6 +40,8 @@ router.patch("/", check(MessageCreateSchema), async (req, res) => { | ||||
| 		data: { ...toObject(message), nonce: undefined } | ||||
| 	} as MessageUpdateEvent); | ||||
| 
 | ||||
| 	postHandleMessage(message); | ||||
| 
 | ||||
| 	return res.json(toObject(message)); | ||||
| }); | ||||
| 
 | ||||
|  | ||||
| @ -1,14 +1,28 @@ | ||||
| import { ChannelModel, MessageCreateEvent } from "@fosscord/server-util"; | ||||
| import { ChannelModel, Embed, Message, MessageCreateEvent, MessageUpdateEvent } from "@fosscord/server-util"; | ||||
| import { Snowflake } from "@fosscord/server-util"; | ||||
| import { MessageModel } from "@fosscord/server-util"; | ||||
| import { PublicMemberProjection } from "@fosscord/server-util"; | ||||
| import { toObject } from "@fosscord/server-util"; | ||||
| import { getPermission } from "@fosscord/server-util"; | ||||
| import { Message } from "@fosscord/server-util"; | ||||
| import { HTTPError } from "lambert-server"; | ||||
| import fetch from "node-fetch"; | ||||
| import cheerio from "cheerio"; | ||||
| import { emitEvent } from "./Event"; | ||||
| // TODO: check webhook, application, system author
 | ||||
| 
 | ||||
| const LINK_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g; | ||||
| 
 | ||||
| const DEFAULT_FETCH_OPTIONS: any = { | ||||
| 	redirect: "follow", | ||||
| 	follow: 1, | ||||
| 	headers: { | ||||
| 		"user-agent": "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)" | ||||
| 	}, | ||||
| 	size: 1024 * 1024 * 1, | ||||
| 	compress: true, | ||||
| 	method: "GET" | ||||
| }; | ||||
| 
 | ||||
| export async function handleMessage(opts: Partial<Message>) { | ||||
| 	const channel = await ChannelModel.findOne({ id: opts.channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); | ||||
| 	if (!channel || !opts.channel_id) throw new HTTPError("Channel not found", 404); | ||||
| @ -43,6 +57,60 @@ export async function handleMessage(opts: Partial<Message>) { | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| // TODO: cache link result in db
 | ||||
| export async function postHandleMessage(message: Message) { | ||||
| 	var links = message.content?.match(LINK_REGEX); | ||||
| 	if (!links) return; | ||||
| 
 | ||||
| 	const data = { ...message }; | ||||
| 	data.embeds = data.embeds.filter((x) => x.type !== "link"); | ||||
| 
 | ||||
| 	links = links.slice(0, 5); // embed max 5 links
 | ||||
| 
 | ||||
| 	for (const link of links) { | ||||
| 		try { | ||||
| 			const request = await fetch(link, DEFAULT_FETCH_OPTIONS); | ||||
| 
 | ||||
| 			const text = await request.text(); | ||||
| 			const $ = cheerio.load(text); | ||||
| 
 | ||||
| 			const title = $('meta[property="og:title"]').attr("content"); | ||||
| 			const provider_name = $('meta[property="og:site_name"]').text(); | ||||
| 			const author_name = $('meta[property="article:author"]').attr("content"); | ||||
| 			const description = $('meta[property="og:description"]').attr("content") || $('meta[property="description"]').attr("content"); | ||||
| 			const image = $('meta[property="og:image"]').attr("content"); | ||||
| 			const url = $('meta[property="og:url"]').attr("content"); | ||||
| 			// TODO: color
 | ||||
| 			const embed: Embed = { | ||||
| 				provider: { | ||||
| 					url: link, | ||||
| 					name: provider_name | ||||
| 				} | ||||
| 			}; | ||||
| 
 | ||||
| 			if (author_name) embed.author = { name: author_name }; | ||||
| 			if (image) embed.thumbnail = { proxy_url: image, url: image }; | ||||
| 			if (title) embed.title = title; | ||||
| 			if (url) embed.url = url; | ||||
| 			if (description) embed.description = description; | ||||
| 
 | ||||
| 			if (title || description) { | ||||
| 				data.embeds.push(embed); | ||||
| 			} | ||||
| 		} catch (error) {} | ||||
| 	} | ||||
| 
 | ||||
| 	await Promise.all([ | ||||
| 		emitEvent({ | ||||
| 			event: "MESSAGE_UPDATE", | ||||
| 			guild_id: message.guild_id, | ||||
| 			channel_id: message.channel_id, | ||||
| 			data | ||||
| 		} as MessageUpdateEvent), | ||||
| 		MessageModel.updateOne({ id: message.id, channel_id: message.channel_id }, data).exec() | ||||
| 	]); | ||||
| } | ||||
| 
 | ||||
| export async function sendMessage(opts: Partial<Message>) { | ||||
| 	const message = await handleMessage({ ...opts, id: Snowflake.generate(), timestamp: new Date() }); | ||||
| 
 | ||||
| @ -50,5 +118,7 @@ export async function sendMessage(opts: Partial<Message>) { | ||||
| 
 | ||||
| 	await emitEvent({ event: "MESSAGE_CREATE", channel_id: opts.channel_id, data, guild_id: message.guild_id } as MessageCreateEvent); | ||||
| 
 | ||||
| 	postHandleMessage(data); // no await as it shouldnt block the message send function
 | ||||
| 
 | ||||
| 	return data; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paul Munteanu
						Paul Munteanu