UNPKG

2.46 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const parseArgs = require('minimist')
4const axios = require('axios')
5const querystring = require('querystring')
6const HTMLParser = require('fast-html-parser');
7
8const DEFAULT_EXPIRE_DAYS = 7
9const DEFAULT_EXPIRE_VIEWS = 5
10
11const showHelp = (txt = '\r') => {
12 console.log(`${txt}
13 \rUsage:
14 \r $ pwpush <password> [parameters] [options]
15
16 \rParameters
17 \r --days | -d Days until the password is deleted. Default is ${DEFAULT_EXPIRE_DAYS}
18 \r --views | -v Number of visualizations until the password is deleted. Default is ${DEFAULT_EXPIRE_VIEWS}
19
20 \rOptions
21 \r --version Display package version.
22 \r --help | -h Display help usage information.
23
24 \rExample
25 \r $ pwpush MySuperSecretPassword --days 1 --views 2
26 `)
27 process.exit(0)
28}
29
30const cli = parseArgs(process.argv.slice(2), {
31 boolean: ['version', 'help'],
32 alias: {
33 d: 'days',
34 v: 'views',
35 h: 'help',
36 },
37 unknown: (value) => {
38 if (process.argv.slice(2, 3)[0] !== value) {
39 showHelp(`Unknown value: ${value}\n`)
40 }
41 },
42});
43
44if (!!cli.version) {
45 console.log(`${require('./package.json').version}`)
46 process.exit(0)
47}
48if (!!cli.help || !cli._[0]) {
49 showHelp()
50}
51
52const password = cli._[0]
53const expire_days = cli.days || DEFAULT_EXPIRE_DAYS
54const expire_views = cli.views || DEFAULT_EXPIRE_VIEWS
55
56const reqData = querystring.stringify({
57 'password[payload]': password,
58 'password[expire_after_days]': expire_days,
59 'password[expire_after_views]': expire_views,
60 'password[deletable_by_viewer]': 'on',
61})
62
63const reqOptions = {
64 method: 'post',
65 url: 'https://pwpush.com/p',
66 data: reqData,
67 headers: {
68 'Content-Type': 'application/x-www-form-urlencoded',
69 'Accept': 'text/html,application/xhtml+xml,application/xml',
70 },
71}
72
73const onResponseComplete = (response) => {
74 const rawHtml = response.data
75 const $dom = HTMLParser.parse(rawHtml)
76
77 try {
78 getResultText($dom)
79 } catch(err) {
80 console.error(`Something gets wrong!! ${err}`)
81 }
82}
83
84const getResultText = ($dom) => {
85 console.log(getExpirationDate($dom))
86 console.log(getUrlValue($dom))
87}
88
89const getUrlValue = ($dom) => `> ${$dom.querySelector('#url').attributes.value}`
90const getExpirationDate = ($dom) => $dom.querySelectorAll('p')[3].text.replace(/\n/g, ' ').trim()
91
92axios(reqOptions)
93 .then(onResponseComplete)
94 .catch(console.error)
95
96module.exports = {
97 password,
98 expire_days,
99 expire_views,
100 reqOptions
101}