feat: 导入 MemRelay 初始源码
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
: "${BW_SERVER:?BW_SERVER is required}"
|
||||
: "${BW_EMAIL:?BW_EMAIL is required}"
|
||||
: "${BW_PASSWORD:?BW_PASSWORD is required}"
|
||||
|
||||
if [ "${BW_OFFLINE_ONLY:-0}" = "1" ]; then
|
||||
BW_SESSION="$(bw unlock "$BW_PASSWORD" --raw)"
|
||||
export BW_SESSION
|
||||
items="$(bw list items)"
|
||||
count="$(printf '%s' "$items" | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>process.stdout.write(String(JSON.parse(d).length)))')"
|
||||
if [ "$count" -lt 1 ]; then
|
||||
echo "Offline cache is empty" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Bitwarden CLI offline validation passed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
bw logout >/dev/null 2>&1 || true
|
||||
bw config server "$BW_SERVER" >/dev/null
|
||||
|
||||
BW_SESSION="$(bw login "$BW_EMAIL" "$BW_PASSWORD" --raw)"
|
||||
export BW_SESSION
|
||||
bw sync >/dev/null
|
||||
|
||||
item_json='{"type":1,"name":"MemRelay Stage Zero","login":{"username":"stage0","password":"test-secret","totp":"JBSWY3DPEHPK3PXP"}}'
|
||||
encoded="$(printf '%s' "$item_json" | bw encode)"
|
||||
created="$(bw create item "$encoded")"
|
||||
item_id="$(printf '%s' "$created" | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>process.stdout.write(JSON.parse(d).id))')"
|
||||
|
||||
totp="$(bw get totp "$item_id")"
|
||||
case "$totp" in
|
||||
??????) ;;
|
||||
*) echo "Unexpected TOTP response" >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
pids=""
|
||||
for _index in 1 2 3 4 5; do
|
||||
bw get item "$item_id" >/dev/null &
|
||||
pids="$pids $!"
|
||||
done
|
||||
for pid in $pids; do
|
||||
wait "$pid"
|
||||
done
|
||||
|
||||
bw lock >/dev/null
|
||||
BW_SESSION="$(bw unlock "$BW_PASSWORD" --raw)"
|
||||
export BW_SESSION
|
||||
bw get item "$item_id" >/dev/null
|
||||
bw sync >/dev/null
|
||||
|
||||
echo "Bitwarden CLI online validation passed"
|
||||
Reference in New Issue
Block a user