This commit is contained in:
aitzol 2023-11-25 15:58:37 +01:00
parent 3a88b7db3b
commit 05821df546
9 changed files with 144 additions and 132 deletions

View File

@ -18,12 +18,12 @@
% if data['secureAuth'] == True:
<div class="info">{{ str['2fa-info-1'] }}</div>
<div class="qr-code">
<img src="{{'static/tmp/'+data['authToken']+'.png'}}" />
<img src="{{'static/tmp/'+data['authCode']+'.png'}}" />
</div>
<form name="disable2faForm" method="post" action="/disable_2fa">
<label for="token">{{ str['token'] }}</label>
<input id="token" name="token" type="text" value="{{data['authToken']}}" readonly>
<label for="code">{{ str['code'] }}</label>
<input id="" name="code" type="text" value="{{data['authCode']}}" readonly>
<div class="form-buttons">
<a href="/user"><button class="green" type="button">{{ str['back'] }}</button></a>
@ -36,7 +36,7 @@
<div class="info">{{ str['2fa-info-2'] }}</div>
<form name="enable2faForm" method="post" action="/enable_2fa">
<!--<input id="token" name="token" type="text" value="{{data['authToken']}}" readonly>-->
<!--<input id="token" name="token" type="text" value="{{data['authCode']}}" readonly>-->
<div class="form-buttons">
<a href="/user"><button class="green" type="button">{{ str['back'] }}</button></a>

26
app.py
View File

@ -161,7 +161,7 @@ def post_user():
if(newSession().get()['secureAuth']):
# encrypt and store the credentials
sid = newSession().get()['id']
data = ';'.join([form('username'),form('password'),newSession().get()['authToken']])
data = ';'.join([form('username'),form('password'),newSession().get()['authCode']])
data_enc = cryptocode.encrypt(data, newSession().get()['id'])
data_to_url = base64.urlsafe_b64encode(str.encode(data_enc))
memo.get(data_enc)
@ -195,8 +195,8 @@ def post_user_step2(path):
newSession()
return error(i18n.msg[27])
#if not tools._2fa_validation(form('code'), newSession().get()['authToken']):
if not tools._2fa_validation(form('code'), secret):
#if not tools._2fa_validation(form('token'), newSession().get()['authCode']):
if not tools._2fa_validation(form('token'), secret):
return error(i18n.msg[6])
else:
@ -533,7 +533,7 @@ def login_user_ldap(conf, username, password):
LOG.debug("%s logged in to %s" % (username, conf['base']))
#generate qr if it doenst exists when 2fa enable
if(newSession().get()['secureAuth']):
tools.gen_qr(newSession().get()['authToken'])
tools.gen_qr(newSession().get()['authCode'])
#LOGOUT
def logout(username):
@ -827,14 +827,14 @@ def add_auth_attribute_step3(conf, username, code, action):
with connect_ldap(conf, user=superUser.admin_dn, password=superUser.admin_pwd) as c:
user_dn = find_user_dn(conf, c, username)
if(action == 'enable'):
c.modify(user_dn,{'authToken': [(MODIFY_ADD, [code])]})
c.modify(user_dn,{'authCode': [(MODIFY_ADD, [code])]})
c.modify(user_dn,{'secureAuth': [MODIFY_REPLACE, [True]]})
elif(action == 'disable'):
c.modify(user_dn,{'authToken': [(MODIFY_DELETE, [])]})
c.modify(user_dn,{'authCode': [(MODIFY_DELETE, [])]})
c.modify(user_dn,{'secureAuth': [MODIFY_REPLACE, [False]]})
#remove file
try:
remove('static/tmp/'+newSession().get()['authToken']+'.png')
remove('static/tmp/'+newSession().get()['authCode']+'.png')
except OSError as e:
LOG.warning(str(e))
#raise Error(e)
@ -1014,7 +1014,7 @@ def get_user_data(user_dn, conn):
search_filter = '(objectClass=*)'
conn.search(user_dn, search_filter,
attributes=['active','fakeCn','givenName','sn','uid','mail','devices','ip','lastLogin','secureAuth',
'authToken'])
'authCode'])
data = []
data.append(conn.entries[0].active.values[0])
data.append(conn.entries[0].fakeCn.values[0])
@ -1029,8 +1029,8 @@ def get_user_data(user_dn, conn):
#ts = datetime.strftime(t, '%Y-%m-%d %H:%M:%S')
data.append(str(conn.entries[0].lastLogin.values[0])[:-6])
data.append(conn.entries[0].secureAuth.values[0])
if(conn.entries[0].authToken):
data.append(conn.entries[0].authToken.values[0])
if(conn.entries[0].authCode):
data.append(conn.entries[0].authCode.values[0])
return(data)
@ -1143,9 +1143,9 @@ def newSession():
self.lastLogin = data[8]
self.secureAuth = data[9]
try:
self.authToken = data[10]
self.authCode = data[10]
except:
self.authToken = None
self.authCode = None
self.data['active'] = self.active
self.data['fakeCn'] = self.fakeCn
@ -1157,7 +1157,7 @@ def newSession():
self.data['ip'] = self.ip
self.data['lastLogin'] = self.lastLogin
self.data['secureAuth'] = self.secureAuth
self.data['authToken'] = self.authToken
self.data['authCode'] = self.authCode
def close(self):
self.data.pop('username')

