Skip to content

Commit c401feb

Browse files
committed
chore: Updated README and docs.
1 parent 17da4e6 commit c401feb

3 files changed

Lines changed: 190 additions & 104 deletions

File tree

.github/workflows/docs.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ on:
66
- main
77
- master
88
paths:
9-
- docs/**
109
- lib/i18n/**
1110
- pubspec.yaml
1211
pull_request:
@@ -28,6 +27,6 @@ jobs:
2827
- name: Dispatch 👋
2928
uses: peter-evans/repository-dispatch@v2
3029
with:
31-
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
30+
token: ${{ secrets.DOCS_DISPATCH_TOKEN }}
3231
repository: openauthenticator-app/docs
3332
event-type: app-updated

README.md

Lines changed: 94 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -3,140 +3,155 @@
33
<img src="https://github.com/Skyost/OpenAuthenticator/raw/main/docs/public/images/logo.svg" alt="Logo" width="120" height="120">
44
</a>
55

6-
<h3 align="center">Open Authenticator</h3>
6+
<h3>Open Authenticator</h3>
77

8-
<p align="center">
8+
<p>
99
A cross-platform OTP app, free and open-source.
1010
<br />
1111
<a href="https://openauthenticator.app/#download"><strong>Download now »</strong></a>
1212
<br />
1313
<br />
1414
<a href="https://openauthenticator.app">Website</a>
1515
·
16-
<a href="https://github.com/Skyost/OpenAuthenticator/issues">Issue tracker</a>
16+
<a href="https://github.com/openauthenticator-app/openauthenticator">App</a>
1717
·
18-
<a href="https://github.com/Skyost/OpenAuthenticator/#contribute">Contribute</a>
18+
<a href="https://github.com/openauthenticator-app/backend">Backend</a>
19+
·
20+
<a href="https://openauthenticator.app/#contribute">Contribute</a>
1921
</p>
20-
</div>
2122

22-
![GitHub License](https://img.shields.io/github/license/Skyost/OpenAuthenticator)
23-
![GitHub top language](https://img.shields.io/github/languages/top/Skyost/OpenAuthenticator)
24-
![GitHub Repo stars](https://img.shields.io/github/stars/Skyost/OpenAuthenticator)
23+
<p>
24+
<img src="https://img.shields.io/github/license/openauthenticator-app/backend" alt="License">
25+
<img src="https://img.shields.io/github/languages/top/openauthenticator-app/backend" alt="Top language">
26+
<img src="https://img.shields.io/github/stars/openauthenticator-app/backend" alt="GitHub stars">
27+
</p>
28+
</div>
2529

26-
## Motivations
30+
## Overview
2731

28-
It's pretty simple : I was using Twilio Authy as my main TOTP app without any problem so far.
29-
Back in January 2024, my Authy for Windows app started displaying me the following message :
32+
**Open Authenticator** was created as an alternative to closed OTP applications that lock users into
33+
a single ecosystem or make migration difficult.
3034

31-
> The Authy Desktop apps Linux, MacOS, and Windows, will reach their End-of-Life (EOL) on March 19, 2024.
35+
The project focuses on three core ideas :
3236

33-
Wow. So Twilio has decided to shutdown all their desktop apps, leaving only three months (!) to users like me
34-
to find an alternative.
35-
Add to that that there is almost no way to export your TOTPs from this app, and it was enough for me
36-
to consider creating an alternative.
37+
- freedom : your authenticator should stay usable on every major platform ;
38+
- transparency : the app is open-source and auditable ;
39+
- interoperability : sync is available, and the backend can be self-hosted.
3740

38-
That's how **Open Authenticator** was born, with open-sourceness, interoperability and freedom in mind.
41+
Open Authenticator currently targets Android, iOS, Windows, macOS and Linux.
3942

4043
## Features
4144

42-
* Open-source, and will always be.
43-
* Free to use.
44-
* Multilanguage. Currently, only english and french are supported, but you can [help translating the app](#help-translating-it) into your language !
45-
* Cross-platform.
46-
* TOTPs synchronization supported through Firebase Firestore.
45+
- Cross-platform Flutter application for mobile and desktop.
46+
- Free and open-source software under the [GPL v3.0 license](https://github.com/Skyost/OpenAuthenticator/blob/main/LICENSE).
47+
- Secure local storage for your OTP data.
48+
- QR code scanning and `otpauth://` link handling.
49+
- Optional synchronization across devices with self-hostable backend support.
50+
- Backup management and recovery flows.
51+
- Local authentication support on compatible devices.
52+
- Multi-language support, with [community translations](https://openauthenticator.app/translate/).
4753

4854
## Screenshots
4955

50-
<img src="https://github.com/Skyost/OpenAuthenticator/raw/main/docs/public/images/screenshots/home.png" height="400">
56+
<img src="https://openauthenticator.app/images/screenshots/home.png" alt="Open Authenticator screenshot" height="400">
5157

5258
## Download
5359

54-
Download links are available on the [Open Authenticator website](https://openauthenticator.app/#download).
60+
Prebuilt packages and store links are available on the [official website](https://openauthenticator.app/#download).
61+
62+
## Development Setup
5563

56-
## Build and run
64+
### Prerequisites
5765

58-
### App
66+
- A recent stable version of Flutter.
67+
- Dart SDK `>=3.10.0 <4.0.0`.
68+
- Platform toolchains for the targets you want to run.
5969

60-
First, you'll have to compile SVG files into `.si`. In order to do that, you can use the following command :
70+
It is recommended to stay on Flutter stable :
6171

62-
```shell
63-
dart run "open_authenticator:compile_svg"
72+
```sh
73+
flutter channel stable
74+
flutter --version
6475
```
6576

66-
Then, you'll have to generate your own `app.dart` file.
67-
It contains all credentials needed to run the app (Firebase, Sign-In providers, RevenueCat, ...).
77+
### Clone the repository and install dependencies
6878

69-
To do so, you can run the following utility :
79+
To clone the repository and install dependencies, run in a shell :
7080

71-
```shell
72-
dart run "open_authenticator:generate"
81+
```sh
82+
git clone https://github.com/openauthenticator-app/openauthenticator.git
83+
cd openauthenticator
84+
flutter pub get
7385
```
7486

75-
And then, you'll also need to link the app to Firebase. You can follow the steps [here](https://firebase.google.com/docs/flutter/setup)
76-
for that.
87+
### Generate required files
88+
89+
Some files used by the app are generated or refreshed during setup.
7790

78-
This should allow you to run the app in its minimal state.
79-
For advanced features, like synchronization, sign-in using providers, ... you'll also need
80-
to configure them on your side.
91+
1. Compile SVG assets to `.si`:
8192

82-
Use the links below to do so :
93+
```sh
94+
dart run open_authenticator:compile_svg
95+
```
8396

84-
* [Configure Firebase Auth](https://firebase.google.com/docs/auth/flutter/start).
85-
* [Configure Firebase Firestore](https://firebase.google.com/docs/firestore).
86-
* [Configure Firebase Dynamic Links](https://firebase.google.com/docs/dynamic-links).
87-
* [Configure RevenueCat](https://www.revenuecat.com/docs/getting-started/entitlements).
88-
* [Configure Stripe with RevenueCat](https://www.revenuecat.com/docs/getting-started/entitlements/stripe-products).
89-
* [Configure Stripe payment links](https://docs.stripe.com/payment-links)
97+
2. Generate source files used by code generation:
9098

91-
### Website
99+
```sh
100+
dart run build_runner build --delete-conflicting-outputs
101+
dart run slang
102+
```
92103

93-
The website has been created using [Nuxt 3](https://nuxt.com/). Just run the following commands
94-
to start a dev server :
104+
3. Generate `lib/app.dart` for your local build:
95105

96-
```shell
97-
cd docs
98-
npm install
99-
npm run dev
106+
```sh
107+
dart run open_authenticator:generate
100108
```
101109

102-
You'll be able to access it on [localhost:3000](http//localhost:3000).
110+
`open_authenticator:generate` lets you customize values such as:
103111

104-
## What's next
112+
- the app name and package identifiers ;
113+
- the backend URL ;
114+
- repository and translation links ;
115+
- Sentry DSN ;
116+
- RevenueCat public keys and offering ID ;
117+
- store identifiers and legal links.
105118

106-
If this project becomes popular, I would like to provide its own backend to Open Authenticator.
107-
Currently, it's using Firebase Auth / Firestore, which is perfect for this project in its current
108-
state. Having a dedicated server would be too expensive for the moment.
119+
You can inspect the available options with:
109120

110-
If it's sustainable enough, we could even consider completely removing any TOTPs limit from the app.
121+
```sh
122+
dart run open_authenticator:generate --help
123+
```
111124

112-
## License
125+
The generated file is intended for local or custom builds, so make sure it matches the environment
126+
you want to run against.
113127

114-
Open Authenticator is licensed under the [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/).
128+
### Run the app
115129

116-
## Contribute
130+
```sh
131+
flutter run
132+
```
117133

118-
If you like this project, there are a lot of ways for you to contribute to it !
119-
Please read the [contribution guide](https://github.com/Skyost/OpenAuthenticator/blob/main/CONTRIBUTING.md)
120-
before getting started.
134+
## Contributing
121135

122-
### Help translating it
136+
Contributions are more than welcome. For setup details, contribution rules and PR expectations, read
137+
[CONTRIBUTING.md](https://github.com/Skyost/OpenAuthenticator/blob/main/CONTRIBUTING.md).
123138

124-
We're looking for translators. If you want to help but know nothing about code, just go on the
125-
[translation page](https://openauthenticator.app/translate/) on the website.
139+
You can also help by :
126140

127-
You can also translate the app into your language by submitting a pull request targeting the files located
128-
in the `lib/i18n` folder (for the app) and `docs/locales` (for the website).
129-
Feel also free to submit a pull request for any typo you encounter.
141+
- reporting bugs or suggesting features in the
142+
[issue tracker](https://github.com/Skyost/OpenAuthenticator/issues) ;
143+
- improving translations through the
144+
[translation page](https://openauthenticator.app/translate/) ;
145+
- submitting fixes for documentation, UI text or code.
130146

131-
### Report bugs or suggest new features
147+
## Support The Project
132148

133-
You can report bugs or suggest new features in the [issue tracker](https://github.com/Skyost/OpenAuthenticator/issues).
134-
If you don't want to create a Github account, you can also [contact the developer](https://openauthenticator.app/contact) directly.
149+
If you want to support Open Authenticator financially, you can use :
135150

136-
### Donate
151+
- [Ko-fi](https://ko-fi.com/Skyost)
152+
- [PayPal](https://paypal.me/Skyost)
153+
- [GitHub Sponsors](https://github.com/sponsors/Skyost)
137154

138-
You can donate for this project using either [PayPal](http://paypal.me/Skyost),
139-
[Ko-Fi](https://ko-fi.com/Skyost) or [Github sponsors](https://github.com/sponsors/Skyost).
155+
## License
140156

141-
If you don't want to donate, any [kind message](https://openauthenticator.app/contact) is also
142-
appreciated !
157+
Open Authenticator is licensed under the [GNU General Public License v3.0](LICENSE).

bin/generate.dart

Lines changed: 95 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,101 @@ import 'package:args/args.dart';
55
/// Generates "lib/app.dart".
66
void main(List<String> arguments) {
77
ArgParser parser = ArgParser()
8-
..addOption('app-name', defaultsTo: 'Open Authenticator')
9-
..addOption('app-author', defaultsTo: 'Skyost')
10-
..addOption('app-package-name', defaultsTo: 'app.openauthenticator')
11-
..addOption('default-backend-url', defaultsTo: 'https://backend.openauthenticator.app')
12-
..addOption('github-repository-url', defaultsTo: 'https://github.com/openauthenticator-app/openauthenticator')
13-
..addOption('app-translation-url', defaultsTo: 'https://openauthenticator.app/translate/')
14-
..addOption('sentry-dsn', defaultsTo: '')
15-
..addOption('revenue-cat-public-key-android', defaultsTo: '')
16-
..addOption('revenue-cat-public-key-darwin', defaultsTo: '')
17-
..addOption('revenue-cat-public-key-windows', defaultsTo: '')
18-
..addOption('revenue-cat-offering-id', defaultsTo: '')
19-
..addOption('logo-dev-api-key', defaultsTo: '')
20-
..addOption('google-play-identifier', defaultsTo: '')
21-
..addOption('app-store-identifier', defaultsTo: '')
22-
..addOption('privacy-policy-link', defaultsTo: 'https://openauthenticator.app/privacy-policy')
23-
..addOption('terms-of-service-link', defaultsTo: 'https://openauthenticator.app/terms-of-service')
24-
..addOption('restore-purchases-link', defaultsTo: 'https://openauthenticator.app/contact');
25-
26-
final results = parser.parse(arguments);
27-
28-
final content = '''
29-
import 'package:flutter/foundation.dart';
30-
8+
..addOption(
9+
'app-name',
10+
defaultsTo: 'Open Authenticator',
11+
help: 'The app name.',
12+
)
13+
..addOption(
14+
'app-author',
15+
defaultsTo: 'Skyost',
16+
help: 'The app author.',
17+
)
18+
..addOption(
19+
'app-package-name',
20+
defaultsTo: 'app.openauthenticator',
21+
help: 'The app package name.',
22+
)
23+
..addOption(
24+
'default-backend-url',
25+
defaultsTo: 'https://backend.openauthenticator.app',
26+
help: 'The app backend URL.',
27+
)
28+
..addOption(
29+
'github-repository-url',
30+
defaultsTo: 'https://github.com/openauthenticator-app/openauthenticator',
31+
help: 'The Github repository URL.',
32+
)
33+
..addOption(
34+
'app-translation-url',
35+
defaultsTo: 'https://openauthenticator.app/translate/',
36+
help: 'The app translation URL.',
37+
)
38+
..addOption(
39+
'sentry-dsn',
40+
defaultsTo: '',
41+
help: 'The Sentry DSN.',
42+
)
43+
..addOption(
44+
'revenue-cat-public-key-android',
45+
defaultsTo: '',
46+
help: 'The RevenueCat Android public key.',
47+
)
48+
..addOption(
49+
'revenue-cat-public-key-darwin',
50+
defaultsTo: '',
51+
help: 'The RevenueCat iOS / macOS public key.',
52+
)
53+
..addOption(
54+
'revenue-cat-public-key-windows-linux',
55+
defaultsTo: '',
56+
help: 'The RevenueCat Windows / Linux public key.',
57+
)
58+
..addOption(
59+
'revenue-cat-offering-id',
60+
defaultsTo: '',
61+
help: 'The Contributor Plan offering id.',
62+
)
63+
..addOption(
64+
'logo-dev-api-key',
65+
defaultsTo: '',
66+
help: 'The `logo.dev` API key.',
67+
)
68+
..addOption(
69+
'google-play-identifier',
70+
defaultsTo: '',
71+
help: 'The Google Play app identifier.',
72+
)
73+
..addOption(
74+
'app-store-identifier',
75+
defaultsTo: '',
76+
help: 'The Apple App Store app identifier.',
77+
)
78+
..addOption(
79+
'privacy-policy-link',
80+
defaultsTo: 'https://openauthenticator.app/privacy-policy',
81+
help: 'The link to the privacy policy.',
82+
)
83+
..addOption(
84+
'terms-of-service-link',
85+
defaultsTo: 'https://openauthenticator.app/terms-of-service',
86+
help: 'The link to the terms of service.',
87+
)
88+
..addFlag(
89+
'help',
90+
abbr: 'h',
91+
negatable: false,
92+
help: 'Show this help message.',
93+
);
94+
95+
ArgResults results = parser.parse(arguments);
96+
if (results['help']) {
97+
stdout.writeln(parser.usage);
98+
return;
99+
}
100+
101+
String content =
102+
'''
31103
/// Contains some app constants.
32104
class App {
33105
/// The app name.

0 commit comments

Comments
 (0)