-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathbase32.js
executable file
·108 lines (96 loc) · 2.4 KB
/
base32.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env node
var base32 = require('../lib/base32')
, fs = require('fs')
, usage = 'Usage: base32 [input_file] [-o output_file] [-d|--decode] [-s|--sha]'
, argv = require('minimist')(process.argv.slice(2))
, processor
, input
, output
if (argv.h) {
console.log(usage)
return
}
if (argv.v) {
console.log("v0.0.2")
return
}
argv.putback = function () {
var key
for (var i = 0; i < arguments.length; i++) {
arg = this[arguments[i]]
if (typeof arg == 'string') this._.unshift(arg)
}
}
function stream(input, output, processor) {
var kB = 0
, start = Date.now()
, out
input.on('data', function (chunk) {
out = processor.update(chunk)
if (out) {
output.write(out)
if (input.isTTY && output.isTTY) output.write("\n")
}
})
input.on('end', function () {
out = processor.finish()
if (out) output.write(out)
if (output.isTTY) output.write("\n")
})
}
// use stdout for output
if (argv.o && argv.o != '-') {
output = fs.createWriteStream(argv.o)
} else {
output = process.stdout
}
function hash_file(filename, output) {
base32.sha1.file(filename, function (err, hash) {
if (err) {
if (err.dir) {
if (argv.r || argv.d) {
fs.readdir(filename, function (err, files) {
if (err) {
return process.stderr.write("base32: " + filename + ": " + err.message + "\n")
}
for (var i = 0; i < files.length; i++) {
hash_file(filename + '/' + files[i], output)
}
})
}
if (!argv.r && !argv.d) {
return process.stderr.write("base32: " + filename + ": " + err.message + "\n")
}
}
return
}
output.write(hash + ' ' + filename + "\n")
})
return
}
argv.putback('d', 'decode', 's', 'sha', 'sha1', 'hash', 'r', 'd')
if (argv.s || argv.hash || argv.sha || argv.sha1) {
if (argv._.length == 0) argv._ = ['-']
var filename
for (var i = 0; i < argv._.length; i++) {
hash_file(argv._[i], output)
}
return
}
if (argv.d || argv.decode) {
processor = new base32.Decoder()
} else {
processor = new base32.Encoder()
}
var filename, i
if (argv._.length == 0) argv._.push('-')
for (i = 0; i < argv._.length; i++) {
filename = argv._[i]
if (filename == '-') {
input = process.stdin
process.stdin.resume()
} else {
input = fs.createReadStream(filename)
}
stream(input, output, processor)
}