-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy path1pass.elv
75 lines (64 loc) · 1.67 KB
/
1pass.elv
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
use str
use re
use path
var account = my
var op = (external op)
var password-field = "password"
fn session-token {|&account=$account|
if (has-env OP_SESSION_$account) {
get-env OP_SESSION_$account
} else {
put $nil
}
}
fn set-token {|&account=$account token|
set-env OP_SESSION_$account $token
}
fn signin {|&account=$account &no-refresh=$false|
var refresh-opts = [ --session (session-token) ]
if $no-refresh {
set refresh-opts = []
}
set-token &account=$account ($op signin --raw $@refresh-opts </dev/tty)
}
fn get-item-raw {|item &options=[] &fields=[]|
signin
if (not-eq $fields []) {
set options = [ $@options --fields (str:join , $fields) ]
} else {
set options = [ $@options ]
}
$op item get $@options $item | slurp
}
fn get-item {|item &options=[] &fields=[]|
if (!= (count $fields) 1) {
set options = [ $@options --format json ]
}
var item-str = (get-item-raw &options=$options &fields=$fields $item)
if (== (count $fields) 1) {
put $item-str
} else {
echo $item-str | from-json
}
}
fn get-password {|item|
get-item &fields=[$password-field] $item
}
var op_plugins_file = ~/.config/op/plugins.sh
fn read-aliases {
if (path:is-regular $op_plugins_file) {
cat $op_plugins_file | each {|l|
var m = [(re:find '^alias (\w+)="(.*?)"' $l)]
if (not-eq $m []) {
var name = $m[0][groups][1][text]
var cmd = [(edit:wordify $m[0][groups][2][text])]
var fndef = (print 'edit:add-var '$name'~ {|@_args| ' $@cmd '$@_args }' | slurp)
eval $fndef
}
if (re:find '^export' $l) {
var _ key val = (re:split &max=3 '[ =]' $l)
set-env $key $val
}
}
}
}