fedimbed: finally impl request signing
untested
This commit is contained in:
		
							parent
							
								
									78026c7aeb
								
							
						
					
					
						commit
						9af670dbeb
					
				
					 4 changed files with 155 additions and 11 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
node_modules/
 | 
					node_modules/
 | 
				
			||||||
 | 
					priv/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config.json
 | 
					config.json
 | 
				
			||||||
config.prod.json
 | 
					config.prod.json
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
  "homepage": "https://gitdab.com/Cynosphere/HiddenPhox#readme",
 | 
					  "homepage": "https://gitdab.com/Cynosphere/HiddenPhox#readme",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@ctrl/tinycolor": "^3.6.0",
 | 
					    "@ctrl/tinycolor": "^3.6.0",
 | 
				
			||||||
 | 
					    "@peertube/http-signature": "^1.7.0",
 | 
				
			||||||
    "@projectdysnomia/dysnomia": "^0.1.2",
 | 
					    "@projectdysnomia/dysnomia": "^0.1.2",
 | 
				
			||||||
    "dumpy": "github:Cynosphere/dumpy.js",
 | 
					    "dumpy": "github:Cynosphere/dumpy.js",
 | 
				
			||||||
    "google-images": "^2.1.0",
 | 
					    "google-images": "^2.1.0",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										106
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										106
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -4,6 +4,9 @@ dependencies:
 | 
				
			||||||
  '@ctrl/tinycolor':
 | 
					  '@ctrl/tinycolor':
 | 
				
			||||||
    specifier: ^3.6.0
 | 
					    specifier: ^3.6.0
 | 
				
			||||||
    version: 3.6.0
 | 
					    version: 3.6.0
 | 
				
			||||||
 | 
					  '@peertube/http-signature':
 | 
				
			||||||
 | 
					    specifier: ^1.7.0
 | 
				
			||||||
 | 
					    version: 1.7.0
 | 
				
			||||||
  '@projectdysnomia/dysnomia':
 | 
					  '@projectdysnomia/dysnomia':
 | 
				
			||||||
    specifier: ^0.1.2
 | 
					    specifier: ^0.1.2
 | 
				
			||||||
    version: 0.1.2
 | 
					    version: 0.1.2
 | 
				
			||||||
| 
						 | 
					@ -898,6 +901,15 @@ packages:
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@peertube/http-signature@1.7.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-aGQIwo6/sWtyyqhVK4e1MtxYz4N1X8CNt6SOtCc+Wnczs5S5ONaLHDDR8LYaGn0MgOwvGgXyuZ5sJIfd7iyoUw==}
 | 
				
			||||||
 | 
					    engines: {node: '>=0.10'}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					      jsprim: 1.4.2
 | 
				
			||||||
 | 
					      sshpk: 1.17.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /@projectdysnomia/dysnomia@0.1.2:
 | 
					  /@projectdysnomia/dysnomia@0.1.2:
 | 
				
			||||||
    resolution: {integrity: sha512-F64G64JwFWn/QUFqkhsyBvXJ0Du3E6Y0yu8tSrcukAnSeW8qV+reKqeQnMmHcQWYopwuYM8Q6OF/VX6VKggtOA==}
 | 
					    resolution: {integrity: sha512-F64G64JwFWn/QUFqkhsyBvXJ0Du3E6Y0yu8tSrcukAnSeW8qV+reKqeQnMmHcQWYopwuYM8Q6OF/VX6VKggtOA==}
 | 
				
			||||||
    engines: {node: '>=10.4.0'}
 | 
					    engines: {node: '>=10.4.0'}
 | 
				
			||||||
| 
						 | 
					@ -1057,6 +1069,17 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 | 
					    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /asn1@0.2.6:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      safer-buffer: 2.1.2
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /assert-plus@1.0.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
 | 
				
			||||||
 | 
					    engines: {node: '>=0.8'}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /balanced-match@1.0.2:
 | 
					  /balanced-match@1.0.2:
 | 
				
			||||||
    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 | 
					    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1064,6 +1087,12 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
 | 
					    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /bcrypt-pbkdf@1.0.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tweetnacl: 0.14.5
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /bl@4.1.0:
 | 
					  /bl@4.1.0:
 | 
				
			||||||
    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
 | 
					    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