View File

@ -18,8 +18,8 @@
%try:
%if two_factor_authentication:
<form method="post" action="/user/{{path}}">
<label for="code">kodea</label>
<input id="code" name="code" value="" type="text" required autofocus>
<label for="token">{{ str['token'] }}</label>
<input id="token" name="token" value="" type="text" required autofocus>
%end
%except:
<form method="post" action="/user">

View File

@ -46,6 +46,7 @@ class LocalizeTo(object):
str_31 = _("Enable")
str_32 = _("You must then use the following code to log in. Using the key you will receive by reading the QR code via a OTP or 2FA mobile app.")
str_33 = _("Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR.")
str_34 = _("Code")
#messages
msg_00 = _("The session was closed.")
@ -77,7 +78,6 @@ class LocalizeTo(object):
msg_26 = _("Forgot your password? Please try again.")
msg_27 = _("The session has expired.")
msg_28 = _("Registration is currently closed. We apologize for the inconvenience.")
msg_29 = _("Two factor authentication has been impossible.")
msg_30 = _("Two factor authentication has been restored.")
msg_31 = _("Two factor authentication has been enabled.")
@ -90,7 +90,7 @@ class LocalizeTo(object):
'or-sign-up':str_17, 'inv-code':str_18, 'edit-fn':str_19, 'edit-email':str_20, 'ch-pwd':str_21,
'del-account':str_22, 'welcome':str_23, 'logs':str_24, 'last-login':str_25, 'devices':str_26,
'show':str_27, '2fa-title':str_28, 'token':str_29, 'disable':str_30, 'enable':str_31, '2fa-info-1':str_32,
'2fa-info-2':str_33, 'pwd-pattern': msg_08}
'2fa-info-2':str_33, 'code':str_34, 'pwd-pattern': msg_08}
self.msg = (msg_00, msg_01, msg_02, msg_03, msg_04, msg_05, msg_06, msg_07, msg_08, msg_09, msg_10, msg_11,
msg_12, msg_13, msg_14, msg_15, msg_16, msg_17, msg_18, msg_19, msg_20, msg_21, msg_22, msg_23,
msg_24, msg_25, msg_26, msg_27, msg_28, msg_29, msg_30, msg_31, msg_32, msg_33)

View File

