TeamsIdからBitwardenへの移行をまたやってました。
作っておいてよかったということでサクッとやったのですがいくつか修正しています。
TeamsId2BitwardenConverter
移行に使ったのは例によって自作ツール。
個人のデータを移行する
次の例は、TeamsIdのデータをBitwardenのPersonalへ移行する例です。(BitwardenにはOrganizationもある)
https://gist.github.com/guitarrapc/e11e2535503330519171825df2283b1c
必要なのは、Bitwardenのフォルダ構造の定義JSONと、TeamsIdのexport csvです。
あとは、teamsIdのcsvをteamsidPersonalCsvに指定して、bitwardenのフォルダ構造jsonをbitwardenFolderDefinitionJsonに指定すれば変換されます。
static void Personal(string outputPath, string teamsidPersonalCsv, string bitwardenFolderDefinitionJson) { var folderDefinition = DeserializeFolderJson<BitwardenFolderDefinition>(bitwardenFolderDefinitionJson); // convert teamsid to bitwarden var teamsIdDatas = new CsvParser(teamsidPersonalCsv).Parse<TeamsIdDefinition4>(); var bitwardenItems = new BitwardenConverter(folderDefinition).Convert(teamsIdDatas, defaultGroup: "TestGroup"); // serialize bitwarden import data var importData = new BitwardenDefinition { folders = folderDefinition.folders, items = bitwardenItems, }; importData.WriteJson(outputPath); }
使いにくかった処理をいくつか修正しました。
- 前の実装はTeamsIdのカラム数を12に決め打ちしてて、カラム数が満たないときにエラー出てたので
ITeamsIdDefinitionを実装すればいいようにしました。書かなくていいようにカラム数分の定義を1-12まで用意しておいたので、楽になるはず - 出力先フォルダも自動生成するようにしました。(わすれてました)
- Group埋め込みとかEmail/UserNameの分岐がなかったので足しました。ひどい
あと、ついでにCIをAppveyorからCircleCIに変更しました。 Appveyor、残りGolangとC#とPowerShellでいくつかCI回しているので全部CircleCIに移行予定。
GolangはGitHub Actionsでも動かしているので、CircleCIじゃなくてもいいかな。
まとめ
とりあえず数回移行に使って問題なかったので便利に使ってます。(移行中にデータを確認するので100回以上使ってる)
TeamsId、相変わらず非ascii (日本語も) だめなのでもう使わない....。
Bitwarden webが少々不安感あるので、k8sでクラスタ組もうかなぁ。