Skip to content

Commit eb39270

Browse files
author
replydev
committed
authy importer
1 parent 6d98cc8 commit eb39270

File tree

5 files changed

+52
-11
lines changed

5 files changed

+52
-11
lines changed

converters/authy.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import sys
2+
import xml.etree.ElementTree as ET
3+
import json
4+
5+
def fetch_json(filename):
6+
tree = ET.parse(filename)
7+
j = tree.find("string").text.replace(""","\"")
8+
return json.loads(j)
9+
10+
def object_to_cotp_json(d):
11+
final = []
12+
for element in d:
13+
final.append(
14+
{
15+
'label': element['name'],
16+
'secret': element['decryptedSecret'],
17+
'issuer': "",
18+
'digits': int(element['digits'])
19+
}
20+
)
21+
return final
22+
23+
def main():
24+
if len(sys.argv) != 3:
25+
print("Usage: python authy.py [INPUT_FILE] [OUTPUT_FILE]")
26+
return
27+
28+
data = fetch_json(sys.argv[1])
29+
output_file = open(sys.argv[2],'w')
30+
output_file.write(json.dumps(object_to_cotp_json(data)))
31+
output_file.close()
32+
33+
34+
main()

converters/gauth_to_json.py renamed to converters/gauth.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def get_accounts(filename):
1212
'label': row[0],
1313
'secret': row[1],
1414
'issuer': row[2],
15+
'digits': 6,
1516
}
1617
)
1718
c.close()

src/argument_functions.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ pub fn import(args: Vec<String>){
2727
match &args[2][..]{
2828
"cotp" | "andotp" => result = importers::and_otp::import(&args[3]),
2929
"aegis" => result = importers::aegis::import(&args[3]),
30-
"gauth" | "google_authenticator" => result = importers::gauth::import(&args[3]),
30+
"gauth" |
31+
"google_authenticator" |
32+
"authy" => result = importers::converted::import(&args[3]),
3133
_=> {
3234
println!("Invalid argument: {}", &args[2]);
3335
return;
@@ -57,6 +59,8 @@ pub fn import(args: Vec<String>){
5759
println!("\"cotp\"");
5860
println!("\"aegis\"");
5961
println!("\"andotp\"");
62+
println!("\"gauth\" or \"google_authenticator\"");
63+
println!("\"authy\"");
6064
}
6165
}
6266

src/importers/gauth.rs renamed to src/importers/converted.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,35 @@ use serde_json;
44
use serde::Deserialize;
55

66
#[derive(Deserialize)]
7-
struct GAuthJson{
7+
struct ConvertedJson{
88
label: Option<String>,
99
secret: String,
1010
issuer: Option<String>,
11+
digits: u64,
1112
}
1213

1314
pub fn import(filepath: &str) -> Result<Vec<OTPElement>,String> {
1415
let file_to_import_contents = read_to_string(filepath).unwrap();
15-
let result: Result<Vec<GAuthJson>,serde_json::Error> = serde_json::from_str(&file_to_import_contents);
16-
let gauth: Vec<GAuthJson>;
16+
let result: Result<Vec<ConvertedJson>,serde_json::Error> = serde_json::from_str(&file_to_import_contents);
17+
let vector: Vec<ConvertedJson>;
1718

1819
match result{
19-
Ok(r) => gauth = r,
20+
Ok(r) => vector = r,
2021
Err(e) => return Err(format!("{}",e)),
2122
}
2223

2324
let mut elements: Vec<OTPElement> = Vec::new();
2425

25-
for i in 0..gauth.len(){
26-
let secret = gauth[i].secret.to_owned();
27-
let issuer = gauth[i].issuer.to_owned().unwrap_or_default();
28-
let label = gauth[i].label.to_owned().unwrap_or_default();
26+
for i in 0..vector.len(){
27+
let secret = vector[i].secret.to_owned();
28+
let issuer = vector[i].issuer.to_owned().unwrap_or_default();
29+
let label = vector[i].label.to_owned().unwrap_or_default();
30+
let digits = vector[i].digits;
2931
elements.push(OTPElement::new(
3032
secret,
3133
issuer,
3234
label,
33-
6,
35+
digits,
3436
String::from("TOTP"),
3537
String::from("SHA1"),
3638
String::from(""),

src/importers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
pub mod and_otp;
22
pub mod aegis;
3-
pub mod gauth;
3+
pub mod converted;

0 commit comments

Comments
 (0)