| 
						 | 
					@ -1218,6 +1247,10 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
 | 
					    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /core-util-is@1.0.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /create-error-class@3.0.2:
 | 
					  /create-error-class@3.0.2:
 | 
				
			||||||
    resolution: {integrity: sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==}
 | 
					    resolution: {integrity: sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==}
 | 
				
			||||||
    engines: {node: '>=0.10.0'}
 | 
					    engines: {node: '>=0.10.0'}
 | 
				
			||||||
| 
						 | 
					@ -1253,6 +1286,13 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
 | 
					    resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /dashdash@1.14.1:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
 | 
				
			||||||
 | 
					    engines: {node: '>=0.10'}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /debug@4.3.4:
 | 
					  /debug@4.3.4:
 | 
				
			||||||
    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
 | 
					    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
 | 
				
			||||||
    engines: {node: '>=6.0'}
 | 
					    engines: {node: '>=6.0'}
 | 
				
			||||||
| 
						 | 
					@ -1337,6 +1377,13 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
 | 
					    resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /ecc-jsbn@0.1.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      jsbn: 0.1.1
 | 
				
			||||||
 | 
					      safer-buffer: 2.1.2
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /emoji-regex@8.0.0:
 | 
					  /emoji-regex@8.0.0:
 | 
				
			||||||
    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 | 
					    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
| 
						 | 
					@ -1480,6 +1527,11 @@ packages:
 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /extsprintf@1.3.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
 | 
				
			||||||
 | 
					    engines: {'0': node >=0.6.0}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /fast-deep-equal@3.1.3:
 | 
					  /fast-deep-equal@3.1.3:
 | 
				
			||||||
    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 | 
					    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
| 
						 | 
					@ -1583,6 +1635,12 @@ packages:
 | 
				
			||||||
    engines: {node: '>=4'}
 | 
					    engines: {node: '>=4'}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /getpass@0.1.7:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /gifwrap@0.9.4:
 | 
					  /gifwrap@0.9.4:
 | 
				
			||||||
    resolution: {integrity: sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==}
 | 
					    resolution: {integrity: sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==}
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
| 
						 | 
					@ -1890,14 +1948,32 @@ packages:
 | 
				
			||||||
      argparse: 2.0.1
 | 
					      argparse: 2.0.1
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /jsbn@0.1.1:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /json-schema-traverse@0.4.1:
 | 
					  /json-schema-traverse@0.4.1:
 | 
				
			||||||
    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
 | 
					    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /json-schema@0.4.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /json-stable-stringify-without-jsonify@1.0.1:
 | 
					  /json-stable-stringify-without-jsonify@1.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
 | 
					    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /jsprim@1.4.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
 | 
				
			||||||
 | 
					    engines: {node: '>=0.6.0'}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					      extsprintf: 1.3.0
 | 
				
			||||||
 | 
					      json-schema: 0.4.0
 | 
				
			||||||
 | 
					      verror: 1.10.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /levn@0.4.1:
 | 
					  /levn@0.4.1:
 | 
				
			||||||
    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
 | 
					    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
 | 
				
			||||||
    engines: {node: '>= 0.8.0'}
 | 
					    engines: {node: '>= 0.8.0'}
 | 
				
			||||||
| 
						 | 
					@ -2476,7 +2552,6 @@ packages:
 | 
				
			||||||
  /safer-buffer@2.1.2:
 | 
					  /safer-buffer@2.1.2:
 | 
				
			||||||
    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 | 
					    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
    optional: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /sax@1.2.4:
 | 
					  /sax@1.2.4:
 | 
				
			||||||
    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
 | 
					    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
 | 
				
			||||||