@ -109,7 +109,7 @@ msgstr "Change your password"
msgid "Delete your account"
msgstr "Delete your account"
#: libs/localization.py:38 libs/localization.py:46
#: libs/localization.py:38 libs/localization.py:53
msgid "Welcome"
msgstr "Welcome"
@ -153,35 +153,39 @@ msgstr "You must then use the following code to log in. Using the key you will r
msgid "Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR."
msgstr "Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR."
#: libs/localization.py:45 ZUZENTZEA FALTA
#: libs/localization.py:49
msgid "Code"
msgstr "Code"
#: libs/localization.py:52
msgid "The session was closed."
msgstr "The session was closed."
#: libs/localization.py:47
#: libs/localization.py:54
msgid "Username must be at least 3 characters long!"
msgstr "Username must be at least 3 characters long!"
#: libs/localization.py:48
#: libs/localization.py:55
msgid "Not allowed characters for the username field."
msgstr "Not allowed characters for the username field."
#: libs/localization.py:49
#: libs/localization.py:56
msgid "Not allowed characters for the firstname field."
msgstr "Not allowed characters for the firstname field."
#: libs/localization.py:50
#: libs/localization.py:57
msgid "Not allowed characters for the surname field."
msgstr "Not allowed characters for the surname field."
#: libs/localization.py:51
#: libs/localization.py:58
msgid "The code is invalid or has expired."
msgstr "The code is invalid or has expired."
#: libs/localization.py:52
#: libs/localization.py:59
msgid "Passwords do not match!"
msgstr "Passwords do not match!"
#: libs/localization.py:53
#: libs/localization.py:60
msgid ""
"The password must contain at least 8 characters, at least one number, "
"a capital letter and a special character."
@ -189,104 +193,104 @@ msgstr ""
"The password must contain at least 8 characters, at least one number, "
"a capital letter and a special character."
#: libs/localization.py:54
#: libs/localization.py:61
msgid "Congratulations, your account has been created!"
msgstr "Congratulations, your account has been created!"
#: libs/localization.py:55
#: libs/localization.py:62
msgid "Your first and last name have not been changed."
msgstr "Your first and last name have not been changed."
#: libs/localization.py:56
#: libs/localization.py:63
msgid "Your firstname is a bit short, don't you think?"
msgstr "Your firstname is a bit short, don't you think?"
#: libs/localization.py:57
#: libs/localization.py:64
msgid "Your surname is a bit short, don't you think?"
msgstr "Your surname is a bit short, don't you think?"
#: libs/localization.py:58
#: libs/localization.py:65
msgid "Your first and last name have been successfully updated."
msgstr "Your first and last name have been successfully updated."
#: libs/localization.py:59
#: libs/localization.py:66
msgid "Invalid email address. Please try again."
msgstr "Invalid email address. Please try again."
#: libs/localization.py:60
#: libs/localization.py:67
msgid "Email address has not been changed."
msgstr "Email address has not been changed."
#: libs/localization.py:61
#: libs/localization.py:68
msgid "Your email has been successfully updated."
msgstr "Your email has been successfully updated."
#: libs/localization.py:62
#: libs/localization.py:69
msgid "The password entered is the same as the current password."
msgstr "The password entered is the same as the current password."
#: libs/localization.py:63
#: libs/localization.py:70
msgid "Password has been changed!"
msgstr "Password has been changed!"
#: libs/localization.py:64
#: libs/localization.py:71
msgid "Please, type your username for account deletion."
msgstr "Please, type your username for account deletion."
#: libs/localization.py:65
#: libs/localization.py:72
msgid "Account successfully deleted!"
msgstr "Account successfully deleted!"
#: libs/localization.py:66
#: libs/localization.py:73
msgid "Username or password is incorrect!"
msgstr "Username or password is incorrect!"
#: libs/localization.py:67
#: libs/localization.py:74
msgid "Unable to connect to the remote server."
msgstr "Unable to connect to the remote server."
#: libs/localization.py:68
#: libs/localization.py:75
msgid ""
"Encountered an unexpected error while communicating with the remote server."
msgstr ""
"Encountered an unexpected error while communicating with the remote server."
#: libs/localization.py:69
#: libs/localization.py:76
msgid "User already exists."
msgstr "User already exists."
#: libs/localization.py:70
#: libs/localization.py:77
msgid "Email already exists."
msgstr "Email already exists."
#: libs/localization.py:71
#: libs/localization.py:78
msgid "Forgot your password? Please try again."
msgstr "Forgot your password? Please try again."
#: libs/localization.py:72
#: libs/localization.py:79
msgid "The session has expired."
msgstr "The session has expired."
#: libs/localization.py:73
#: libs/localization.py:80
msgid "Registration is currently closed. We apologize for the inconvenience."
msgstr "Registration is currently closed. We apologize for the inconvenience."
#: libs/localization.py:
#: libs/localization.py:81
msgid "Two factor authentication has been impossible."
msgstr "Two factor authentication has been impossible."
#: libs/localization.py:
#: libs/localization.py:82
msgid "Two factor authentication has been restored."
msgstr "Two factor authentication has been restored."
#: libs/localization.py:
#: libs/localization.py:83
msgid "Two factor authentication has been enabled."
msgstr "Two factor authentication has been enabled."
#: libs/localization.py:
#: libs/localization.py:84
msgid "Two factor authentication has been disabled."
msgstr "Two factor authentication has been disabled."
#: libs/localization.py:
#: libs/localization.py:85
msgid "Two factor authentication was already disabled."
msgstr "Two factor authentication was already disabled."

