Resolve local Person ID
This commit is contained in:
		
							parent
							
								
									a01251477e
								
							
						
					
					
						commit
						f640a8fd5b
					
				
					 1 changed files with 11 additions and 2 deletions
				
			
		| 
						 | 
					@ -1,11 +1,20 @@
 | 
				
			||||||
import { JSDOM } from 'jsdom';
 | 
					import { JSDOM } from 'jsdom';
 | 
				
			||||||
import { toUnicode } from 'punycode';
 | 
					import { toUnicode } from 'punycode';
 | 
				
			||||||
 | 
					import parseAcct from '../../acct/parse';
 | 
				
			||||||
 | 
					import config from '../../config';
 | 
				
			||||||
import User, { validateUsername, isValidName, isValidDescription } from '../../models/user';
 | 
					import User, { validateUsername, isValidName, isValidDescription } from '../../models/user';
 | 
				
			||||||
import webFinger from '../webfinger';
 | 
					import webFinger from '../webfinger';
 | 
				
			||||||
import Resolver from './resolver';
 | 
					import Resolver from './resolver';
 | 
				
			||||||
import uploadFromUrl from '../../services/drive/upload-from-url';
 | 
					import uploadFromUrl from '../../services/drive/upload-from-url';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async (value, verifier?: string) => {
 | 
					export default async (value, verifier?: string) => {
 | 
				
			||||||
 | 
						const id = value.id || value;
 | 
				
			||||||
 | 
						const localPrefix = config.url + '/@';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (id.startsWith(localPrefix)) {
 | 
				
			||||||
 | 
							return User.findOne(parseAcct(id.slice(localPrefix)));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const resolver = new Resolver();
 | 
						const resolver = new Resolver();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const object = await resolver.resolve(value) as any;
 | 
						const object = await resolver.resolve(value) as any;
 | 
				
			||||||
| 
						 | 
					@ -21,7 +30,7 @@ export default async (value, verifier?: string) => {
 | 
				
			||||||
		throw new Error('invalid person');
 | 
							throw new Error('invalid person');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const finger = await webFinger(object.id, verifier);
 | 
						const finger = await webFinger(id, verifier);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const host = toUnicode(finger.subject.replace(/^.*?@/, ''));
 | 
						const host = toUnicode(finger.subject.replace(/^.*?@/, ''));
 | 
				
			||||||
	const hostLower = host.replace(/[A-Z]+/, matched => matched.toLowerCase());
 | 
						const hostLower = host.replace(/[A-Z]+/, matched => matched.toLowerCase());
 | 
				
			||||||
| 
						 | 
					@ -48,7 +57,7 @@ export default async (value, verifier?: string) => {
 | 
				
			||||||
				publicKeyPem: object.publicKey.publicKeyPem
 | 
									publicKeyPem: object.publicKey.publicKeyPem
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			inbox: object.inbox,
 | 
								inbox: object.inbox,
 | 
				
			||||||
			uri: object.id,
 | 
								uri: id,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue