diff options
Diffstat (limited to 'src/PassLink/PassLink.js')
-rw-r--r-- | src/PassLink/PassLink.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/PassLink/PassLink.js b/src/PassLink/PassLink.js new file mode 100644 index 0000000..db89796 --- /dev/null +++ b/src/PassLink/PassLink.js @@ -0,0 +1,42 @@ +import InvalidLink from '../Exception/PassLink/InvalidLink'; +import UnknownAction from '../Exception/PassLink/UnknownAction'; +import Connect from './Action/Connect'; + +class PassLink { + + /** + * + * @param {String} link + * @return {{server: String, action: String, parameters: {}}} + */ + analyzeLink(link) { + let url = new URL(link); + + if(['ext+passlink:', 'web+passlink:', 'passlink:'].indexOf(url.protocol) === -1 || url.pathname.indexOf('/do/') === -1) { + throw new InvalidLink(); + } + let [server, action] = url.pathname.split('do/'); + + let parameters = {}; + for(let key of url.searchParams.keys()) { + parameters[key] = url.searchParams.get(key); + } + parameters.baseUrl = `https://${server}`; + + return {server, action, parameters} + } + + /** + * + * @param {String} action + * @param {Object} parameters + * @return {PassLinkAction} + */ + getAction(action, parameters) { + if(action === 'connect') return new Connect(parameters); + + throw new UnknownAction(action); + } +} + +export default new PassLink();
\ No newline at end of file |