tech.guitarrapc.cóm

Technical updates

TeamsId2BitwardenConverter でTeamsId から Bitwardenへの移行を再度行う

TeamsId から Bitwarden への移行をまたやってました。

tech.guitarrapc.com

作っておいてよかったということでサクッとやったのですがいくつか修正しています。

目次

TeamsId2BitwardenConverter

移行に使ったのは例によって自作ツール。

github.com

個人のデータを移行する

次の例は、TeamsIdのデータをBitwarden のPersonalへ移行する例です。(Bitwardenには Organizationもある)

gist.github.com

必要なのは、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でクラスタ組もうかなぁ。