| 
						 | 
					@ -2593,6 +2668,22 @@ packages:
 | 
				
			||||||
      - supports-color
 | 
					      - supports-color
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /sshpk@1.17.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==}
 | 
				
			||||||
 | 
					    engines: {node: '>=0.10.0'}
 | 
				
			||||||
 | 
					    hasBin: true
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      asn1: 0.2.6
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					      bcrypt-pbkdf: 1.0.2
 | 
				
			||||||
 | 
					      dashdash: 1.14.1
 | 
				
			||||||
 | 
					      ecc-jsbn: 0.1.2
 | 
				
			||||||
 | 
					      getpass: 0.1.7
 | 
				
			||||||
 | 
					      jsbn: 0.1.1
 | 
				
			||||||
 | 
					      safer-buffer: 2.1.2
 | 
				
			||||||
 | 
					      tweetnacl: 0.14.5
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /ssri@8.0.1:
 | 
					  /ssri@8.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
 | 
					    resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
 | 
				
			||||||
    engines: {node: '>= 8'}
 | 
					    engines: {node: '>= 8'}
 | 
				
			||||||
| 
						 | 
					@ -2723,6 +2814,10 @@ packages:
 | 
				
			||||||
      safe-buffer: 5.2.1
 | 
					      safe-buffer: 5.2.1
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /tweetnacl@0.14.5:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /tweetnacl@1.0.3:
 | 
					  /tweetnacl@1.0.3:
 | 
				
			||||||
    resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
 | 
					    resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
 | 
				
			||||||
    requiresBuild: true
 | 
					    requiresBuild: true
 | 
				
			||||||
| 
						 | 
					@ -2800,6 +2895,15 @@ packages:
 | 
				
			||||||
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 | 
					    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /verror@1.10.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
 | 
				
			||||||
 | 
					    engines: {'0': node >=0.6.0}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      assert-plus: 1.0.0
 | 
				
			||||||
 | 
					      core-util-is: 1.0.2
 | 
				
			||||||
 | 
					      extsprintf: 1.3.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /webidl-conversions@3.0.1:
 | 
					  /webidl-conversions@3.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 | 
					    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,7 @@
 | 
				
			||||||
const {MessageFlags} = require("@projectdysnomia/dysnomia").Constants;
 | 
					const {MessageFlags} = require("@projectdysnomia/dysnomia").Constants;
 | 
				
			||||||
 | 
					const fs = require("node:fs");
 | 
				
			||||||
 | 
					const path = require("node:path");
 | 
				
			||||||
 | 
					const httpSignature = require("@peertube/http-signature");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const events = require("../lib/events.js");
 | 
					const events = require("../lib/events.js");
 | 
				
			||||||
const logger = require("../lib/logger.js");
 | 
					const logger = require("../lib/logger.js");
 | 
				
			||||||
