1
0
Fork 0
mirror of https://github.com/seiichiro0185/sailotp.git synced 2024-05-14 07:00:55 +00:00

Preparation for Release of Version 1.2

This commit is contained in:
seiichiro 2015-06-17 21:15:57 +02:00
parent 323893d7ee
commit b9b665afa2
7 changed files with 168 additions and 131 deletions

View file

@ -47,7 +47,8 @@ lupdate_only {
qml/components/*.qml
TRANSLATIONS = i18n/de.ts \
i18n/en.ts
i18n/en.ts \
i18n/sv.ts
}
include(src/qzxing/QZXing.pri)

View file

@ -12,24 +12,29 @@
<translation type="vanished">Copyright: Stefan Brand&lt;br/&gt;Lizenz: BSD (3-Klausel)</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="57"/>
<location filename="../qml/pages/About.qml" line="65"/>
<source>A Simple Sailfish OTP Generator
(RFC 6238/4226 compatible)</source>
<translation>Ein einfacher Sailfish OTP-Generator
(RFC 6238/4226-kompatibel)</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="67"/>
<location filename="../qml/pages/About.qml" line="74"/>
<source>Copyright: Stefan Brand
License: BSD (3-clause)</source>
<translation>Copyright: Stefan Brand
Lizenz: BSD (3-Klausel)</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="88"/>
<location filename="../qml/pages/About.qml" line="92"/>
<source>SailOTP uses the following third party libs:</source>
<translation>SailOTP verwendet folgende externe Bibliotheken:</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="103"/>
<source>Translators:</source>
<translation>Übersetzer:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
@ -217,7 +222,7 @@ Lizenz: BSD (3-Klausel)</translation>
<context>
<name>MainView</name>
<message>
<location filename="../qml/pages/MainView.qml" line="102"/>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>About</source>
<translation>Über</translation>
</message>
@ -230,57 +235,57 @@ Lizenz: BSD (3-Klausel)</translation>
<translation type="vanished">Datenbank importieren</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="106"/>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Export / Import</source>
<translation>Export / Import</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="110"/>
<location filename="../qml/pages/MainView.qml" line="112"/>
<source>Add Token</source>
<translation>Token hinzufügen</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="136"/>
<location filename="../qml/pages/MainView.qml" line="138"/>
<source>Nothing here</source>
<translation>Hier ist nichts</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="137"/>
<location filename="../qml/pages/MainView.qml" line="139"/>
<source>Pull down to add a OTP</source>
<translation>Nach unten ziehen zum hinzufügen</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="148"/>
<location filename="../qml/pages/MainView.qml" line="150"/>
<source>Deleting</source>
<translation>Lösche</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source>Token for </source>
<translation>Token für </translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source> copied to clipboard</source>
<translation> kopiert</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="232"/>
<location filename="../qml/pages/MainView.qml" line="234"/>
<source>Move up</source>
<translation>Nach oben</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="237"/>
<location filename="../qml/pages/MainView.qml" line="239"/>
<source>Move down</source>
<translation>Nach unten</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="244"/>
<source>Edit</source>
<translation>Bearbeiten</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="248"/>
<location filename="../qml/pages/MainView.qml" line="250"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
@ -296,32 +301,32 @@ Lizenz: BSD (3-Klausel)</translation>
<context>
<name>ScanOTP</name>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="53"/>
<location filename="../qml/pages/ScanOTP.qml" line="52"/>
<source>Can&apos;t access temporary directory</source>
<translation>Kein Zugriff auf temporäres Verzeichnis.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="63"/>
<location filename="../qml/pages/ScanOTP.qml" line="62"/>
<source>Add manually</source>
<translation>Manuell hinzufügen</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scan Code</source>
<translation>Code scannen</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scanning...</source>
<translation>scanne...</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="99"/>
<location filename="../qml/pages/ScanOTP.qml" line="95"/>
<source>No valid Token data found.</source>
<translation>Kein gültiges Token gefunden.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="140"/>
<location filename="../qml/pages/ScanOTP.qml" line="136"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Vorschau antippen um den Scan zu starten / zu stoppen. Nach unten ziehen um manuell hinzu zu fügen.</translation>
</message>

View file

@ -4,22 +4,27 @@
<context>
<name>About</name>
<message>
<location filename="../qml/pages/About.qml" line="57"/>
<location filename="../qml/pages/About.qml" line="65"/>
<source>A Simple Sailfish OTP Generator
(RFC 6238/4226 compatible)</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="67"/>
<location filename="../qml/pages/About.qml" line="74"/>
<source>Copyright: Stefan Brand
License: BSD (3-clause)</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="88"/>
<location filename="../qml/pages/About.qml" line="92"/>
<source>SailOTP uses the following third party libs:</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="103"/>
<source>Translators:</source>
<translation>Translators:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
@ -207,62 +212,62 @@ License: BSD (3-clause)</source>
<context>
<name>MainView</name>
<message>
<location filename="../qml/pages/MainView.qml" line="102"/>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="106"/>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Export / Import</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="110"/>
<location filename="../qml/pages/MainView.qml" line="112"/>
<source>Add Token</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="136"/>
<location filename="../qml/pages/MainView.qml" line="138"/>
<source>Nothing here</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="137"/>
<location filename="../qml/pages/MainView.qml" line="139"/>
<source>Pull down to add a OTP</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="148"/>
<location filename="../qml/pages/MainView.qml" line="150"/>
<source>Deleting</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source>Token for </source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source> copied to clipboard</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="232"/>
<location filename="../qml/pages/MainView.qml" line="234"/>
<source>Move up</source>
<translation>Move up</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="237"/>
<location filename="../qml/pages/MainView.qml" line="239"/>
<source>Move down</source>
<translation>Move down</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="244"/>
<source>Edit</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="248"/>
<location filename="../qml/pages/MainView.qml" line="250"/>
<source>Delete</source>
<translation></translation>
</message>
@ -278,32 +283,32 @@ License: BSD (3-clause)</source>
<context>
<name>ScanOTP</name>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="53"/>
<location filename="../qml/pages/ScanOTP.qml" line="52"/>
<source>Can&apos;t access temporary directory</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="63"/>
<location filename="../qml/pages/ScanOTP.qml" line="62"/>
<source>Add manually</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scan Code</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scanning...</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="99"/>
<location filename="../qml/pages/ScanOTP.qml" line="95"/>
<source>No valid Token data found.</source>
<translation></translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="140"/>
<location filename="../qml/pages/ScanOTP.qml" line="136"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation></translation>
</message>

View file

@ -1,27 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="sv_SE">
<TS version="2.1" language="sv_SE">
<context>
<name>About</name>
<message>
<location filename="../qml/pages/About.qml" line="57"/>
<location filename="../qml/pages/About.qml" line="65"/>
<source>A Simple Sailfish OTP Generator
(RFC 6238/4226 compatible)</source>
<translation>En enkel Sailfish OTP-generator
(RFC 6238/4226-kompatibel)</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="67"/>
<location filename="../qml/pages/About.qml" line="74"/>
<source>Copyright: Stefan Brand
License: BSD (3-clause)</source>
<translation>Copyright: Stefan Brand
Licens: BSD (3-clause)</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="88"/>
<location filename="../qml/pages/About.qml" line="92"/>
<source>SailOTP uses the following third party libs:</source>
<translation>SailOTP använder följande tredjeparts bibliotek:</translation>
</message>
<message>
<location filename="../qml/pages/About.qml" line="103"/>
<source>Translators:</source>
<translation>Översättare:</translation>
</message>
</context>
<context>
<name>AddOTP</name>
@ -209,62 +214,62 @@ Licens: BSD (3-clause)</translation>
<context>
<name>MainView</name>
<message>
<location filename="../qml/pages/MainView.qml" line="102"/>
<location filename="../qml/pages/MainView.qml" line="104"/>
<source>About</source>
<translation>Om</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="106"/>
<location filename="../qml/pages/MainView.qml" line="108"/>
<source>Export / Import</source>
<translation>Export / Import</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="110"/>
<location filename="../qml/pages/MainView.qml" line="112"/>
<source>Add Token</source>
<translation>Lägg till Token</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="136"/>
<location filename="../qml/pages/MainView.qml" line="138"/>
<source>Nothing here</source>
<translation>Inget här</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="137"/>
<location filename="../qml/pages/MainView.qml" line="139"/>
<source>Pull down to add a OTP</source>
<translation>Dra neråt för att lägga till en OTP</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="148"/>
<location filename="../qml/pages/MainView.qml" line="150"/>
<source>Deleting</source>
<translation>Tar bort</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source>Token for </source>
<translation>Token för </translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="164"/>
<location filename="../qml/pages/MainView.qml" line="166"/>
<source> copied to clipboard</source>
<translation>kopierad till urklipp</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="232"/>
<location filename="../qml/pages/MainView.qml" line="234"/>
<source>Move up</source>
<translation>Flytta upp</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="237"/>
<location filename="../qml/pages/MainView.qml" line="239"/>
<source>Move down</source>
<translation>Flytta ner</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="242"/>
<location filename="../qml/pages/MainView.qml" line="244"/>
<source>Edit</source>
<translation>Redigera</translation>
</message>
<message>
<location filename="../qml/pages/MainView.qml" line="248"/>
<location filename="../qml/pages/MainView.qml" line="250"/>
<source>Delete</source>
<translation>Ta bort</translation>
</message>
@ -280,32 +285,32 @@ Licens: BSD (3-clause)</translation>
<context>
<name>ScanOTP</name>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="53"/>
<location filename="../qml/pages/ScanOTP.qml" line="52"/>
<source>Can&apos;t access temporary directory</source>
<translation>Kan inte komma åt temp-mapp</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="63"/>
<location filename="../qml/pages/ScanOTP.qml" line="62"/>
<source>Add manually</source>
<translation>Lägg till manuellt</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scan Code</source>
<translation>Skanna kod</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="70"/>
<location filename="../qml/pages/ScanOTP.qml" line="69"/>
<source>Scanning...</source>
<translation>Skannar...</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="99"/>
<location filename="../qml/pages/ScanOTP.qml" line="95"/>
<source>No valid Token data found.</source>
<translation>Ingen giltig Token-data hittades.</translation>
</message>
<message>
<location filename="../qml/pages/ScanOTP.qml" line="140"/>
<location filename="../qml/pages/ScanOTP.qml" line="136"/>
<source>Tap the picture to start / stop scanning. Pull down to add Token manually.</source>
<translation>Tryck bilden för att starta / stoppa skanning. Dra neråt för att lägga till Token manuellt.</translation>
</message>

View file

@ -5,25 +5,25 @@
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or other
* list of conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The names of the contributors may not be used to endorse or promote products
*
* 3. The names of the contributors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
@ -33,59 +33,77 @@ import Sailfish.Silica 1.0
// Define the Layout of the About Page
Page {
id: aboutPage
Image {
id: logo
source: "../sailotp.png"
anchors.horizontalCenter: parent.horizontalCenter
y: 140
}
Label {
id: name
anchors.horizontalCenter: parent.horizontalCenter
y: 260
font.bold: true
text: "SailOTP " + Qt.application.version
}
TextArea {
id: desc
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: name.bottom
anchors.topMargin: 20
SilicaFlickable {
id: flickable
anchors.fill: parent
width: parent.width
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("A Simple Sailfish OTP Generator\n(RFC 6238/4226 compatible)")
color: "white"
}
TextArea {
id: copyright
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: desc.bottom
width: parent.width
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("Copyright: Stefan Brand\nLicense: BSD (3-clause)")
color: "white"
}
Button {
id: homepage
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: copyright.bottom
text: "<a href=\"https://www.seiichiro0185.org/gitlab/seiichiro0185/harbour-sailotp.git\">Source Code</a>"
onClicked: {
Qt.openUrlExternally("https://www.seiichiro0185.org/gitlab/seiichiro0185/harbour-sailotp.git")
contentHeight: column.height
Column {
id: column
width: parent.width
spacing: Theme.paddingLarge
Image {
id: logo
source: "../sailotp.png"
anchors.topMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
}
Label {
id: name
anchors.horizontalCenter: parent.horizontalCenter
font.bold: true
text: "SailOTP " + Qt.application.version
}
TextArea {
id: desc
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("A Simple Sailfish OTP Generator\n(RFC 6238/4226 compatible)")
color: "white"
}
TextArea {
id: copyright
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("Copyright: Stefan Brand\nLicense: BSD (3-clause)")
color: "white"
}
Button {
id: homepage
anchors.horizontalCenter: parent.horizontalCenter
text: "<a href=\"https://www.seiichiro0185.org/gitlab/seiichiro0185/harbour-sailotp.git\">Source Code</a>"
onClicked: {
Qt.openUrlExternally("https://www.seiichiro0185.org/gitlab/seiichiro0185/harbour-sailotp.git")
}
}
TextArea {
id: acknowledgement
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
font.pixelSize: Theme.fontSizeSmall
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("SailOTP uses the following third party libs:")+"\n\nhttp://caligatio.github.io/jsSHA/\nhttps://github.com/mdp/gibberish-aes/\nhttp://sourceforge.net/projects/qzxing/\nhttp://fukuchi.org/works/qrencode/"
color: "white"
}
TextArea {
id: translators
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
font.pixelSize: Theme.fontSizeSmall
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("Translators:")+"\n\nSwedish: Åke Engelbrektson\nEnglish: Stefan Brand\nGerman: Stefan Brand"
color: "white"
}
}
}
TextArea {
id: acknowledgement
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: homepage.bottom
anchors.topMargin: 20
width: parent.width
font.pixelSize: Theme.fontSizeSmall
horizontalAlignment: TextEdit.Center
readOnly: true
text: qsTr("SailOTP uses the following third party libs:")+"\n\nhttp://caligatio.github.io/jsSHA/\nhttps://github.com/mdp/gibberish-aes/\nhttp://sourceforge.net/projects/qzxing/\nhttp://fukuchi.org/works/qrencode/"
color: "white"
VerticalScrollDecorator { }
}
}

View file

@ -1,3 +1,6 @@
* Sat May 30 2015 Stefan Brand <sailfish@seiichiro0185.org> 1.2-1
- Added Swedish translation (Thanks to Åke Engelbrektson)
* Fri May 22 2015 Stefan Brand <sailfish@seiichiro0185.org> 1.1-1
- Added URL-decoding for OTP-titles when scanning QR-codes

View file

@ -1,6 +1,6 @@
Name: harbour-sailotp
Summary: SailOTP
Version: 1.1
Version: 1.2
Release: 1
Group: Security
URL: https://github.com/seiichiro0185/sailotp/