Binary file not shown.

View File

@ -1,21 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <aitzol@lainoa.eus>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-07 17:20+0200\n"
"POT-Creation-Date: 2022-04-25 16:52+0200\n"
"PO-Revision-Date: 2023-04-07 13:28+0200\n"
"Last-Translator: Aitzol Berasategi <aitzol@lainoa.eus>\n"
"Language-Team: LANGUAGE <EN@en.org>\n"
"Language: en\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.3\n"
#: libs/localization.py:15
msgid "User"
@ -109,7 +109,7 @@ msgstr "Change your password"
msgid "Delete your account"
msgstr "Delete your account"
#: libs/localization.py:38 libs/localization.py:46
#: libs/localization.py:38 libs/localization.py:53
msgid "Welcome"
msgstr "Welcome"
@ -153,35 +153,39 @@ msgstr "You must then use the following code to log in. Using the key you will r
msgid "Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR."
msgstr "Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR."
#: libs/localization.py:45
#: libs/localization.py:49
msgid "Code"
msgstr "Code"
#: libs/localization.py:52
msgid "The session was closed."
msgstr "The session was closed."
#: libs/localization.py:47
#: libs/localization.py:54
msgid "Username must be at least 3 characters long!"
msgstr "Username must be at least 3 characters long!"
#: libs/localization.py:48
#: libs/localization.py:55
msgid "Not allowed characters for the username field."
msgstr "Not allowed characters for the username field."
#: libs/localization.py:49
#: libs/localization.py:56
msgid "Not allowed characters for the firstname field."
msgstr "Not allowed characters for the firstname field."
#: libs/localization.py:50
#: libs/localization.py:57
msgid "Not allowed characters for the surname field."
msgstr "Not allowed characters for the surname field."
#: libs/localization.py:51
#: libs/localization.py:58
msgid "The code is invalid or has expired."
msgstr "The code is invalid or has expired."
#: libs/localization.py:52
#: libs/localization.py:59
msgid "Passwords do not match!"
msgstr "Passwords do not match!"
#: libs/localization.py:53
#: libs/localization.py:60
msgid ""
"The password must contain at least 8 characters, at least one number, "
"a capital letter and a special character."
@ -189,104 +193,104 @@ msgstr ""
"The password must contain at least 8 characters, at least one number, "
"a capital letter and a special character."
#: libs/localization.py:54
#: libs/localization.py:61
msgid "Congratulations, your account has been created!"
msgstr "Congratulations, your account has been created!"
#: libs/localization.py:55
#: libs/localization.py:62
msgid "Your first and last name have not been changed."
msgstr "Your first and last name have not been changed."
#: libs/localization.py:56
#: libs/localization.py:63
msgid "Your firstname is a bit short, don't you think?"
msgstr "Your firstname is a bit short, don't you think?"
#: libs/localization.py:57
#: libs/localization.py:64
msgid "Your surname is a bit short, don't you think?"
msgstr "Your surname is a bit short, don't you think?"
#: libs/localization.py:58
#: libs/localization.py:65
msgid "Your first and last name have been successfully updated."
msgstr "Your first and last name have been successfully updated."
#: libs/localization.py:59
#: libs/localization.py:66
msgid "Invalid email address. Please try again."
msgstr "Invalid email address. Please try again."
#: libs/localization.py:60
#: libs/localization.py:67
msgid "Email address has not been changed."
msgstr "Email address has not been changed."
#: libs/localization.py:61
#: libs/localization.py:68
msgid "Your email has been successfully updated."
msgstr "Your email has been successfully updated."
#: libs/localization.py:62
#: libs/localization.py:69
msgid "The password entered is the same as the current password."
msgstr "The password entered is the same as the current password."
#: libs/localization.py:63
#: libs/localization.py:70
msgid "Password has been changed!"
msgstr "Password has been changed!"
#: libs/localization.py:64
#: libs/localization.py:71
msgid "Please, type your username for account deletion."
msgstr "Please, type your username for account deletion."
#: libs/localization.py:65
#: libs/localization.py:72
msgid "Account successfully deleted!"
msgstr "Account successfully deleted!"
#: libs/localization.py:66
#: libs/localization.py:73
msgid "Username or password is incorrect!"
msgstr "Username or password is incorrect!"
#: libs/localization.py:67
#: libs/localization.py:74
msgid "Unable to connect to the remote server."
msgstr "Unable to connect to the remote server."
#: libs/localization.py:68
#: libs/localization.py:75
msgid ""
"Encountered an unexpected error while communicating with the remote server."
msgstr ""
"Encountered an unexpected error while communicating with the remote server."
#: libs/localization.py:69
#: libs/localization.py:76
msgid "User already exists."
msgstr "User already exists."
#: libs/localization.py:70
#: libs/localization.py:77
msgid "Email already exists."
msgstr "Email already exists."
#: libs/localization.py:71
#: libs/localization.py:78
msgid "Forgot your password? Please try again."
msgstr "Forgot your password? Please try again."
#: libs/localization.py:72
#: libs/localization.py:79
msgid "The session has expired."
msgstr "The session has expired."
#: libs/localization.py:73
#: libs/localization.py:80
msgid "Registration is currently closed. We apologize for the inconvenience."
msgstr "Registration is currently closed. We apologize for the inconvenience."
#: libs/localization.py:
msgid "Two factor authentication has been impossible."
#: libs/localization.py:81
msgid "Two factor authentication has been impossible."
msgstr "Two factor authentication has been impossible."
#: libs/localization.py:
#: libs/localization.py:82
msgid "Two factor authentication has been restored."
msgstr "Two factor authentication has been restored."
#: libs/localization.py:
#: libs/localization.py:83
msgid "Two factor authentication has been enabled."
msgstr "Two factor authentication has been enabled."
#: libs/localization.py:
#: libs/localization.py:84
msgid "Two factor authentication has been disabled."
msgstr "Two factor authentication has been disabled."
#: libs/localization.py:
#: libs/localization.py:85
msgid "Two factor authentication was already disabled."
msgstr "Two factor authentication was already disabled."

