public GoogleCalendarServiceProxy(GoogleAuthenticator googleAuthenticator) { _authenticator = googleAuthenticator.Authenticator; }
private static void Main( string[] args) { using var stream = File.Open(args[0], FileMode.Open, FileAccess.Read); using var reader = new PasswordSafeReader(stream); reader.SetPassphrase(args[1]); var list = new List <KeyValuePair <string, string> >(); while (reader.Read()) { switch (reader.CurrentPartType) { case PasswordSafePartType.Header: var header = reader.Header; break; case PasswordSafePartType.Record: var record = reader.Record; var group = record.Group; const string strongboxLabel = "Strongbox TOTP Auth URL: ["; if (record.Notes?.Contains(strongboxLabel) == true) { var beginIndex = record.Notes.IndexOf( strongboxLabel, StringComparison.Ordinal) + strongboxLabel.Length; var endIndex = record.Notes.IndexOf(']', beginIndex); list.Add( new KeyValuePair <string, string>( record.Title, record.Notes.Substring( beginIndex, endIndex - beginIndex))); } break; case PasswordSafePartType.End: break; case PasswordSafePartType.None: break; case PasswordSafePartType.Keys: break; default: throw new ArgumentOutOfRangeException(); } } foreach (var(key, value) in list) { var authenticator = new GoogleAuthenticator(); authenticator.HMACType = Authenticator.HMACTypes.SHA256; var qs = ParseQueryString(value.Substring(value.IndexOf("?", StringComparison.Ordinal) + 1)); var privatekey = qs["secret"]; authenticator.Enroll(privatekey); if (int.TryParse(qs["digits"], out var querydigits) && querydigits != 0) { authenticator.CodeDigits = querydigits; } var issuer = qs["issuer"]; var beginIndex = value.IndexOf("otpauth://totp/", StringComparison.OrdinalIgnoreCase) + "otpauth://totp/".Length; var label = value.Substring( beginIndex, value.IndexOf('?', StringComparison.OrdinalIgnoreCase) - beginIndex); var periods = qs["period"]; if (string.IsNullOrEmpty(periods) == false) { if (int.TryParse(periods, out var period)) { authenticator.Period = period; } } var code = authenticator.CurrentCode; Console.WriteLine($"{label}: {code}"); } }