mirror of
https://github.com/XFox111/SimpleOTP.git
synced 2026-04-22 08:00:45 +03:00
Created OTPFactory overview (markdown)
@@ -0,0 +1,61 @@
|
|||||||
|
In case you are working on an authenticator app, you can use `OTPFactory` to handle code re-generation and timer updates
|
||||||
|
## Configure factory
|
||||||
|
To configure factory just simply pass an `OTPConfiguration` object to constructor:
|
||||||
|
```csharp
|
||||||
|
OTPFactory factory = new (config);
|
||||||
|
```
|
||||||
|
You can update configuration any time by updating `Configuration` property
|
||||||
|
|
||||||
|
## Subscribe to events
|
||||||
|
To keep code up to date on the UI side, subscribe to `CodeUpdated` event:
|
||||||
|
```csharp
|
||||||
|
factory.CodeUpdated += (newCode) =>
|
||||||
|
{
|
||||||
|
// Update your data here
|
||||||
|
this.codeLabel.Text = newCode.GetCode();
|
||||||
|
};
|
||||||
|
```
|
||||||
|
Also it could be useful to subscribe to `PropertyChanged` event, since it occurs every second to keep code countdown up to date (countdown update frequency is set on instance constructor by parameter `timeUpdateInterval` in milliseconds)
|
||||||
|
```csharp
|
||||||
|
OTPFactory factory = new (config); // use 'new (config, 100)' to update countdown every 100 milliseconds
|
||||||
|
factory.PropertyChanged += (s, e) =>
|
||||||
|
{
|
||||||
|
if (e.PropertyName == nameof(factory.TimeLeft))
|
||||||
|
this.countdownLabel.Text = factory.TimeLeft.ToString();
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use MVVM pattern with OTPFactory
|
||||||
|
`OTPFactory` object is MVVM ready, so you can use it as is in your ViewModel
|
||||||
|
```csharp
|
||||||
|
public class MyViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private OTPFactory _factory = new (OTPConfiguration.GenerateConfiguration("FoxDev Studio", "eugene@xfox111.net")); // Example value
|
||||||
|
public OTPFactory Factory
|
||||||
|
{
|
||||||
|
get => _factory;
|
||||||
|
set => SetProperty(ref _factory, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
```xaml
|
||||||
|
<ContentPage
|
||||||
|
...
|
||||||
|
xmlns:vm="Your.ViewModel.Namespace">
|
||||||
|
|
||||||
|
<ContentPage.BindingContext>
|
||||||
|
<vm:MyViewModel/>
|
||||||
|
</ContentPage.BindingContext>
|
||||||
|
|
||||||
|
<StackLayout>
|
||||||
|
<Label Text="{Binding Factory.Configuration.Issuer}" FontSize="28"/>
|
||||||
|
<Label Text="{Binding Factory.Configuration.AccountName}" FontAttributes="Italic"/>
|
||||||
|
<Label Text="{Binding Factory.CurrentCode.Code}"/>
|
||||||
|
<Label Text="{Binding Factory.TimeLeft}"/>
|
||||||
|
</StackLayout>
|
||||||
|
...
|
||||||
|
</ContentPage>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dispose OTPFactory
|
||||||
|
When you don't need `OTPFactory` anymore it is important to dispose it to prevent memory leaks. To do so just simply call `OTPFactory.Dispose()` or use it with `using keyword`
|
||||||
Reference in New Issue
Block a user