Binary file not shown.

View File

@ -109,7 +109,7 @@ msgstr "Pasahitza eguneratu"
msgid "Delete your account"
msgstr "Kontua ezabatu"
#: libs/localization.py:38 libs/localization.py:46
#: libs/localization.py:38 libs/localization.py:53
msgid "Welcome"
msgstr "Ongi etorri"
@ -155,134 +155,138 @@ msgstr ""
msgid "Two factor authentication is additional security. By enabling this you will be asked at the login, in addition to the user and password, a key you will receive by QR."
msgstr "Bi urratseko autentifikazioa segurtasun gehigarri bat da. Hau gaituz saio hasieran erabiltzaile eta pasahitzaz gain QR bidez jasoko duzun gako bat eskatuko zaizu."
#: libs/localization.py:45
#: libs/localization.py:49
msgid "Code"
msgstr "Kodea"
#: libs/localization.py:52
msgid "The session was closed."
msgstr "Saioa itxi da."
#: libs/localization.py:47
#: libs/localization.py:54
msgid "Username must be at least 3 characters long!"
msgstr "Erabiltzaile izenak gutxienez 3 karaktere izan behar ditu!"
#: libs/localization.py:48
#: libs/localization.py:55
msgid "Not allowed characters for the username field."
msgstr "Erabiltzaile-izenaren eremurako onartzen ez diren karaktereak."
#: libs/localization.py:49
#: libs/localization.py:56
msgid "Not allowed characters for the firstname field."
msgstr "Izenaren eremurako onartzen ez diren karaktereak."
#: libs/localization.py:50
#: libs/localization.py:57
msgid "Not allowed characters for the surname field."
msgstr "Abizenaren eremurako onartzen ez diren karaktereak."
#: libs/localization.py:51
#: libs/localization.py:58
msgid "The code is invalid or has expired."
msgstr "Kodea baliogabea da edo iraungi egin da."
#: libs/localization.py:52
#: libs/localization.py:59
msgid "Passwords do not match!"
msgstr "Pasahitzak ez datoz bat!"
#: libs/localization.py:53
#: libs/localization.py:60
msgid "The password must contain at least 8 characters, at least one number, a capital letter and a special character."
msgstr "Pasahitzak gutxienez 8 karaktere izan behar ditu, zenbaki bat, hizki larri bat eta karaktere berezi bat."
#: libs/localization.py:54
#: libs/localization.py:61
msgid "Congratulations, your account has been created!"
msgstr "Zorionak, zure kontua sortu da!"
#: libs/localization.py:55
#: libs/localization.py:62
msgid "Your first and last name have not been changed."
msgstr "Zure izen-abizenak ez dira aldatu."
#: libs/localization.py:56
#: libs/localization.py:63
msgid "Your firstname is a bit short, don't you think?"
msgstr "Zure izena labur-xamarra da, ez duzu uste?"
#: libs/localization.py:57
#: libs/localization.py:64
msgid "Your surname is a bit short, don't you think?"
msgstr "Zure abizena labur-xamarra da, ez duzu uste?"
#: libs/localization.py:58
#: libs/localization.py:65
msgid "Your first and last name have been successfully updated."
msgstr "Zure izen-abizenak ongi eguneratu dira."
#: libs/localization.py:59
#: libs/localization.py:66
msgid "Invalid email address. Please try again."
msgstr "Baliogabeko email helbidea. Saia zaitez berriz, mesedez."
#: libs/localization.py:60
#: libs/localization.py:67
msgid "Email address has not been changed."
msgstr "Email helbidea ez da aldatu."
#: libs/localization.py:61
#: libs/localization.py:68
msgid "Your email has been successfully updated."
msgstr "Zure emaila ongi eguneratu da."
#: libs/localization.py:62
#: libs/localization.py:69
msgid "The password entered is the same as the current password."
msgstr "Sartutako pasahitza egungo pasahitzaren berdina da."
#: libs/localization.py:63
#: libs/localization.py:70
msgid "Password has been changed!"
msgstr "Pasahitza eguneratua izan da!"
#: libs/localization.py:64
#: libs/localization.py:71
msgid "Please, type your username for account deletion."
msgstr "Kontua ezabatzeko idatzi zure erabiltzaile izena, mesedez."
#: libs/localization.py:65
#: libs/localization.py:72
msgid "Account successfully deleted!"
msgstr "Kontua ongi ezabatu da!"
#: libs/localization.py:66
#: libs/localization.py:73
msgid "Username or password is incorrect!"
msgstr "Erabiltzaile izena edo pasahitza okerrak dira!"
#: libs/localization.py:67
#: libs/localization.py:74
msgid "Unable to connect to the remote server."
msgstr "Ezinezkoa urruneko zerbitzara konektatzea."
#: libs/localization.py:68
#: libs/localization.py:75
msgid "Encountered an unexpected error while communicating with the remote server."
msgstr "Ezusteko errore bat gertatu da urruneko zerbitzariarekin komunikatzean."
#: libs/localization.py:69
#: libs/localization.py:76
msgid "User already exists."
msgstr "Erabiltzaile hori existitzen da."
#: libs/localization.py:70
#: libs/localization.py:77
msgid "Email already exists."
msgstr "Email hori existitzen da."
#: libs/localization.py:71
#: libs/localization.py:78
msgid "Forgot your password? Please try again."
msgstr "Zure pasahitza ahaztu duzu? Saia zeitez berriz, mesedez."
#: libs/localization.py:72
#: libs/localization.py:79
msgid "The session has expired."
msgstr "Saioa iraungi egin da."
#: libs/localization.py:73
#: libs/localization.py:80
msgid "Registration is currently closed. We apologize for the inconvenience."
msgstr "Izen-ematea itxita dago une honetan. Barkatu eragozpenak."
#: libs/localization.py:
#: libs/localization.py:81
msgid "Two factor authentication has been impossible."
msgstr "Ezinezkoa izan da bi urratseko autentifikazioa burutzea."
#: libs/localization.py:
#: libs/localization.py:82
msgid "Two factor authentication has been restored."
msgstr "Bi urratseko autentifikazioa birgaitua izan da."
#: libs/localization.py:
#: libs/localization.py:83
msgid "Two factor authentication has been enabled."
msgstr "Bi urratseko autentifikazioa gaitua izan da."
#: libs/localization.py:
#: libs/localization.py:84
msgid "Two factor authentication has been disabled."
msgstr "Bi urratseko autentifikazioa desgaitua izan da."
#: libs/localization.py:
#: libs/localization.py:85
msgid "Two factor authentication was already disabled."
msgstr "Bi urratseko autentifikazioa desgaiturik zegoen."