| 
						 | 
					@ -64,6 +67,38 @@ async function resolvePlatform(url) {
 | 
				
			||||||
  return nodeinfo.software.name;
 | 
					  return nodeinfo.software.name;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const keyId = "https://hf.c7.pm/action#main-key";
 | 
				
			||||||
 | 
					const privKey = fs.readFileSync(path.resolve("../../priv/private.pem"));
 | 
				
			||||||
 | 
					async function signedFetch(url, options) {
 | 
				
			||||||
 | 
					  const urlObj = new URL(url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const headers = {
 | 
				
			||||||
 | 
					    host: urlObj.host,
 | 
				
			||||||
 | 
					    date: new Date().toUTCString(),
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const headerNames = ["(request-target)", "host", "date"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  httpSignature.sign(
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      getHeader: (name) => headers[name.toLowerCase()],
 | 
				
			||||||
 | 
					      setHeader: (name, value) => (headers[name] = value),
 | 
				
			||||||
 | 
					      method: options.method ?? "GET",
 | 
				
			||||||
 | 
					      path: urlObj.pathname,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      keyId,
 | 
				
			||||||
 | 
					      key: privKey,
 | 
				
			||||||
 | 
					      headers: headerNames,
 | 
				
			||||||
 | 
					      authorizationHeaderName: "signature",
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options.headers = Object.assign(headers, options.headers ?? {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return await fetch(url, options);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function processUrl(msg, url, spoiler = false) {
 | 
					async function processUrl(msg, url, spoiler = false) {
 | 
				
			||||||
  let urlObj = new URL(url);
 | 
					  let urlObj = new URL(url);
 | 
				
			||||||
  let platform = await resolvePlatform(url);
 | 
					  let platform = await resolvePlatform(url);
 | 
				
			||||||
| 
						 | 
					@ -78,7 +113,7 @@ async function processUrl(msg, url, spoiler = false) {
 | 
				
			||||||
  let content, cw, author, timestamp;
 | 
					  let content, cw, author, timestamp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Fetch post
 | 
					  // Fetch post
 | 
				
			||||||
  const rawPostData = await fetch(url, {
 | 
					  const rawPostData = await signedFetch(url, {
 | 
				
			||||||
    headers: {
 | 
					    headers: {
 | 
				
			||||||
      "User-Agent": FRIENDLY_USERAGENT,
 | 
					      "User-Agent": FRIENDLY_USERAGENT,
 | 
				
			||||||
      Accept: "application/activity+json",
 | 
					      Accept: "application/activity+json",
 | 
				
			||||||
| 
						 | 
					@ -106,7 +141,7 @@ async function processUrl(msg, url, spoiler = false) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Follow redirect from /object since we need the ID from /notice
 | 
					    // Follow redirect from /object since we need the ID from /notice
 | 
				
			||||||
    if (PATH_REGEX.pleroma.test(urlObj.pathname)) {
 | 
					    if (PATH_REGEX.pleroma.test(urlObj.pathname)) {
 | 
				
			||||||
      url = await fetch(url, {
 | 
					      url = await signedFetch(url, {
 | 
				
			||||||
        method: "HEAD",
 | 
					        method: "HEAD",
 | 
				
			||||||
        headers: {
 | 
					        headers: {
 | 
				
			||||||
          "User-Agent": FRIENDLY_USERAGENT,
 | 
					          "User-Agent": FRIENDLY_USERAGENT,
 | 
				
			||||||
| 
						 | 
					@ -157,7 +192,7 @@ async function processUrl(msg, url, spoiler = false) {
 | 
				
			||||||
          options
 | 
					          options
 | 
				
			||||||
        )}, ${JSON.stringify(headers)}`
 | 
					        )}, ${JSON.stringify(headers)}`
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      const rawPostData2 = await fetch(
 | 
					      const rawPostData2 = await signedFetch(
 | 
				
			||||||
        redirUrl,
 | 
					        redirUrl,
 | 
				
			||||||
        Object.assign(options, {
 | 
					        Object.assign(options, {
 | 
				
			||||||
          headers: Object.assign(headers, {
 | 
					          headers: Object.assign(headers, {
 | 
				
			||||||
| 
						 | 
					@ -299,12 +334,15 @@ async function processUrl(msg, url, spoiler = false) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Author data is not sent with the post with AS2
 | 
					    // Author data is not sent with the post with AS2
 | 
				
			||||||
    const authorData = await fetch(postData.actor ?? postData.attributedTo, {
 | 
					    const authorData = await signedFetch(
 | 
				
			||||||
 | 
					      postData.actor ?? postData.attributedTo,
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
        headers: {
 | 
					        headers: {
 | 
				
			||||||
          "User-Agent": FRIENDLY_USERAGENT,
 | 
					          "User-Agent": FRIENDLY_USERAGENT,
 | 
				
			||||||
          Accept: "application/activity+json",
 | 
					          Accept: "application/activity+json",
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    })
 | 
					      }
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
      .then((res) => res.json())
 | 
					      .then((res) => res.json())
 | 
				
			||||||
      .catch((err) => {
 | 
					      .catch((err) => {
 | 
				
			||||||
        logger.error("fedimbed", `Failed to get author for "${url}": ${err}`);
 | 
					        logger.error("fedimbed", `Failed to get author for "${url}": ${err}`);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue