APIを使用する新しいアプリケーションに移行するには、パスワードデータベース(Keepass)のcsvファイルを使用する必要があります。 API は、JSON データ型を必要とするパブリッシュ要求を通じて更新されます。私がしなければならないのは、KeePass CSVを使用してAPIに関連付けられたパスワードやその他の情報をエクスポートすることです。私はbashとawkを使ってスクリプトを書くことにしました。
csvファイルの列は次のように配列されます。
"Group","Title","Username","Password","URL","Notes","TOTP","Icon","Last Modified","Created"
一部のコメントには改行があるため、「説明」フィールドは複数行です。
"That's an important note, <br/>
some extra infos <br/>
concerning a password"
以下は、データを公開するためのAPIリクエストの例です。データフィールドはJSON形式です。
このリクエストに必要なフィールドをすべて追加したわけではありませんが、すでにどのように機能するかを確認できます。 KeePass と API フィールド名が異なるため、一部のフィールド名が異なります。
var1=name
var2=my.name
var3=password456
curl -s --request PUT -u username123:password123 -H 'Content-Type: application/json; charset=utf-8' https://tpm.mydomain.com/index.php/api/v5/passwords/1659.json --data-binary @- <<DATA
{
"name": "$var1",
"username": "$var2",
"password": "$var3"
}
DATA
私のCSVファイルフィールドをフィールドごとに解析し、行解析を完了したら、データベースにパスワードを公開するようにAPIリクエストを行う予定です。次に、残りの行ごとにこれを行います。
CSVを処理するために、私の場合は非常に便利で便利なようなAWK言語を見つけました。 gsubコマンドを使用して私のファイルを何度もテストしましたが、これは改行文字(\ n)を置き換えるのに役立ちました。どうやって進むべきかわかりません。以下はその一部です(最初の項目のみが機能します。
cat keepass.csv | awk NF=NF RS=/\n/ OFS=\n
cat keepass.csv |awk 'BEGIN {RS=","}{gsub("/\n/","",$0); print $0}'
cat keepass.csv | awk 'BEGIN {RS=""}{gsub(/\n/,"",$6); print $0}'
また、awkの後に-vを追加してbash varを共有できることを知っています。これは私が得ることができる最も近いコードです。
awk -v RS='"\n' -v FPAT='"[^"]*"|[^,]*' '{
print "Row n°", NR, ""
for (i=1; i<=NF; i++) {
sub(/^"/, "", $i)
printf "Field %d, value=[%s]\n", i, $i
}} keepass.csv
私が探しているのは、複数行のコメントを考慮してcsvのすべての列を解析し、それをJSON形式でbashのグローバル変数に入力するコマンドです。
次のようにしてビルドする必要があると思います。
awk -v 'BEGIN{parsing and replacing keeping '\n' of notes}
if end of row,
return boolean to bash for processing the API requests, wait,
restart the loop}''
私はスクリプトが初めてで、数行で完了することができると思いますが、どのように進むべきかわかりません。必要に応じて言語をPythonに変更し、コードにいくつかのツールを追加できます。
ベストアンサー1
複数行はCSVセルの機能であり、CSV認識ユーティリティを使用できます。ミラー。
たとえば、次のような場合このCSVファイル君は走れるよ
mlr --csv cut -f fieldA acr.csv
最初の列を切り取るmlr --icsv --ojson cut -f fieldA acr.csv
最初の列を切り取り、すべて次に変換します。JSON
[
{
"fieldA": "That's an important note,\nsome extra infos\nConcerning a password\nIpsum"
},
{
"fieldA": "hello"
}
]
ご覧のとおり、Millerはセルキャリッジリターン文字(RFC4180準拠)。
以下はサンプル入力ファイルのイメージです。