51 lines
866 B
Go
51 lines
866 B
Go
package entries
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"io"
|
|
)
|
|
|
|
// WriteBitwardenCSV writes Bitwarden's native CSV interchange format.
|
|
// CSV is intentionally offered alongside JSON because Bitwarden routes the two
|
|
// formats through different importers.
|
|
func WriteBitwardenCSV(w io.Writer, secrets []Secret) error {
|
|
csvWriter := csv.NewWriter(w)
|
|
|
|
if err := csvWriter.Write([]string{
|
|
"folder",
|
|
"favorite",
|
|
"type",
|
|
"name",
|
|
"notes",
|
|
"fields",
|
|
"reprompt",
|
|
"login_uri",
|
|
"login_username",
|
|
"login_password",
|
|
"login_totp",
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, secret := range secrets {
|
|
if err := csvWriter.Write([]string{
|
|
"",
|
|
"0",
|
|
"login",
|
|
secret.Description,
|
|
secret.Notes,
|
|
"",
|
|
"0",
|
|
secret.URL,
|
|
secret.Username,
|
|
secret.Password,
|
|
"",
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
csvWriter.Flush()
|
|
return csvWriter.Error()
|
|
}
|