feat: update keycloak theme
This commit is contained in:
@@ -43,10 +43,11 @@
|
||||
isEditUserNameAllowed : ${realm.editUsernameAllowed?c},
|
||||
isInternationalizationEnabled : ${realm.isInternationalizationEnabled()?c},
|
||||
isLinkedAccountsEnabled : ${realm.identityFederationEnabled?c},
|
||||
isEventsEnabled : ${isEventsEnabled?c},
|
||||
isMyResourcesEnabled : ${(realm.userManagedAccessAllowed && isAuthorizationEnabled)?c},
|
||||
isTotpConfigured : ${isTotpConfigured?c},
|
||||
deleteAccountAllowed : ${deleteAccountAllowed?c}
|
||||
deleteAccountAllowed : ${deleteAccountAllowed?c},
|
||||
updateEmailFeatureEnabled: ${updateEmailFeatureEnabled?c},
|
||||
updateEmailActionEnabled: ${updateEmailActionEnabled?c},
|
||||
isViewGroupsEnabled : ${isViewGroupsEnabled?c}
|
||||
}
|
||||
|
||||
var availableLocales = [];
|
||||
@@ -106,23 +107,22 @@
|
||||
var content = <#include "resources/content.json"/>
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="${resourceCommonUrl}/node_modules/@patternfly/react-core/dist/styles/base.css"/>
|
||||
<link rel="stylesheet" href="${resourceCommonUrl}/node_modules/@patternfly/patternfly/patternfly-addons.css"/>
|
||||
<link rel="stylesheet" href="${resourceUrl}/public/app.css"/>
|
||||
<link rel="stylesheet" href="${resourceUrl}/public/layout.css"/>
|
||||
|
||||
<#if properties.styles?has_content>
|
||||
<#list properties.styles?split(' ') as style>
|
||||
<link href="${resourceUrl}/${style}" rel="stylesheet"/>
|
||||
</#list>
|
||||
</#if>
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="${resourceCommonUrl}/web_modules/@patternfly/react-core/dist/styles/base.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="${resourceCommonUrl}/web_modules/@patternfly/react-core/dist/styles/app.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="${resourceCommonUrl}/web_modules/@patternfly/patternfly/patternfly-addons.css"/>
|
||||
<link href="${resourceUrl}/public/layout.css" rel="stylesheet"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<script>
|
||||
var keycloak = Keycloak({
|
||||
var keycloak = new Keycloak({
|
||||
authServerUrl: authUrl,
|
||||
realm: realm,
|
||||
clientId: 'account-console'
|
||||
@@ -188,7 +188,7 @@
|
||||
<span class="pf-c-button__icon pf-m-start">
|
||||
<i class="pf-icon pf-icon-arrow" aria-hidden="true"></i>
|
||||
</span>
|
||||
${msg("backToAdminConsole")}
|
||||
${msg("backTo",referrerName)}
|
||||
</a>
|
||||
</div>
|
||||
</#if>
|
||||
@@ -207,7 +207,7 @@
|
||||
<ul id="landingMobileDropdown" aria-labelledby="landingMobileKebabButton" class="pf-c-dropdown__menu pf-m-align-right" role="menu" style="display:none">
|
||||
<#if referrer?has_content && referrer_uri?has_content>
|
||||
<li role="none">
|
||||
<a id="landingMobileReferrerLink" href="${referrer_uri}" role="menuitem" tabindex="0" aria-disabled="false" class="pf-c-dropdown__menu-item">${msg("backToAdminConsole")}</a>
|
||||
<a id="landingMobileReferrerLink" href="${referrer_uri}" role="menuitem" tabindex="0" aria-disabled="false" class="pf-c-dropdown__menu-item">${msg("backTo",referrerName)}</a>
|
||||
</li>
|
||||
</#if>
|
||||
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
pageNotFound=الصفحة غير موجودة
|
||||
forbidden=الوصول ممنوع
|
||||
needAccessRights=ليس لديك الصلاحيات اللازمة لهذا الطلب. قم بالتواصل مع مسؤول النظام.
|
||||
invalidRoute=المسار {0} غير صالح.
|
||||
actionRequiresIDP=هذا الإجراء يتطلب إعادة التوجيه إلى مزود الحساب الخاص بك.
|
||||
actionNotDefined=الإجراء غير معرف
|
||||
continue=استمرار
|
||||
refreshPage=تحديث الصفحة
|
||||
refresh=تحديث
|
||||
done=إنهاء
|
||||
cancel=إلغاء
|
||||
remove=إزالة
|
||||
update=تحديث
|
||||
loadingMessage=جارٍ تحميل لوحة التحكم بالحساب ...
|
||||
unknownUser=مجهول
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=جميع الحقول مطلوبة.
|
||||
|
||||
selectLocale=اختر لغة
|
||||
doSignIn=تسجيل الدخول
|
||||
|
||||
backToAdminConsole=العودة إلى لوحة تحكم المسؤول
|
||||
accountManagementWelcomeMessage=أهلاً بك في صفحة إدارة الحساب
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=البيانات الشخصية
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=الأجهزة المسجلة للدخول
|
||||
signedInDevicesExplanation=قم بتسجيل الخروج من أي جهاز غير مألوف.
|
||||
signOutWarning=تسجيل الخروج من الجلسة؟
|
||||
signOutAllDevices=تسجيل الخروج من جميع الأجهزة
|
||||
signOutAllDevicesWarning=سيؤدي هذا الإجراء إلى تسجيل الخروج من جميع الأجهزة التي سجلت الدخول إلى حسابك، بما في ذلك الجهاز الحالي الذي تستخدمه.
|
||||
recentlyUsedDevices=الأجهزة المستخدمة حديثًا
|
||||
recentlyUsedDevicesExplanation=الأجهزة المستخدمة في الشهر الماضي، ولكنها غير نشطة حالياً.
|
||||
lastAccess=آخر وصول
|
||||
unknownOperatingSystem=نظام تشغيل غير معروف
|
||||
currentDevice=الجهاز الحالي
|
||||
currentSession=الجلسة الحالية
|
||||
signedOutSession=تم تسجيل خروج {0}\{1}
|
||||
lastAccessedOn=آخر وصول
|
||||
clients=العملاء
|
||||
started=ابتدأ في
|
||||
expires=ينتهي في
|
||||
ipAddress=عنوان الشبكة
|
||||
|
||||
# Resources page
|
||||
resourceName=اسم المورد
|
||||
nextPage=التالي
|
||||
previousPage=السابق
|
||||
firstPage=أول صفحة
|
||||
resourceSharedWith=تم مشاركة المورد مع {0}
|
||||
and=\ و {0} مستخدمين آخرين
|
||||
add=إضافة
|
||||
share=مشاركة
|
||||
shareWith=مشاركة مع
|
||||
edit=تعديل
|
||||
close=إغلاق
|
||||
unShare=إلغاء مشاركة الكل
|
||||
shareSuccess=تم مشاركة المورد بنجاح.
|
||||
unShareSuccess=تم إلغاء مشاركة المورد بنجاح.
|
||||
updateSuccess=تم تحديث المورد بنجاح.
|
||||
resourceAlreadyShared=تم مشاركة المورد مع هذا المستخدم مسبقًا.
|
||||
resourceNotShared=لم يتم مشاركة هذا المورد.
|
||||
permissionRequests=طلبات الإذن
|
||||
permissions=الأذونات
|
||||
selectPermissions=اختر الأذونات
|
||||
unShareAllConfirm=هل أنت متأكد أنك تريد إزالة جميع ما تم مشاركته سابقًا؟
|
||||
userNotFound=لم يتم إيجاد مستخدم بهذا الاسم أو البريد الإلكتروني {0}
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=الحسابات المرتبطة
|
||||
linkedAccountsIntroMessage=قم بإدارة تسجيل الدخول لحسابات الطرف الثالث.
|
||||
linkedLoginProviders=مزودو تسجيل الدخول المرتبطين
|
||||
unlinkedLoginProviders=مزودو تسجيل الدخول الغير مرتبطين
|
||||
linkedEmpty=لا يوجد مزود مرتبط
|
||||
unlinkedEmpty=لا يوجد مزود غير مرتبط
|
||||
socialLogin=تسجيل دخول مواقع التواصل الاجتماعي
|
||||
systemDefined=تسجيل دخول معرَّف بالنظام
|
||||
link=ربط الحساب
|
||||
unLink=إلغاء ربط الحساب
|
||||
|
||||
# Signing in page
|
||||
signingIn=عملية تسجيل الدخول
|
||||
signingInSubMessage=قم بإعداد طرق لتسجيل الدخول.
|
||||
credentialCreatedAt=أنشئ في
|
||||
successRemovedMessage=تمت إزالة {0}.
|
||||
stopUsingCred=إيقاف استخدام {0}؟
|
||||
changePassword=تغيير كلمة المرور
|
||||
removeCred=إزالة {0}
|
||||
setUpNew=إعداد {0}
|
||||
removeCredAriaLabel=إزالة اعتماد
|
||||
updateCredAriaLabel=تحديث اعتماد
|
||||
notSetUp=لم يتم إعداد {0}.
|
||||
two-factor=التحقق بخطوتين
|
||||
passwordless=بدون كلمة مرور
|
||||
unknown=غير معروف
|
||||
password-display-name=كلمة المرور
|
||||
password-help-text=سجل الدخول باستخدام كلمة المرور.
|
||||
password=كلمة المرور الخاصة بي
|
||||
otp-display-name=تطبيق مصادق
|
||||
otp-help-text=أدخل رمز التحقق الصادرة من التطبيق المصادق.
|
||||
recovery-authn-code=رموز مصادقة الاسترداد الخاصة بي
|
||||
recovery-authn-codes-display-name=رموز مصادقة الاسترداد
|
||||
recovery-authn-codes-help-text=تستخدم هذه الرموز لاستعادة حسابك في حال كانت طرق التحقق الأخرى غير متاحة.
|
||||
recovery-codes-number-used={0} رمز تحقق مستخدم
|
||||
recovery-codes-number-remaining={0} رمز تحقق متبقي
|
||||
recovery-codes-generate-new-codes=قم يتوليد رموز تحقق جديدة لضمان الوصول إلى حسابك
|
||||
webauthn-display-name=مفتاح أمان
|
||||
webauthn-help-text=استخدم مفتاح الأمان لتسجيل الدخول.
|
||||
webauthn-passwordless-display-name=مفتاح أمان
|
||||
webauthn-passwordless-help-text=استخدم مفتاح الأمان لتسجيل الدخول دون كلمة مرور.
|
||||
basic-authentication=مصادقة أساسية
|
||||
invalidRequestMessage=طلب غير صالح
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=التطبيقات
|
||||
applicationsPageSubTitle=إدارة أذونات التطبيقات
|
||||
internalApp=داخلي
|
||||
thirdPartyApp=طرف ثالث
|
||||
offlineAccess=الوصول دون اتصال
|
||||
inUse=قيد الاستخدام
|
||||
notInUse=غير مستخدم
|
||||
applicationDetails=تفاصيل التطبيق
|
||||
client=العميل
|
||||
description=الوصف
|
||||
baseUrl=عنوان الموقع
|
||||
accessGrantedOn=تم منح إذن الوصول في
|
||||
removeButton=إزالة إذن الوصول
|
||||
removeModalTitle=إزالة إذن الوصول
|
||||
removeModalMessage=سيؤدي هذا إلى إزالة إذن الوصول الممنوح حاليًا لـ {0}. ستحتاج إلى منح إذن الوصول مرة أخرى إذا كنت تريد استخدام هذا التطبيق.
|
||||
confirmButton=تأكيد
|
||||
infoMessage=بالنقر على زر 'إزالة إذن الوصول'، سيتم إزالة الأذونات الممنوحة لهذا التطبيق. لن يستخدم هذا التطبيق معلوماتك بعد الآن.
|
||||
termsOfService=اتفاقية الاستخدام
|
||||
policy=سياسة الخصوصية
|
||||
applicationType=نوع التطبيق
|
||||
status=الحالة
|
||||
logo=الشعار
|
||||
|
||||
#Delete account page
|
||||
doDelete=حذف
|
||||
deleteAccountSummary=سيؤدي حذف حسابك إلى محو جميع بياناتك وتسجيل خروجك على الفور.
|
||||
deleteAccount=حذف الحساب
|
||||
deleteAccountWarning=هذا أمر لا رجوع فيه. سيتم إتلاف جميع بياناتك بشكل دائم، ولا يمكن استرجاعها.
|
||||
|
||||
error-invalid-value=''{0}'' يحتوي على قيمة غير صالحة.
|
||||
error-invalid-blank=يرجى تحديد قيمة ''{0}''.
|
||||
error-empty=يرجى تحديد قيمة ''{0}''.
|
||||
error-invalid-length=''{0}'' يجب أن يكون طوله بين {1} و {2}.
|
||||
error-invalid-length-too-short=''{0}'' يجب ألا يقل طوله عن {1}.
|
||||
error-invalid-length-too-long=''{0}'' يجب ألا يزيد طوله عن {2}.
|
||||
error-invalid-email=بريد إلكتروني غير صالح.
|
||||
error-invalid-number=''{0}'' هو رقم غير صالح.
|
||||
error-number-out-of-range=''{0}'' يجب أن يكون رقمًا بين {1} و {2}.
|
||||
error-number-out-of-range-too-small=''{0}'' يجب ألا تقل قيمته عن {1}.
|
||||
error-number-out-of-range-too-big=''{0}'' يجب ألا تزيد قيمته عن {2}.
|
||||
error-pattern-no-match=''{0}'' لا يتطابق مع البنية المطلوبة.
|
||||
error-invalid-uri=''{0}'' هو عنوان موقع غير صالح.
|
||||
error-invalid-uri-scheme=''{0}'' يحتوي على بادئة عنوان موقع غير صالحة.
|
||||
error-invalid-uri-fragment=''{0}'' يحتوي على ملحق عنوان موقع غير صالح.
|
||||
error-user-attribute-required=يرجى تحديد ''{0}''.
|
||||
error-invalid-date=''{0}'' هو تاريخ غير صالح.
|
||||
error-username-invalid-character=''{0}'' يحتوي على حرف غير صالح.
|
||||
error-person-name-invalid-character='{0}' يحتوي على حرف غير صالح.
|
||||
|
||||
updateEmail=تحديث البريد الإلكتروني
|
||||
|
||||
#groups
|
||||
groupLabel=المجموعات
|
||||
groupDescriptionLabel=اعرض المجموعات التي أنت مرتبط بها
|
||||
path=مسار
|
||||
directMembership=عضوية مباشرة
|
||||
noGroups=لا توجد مجموعات
|
||||
noGroupsText=أنت لم تنضم إلى أي مجموعة
|
||||
@@ -1 +1,174 @@
|
||||
fullName={0} {1}
|
||||
pageNotFound=No s''ha trobat la pàgina
|
||||
forbidden=Prohibit
|
||||
needAccessRights=No teniu permisos d''accés a aquesta petició. Contacteu amb l''administrador.
|
||||
invalidRoute={0} no és una ruta vàlida.
|
||||
actionRequiresIDP=Aquesta acció requereix una redirecció al vostre proveïdor d''identitat.
|
||||
actionNotDefined=No s''ha definit cap acció
|
||||
continue=Continua
|
||||
refreshPage=Refresca la pàgina
|
||||
refresh=Refresca
|
||||
done=Fet
|
||||
cancel=Cancel·la
|
||||
remove=Elimina
|
||||
update=Actualitza
|
||||
loadingMessage=S''està carregant la consola del compte…
|
||||
unknownUser=Anònim
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=Tots els camps són obligatoris.
|
||||
|
||||
selectLocale=Seleccioneu una configuració regional
|
||||
doSignIn=Inicia la sessió
|
||||
|
||||
backToAdminConsole=Torna a la consola d''administració
|
||||
accountManagementWelcomeMessage=Us donem la benvinguda al gestor de comptes del Keycloak
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=Informació personal
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=Dispositius identificats
|
||||
signedInDevicesExplanation=Desconnecteu qualsevol dispositiu que no us siga familiar.
|
||||
signOutWarning=Voleu sortir de la sessió?
|
||||
signOutAllDevices=Desconnecta tots els dispositius
|
||||
signOutAllDevicesWarning=Aquesta acció desconnectarà tots els dispositius que han entrat al vostre compte, inclòs el dispositiu que esteu utilitzant ara mateix.
|
||||
recentlyUsedDevices=Dispositius utilitzats recentment
|
||||
recentlyUsedDevicesExplanation=Dispositius utilitzats durant l''últim mes, però no identificats ara mateix.
|
||||
lastAccess=Últim accés
|
||||
unknownOperatingSystem=Sistema operatiu desconegut
|
||||
currentDevice=Dispositiu actual
|
||||
currentSession=Sessió actual
|
||||
signedOutSession=Desconnectat {0}/{1}
|
||||
lastAccessedOn=Últim accés
|
||||
clients=Clients
|
||||
started=Iniciat
|
||||
expires=Caduca
|
||||
ipAddress=Adreça IP
|
||||
|
||||
# Resources page
|
||||
resourceName=Nom del recurs
|
||||
nextPage=Següent
|
||||
previousPage=Anterior
|
||||
firstPage=Primera pàgina
|
||||
resourceSharedWith=El recurs està compartit amb {0}
|
||||
and=i altres {0} usuaris
|
||||
add=Afegeix
|
||||
share=Comparteix
|
||||
shareWith=Comparteix amb
|
||||
edit=Edita
|
||||
close=Tanca
|
||||
unShare=Deixa de compartir-ho tot
|
||||
shareSuccess=S''ha compartit el recurs correctament.
|
||||
unShareSuccess=S''ha deixat de compartir el recurs correctament.
|
||||
updateSuccess=S''ha actualitzat el recurs correctament.
|
||||
resourceAlreadyShared=El recurs ja està compartit amb aquest usuari.
|
||||
resourceNotShared=Aquest recurs no està compartit.
|
||||
permissionRequests=Peticions de permís
|
||||
permissions=Permisos
|
||||
selectPermissions=Seleccioneu els permisos
|
||||
unShareAllConfirm=Esteu segur de voler eliminar totes les comparticions completament?
|
||||
userNotFound=No s''ha trobat cap usuari amb el nom o correu electrònic {0}
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=Comptes enllaçats
|
||||
linkedAccountsIntroMessage=Gestiona les entrades a través de comptes de tercers.
|
||||
linkedLoginProviders=Proveïdors d''entrada enllaçats
|
||||
unlinkedLoginProviders=Proveïdors d''entrada no enllaçats
|
||||
linkedEmpty=No hi ha cap proveïdor enllaçat
|
||||
unlinkedEmpty=No hi ha cap proveïdor no enllaçat
|
||||
socialLogin=Identificació social
|
||||
systemDefined=Definit pel sistema
|
||||
link=Enllaça el compte
|
||||
unLink=Desenllaça el compte
|
||||
|
||||
# Signing in page
|
||||
signingIn=Identificació
|
||||
signingInSubMessage=Configureu maneres d''identificar-vos.
|
||||
credentialCreatedAt=Creada
|
||||
successRemovedMessage={0} s''ha eliminat.
|
||||
stopUsingCred=Voleu deixar d''utilitzar {0}?
|
||||
changePassword=Canvia la contrasenya
|
||||
removeCred=Elimina {0}
|
||||
setUpNew=Configura {0}
|
||||
removeCredAriaLabel=Elimina la credencial
|
||||
updateCredAriaLabel=Actualitza la credencial
|
||||
notSetUp={0} no està configurat.
|
||||
two-factor=Autenticació de doble factor
|
||||
passwordless=Sense contrasenya
|
||||
unknown=Desconegut
|
||||
password-display-name=Contrasenya
|
||||
password-help-text=Entreu introduint la vostra contrasenya.
|
||||
password=La meva contrasenya
|
||||
otp-display-name=aplicació d''autenticació
|
||||
otp-help-text=Introduïu el codi de verificació de l''aplicació d''autenticació.
|
||||
recovery-authn-code=Els meus codis d''autenticació de recuperació
|
||||
recovery-authn-codes-display-name=Codis d''autenticació de recuperació
|
||||
recovery-authn-codes-help-text=Aquests codis es poden utilitzar per a recuperar l''accés en cas que els altres mètodes de 2FA no siguen disponibles.
|
||||
recovery-codes-number-used={0} codis de recuperació utilitzats
|
||||
recovery-codes-number-remaining={0} codis de recuperació disponibles
|
||||
recovery-codes-generate-new-codes=Genereu codis nous per a garantir l''accés al vostre compte
|
||||
webauthn-display-name=Clau de seguretat
|
||||
webauthn-help-text=Utilitzeu la vostra clau de seguretat per a entrar.
|
||||
webauthn-passwordless-display-name=Clau de seguretat
|
||||
webauthn-passwordless-help-text=Utilitzeu la vostra clau de seguretat per a entrar sense contrasenya.
|
||||
basic-authentication=Autenticació bàsica
|
||||
invalidRequestMessage=Petició no vàlida
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Aplicacions
|
||||
applicationsPageSubTitle=Gestioneu els permisos de les aplicacions
|
||||
internalApp=Internes
|
||||
thirdPartyApp=De tercers
|
||||
offlineAccess=Accés fora de línia
|
||||
inUse=En ús
|
||||
notInUse=No en ús
|
||||
applicationDetails=Detalls de l''aplicació
|
||||
client=Client
|
||||
description=Descripció
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Accés concedit el
|
||||
removeButton=Elimina l''accés
|
||||
removeModalTitle=Elimina l''accés
|
||||
removeModalMessage=Això eliminarà els permisos d''accés actualment concedits a {0}. Haureu de tornar a concedir accés si voleu utilitzar aquesta aplicació.
|
||||
confirmButton=Confirma
|
||||
infoMessage=Fent clic en «Elimina l''accés», eliminareu els permisos concedits a aquesta aplicació. Aquesta aplicació ja no podrà utilitzar la vostra informació.
|
||||
termsOfService=Condicions del servei
|
||||
policy=Política de privadesa
|
||||
applicationType=Tipus d''aplicació
|
||||
status=Estat
|
||||
logo=Logotip
|
||||
|
||||
#Delete account page
|
||||
doDelete=Elimina
|
||||
deleteAccountSummary=Eliminar el vostre compte esborrarà totes les vostres dades i vos desconnectarà immediatament.
|
||||
deleteAccount=Elimina el compte
|
||||
deleteAccountWarning=Això és irreversible. Totes les vostres dades es destruiran permanentment i no seran accessibles.
|
||||
|
||||
error-invalid-value=«{0}» té un valor no vàlid.
|
||||
error-invalid-blank=Especifiqueu el valor de «{0}».
|
||||
error-empty=Especifiqueu el valor de «{0}».
|
||||
error-invalid-length=«{0}» ha de tindre una llargària d''entre {1} i {2}.
|
||||
error-invalid-length-too-short=«{0}» ha de tindre una llargària mínima de {1}.
|
||||
error-invalid-length-too-long=«{0}» ha de tindre una llargària màxima de {2}.
|
||||
error-invalid-email=L''adreça de correu electrònic no és vàlida.
|
||||
error-invalid-number=«{0}» és un número no vàlid.
|
||||
error-number-out-of-range=«{0}» ha de ser un número entre {1} i {2}.
|
||||
error-number-out-of-range-too-small=«{0}» ha de tindre valor mínim de {1}.
|
||||
error-number-out-of-range-too-big=«{0}» ha de tindre valor màxim de {2}.
|
||||
error-pattern-no-match=«{0}» no concorda amb el format requerit.
|
||||
error-invalid-uri=«{0}» és un URL no vàlid.
|
||||
error-invalid-uri-scheme=«{0}» té un esquema d''URL no vàlid.
|
||||
error-invalid-uri-fragment=«{0}» és un fragment d''URL no vàlid.
|
||||
error-user-attribute-required=Especifiqueu «{0}».
|
||||
error-invalid-date=«{0}» és una data no vàlida.
|
||||
error-username-invalid-character=«{0}» conté un caràcter no vàlid.
|
||||
error-person-name-invalid-character=«{0}» conté un caràcter no vàlid.
|
||||
|
||||
updateEmail=Actualitza el correu electrònic
|
||||
|
||||
#groups
|
||||
groupLabel=Grups
|
||||
groupDescriptionLabel=Visualitzeu els grups als quals esteu associat
|
||||
path=Camí
|
||||
directMembership=Pertinença directa
|
||||
noGroups=Cap grup
|
||||
noGroupsText=No us heu unit a cap grup
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
# Put new messages for Account Console Here
|
||||
# Feel free to use any existing messages from the base theme
|
||||
pageNotFound=Seite nicht gefunden
|
||||
forbidden=Verboten
|
||||
needAccessRights=Sie haben keine Zugriffsrechte auf diese Anfrage. Wenden Sie sich an Ihren Administrator.
|
||||
invalidRoute={0} ist keine valide Route.
|
||||
actionRequiresIDP=Diese Aktion erfordert eine Umleitung zu Ihrem Identit\u00E4tsanbieter.
|
||||
actionRequiresIDP=Diese Aktion erfordert eine Umleitung zu Ihrem Identitätsanbieter.
|
||||
actionNotDefined=Keine Aktion festgelegt
|
||||
continue=Fortfahren
|
||||
refreshPage=Aktualisiere die Seite
|
||||
@@ -13,43 +11,43 @@ cancel=Abbrechen
|
||||
remove=Entfernen
|
||||
update=Aktualisieren
|
||||
status=Status
|
||||
loadingMessage=Accountkonsole l\u00E4dt ...
|
||||
loadingMessage=Accountkonsole lädt ...
|
||||
unknownUser=Unbekannter Nutzer
|
||||
fullName={0} {1}
|
||||
|
||||
selectLocale=Sprache ausw\u00E4hlen
|
||||
selectLocale=Sprache auswählen
|
||||
doSignIn=Anmelden
|
||||
|
||||
# Device Activity Page
|
||||
signedInDevices=Angemeldete Ger\u00E4te
|
||||
signedInDevicesExplanation=Melde ein unbekanntes Ger\u00E4t ab.
|
||||
signedInDevices=Angemeldete Geräte
|
||||
signedInDevicesExplanation=Melde ein unbekanntes Gerät ab.
|
||||
signOutWarning=Session abmelden?
|
||||
signOutAllDevices=Alle Ger\u00E4te abmelden
|
||||
signOutAllDevicesWarning=Diese Aktion meldet alle Ger\u00E4te ab, die sich bei Ihrem Konto angemeldet haben, einschlie\u00DFlich des aktuellen Ger\u00E4ts, das Sie verwenden.
|
||||
recentlyUsedDevices=K\u00FCrzlich verwendete Ger\u00E4te
|
||||
recentlyUsedDevicesExplanation=Ger\u00E4te die im letzten Monat verwendet wurden, aber derzeit nicht angemeldet sind.
|
||||
signOutAllDevices=Alle Geräte abmelden
|
||||
signOutAllDevicesWarning=Diese Aktion meldet alle Geräte ab, die sich bei Ihrem Konto angemeldet haben, einschließlich des aktuellen Geräts, das Sie verwenden.
|
||||
recentlyUsedDevices=Kürzlich verwendete Geräte
|
||||
recentlyUsedDevicesExplanation=Geräte die im letzten Monat verwendet wurden, aber derzeit nicht angemeldet sind.
|
||||
lastAccess=Letzter Zugriff
|
||||
unknownOperatingSystem=Unbekanntes Betriebssystem
|
||||
currentDevice=Aktuelles Ger\u00E4t
|
||||
currentDevice=Aktuelles Gerät
|
||||
currentSession=Aktuelle Sitzung
|
||||
signedOutSession=Abgemeldet {0}/{1}
|
||||
lastAccessedOn=Zuletzt zugegriffen am
|
||||
clients=Clients
|
||||
startedAt=Gestartet am
|
||||
expiresAt=L\u00E4uft ab am
|
||||
expiresAt=Läuft ab am
|
||||
ipAddress=IP Adresse
|
||||
|
||||
# Resources Page
|
||||
resourceName=Ressourcenname
|
||||
nextPage=N\u00E4chste
|
||||
nextPage=Nächste
|
||||
previousPage=Vorherige
|
||||
firstPage=Erste Seite
|
||||
resourceSharedWith=Ressource ist freigegeben mit {0}
|
||||
and=\ und {0} anderen Nutzern
|
||||
add=Hinzuf\u00FCgen
|
||||
add=Hinzufügen
|
||||
share=Freigeben
|
||||
edit=Editieren
|
||||
close=Schlie\u00DFen
|
||||
close=Schließen
|
||||
unShare=Alle Freigaben aufheben
|
||||
shareSuccess=Ressource erfolgreich freigegeben.
|
||||
unShareSuccess=Freigabe erfolgreich aufgehoben.
|
||||
@@ -63,7 +61,7 @@ userNotFound=Kein Nutzer mit dem Namen oder E-Mail gefunden {0}
|
||||
|
||||
# Linked Accounts Page
|
||||
linkedAccountsTitle=Verbundene Konten
|
||||
linkedAccountsIntroMessage=Verwalten Sie Anmeldungen \u00FCber Konten von Drittanbietern.
|
||||
linkedAccountsIntroMessage=Verwalten Sie Anmeldungen über Konten von Drittanbietern.
|
||||
linkedLoginProviders=Verbundene Login Anbieter
|
||||
unlinkedLoginProviders=Getrennte Login Anbieter
|
||||
linkedEmpty=Keine verbundenen Anbieter
|
||||
@@ -75,7 +73,7 @@ unLink=Account trennen
|
||||
|
||||
# Signing In Page
|
||||
signingIn=Anmeldung
|
||||
signingInSubMessage=Konfigurieren Sie die Anmeldem\u00F6glichkeiten.
|
||||
signingInSubMessage=Konfigurieren Sie die Anmeldemöglichkeiten.
|
||||
credentialCreatedAt=Erstellt
|
||||
successRemovedMessage={0} wurde entfernt.
|
||||
stopUsingCred={0} nicht mehr verwenden?
|
||||
@@ -90,15 +88,23 @@ password-help-text=Mit einem Passwort anmelden.
|
||||
password=Mein Passwort
|
||||
otp-display-name=Authenticator-Anwendung
|
||||
otp-help-text=Geben Sie einen Verifizierungscode aus der Authenticator-Anwendung ein.
|
||||
otp-reset-description=Welche OTP Konfiguration soll entfernt werden?
|
||||
recovery-authn-code=Meine Wiederherstellungscodes
|
||||
recovery-authn-codes-display-name=Wiederherstellungscodes
|
||||
recovery-authn-codes-help-text=Diese Codes können verwendet werden, um Ihren Zugang wiederherzustellen, falls Ihre anderen Zwei-Faktor-Mittel nicht verfügbar sind.
|
||||
recovery-codes-number-used={0} Wiederherstellungscodes verwendet
|
||||
recovery-codes-number-remaining={0} verbleibende Wiederherstellungscodes
|
||||
recovery-codes-generate-new-codes=Generieren Sie neue Wiederherstellungscodes, um den Zugang zu Ihrem Konto sicherzustellen
|
||||
webauthn-display-name=Security-Token
|
||||
webauthn-help-text=Verwenden Sie Ihr Security-Token zur Anmeldung.
|
||||
webauthn-passwordless-display-name=Security-Token
|
||||
webauthn-passwordless-help-text=Verwenden Sie Ihr Security-Token zur kennwortlosen Anmeldung.
|
||||
basic-authentication=Standardauthentifizierung
|
||||
invalidRequestMessage=Ung\u00FCltige Anfrage
|
||||
invalidRequestMessage=Ungültige Anfrage
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Anwendungen
|
||||
applicationsPageSubTitle=Verwalten Sie Ihre Anwendungsberechtigungen
|
||||
internalApp=Intern
|
||||
thirdPartyApp=Drittanbieter
|
||||
offlineAccess=Offline Zugriff
|
||||
@@ -108,15 +114,15 @@ applicationDetails=Anwendungsdetails
|
||||
client=Client
|
||||
description=Beschreibung
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Zugriff gew\u00E4hrt am
|
||||
accessGrantedOn=Zugriff gewährt am
|
||||
removeButton=Zugriff entfernen
|
||||
removeModalTitle=Zugriff entfernen
|
||||
removeModalMessage=Dadurch wird die aktuell gew\u00E4hrte Zugriffsberechtigung f\u00FCr {0} entfernt. Sie m\u00FCssen den Zugriff erneut gew\u00E4hren, wenn Sie diese Anwendung verwenden m\u00F6chten.
|
||||
confirmButton=Best\u00E4tigen
|
||||
infoMessage=Indem Sie auf "Zugriff entfernen" klicken, entfernen Sie gew\u00E4hrte Berechtigungen dieser Anwendung. Diese Anwendung wird Ihre Informationen nicht mehr verwenden.
|
||||
removeModalMessage=Dadurch wird die aktuell gewährte Zugriffsberechtigung für {0} entfernt. Sie müssen den Zugriff erneut gewähren, wenn Sie diese Anwendung verwenden möchten.
|
||||
confirmButton=Bestätigen
|
||||
infoMessage=Indem Sie auf "Zugriff entfernen" klicken, entfernen Sie gewährte Berechtigungen dieser Anwendung. Diese Anwendung wird Ihre Informationen nicht mehr verwenden.
|
||||
|
||||
#Delete Account page
|
||||
doDelete=L\u00F6schen
|
||||
deleteAccountSummary=Wenn Sie Ihr Konto l\u00F6schen, werden alle Ihre Daten gel\u00F6scht und Sie werden sofort abgemeldet.
|
||||
deleteAccount=Konto l\u00F6schen
|
||||
deleteAccountWarning=Dies ist unwiderruflich. Alle Ihre Daten werden dauerhaft gel\u00F6scht und k\u00F6nnen nicht wiederhergestellt werden.
|
||||
doDelete=Löschen
|
||||
deleteAccountSummary=Wenn Sie Ihr Konto löschen, werden alle Ihre Daten gelöscht und Sie werden sofort abgemeldet.
|
||||
deleteAccount=Konto löschen
|
||||
deleteAccountWarning=Dies ist unwiderruflich. Alle Ihre Daten werden dauerhaft gelöscht und können nicht wiederhergestellt werden.
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
allFieldsRequired=Απαιτούνται όλα τα πεδία.
|
||||
noGroupsText=Δεν είστε μέλος σε καμία ομάδα
|
||||
noGroups=Καμία ομάδα
|
||||
directMembership=Άμεση συμμετοχή
|
||||
path=Διαδρομή
|
||||
groupDescriptionLabel=Εμφάνιση ομάδων με τις οποίες έχετε συσχετισθεί
|
||||
|
||||
#groups
|
||||
groupLabel=Ομάδες
|
||||
updateEmail=Ενημέρωση email
|
||||
error-person-name-invalid-character=Το '{0}' περιέχει μη έγκυρο χαρακτήρα.
|
||||
error-username-invalid-character=Το ''{0}'' περιέχει μη έγκυρο χαρακτήρα.
|
||||
error-invalid-date=Το ''{0}'' είναι μη έγκυρη ημερομηνία.
|
||||
error-user-attribute-required=Παρακαλώ ορίστε το "{0}".
|
||||
error-invalid-uri-fragment=Το ''{0}'' είναι ένα μη έγκυρο μέρος URL.
|
||||
error-invalid-uri-scheme=Το ''{0}'' έχει μη έγκυρο σχήμα URL.
|
||||
error-invalid-uri=Το ''{0}'' είναι μη έγκυρο URL.
|
||||
error-pattern-no-match=Το ''{0}'' δε ταιριάζει στην απαιτούμενη μορφή.
|
||||
error-number-out-of-range-too-big="{0}" πρέπει να έχει μέγιστη τιμή {2}.
|
||||
error-number-out-of-range-too-small="{0}" πρέπει να έχει ελάχιστη τιμή {1}.
|
||||
error-number-out-of-range=Το "{0}" πρέπει να είναι ένας αριθμός μεταξύ {1} και {2}.
|
||||
error-invalid-number=Το ''{0}'' είναι μη έγκυρος αριθμός.
|
||||
error-invalid-email=Μη έγκυρη διεύθυνση email.
|
||||
error-invalid-length-too-long=''{0}'' πρέπει να έχει ελάχιστο μήκος {2}.
|
||||
error-invalid-length-too-short=''{0}'' πρέπει να έχει ελάχιστο μήκος {1}.
|
||||
error-invalid-length=Το "{0}" πρέπει να έχει μήκος μεταξύ {1} και {2}.
|
||||
error-empty=Παρακαλώ ορίστε τιμή του "{0}".
|
||||
error-invalid-blank=Παρακαλώ ορίστε τιμή του "{0}".
|
||||
error-invalid-value=Το "{0}" έχει μη έγκυρη τιμή.
|
||||
deleteAccountWarning=Αυτό είναι ανεπίστροφο. Όλα τα δεδομένα σας θα καταστραφούν οριστικά και δεν επαναφέρονται.
|
||||
deleteAccount=Διαγραφή λογαριασμού
|
||||
deleteAccountSummary=Διαγράφοντας το λογαριασμό σας, θα αφαιρεθούν και όλα τα δεδομένα σας και θα αποσυνδεθείτε άμεσα.
|
||||
|
||||
#Delete account page
|
||||
doDelete=Διαγραφή
|
||||
logo=Λογότυπο
|
||||
status=Κατάσταση
|
||||
applicationType=Τύπος εφαρμογής
|
||||
policy=Πολιτική ιδιωτικότητας
|
||||
termsOfService=Όροι της υπηρεσίας
|
||||
infoMessage=Πατώντας το 'Αφαίρεση Πρόσβασης', θα αφαιρέσετε τις άδειες της εφαρμογής που είχατε δώσει. Αυτή η εφαρμογή δε θα μπορεί πλέον να χρησιμοποιεί τις πληροφορίες σας.
|
||||
confirmButton=Επιβεβαίωση
|
||||
removeModalMessage=Αυτό θα αφαιρέσει την τρέχουσα άδεια πρόσβαση που δόθηκε για το {0}. Θα πρέπει να δώσετε ξανά πρόσβαση αν θέλετε να χρησιμοποιήσετε αυτή την εφαρμογή.
|
||||
removeModalTitle=Αφαίρεση πρόσβασης
|
||||
removeButton=Αφαίρεση πρόσβασης
|
||||
accessGrantedOn=Δόθηκε πρόσβαση στο
|
||||
baseUrl=URL
|
||||
description=Περιγραφή
|
||||
client=Πελάτης
|
||||
applicationDetails=Λεπτομέρειες εφαρμογής
|
||||
notInUse=Δεν χρησιμοποιείται
|
||||
inUse=Σε χρήση
|
||||
offlineAccess=Πρόσβαση εκτός-σύνδεσης
|
||||
thirdPartyApp=Τρίτου-μέρους
|
||||
internalApp=Εσωτερικό
|
||||
applicationsPageSubTitle=Διαχείριση αδειών της εφαρμογής
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Εφαρμογές
|
||||
invalidRequestMessage=Μη έγκυρη αίτηση
|
||||
basic-authentication=Βασική ταυτοποίηση
|
||||
webauthn-passwordless-help-text=Χρήση του κλειδιού ασφαλείας για σύνδεση χωρίς κωδικό πρόσβασης.
|
||||
webauthn-passwordless-display-name=Κλειδί ασφαλείας
|
||||
webauthn-help-text=Χρήση του κλειδιού ασφαλείας σας για σύνδεση.
|
||||
webauthn-display-name=Κλειδί ασφαλείας
|
||||
recovery-codes-generate-new-codes=Δημιουργήστε νέους κωδικούς για να βεβαιωθείτε ότι θα έχετε πρόσβαση στο λογαριασμό σας
|
||||
recovery-codes-number-remaining={0} κωδικοί ανάκτησης απομένουν
|
||||
recovery-codes-number-used={0} κωδικοί ανάκτησης χρησιμοποιήθηκαν
|
||||
recovery-authn-codes-help-text=Αυτοί οι κωδικοί μπορούν να χρησιμοποιηθούν για να επανακτήσετε τη πρόσβαση σε περίπτωση που οι άλλες σας μέθοδοι δύο-παραγόντων δεν είναι διαθέσιμες.
|
||||
recovery-authn-codes-display-name=Κωδικοί ανάκτησης ταυτοποίησης
|
||||
recovery-authn-code=Οι κωδικοί ανάκτησης ταυτοποίησης μου
|
||||
otp-help-text=Εισάγετε ένα κωδικό επιβεβαίωσης από την εφαρμογή ταυτοποίησης.
|
||||
otp-display-name=εφαρμογή ταυτοποίησης
|
||||
password=Ο κωδικός πρόσβασης μου
|
||||
password-help-text=Συνδεθείτε βάζοντας το κωδικό πρόσβασής σας.
|
||||
password-display-name=Κωδικός πρόσβασης
|
||||
unknown=Άγνωστο
|
||||
passwordless=Χωρίς-κωδικό
|
||||
two-factor=Έλεγχος ταυτότητας δύο-παραγόντων
|
||||
notSetUp=Το {0} δεν έχει καθοριστεί.
|
||||
updateCredAriaLabel=Ενημέρωση διαπιστευτηρίου
|
||||
removeCredAriaLabel=Αφαίρεση διαπιστευτηρίου
|
||||
setUpNew=Καθορισμός του {0}
|
||||
removeCred=Αφαίρεση του {0}
|
||||
changePassword=Αλλαγή κωδικού πρόσβασης
|
||||
stopUsingCred=Διακοπή χρήσης του {0};
|
||||
successRemovedMessage=Το {0} αφαιρέθηκε.
|
||||
credentialCreatedAt=Δημιουργήθηκε
|
||||
signingInSubMessage=Ρύθμιση των τρόπων εισόδου.
|
||||
|
||||
# Signing in page
|
||||
signingIn=Σε είσοδο
|
||||
unLink=Αποσύνδεση λογαριασμού
|
||||
link=Σύνδεση λογαριασμού
|
||||
systemDefined=Ορισμένο από το σύστημα
|
||||
socialLogin=Κοινωνική είσοδος
|
||||
unlinkedEmpty=Κανένας αποσυνδεδεμένος πάροχος
|
||||
linkedEmpty=Κανένας συνδεδεμένος πάροχος
|
||||
unlinkedLoginProviders=Αποσυνδεδεμένοι πάροχοι εισόδου
|
||||
linkedLoginProviders=Συνδεδεμένοι πάροχοι εισόδου
|
||||
linkedAccountsIntroMessage=Διαχείριση των εισόδων μέσω λογαριασμών σε τρίτους.
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=Συνδεδεμένοι λογαριασμοί
|
||||
userNotFound=Δε βρέθηκε χρήστης με το όνομα ή email {0}
|
||||
unShareAllConfirm=Σίγουρα θέλετε να αφαιρέσετε όλους του διαμοιρασμούς;
|
||||
selectPermissions=Επιλέξτε τις άδειες
|
||||
permissions=Άδειες
|
||||
permissionRequests=Αιτήσεις αδειών
|
||||
resourceNotShared=Αυτός ο πόρος δε διαμοιράζεται.
|
||||
resourceAlreadyShared=Ο πόρος ήδη μοιράζεται με αυτό το χρήστη.
|
||||
updateSuccess=Ο πόρος ενημερώθηκε επιτυχώς.
|
||||
unShareSuccess=Επιτυχής διακοπή διαμοιρασμού πόρου.
|
||||
shareSuccess=Ο πόρος διαμοιράστηκε επιτυχώς.
|
||||
unShare=Διακοπή διαμοιρασμού όλων
|
||||
close=Κλείσιμο
|
||||
edit=Επεξεργασία
|
||||
shareWith=Μοιράζεται με
|
||||
share=Διαμοιρασμός
|
||||
add=Προσθήκη
|
||||
and=\ και {0} άλλους χρήστες
|
||||
resourceSharedWith=Πόρος διαμοιράζεται με {0}
|
||||
firstPage=Πρώτη σελίδα
|
||||
previousPage=Προηγούμενο
|
||||
nextPage=Επόμενο
|
||||
|
||||
# Resources page
|
||||
resourceName=Όνομα πόρου
|
||||
ipAddress=Διεύθυνση IP
|
||||
expires=Λήγει
|
||||
started=Ξεκίνησε
|
||||
clients=Πελάτες
|
||||
lastAccessedOn=Τελευταία πρόσβαση
|
||||
signedOutSession=Αποσυνδέθηκε {0}/{1}
|
||||
currentSession=Τρέχουσα συνεδρία
|
||||
currentDevice=Τρέχουσα συσκευή
|
||||
unknownOperatingSystem=Άγνωστο λειτουργικό σύστημα
|
||||
lastAccess=Τελευταία πρόσβαση
|
||||
recentlyUsedDevicesExplanation=Συσκευές που χρησιμοποιήθηκαν το τελευταίο μήνα, που όμως δεν είναι συνδεδεμένες αυτή τη στιγμή.
|
||||
recentlyUsedDevices=Πρόσφατες συσκευές
|
||||
signOutAllDevicesWarning=Αυτή η ενέργεια θα αποσυνδέσει όλες τις συσκευές που έχουν συνδεθεί στο λογαριασμό σας, συμπεριλαμβανόμενης και της συσκευής που χρησιμοποιείτε τώρα.
|
||||
signOutAllDevices=Αποσύνδεση όλων των συσκευών
|
||||
signOutWarning=Αποσύνδεση συνεδρίας;
|
||||
signedInDevicesExplanation=Αποσύνδεση από όποια άγνωστη συσκευή.
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=Συνδεδεμένες συσκευές
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=Προσωπικά στοιχεία
|
||||
accountManagementWelcomeMessage=Καλώς ήλθατε στη διαχείριση λογαριασμού στο Keycloak
|
||||
backToAdminConsole=Πίσω στην κονσόλα διαχείρισης
|
||||
doSignIn=Είσοδος
|
||||
selectLocale=Επιλογή γλώσσας
|
||||
fullName={0} {1}
|
||||
unknownUser=Ανώνυμος
|
||||
loadingMessage=Κονσόλα Λογαριασμού φορτώνει ...
|
||||
update=Ενημέρωση
|
||||
remove=Αφαίρεση
|
||||
cancel=Άκυρο
|
||||
done=Έγινε
|
||||
refresh=Ανανέωση
|
||||
refreshPage=Ανανέωση σελίδας
|
||||
continue=Συνέχεια
|
||||
actionNotDefined=Δεν έχει οριστεί ενέργεια
|
||||
actionRequiresIDP=Αυτή η ενέργεια απαιτεί ανακατεύθυνση προς το πάροχο ταυτότητας σας.
|
||||
invalidRoute=Το {0} δεν είναι μια έγκυρη διαδρομή.
|
||||
needAccessRights=Δεν έχετε άδειες πρόσβασης για αυτή την αίτηση. Επικοινωνήστε με το διαχειριστή σας.
|
||||
forbidden=Απαγορεύεται
|
||||
pageNotFound=Η σελίδα δε βρέθηκε
|
||||
@@ -1,5 +1,3 @@
|
||||
# Put new messages for Account Console Here
|
||||
# Feel free to use any existing messages from the base theme
|
||||
pageNotFound=Page not found
|
||||
forbidden=Forbidden
|
||||
needAccessRights=You do not have access rights to this request. Contact your administrator.
|
||||
@@ -98,7 +96,7 @@ two-factor=Two-factor authentication
|
||||
passwordless=Passwordless
|
||||
unknown=Unknown
|
||||
password-display-name=Password
|
||||
password-help-text=Log in by entering your password.
|
||||
password-help-text=Sign in by entering your password.
|
||||
password=My password
|
||||
otp-display-name=authenticator application
|
||||
otp-help-text=Enter a verification code from authenticator application.
|
||||
@@ -117,6 +115,7 @@ invalidRequestMessage=Invalid request
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Applications
|
||||
applicationsPageSubTitle=Manage your application permissions
|
||||
internalApp=Internal
|
||||
thirdPartyApp=Third-party
|
||||
offlineAccess=Offline access
|
||||
@@ -136,10 +135,11 @@ termsOfService=Terms of service
|
||||
policy=Privacy policy
|
||||
applicationType=Application type
|
||||
status=Status
|
||||
logo=Logo
|
||||
|
||||
#Delete account page
|
||||
doDelete=Delete
|
||||
deleteAccountSummary=Deleting your account will erase all your data and log you out immediately.
|
||||
deleteAccountSummary=Deleting your account will erase all your data and sign you out immediately.
|
||||
deleteAccount=Delete account
|
||||
deleteAccountWarning=This is irreversible. All your data will be permanently destroyed, and irretrievable.
|
||||
|
||||
@@ -162,3 +162,13 @@ error-user-attribute-required=Please specify ''{0}''.
|
||||
error-invalid-date=''{0}'' is invalid date.
|
||||
error-username-invalid-character=''{0}'' contains invalid character.
|
||||
error-person-name-invalid-character='{0}' contains invalid character.
|
||||
|
||||
updateEmail=Update email
|
||||
|
||||
#groups
|
||||
groupLabel=Groups
|
||||
groupDescriptionLabel=View groups that you are associated with
|
||||
path=Path
|
||||
directMembership=Direct membership
|
||||
noGroups=No groups
|
||||
noGroupsText=You are not joined in any group
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
pageNotFound=صفحه یافت نشد
|
||||
forbidden=غیرمجاز
|
||||
needAccessRights=شما مجوز دسترسی به این درخواست را ندارید. لطفا با مدیریت خود صحبت کنید.
|
||||
invalidRoute={0} مسیر معتبری نیست.
|
||||
actionRequiresIDP=این عمل نیاز به ریدایرکت به ارائهدهنده هویت شما دارد.
|
||||
actionNotDefined=هیچ عملی تعریف نشده
|
||||
continue=ادامه
|
||||
refreshPage=باگذاری مجدد صفحه
|
||||
refresh=بارگذاری مجدد
|
||||
done=انجام
|
||||
cancel=لغو
|
||||
remove=حذف
|
||||
update=به روزرسانی
|
||||
loadingMessage=در حال بارگذاری کنسول اکانت ...
|
||||
unknownUser=ناشناس
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=تمامی فیلدها اجباری هستند.
|
||||
|
||||
selectLocale=یک زبان را انتخاب کنید
|
||||
doSignIn=ورود
|
||||
|
||||
backToAdminConsole=بازگشت به کنسول ادمین
|
||||
accountManagementWelcomeMessage=به مدیریت اکانت Keycloak خوش آمدید
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=اطلاعات شخصی
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=دستگاههای وارد شده
|
||||
signedInDevicesExplanation=خروج از دستگاههای ناآشنا.
|
||||
signOutWarning=خروج از نشست?
|
||||
signOutAllDevices=خروح از تمام دستگاهها
|
||||
signOutAllDevicesWarning=این عمل شما را از تمامی دستگاه های وارد شده در حسابتان خارج میکند،شامل دستگاهی که در حال استفاده از آن هستید.
|
||||
recentlyUsedDevices=دستگاههای اخیرا استفادهشده
|
||||
recentlyUsedDevicesExplanation=دستگاههایی که در ماه اخیر استفاده شدهاند، اما اکنون لاگین نیستند.
|
||||
lastAccess=آخرین دسترسی
|
||||
unknownOperatingSystem=سیستم عامل ناشناس
|
||||
currentDevice=دستگاه فعلی
|
||||
currentSession=نشست فعلی
|
||||
signedOutSession=خارج شده {0}/{1}
|
||||
lastAccessedOn=آخرین دسترسی
|
||||
clients=مشتریان
|
||||
started=آغاز
|
||||
expires=انقضا
|
||||
ipAddress=آدرس IP
|
||||
|
||||
# Resources page
|
||||
resourceName=نام منبع
|
||||
nextPage=بعدی
|
||||
previousPage=قبلی
|
||||
firstPage=صفحه اول
|
||||
resourceSharedWith=منبع با {0} در اشتراک گذاشته شده
|
||||
and=/ و {0} دیگران
|
||||
add=اضافه
|
||||
share=به اشتراک گداری
|
||||
shareWith=استراکگذاری با
|
||||
edit=ویرایش
|
||||
close=بستن
|
||||
unShare=لغو اشتراکگذاری همه
|
||||
shareSuccess=منبع با موفقیت به اشتراک گذاشته شد.
|
||||
unShareSuccess=اشتراکگذاری منبع با موفقیت لغو شد.
|
||||
updateSuccess=منبع با موفقیت به روزرسانی شده.
|
||||
resourceAlreadyShared=منبع پیش از این با کاربر به اشتراک گذاشته شده بود.
|
||||
resourceNotShared=این منبع به اشتراک گذاشته نشده است.
|
||||
permissionRequests=درخواستهای مجوز
|
||||
permissions=مجوزها
|
||||
selectPermissions=مجوزها را انتخاب کنید
|
||||
unShareAllConfirm=آیا از حذف تمام اشتراکگذاریها اطمینان دارید؟
|
||||
userNotFound=هیچ کاربری با نام یا ایمیل {0} یافت نشد
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=حسابهای پیونددادهشده
|
||||
linkedAccountsIntroMessage=لاگینها را از طریق حسابهای شخص ثالث مدیریت کنید.
|
||||
linkedLoginProviders=ارائهدهندگان لاگین پیونددادهشده
|
||||
unlinkedLoginProviders=ارائهدهندگان لاگین بدون پیوند
|
||||
linkedEmpty=بدون ارائهدهنده پیونددادهشده
|
||||
unlinkedEmpty=بدون ارائهدهنده بدون پیوند
|
||||
socialLogin=لاگین شبکههای اجتماعی
|
||||
systemDefined=سیستم تعریف شد
|
||||
link=پیوندداده اکانت
|
||||
unLink=بدون پیوندسازی اکانت
|
||||
|
||||
# Signing in page
|
||||
signingIn=در حال ورود
|
||||
signingInSubMessage=راههای ورود را تنظیم کنید.
|
||||
credentialCreatedAt=ایجادشده
|
||||
successRemovedMessage={0} حذف شد.
|
||||
stopUsingCred=متوقفکردن استفده از {0}.
|
||||
changePassword=تغییر رمز عبور
|
||||
removeCred=حذف {0}
|
||||
setUpNew=تنظیم {0}
|
||||
removeCredAriaLabel=حذف اعتبارنامه
|
||||
updateCredAriaLabel=بهروزرسانی اعتبارنامه
|
||||
notSetUp={0} تنظیم نشده است.
|
||||
two-factor=اعتبارستجی دومرحلهای
|
||||
passwordless=بدون رمز عبور
|
||||
unknown=ناشناخته
|
||||
password-display-name=رمزعبور
|
||||
password-help-text=با واردکردن رمز عبور خود وارد شوید.
|
||||
password=رمز عبور من
|
||||
otp-display-name=اپلیکیشن اعتبارسنجی
|
||||
otp-help-text=یک کد از اپلیکیشن اعتبارسنجی وارد کنید.
|
||||
recovery-authn-code=کدهای بازیابی اعتبارستجی من
|
||||
recovery-authn-codes-display-name=کدهای بازیابی اعبتارسنجی
|
||||
recovery-authn-codes-help-text=این کدها میتوانند برای بازیابی مجدد دسترسی، در صورتی که سایر شیوههای اعتبارسنجی دو مرحلهای در دسترس نباشند، استفاده شوند.
|
||||
recovery-codes-number-used={0} از کدهای بازیابی استفاده شده
|
||||
recovery-codes-number-remaining={0} از کدهای بازیابی باقی مانده
|
||||
recovery-codes-generate-new-codes=برای دسترسی به حساب حود کدهای تازه اسجاد کنید
|
||||
webauthn-display-name=کلید امنیتی
|
||||
webauthn-help-text=از کلید امنیتی خود برای ورود استفاده کنید.
|
||||
webauthn-passwordless-display-name=کلید امنیتی
|
||||
webauthn-passwordless-help-text=ار کلید امنیتی خود برای ورود بدون رمز عبور استفاده کنید.
|
||||
basic-authentication=اعتبارسنجی پایه
|
||||
invalidRequestMessage=درخواست نامعتبر
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=اپلیکیشنها
|
||||
applicationsPageSubTitle=مجوزهای اپلیکیشن خود را مدیریت کنید
|
||||
internalApp=داخلی
|
||||
thirdPartyApp=شخص ثالث
|
||||
offlineAccess=دسترسی آفلاین
|
||||
inUse=در حال استفاده
|
||||
notInUse=آزاد
|
||||
applicationDetails=جزئیات اپلیکیشن
|
||||
client=مشتری
|
||||
description=توضیحات
|
||||
baseUrl=URL
|
||||
accessGrantedOn=دسترسی داده شد در
|
||||
removeButton=حذف دسترسی
|
||||
removeModalTitle=حذف دسترسی
|
||||
removeModalMessage=این عمل مجوز دسترسی اعطاشده فعلی برای {0} را حذف میکند. اگر میخواهید از این اپ دوباره استفاده کنید باید مجدد دسترسی را اعطا کنید.
|
||||
confirmButton=تایید
|
||||
infoMessage=با کلیک بر 'حذف دسترسی'، شما مجوزهای اعطاشده برای این اپلیکیشن را حذف میکنید. این اپلیکیشن دیگر اط اطلاعات شما استفاده نخواهد کرد.
|
||||
termsOfService=شرایط خدمات
|
||||
policy=سیاست حریم شخصی
|
||||
applicationType=نوع اپلیکیشن
|
||||
status=وضعیت
|
||||
logo=لوگو
|
||||
|
||||
#Delete account page
|
||||
doDelete=حذف
|
||||
deleteAccountSummary=حذف حساب شما تمامی اطلاعات شما را حذف و شما بلافاصله خارج خواهد کرد.
|
||||
deleteAccount=حذف حساب
|
||||
deleteAccountWarning=This is irreversible. All your data will be permanently destroyed, and irretrievable.
|
||||
|
||||
error-invalid-value=''{0}'' مقداری نامعتبر دارد.
|
||||
error-invalid-blank=لطفا مقدار ''{0}'' را مشخص کنید.
|
||||
error-empty=لطفا مقدار ''{0}'' را مشخص کنید.
|
||||
error-invalid-length=''{0}'' باید یک مقدار بین {1} و {2}.
|
||||
error-invalid-length-too-short=''{0}'' باید حداقل {1} کاراکتر داشته باشد.
|
||||
error-invalid-length-too-long=''{0}''باید حداکثر {2} کاراکتر داشته باشد.
|
||||
error-invalid-email=آدرس ایمیل نامعتبر.
|
||||
error-invalid-number=''{0}'' یک ایمیل نامعتر است.
|
||||
error-number-out-of-range=''{0}'' باید یک عدد بین {1} و {2}.
|
||||
error-number-out-of-range-too-small=''{0}'' باید حداقل {1} باشد.
|
||||
error-number-out-of-range-too-big=''{0}''باید حداکثر {2} باشد.
|
||||
error-pattern-no-match=''{0}''با فرمت مورد نظر تطبیق ندارد.
|
||||
error-invalid-uri=''{0}'' یک URL نامعتبر است.
|
||||
error-invalid-uri-scheme=''{0}'' یک شمای URL نامعتبر دارد.
|
||||
error-invalid-uri-fragment=''{0}'' یک تکه نامعتبر URL است.
|
||||
error-user-attribute-required=لطفا ''{0}'' را مشخص کنید.
|
||||
error-invalid-date=''{0}'' یک تاریخ نامعتبر است.
|
||||
error-username-invalid-character=''{0}'' شامل یک کاراکتر نامعتبر است.
|
||||
error-person-name-invalid-character='{0}' شامل یک کاراکتر نامعتر است.
|
||||
|
||||
updateEmail=برورسانی ایمیل
|
||||
|
||||
#groups
|
||||
groupLabel=گروهها
|
||||
groupDescriptionLabel=نمایش گروههایی که با آنها در ارتبطا هستید
|
||||
path=مسیر
|
||||
directMembership=عضویت مستقیم
|
||||
noGroups=بدون گروه
|
||||
noGroupsText=شما در هیچ گروهی عضو نیستید
|
||||
@@ -6,37 +6,39 @@ selectLocale=Choisissez une langue
|
||||
|
||||
# Authentication page
|
||||
signingIn=Authentification
|
||||
signingInSubMessage=Configurez les m\u00e9thodes d''authentification.
|
||||
signingInSubMessage=Configurez les méthodes d''authentification.
|
||||
basic-authentication=Authentification de Base
|
||||
password-display-name=Mot de passe
|
||||
password-help-text=Authentifiez-vous en saisissant votre mot de passe
|
||||
credentialCreatedAt=Cr\u00e9\u00e9 le
|
||||
two-factor=Authentification \u00e0 Deux Facteurs
|
||||
credentialCreatedAt=Créé le
|
||||
two-factor=Authentification à Deux Facteurs
|
||||
passwordless=Authentification Sans Mot de Passe
|
||||
otp-display-name=Application d''authentification
|
||||
otp-help-text=Entrez un code de v\u00e9rification \u00e0 usage unique fourni par l''application d''authentification.
|
||||
webauthn-display-name=Cl\u00e9 de S\u00e9curit\u00e9
|
||||
webauthn-help-text=Utilisez votre cl\u00e9 de s\u00e9curit\u00e9 pour vous authentifier.
|
||||
webauthn-passwordless-display-name=Cl\u00e9 de S\u00e9curit\u00e9
|
||||
webauthn-passwordless-help-text=Utilisez votre cl\u00e9 de s\u00e9curit\u00e9 pour une authentification sans mot de passe.
|
||||
notSetUp={0} non configur\u00e9(e).
|
||||
otp-help-text=Entrez un code de vérification à usage unique fourni par l''application d''authentification.
|
||||
webauthn-display-name=Clé de Sécurité
|
||||
webauthn-help-text=Utilisez votre clé de sécurité pour vous authentifier.
|
||||
webauthn-passwordless-display-name=Clé de Sécurité
|
||||
webauthn-passwordless-help-text=Utilisez votre clé de sécurité pour une authentification sans mot de passe.
|
||||
notSetUp={0} non configuré(e).
|
||||
remove=Supprimer
|
||||
refreshPage=Rafra\u00eechir la page
|
||||
client_security-admin-console=Console d''administration de la s\u00e9curit\u00e9
|
||||
refreshPage=Rafraîchir la page
|
||||
client_security-admin-console=Console d''administration de la sécurité
|
||||
client_account-console=Console de gestion du compte
|
||||
|
||||
|
||||
# Device Activity page
|
||||
signedInDevices=Appareils Connect\u00e9s
|
||||
signedInDevicesExplanation=D\u00e9connectez les appareils que vous ne reconnaissez pas.
|
||||
signedInDevices=Appareils Connectés
|
||||
signedInDevicesExplanation=Déconnectez les appareils que vous ne reconnaissez pas.
|
||||
currentSession=Session Courante
|
||||
lastAccessedOn=Dernier acc\u00e8s le
|
||||
startedAt=D\u00e9marr\u00e9(e) le
|
||||
lastAccessedOn=Dernier accès le
|
||||
startedAt=Démarré(e) le
|
||||
expiresAt=Expire le
|
||||
|
||||
# Applications page
|
||||
internalApp=Interne
|
||||
thirdPartyApp=Tierce
|
||||
inUse=Utilis\u00e9(e)
|
||||
notInUse=Non utilis\u00e9(e)
|
||||
inUse=Utilisé(e)
|
||||
notInUse=Non utilisé(e)
|
||||
setUpNew=Configurer {0}
|
||||
|
||||
updateEmail=Modifier le courriel
|
||||
|
||||
@@ -1 +1,172 @@
|
||||
fullName={0} {1}
|
||||
pageNotFound=Az oldal nem található
|
||||
forbidden=Hozzáférés megtagadva
|
||||
needAccessRights=Nincs jogosultsága a művelet elvégzéséhez. Kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.
|
||||
invalidRoute=Érvénytelen útvonal: {0}
|
||||
actionRequiresIDP=Ez a művelet átirányítja a aszemélyazonosság-kezelőre
|
||||
actionNotDefined=Nincs definiált művelet
|
||||
continue=Tovább
|
||||
refreshPage=Oldal újratöltése
|
||||
refresh=Frissítés
|
||||
done=Kész
|
||||
cancel=Mégse
|
||||
remove=Eltávolítás
|
||||
update=Módosítás
|
||||
loadingMessage=Fiók Kezelő betöltése ...
|
||||
unknownUser=Ismeretlen felhasználó
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=Minden mező kitöltése kötelező
|
||||
selectLocale=Nyelv kiválasztása
|
||||
doSignIn=Bejelentkezés
|
||||
backToAdminConsole=Vissza az adminisztrátori kezelőfelületre
|
||||
accountManagementWelcomeMessage=Üdvözöljük a Keycloak Fiók Kezelőben
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=Személyes adatok
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=Bejelentkezett eszközök
|
||||
signedInDevicesExplanation=Jelentkezzen ki minden ismeretlen eszközből.
|
||||
signOutWarning=Megszakítja a munkamenetet?
|
||||
signOutAllDevices=Kijelentkezés minden eszközről
|
||||
signOutAllDevicesWarning=Ezzel a művelettel kijelentkezik az összes bejelentkezett eszközből ezt az eszközt is beleértve.
|
||||
recentlyUsedDevices=Mostanában használt eszközök
|
||||
recentlyUsedDevicesExplanation=Az elmúlt hónapban használt, jelenleg nem bejelentkezett eszközök.
|
||||
lastAccess=Utoljára használva
|
||||
unknownOperatingSystem=Ismeretlen operációs rendszer
|
||||
currentDevice=Ez az eszköz
|
||||
currentSession=Ez a munkamenet
|
||||
signedOutSession=Kijelentkezett munkamenet
|
||||
lastAccessedOn=Utoljára használva
|
||||
clients=Kliensek
|
||||
started=Kezdete
|
||||
expires=Lejárat
|
||||
ipAddress=IP cím
|
||||
|
||||
# Resources page
|
||||
resourceName=Erőforrás neve
|
||||
nextPage=Következő
|
||||
previousPage=Előző
|
||||
firstPage=Első oldal
|
||||
resourceSharedWith=Az erőforrás megosztva a következővel: {0}
|
||||
and=\ és {0} további felhasználó
|
||||
add=Hozzáadás
|
||||
share=Megosztás
|
||||
shareWith=Megosztás vele
|
||||
edit=Szerkesztés
|
||||
close=Bezárás
|
||||
unShare=Összes megosztás megszüntetése
|
||||
shareSuccess=Az erőforrás sikeresen megosztva
|
||||
unShareSuccess=Az erőforrás megosztása megszüntetve
|
||||
updateSuccess=Az erőforrás módosítva
|
||||
resourceAlreadyShared=Az erőforrás már meg van osztva ezzel a felhasználóval.
|
||||
resourceNotShared=Ez az erőforrás nincs megosztva
|
||||
permissionRequests=Jogosultság kérelmek
|
||||
permissions=Jogosultságok
|
||||
selectPermissions=Jogosultságok kiválasztva
|
||||
unShareAllConfirm=Valóban meg szeretné szüntetni az összes megosztást?
|
||||
userNotFound=Nem található felhasználó a(z) {0} névvél vagy e-mail címmel.
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=Összekapcsolt fiókok
|
||||
linkedAccountsIntroMessage=Bejelentkezés kezelése harmadik féltől származó fiókokkal.
|
||||
linkedLoginProviders=Összekapcsolt hitelesítő szolgáltatások
|
||||
unlinkedLoginProviders=Nem összekapcsolt hitelesítő szolgáltatások
|
||||
linkedEmpty=Nincsenek összekapcsolt szolgáltatások
|
||||
unlinkedEmpty=Nincsenek elérhető szolgáltatások
|
||||
socialLogin=Közösségi bejelentkezés
|
||||
systemDefined=Rendszer által definiált
|
||||
link=Alkalmazás összekapcsolása
|
||||
unLink=Összekapcsolás megszüntetése
|
||||
|
||||
# Signing in page
|
||||
signingIn=Bejelentkezés
|
||||
signingInSubMessage=Bejelentkezési módok kezelése
|
||||
credentialCreatedAt=Létrehozva
|
||||
successRemovedMessage={0} eltávolítva.
|
||||
stopUsingCred=Eltávolítja: {0}?
|
||||
changePassword=Jelszó megváltoztatása
|
||||
removeCred={0} eltávolítása
|
||||
setUpNew=Új {0} hozzáadása
|
||||
removeCredAriaLabel=
|
||||
updateCredAriaLabel=
|
||||
notSetUp={0} nincs beállítva.
|
||||
two-factor=Kétlépcsős azonosítás
|
||||
passwordless=Jelszó nélküli hitelesítés
|
||||
unknown=Ismeretlen
|
||||
password-display-name=Jelszó
|
||||
password-help-text=Bejelentkezés jelszó segítségével.
|
||||
password=Jelszavam
|
||||
otp-display-name=Hitelesítő alkalmazás
|
||||
otp-help-text=Hitelesítő kód használata alkalmazás segítségével.
|
||||
recovery-authn-code=Biztonsági visszaállító kódjaim
|
||||
recovery-authn-codes-display-name=Biztonsági visszaállító kódok
|
||||
recovery-authn-codes-help-text=Ezek a biztonsági visszaállító kódok használhatóak amennyiben a hitelesítő eszköz nem elérhető.
|
||||
recovery-codes-number-used={0} visszaállító kód felhasználva
|
||||
recovery-codes-number-remaining={0} biztonsági kód maradt
|
||||
recovery-codes-generate-new-codes=Generáljon új visszaállítási kódokat a hozzáférése biztosítása érdekében.
|
||||
webauthn-display-name=Biztonsági kulcs
|
||||
webauthn-help-text=Biztonsági kulcs használata bejelentkezéshez.
|
||||
webauthn-passwordless-display-name=Biztonsági kulcs
|
||||
webauthn-passwordless-help-text=Biztonsági kulcs használata jelszó nélküli bejelentkezéshez.
|
||||
basic-authentication=Normál bejelentkezés
|
||||
invalidRequestMessage=Érvénytelen kérés
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Alkalmazások
|
||||
applicationsPageSubTitle=Alkalmazások jogosultságainak kezelése
|
||||
internalApp=Belső
|
||||
thirdPartyApp=Harmadik fél
|
||||
offlineAccess=Offline hozzáférés
|
||||
inUse=Használatban
|
||||
notInUse=Használaton kívül
|
||||
applicationDetails=Alkalmazás adatai
|
||||
client=Kliens
|
||||
description=Leírás
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Hozzáférés megadva:
|
||||
removeButton=Hozzáférés eltávolítása
|
||||
removeModalTitle=Hozzáférés eltávolítása
|
||||
removeModalMessage=Ezzel törli a(z) {0} alkalmazás jelenlegi hozzáféréseit. A hozzáféréseket újra meg kell adni, ha hasznáni szeretné az alkalmazást.
|
||||
confirmButton=Megerősítés
|
||||
infoMessage=A 'Hozzáférés eltávolítása' gombra kattintva visszavonhatja az alkalmazás hozzáféréseit. Az alkalmazás nem fogja elérni az Ön adatait.
|
||||
termsOfService=Felhasználási feltételek
|
||||
policy=Adatvédelmi irányelvek
|
||||
applicationType=Alkalmazás típusa
|
||||
status=Státusz
|
||||
logo=Logó
|
||||
|
||||
#Delete account page
|
||||
doDelete=Törlés
|
||||
deleteAccountSummary=A felhasználói fiókja törlésekor minden adata törlése kerül és a munkamenetei azonnal megszakításra kerülnek.
|
||||
deleteAccount=Felhasználói fiók törlése
|
||||
deleteAccountWarning=Ez visszavonhatatlan. Az összes adat véglegesen törlésre kerül.
|
||||
|
||||
error-invalid-value=''{0}'' érvénytelen értéket tartalmaz.
|
||||
error-invalid-blank=Kérem, adja meg a(z) ''{0}'' értékét.
|
||||
error-empty=Kérem, adja meg a(z) ''{0}'' értékét.
|
||||
error-invalid-length=''{0}'' hossza {1} és {2} karakter között kell legyen.
|
||||
error-invalid-length-too-short=''{0}'' minimális hossza {1} karakter.
|
||||
error-invalid-length-too-long=''{0}'' maximális hossza {2} karakter.
|
||||
error-invalid-email=Érvénytelen e-mail cím.
|
||||
error-invalid-number=''{0}'' érvénytelen szám.
|
||||
error-number-out-of-range=''{0}'' értéke {1} és {2} közötti szám kell legyen.
|
||||
error-number-out-of-range-too-small=''{0}'' minimum értéke: {1}.
|
||||
error-number-out-of-range-too-big=''{0}'' maximum értéke: {2}.
|
||||
error-pattern-no-match=''{0}'' nem felel meg a követelményeknek.
|
||||
error-invalid-uri=''{0}'' érvénytelen URL.
|
||||
error-invalid-uri-scheme=''{0}'' érvénytelen URL séma.
|
||||
error-invalid-uri-fragment=''{0}'' érvénytelen URL fragmens.
|
||||
error-user-attribute-required=Kérem, adja meg a(z) ''{0}'' értékét.
|
||||
error-invalid-date=''{0}'' érvénytelen dátum.
|
||||
error-username-invalid-character=''{0}'' érvénytelen karaktert tartalmaz.
|
||||
error-person-name-invalid-character='{0}' érvénytelen karaktert tartalmaz.
|
||||
|
||||
updateEmail=E-mail cím módosítása
|
||||
|
||||
#groups
|
||||
groupLabel=Csoportok
|
||||
groupDescriptionLabel=Az Önhöz tartozó csoportok megtekintése
|
||||
path=Elérési út
|
||||
directMembership=Közvetlen tagság
|
||||
noGroups=Nincsenek csoportok
|
||||
noGroupsText=Ön nem tagja egyetlen csoportnak sem
|
||||
@@ -1 +1,174 @@
|
||||
fullName={0} {1}
|
||||
pageNotFound=Pagina non trovata
|
||||
forbidden=Vietato
|
||||
needAccessRights=Non si dispone dei diritti di accesso a questa richiesta. Contattare il proprio amministratore.
|
||||
invalidRoute={0} non è un percorso valido.
|
||||
actionRequiresIDP=Questa azione richiede il reindirizzamento al proprio fornitore di identità.
|
||||
actionNotDefined=Nessuna azione definita
|
||||
continue=Continua
|
||||
refreshPage=Aggiornare la pagina
|
||||
refresh=Aggiornare
|
||||
done=Fatto
|
||||
cancel=Annulla
|
||||
remove=Rimuovi
|
||||
update=Aggiorna
|
||||
loadingMessage=Caricamento della console dell''account ...
|
||||
unknownUser=Anonimo
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=Tutti i campi sono obbligatori.
|
||||
|
||||
selectLocale=Selezionare una lingua
|
||||
doSignIn=Accedi
|
||||
|
||||
backToAdminConsole=Torna alla console di amministrazione
|
||||
accountManagementWelcomeMessage=Benvenuti nella gestione del account MMEC
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=Informazioni personali
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=Dispositivi registrati
|
||||
signedInDevicesExplanation=Uscire da tutti i dispositivi sconosciuti.
|
||||
signOutWarning=Chiudere la sessione?
|
||||
signOutAllDevices=Disconnettere tutti i dispositivi
|
||||
signOutAllDevicesWarning=Quest''azione eliminerà tutti i dispositivi che hanno effettuato l''accesso all''account, compreso il dispositivo attualmente in uso.
|
||||
recentlyUsedDevices=Dispositivi utilizzati di recente
|
||||
recentlyUsedDevicesExplanation=DDispositivi utilizzati nell''ultimo mese, ma non attualmente connessi.
|
||||
lastAccess=Ultimo accesso
|
||||
unknownOperatingSystem=Sistema operativo sconosciuto
|
||||
currentDevice=Dispositivo attuale
|
||||
currentSession=Sessione in corso
|
||||
signedOutSession=Disconnesso {0}/{1}
|
||||
lastAccessedOn=Ultimo accesso
|
||||
clients=Dispositivi
|
||||
started=Inziata
|
||||
expires=Scadenza
|
||||
ipAddress=Indirizzo IP
|
||||
|
||||
# Resources page
|
||||
resourceName=Nome della risorsa
|
||||
nextPage=Avanti
|
||||
previousPage=Precedente
|
||||
firstPage=Prima pagina
|
||||
resourceSharedWith=La risorsa è condivisa con {0}
|
||||
and=\ e {0} altri utenti
|
||||
add=Aggiungi
|
||||
share=Condividi
|
||||
shareWith=Condividi con
|
||||
edit=Modifica
|
||||
close=Chiudi
|
||||
unShare=Non condividere tutto
|
||||
shareSuccess=Risorsa condivisa con successo.
|
||||
unShareSuccess=Risorsa non più condivisa con successo.
|
||||
updateSuccess=Risorsa aggiornata con successo.
|
||||
resourceAlreadyShared=La risorsa è già condivisa con questo utente.
|
||||
resourceNotShared=Questa risorsa non è condivisa.
|
||||
permissionRequests=Richieste di autorizzazione
|
||||
permissions=Permessi
|
||||
selectPermissions=Selezionare le autorizzazioni
|
||||
unShareAllConfirm=ASiete sicuri di voler rimuovere completamente tutte le condivisioni?
|
||||
userNotFound=Nessun utente trovato con nome o e-mail {0}
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=Account collegati
|
||||
linkedAccountsIntroMessage=Gestire gli accessi tramite account di terzi.
|
||||
linkedLoginProviders=Provider di accesso collegati
|
||||
unlinkedLoginProviders=Provider di accesso scollegati
|
||||
linkedEmpty=Nessun provider collegato
|
||||
unlinkedEmpty=Nessun provider scollegato
|
||||
socialLogin=Social login
|
||||
systemDefined=SSistema definito
|
||||
link=Account collegato
|
||||
unLink=Account scollegato
|
||||
|
||||
# Signing in page
|
||||
signingIn=Impostazioni di accesso
|
||||
signingInSubMessage=Configurare le modalità di accesso.
|
||||
credentialCreatedAt=Creato
|
||||
successRemovedMessage={0} è stato rimosso.
|
||||
stopUsingCred=Smettere di usare {0}?
|
||||
changePassword=Cambiare la password
|
||||
removeCred=Rimuovi {0}
|
||||
setUpNew=Impostazione {0}
|
||||
removeCredAriaLabel=Rimuovi credenziali
|
||||
updateCredAriaLabel=Aggiorna credenziali
|
||||
notSetUp={0} non è impostato.
|
||||
two-factor=Autenticazione a due fattori
|
||||
passwordless=Passwordless
|
||||
unknown=sconosciuto
|
||||
password-display-name=Password
|
||||
password-help-text=Accedere inserendo la password.
|
||||
password=La mia password
|
||||
otp-display-name=applicazione authenticator
|
||||
otp-help-text=Immettere un codice di verifica dall''applicazione Authenticator.
|
||||
recovery-authn-code=I miei codici di recupero
|
||||
recovery-authn-codes-display-name=Codici di autenticazione di recupero
|
||||
recovery-authn-codes-help-text=Questi codici possono essere utilizzati per riottenere l''accesso nel caso in cui gli altri strumenti 2FA non siano disponibili.
|
||||
recovery-codes-number-used={0} codici di recupero utilizzati
|
||||
recovery-codes-number-remaining={0} codici di recupero rimanenti
|
||||
recovery-codes-generate-new-codes=Generare nuovi codici per garantire l''accesso al proprio account
|
||||
webauthn-display-name=Chiave di sicurezza
|
||||
webauthn-help-text=Utilizzare la chiave di sicurezza per accedere.
|
||||
webauthn-passwordless-display-name=Chiave di sicurezza
|
||||
webauthn-passwordless-help-text=Utilizzare la chiave di sicurezza per l''accesso senza password.
|
||||
basic-authentication=Autenticazione di base
|
||||
invalidRequestMessage=Richiesta non valida
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Applicazioni
|
||||
applicationsPageSubTitle=Gestisci le autorizzazioni delle tue applicazioni
|
||||
internalApp=Interna
|
||||
thirdPartyApp=App di terze parti
|
||||
offlineAccess=Accesso offline
|
||||
inUse=In uso
|
||||
notInUse=Non in uso
|
||||
applicationDetails=Dettagli dell''applicazione
|
||||
client=Client
|
||||
description=Descrizione
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Accesso concesso il
|
||||
removeButton=Rimuovi accesso
|
||||
removeModalTitle=Rimuovi accesso
|
||||
removeModalMessage=Questo rimuoverà l''autorizzazione di accesso attualmente concessa per {0}. Dovrai concedere nuovamente l''accesso se vuoi utilizzare questa app.
|
||||
confirmButton=Conferma
|
||||
infoMessage=Cliccando su 'Rimuovi accesso', rimuoverai le autorizzazioni concesse a questa applicazione. Questa applicazione non utilizzerà più le tue informazioni.
|
||||
termsOfService=Termini di servizio
|
||||
policy=Informativa sulla privacy
|
||||
applicationType=Tipo di applicazione
|
||||
status=Stato
|
||||
logo=Logo
|
||||
|
||||
#Delete account page
|
||||
doDelete=Elimina
|
||||
deleteAccountSummary=L''eliminazione del tuo account cancellerà tutti i tuoi dati e ti disconnetterà immediatamente.
|
||||
deleteAccount=Elimina account
|
||||
deleteAccountWarning=Questa operazione è irreversibile. Tutti i tuoi dati saranno distrutti in modo permanente e non potranno essere recuperati.
|
||||
|
||||
error-invalid-value=''{0}'' ha un valore non valido.
|
||||
error-invalid-blank=Specificare il valore di ''{0}''.
|
||||
error-empty=Specificare il valore di ''{0}''.
|
||||
error-invalid-length=''{0}'' deve avere una lunghezza compresa tra {1} e {2}.
|
||||
error-invalid-length-too-short=''{0}'' deve avere una lunghezza minima di {1}.
|
||||
error-invalid-length-too-long=''{0}'' deve avere una lunghezza massima di {2}.
|
||||
error-invalid-email=Indirizzo email non valido.
|
||||
error-invalid-number=''{0}'' non è un numero valido.
|
||||
error-number-out-of-range=''{0}'' deve essere un numero compreso tra {1} e {2}.
|
||||
error-number-out-of-range-too-small=''{0}'' deve avere un valore minimo di {1}.
|
||||
error-number-out-of-range-too-big=''{0}'' deve avere un valore massimo di {2}.
|
||||
error-pattern-no-match=''{0}'' non corrisponde al formato richiesto.
|
||||
error-invalid-uri=''{0}'' è un URL non valido.
|
||||
error-invalid-uri-scheme=''{0}'' ha uno schema URL non valido.
|
||||
error-invalid-uri-fragment=''{0}'' è un frammento URL non valido.
|
||||
error-user-attribute-required=Specificare ''{0}''.
|
||||
error-invalid-date=''{0}'' è una data non valida.
|
||||
error-username-invalid-character=''{0}'' contiene caratteri non validi.
|
||||
error-person-name-invalid-character=''{0}'' contiene caratteri non validi.
|
||||
|
||||
updateEmail=Aggiorna email
|
||||
|
||||
#groups
|
||||
groupLabel=Gruppi
|
||||
groupDescriptionLabel=Visualizza i gruppi con cui sei associato/a
|
||||
path=Percorso
|
||||
directMembership=Membri diretti
|
||||
noGroups=Nessun gruppo
|
||||
noGroupsText=Non sei iscritto/a a nessun gruppo
|
||||
|
||||
@@ -1 +1,174 @@
|
||||
fullName={0} {1}
|
||||
pageNotFound=Pagina niet gevonden
|
||||
forbidden=Verboden
|
||||
needAccessRights=U heeft niet de rechten voor dit verzoek. Neem contact op met de administrator.
|
||||
invalidRoute={0} is geen valide route.
|
||||
actionRequiresIDP=Deze actie vereist een omleiding naar uw identity provider.
|
||||
actionNotDefined=Geen actie gedefinieerd
|
||||
continue=Doorgaan
|
||||
refreshPage=Ververs de pagina
|
||||
refresh=Verversen
|
||||
done=Klaar
|
||||
cancel=Annuleren
|
||||
remove=Verwijderen
|
||||
update=Wijzigen
|
||||
loadingMessage=Account Console laadt ...
|
||||
unknownUser=Anoniem
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=Alle velden zijn verplicht.
|
||||
|
||||
selectLocale=Selecteer een taal
|
||||
doSignIn=Inloggen
|
||||
|
||||
backToAdminConsole=Terug naar admin console
|
||||
accountManagementWelcomeMessage=Welkom bij Keycloak account management
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=Persoonsgegevens
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=Ingelogde apparaten
|
||||
signedInDevicesExplanation=Log alle onbekende apparaten uit.
|
||||
signOutWarning=Wilt u alle sessies beëindigen?
|
||||
signOutAllDevices=Alle apparaten uitloggen
|
||||
signOutAllDevicesWarning=Deze actie zal alle apparaten die ingelogd zijn met uw account uitloggen, inclusief het apparaat dat u nu gebruikt.
|
||||
recentlyUsedDevices=Recentelijk gebruikte apparaten
|
||||
recentlyUsedDevicesExplanation=In de afgelopen maand gebruikte apparaten, maar nu niet ingelogd.
|
||||
lastAccess=Laatste toegang
|
||||
unknownOperatingSystem=Onbekend besturingssysteem
|
||||
currentDevice=Huidig apparaat
|
||||
currentSession=Huidige sessie
|
||||
signedOutSession=Uitgelogd {0}/{1}
|
||||
lastAccessedOn=Laatst gebruikt
|
||||
clients=Clients
|
||||
started=Gestart
|
||||
expires=Verloopt
|
||||
ipAddress=IP-adres
|
||||
|
||||
# Resources page
|
||||
resourceName=Middel naam
|
||||
nextPage=Volgende
|
||||
previousPage=Vorige
|
||||
firstPage=Eerste pagina
|
||||
resourceSharedWith=Middel is gedeeld met {0}
|
||||
and=\ en {0} andere gebruikers
|
||||
add=Toevoegen
|
||||
share=Delen
|
||||
shareWith=Delen met
|
||||
edit=Wijzigen
|
||||
close=Sluiten
|
||||
unShare=Alles niet meer delen
|
||||
shareSuccess=Middel delen geslaagd.
|
||||
unShareSuccess=Middel niet meer delen geslaagd.
|
||||
updateSuccess=Middel wijzigen geslaagd.
|
||||
resourceAlreadyShared=Middel is al gedeeld met deze gebruiker.
|
||||
resourceNotShared=Dit middel is niet gedeeld.
|
||||
permissionRequests=Rechten aanvragen
|
||||
permissions=Rechten
|
||||
selectPermissions=Rechten kiezen
|
||||
unShareAllConfirm=Weet u zeker dat u delen overal ongedaan wilt maken?
|
||||
userNotFound=Geen gebruiker gevonden met naam of e-mailadres {0}
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=Gekoppelde accounts
|
||||
linkedAccountsIntroMessage=Beheer aanmeldingen door middel van accounts van een 3e partij.
|
||||
linkedLoginProviders=Gekoppelde loginproviders
|
||||
unlinkedLoginProviders=Ontkoppelde loginproviders
|
||||
linkedEmpty=Geen gekoppelde providers
|
||||
unlinkedEmpty=Geen ontkoppelde providers
|
||||
socialLogin=Social login
|
||||
systemDefined=System gedefinieerd
|
||||
link=Koppel account
|
||||
unLink=Ontkoppel account
|
||||
|
||||
# Signing in page
|
||||
signingIn=Inloggen
|
||||
signingInSubMessage=Beheer inlogmethodes.
|
||||
credentialCreatedAt=Aangemaakt
|
||||
successRemovedMessage={0} was verwijderd.
|
||||
stopUsingCred=Wilt u {0} niet meer gebruiken?
|
||||
changePassword=Wachtwoord wijzigen
|
||||
removeCred=Verwijder {0}
|
||||
setUpNew={0} instellen
|
||||
removeCredAriaLabel=Referentie verwijderen
|
||||
updateCredAriaLabel=Referentie wijzigen
|
||||
notSetUp={0} is niet ingesteld.
|
||||
two-factor=Tweefactorauthenticatie
|
||||
passwordless=Wachtwoordloos
|
||||
unknown=Onbekend
|
||||
password-display-name=Wachtwoord
|
||||
password-help-text=Inloggen met een wachtwoord.
|
||||
password=Mijn wachtwoord
|
||||
otp-display-name=authenticatie applicatie
|
||||
otp-help-text=Vul een verificatiecode van een authenticatie applicatie in.
|
||||
recovery-authn-code=Mijn authenticatie herstel codes
|
||||
recovery-authn-codes-display-name=Authenticatie herstel codes
|
||||
recovery-authn-codes-help-text=Deze herstel codes kunnen gebruikt worden om toegang te verkrijgen wanneer uw 2FA methodes niet beschikbaar zijn.
|
||||
recovery-codes-number-used={0} herstel codes gebruikt
|
||||
recovery-codes-number-remaining=U heeft nog {0} herstel codes
|
||||
recovery-codes-generate-new-codes=Genereer nieuwe herstel codes om toegang tot uw account te garanderen
|
||||
webauthn-display-name=Veiligheidssleutel
|
||||
webauthn-help-text=Gebruik uw veiligheidssleutel om in te loggen.
|
||||
webauthn-passwordless-display-name=Veiligheidssleutel
|
||||
webauthn-passwordless-help-text=Gebruik uw veiligheidssleutel om wachtwoordloos in te loggen.
|
||||
basic-authentication=Basis authenticatie
|
||||
invalidRequestMessage=Ongeldig verzoek
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Applicaties
|
||||
applicationsPageSubTitle=Beheer uw applicatierechten
|
||||
internalApp=Intern
|
||||
thirdPartyApp=Derde partij
|
||||
offlineAccess=Offline toegang
|
||||
inUse=In gebruik
|
||||
notInUse=Niet in gebruik
|
||||
applicationDetails=Applicatie details
|
||||
client=Client
|
||||
description=Beschrijving
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Toegang verleend op
|
||||
removeButton=Toegang verwijderen
|
||||
removeModalTitle=Toegang verwijderen
|
||||
removeModalMessage=Hiermee worden de toegangsrechten voor {0} verwijderd. U moet opnieuw toegang verlenen als u deze app wilt gebruiken.
|
||||
confirmButton=Bevestigen
|
||||
infoMessage=Door op 'Toegang verwijderen' te klikken, verwijdert u de verleende machtigingen van deze applicatie. Deze applicatie zal uw gegevens niet langer gebruiken.
|
||||
termsOfService=Servicevoorwaarden
|
||||
policy=Privacybeleid
|
||||
applicationType=Applicatietype
|
||||
status=Status
|
||||
logo=Logo
|
||||
|
||||
#Delete account page
|
||||
doDelete=Verwijderen
|
||||
deleteAccountSummary=Het verwijderen van uw account zal al uw data verwijderen, en u vervolgens uitloggen.
|
||||
deleteAccount=Verwijder account
|
||||
deleteAccountWarning=Dit kunt u niet terugdraaien. Al uw data wordt permanent verwijdert, en kan niet meer teruggehaald worden.
|
||||
|
||||
error-invalid-value=''{0}'' heeft een ongeldige waarde.
|
||||
error-invalid-blank=Specificeer de waarde van ''{0}''.
|
||||
error-empty=Specificeer de waarde van ''{0}''.
|
||||
error-invalid-length=''{0}'' moet een lengte tussen {1} en {2} hebben.
|
||||
error-invalid-length-too-short=''{0}'' moet minimaal {1} lang zijn.
|
||||
error-invalid-length-too-long=''{0}'' mag maximaal {2} lang zijn.
|
||||
error-invalid-email=Ongeldig e-mailadres.
|
||||
error-invalid-number=''{0}'' is geen nummer.
|
||||
error-number-out-of-range=''{0}'' moet een nummer tussen {1} en {2} zijn.
|
||||
error-number-out-of-range-too-small=''{0}'' moet groter dan {1} zijn.
|
||||
error-number-out-of-range-too-big=''{0}'' moet kleiner dan {2} zijn.
|
||||
error-pattern-no-match=''{0}'' voldoet niet aan het verplichte formaat.
|
||||
error-invalid-uri=''{0}'' is geen geldige URL.
|
||||
error-invalid-uri-scheme=''{0}'' heeft geen geldig URL schema.
|
||||
error-invalid-uri-fragment=''{0}'' is geen geldig URL fragment.
|
||||
error-user-attribute-required=Specificeer ''{0}''.
|
||||
error-invalid-date=''{0}'' is geen geldige datum.
|
||||
error-username-invalid-character=''{0}'' bevat een ongeldig karakter.
|
||||
error-person-name-invalid-character=''{0}'' bevat een ongeldig karakter.
|
||||
|
||||
updateEmail=E-mailadres wijzigen
|
||||
|
||||
#groups
|
||||
groupLabel=Groepen
|
||||
groupDescriptionLabel=Bekijk groepen waar u lid van bent
|
||||
path=Pad
|
||||
directMembership=Direct lidmaatschap
|
||||
noGroups=Geen groepen
|
||||
noGroupsText=U bent geen lid van een groep
|
||||
|
||||
@@ -1,50 +1,48 @@
|
||||
# Put new messages for Account Console Here
|
||||
# Feel free to use any existing messages from the base theme
|
||||
pageNotFound=P\u00e1gina N\u00e3o Encontrada
|
||||
pageNotFound=Página Não Encontrada
|
||||
forbidden=Proibido
|
||||
needAccessRights=Voc\u00ea n\u00e3o tem as permiss\u00f5es de acesso para esta solicita\u00e7\u00e3o. Entre em contato com um administrador.
|
||||
invalidRoute={0} n\u00e3o \u00e9 uma rota v\u00e1lida.
|
||||
actionRequiresIDP=Esta a\u00e7\u00e3o requer uma redire\u00e7\u00e3o do seu provedor de identidades.
|
||||
actionNotDefined=Nenhuma a\u00e7\u00e3o definida
|
||||
needAccessRights=Você não tem as permissões de acesso para esta solicitação. Entre em contato com um administrador.
|
||||
invalidRoute={0} não é uma rota válida.
|
||||
actionRequiresIDP=Esta ação requer uma redireção do seu provedor de identidades.
|
||||
actionNotDefined=Nenhuma ação definida
|
||||
continue=Continuar
|
||||
refreshPage=Atualizar p\u00e1gina
|
||||
refreshPage=Atualizar página
|
||||
done=Pronto
|
||||
cancel=Cancelar
|
||||
remove=Remover
|
||||
update=Atualizar
|
||||
loadingMessage=Carregando console de conta...
|
||||
unknownUser=An\u00f4nimo
|
||||
unknownUser=Anônimo
|
||||
fullName={0} {1}
|
||||
|
||||
selectLocale=Selecionar l\u00edngua
|
||||
selectLocale=Selecionar língua
|
||||
doSignIn=Entrar
|
||||
|
||||
# Device Activity Page
|
||||
signedInDevices=Dispositivos autenticados
|
||||
signedInDevicesExplanation=Saia de qualquer dispositivo que n\u00e3o reconhe\u00e7a.
|
||||
signOutWarning=Finalizar todas as sess\u00f5es?
|
||||
signOutAllDevices=Finalizar Sess\u00e3o em Todos os Dispositivos
|
||||
signOutAllDevicesWarning=Esta a\u00e7\u00e3o ir\u00e1 finalizar a sess\u00e3o de todos os dispositivos logados na sua conta, incluindo o dispositivo que est\u00e1 sendo utilizado atualmente.
|
||||
signedInDevicesExplanation=Saia de qualquer dispositivo que não reconheça.
|
||||
signOutWarning=Finalizar todas as sessões?
|
||||
signOutAllDevices=Finalizar Sessão em Todos os Dispositivos
|
||||
signOutAllDevicesWarning=Esta ação irá finalizar a sessão de todos os dispositivos logados na sua conta, incluindo o dispositivo que está sendo utilizado atualmente.
|
||||
recentlyUsedDevices=Dispositivos Utilizados Recentemente
|
||||
recentlyUsedDevicesExplanation=Dispositivos utilizados no \u00faltimo m\u00eas, mas sem sess\u00e3o ativa atualmente.
|
||||
lastAccess=\u00daltimo Acesso
|
||||
recentlyUsedDevicesExplanation=Dispositivos utilizados no último mês, mas sem sessão ativa atualmente.
|
||||
lastAccess=Último Acesso
|
||||
unknownOperatingSystem=Sistema Operacional Desconhecido
|
||||
currentDevice=Dispositivo Atual
|
||||
currentSession=Sess\u00e3o Atual
|
||||
currentSession=Sessão Atual
|
||||
signedOutSession=Deslogado {0}/{1}
|
||||
lastAccessedOn=\u00daltimo acesso em
|
||||
lastAccessedOn=Último acesso em
|
||||
clients=Clientes
|
||||
startedAt=Iniciado em
|
||||
expiresAt=Expira em
|
||||
ipAddress=Endere\u00e7o IP
|
||||
ipAddress=Endereço IP
|
||||
|
||||
# Resources Page
|
||||
resourceName=Nome do Recurso
|
||||
nextPage=Avan\u00e7ar
|
||||
nextPage=Avançar
|
||||
previousPage=Voltar
|
||||
firstPage=Primeira P\u00e1gina
|
||||
resourceSharedWith=O recurso \u00e9 compartilhado com {0}
|
||||
and=\ e {0} outros usu\u00e1rios
|
||||
firstPage=Primeira Página
|
||||
resourceSharedWith=O recurso é compartilhado com {0}
|
||||
and=\ e {0} outros usuários
|
||||
add=Adicionar
|
||||
share=Compartilhar
|
||||
edit=Editar
|
||||
@@ -53,20 +51,20 @@ unShare=Descompartilhar tudo
|
||||
shareSuccess=O recurso foi compartilhado com sucesso.
|
||||
unShareSuccess=O recurso foi descompartilhado com sucesso.
|
||||
updateSuccess=O recurso foi atualizado com sucesso.
|
||||
resourceAlreadyShared=O recurso j\u00e1 foi compartilhado com este usu\u00e1rio.
|
||||
resourceNotShared=O recurso n\u00e3o foi compartilhado.
|
||||
permissionRequests=Pedidos de permiss\u00e3o
|
||||
permissions=Permiss\u00f5es
|
||||
resourceAlreadyShared=O recurso já foi compartilhado com este usuário.
|
||||
resourceNotShared=O recurso não foi compartilhado.
|
||||
permissionRequests=Pedidos de permissão
|
||||
permissions=Permissões
|
||||
unShareAllConfirm=Tem certeza de que quer remover todos os compartilhamentos?
|
||||
userNotFound=Usu\u00e1rio com o nome ou e-mail {0} n\u00e3o foi encontrado
|
||||
userNotFound=Usuário com o nome ou e-mail {0} não foi encontrado
|
||||
|
||||
# Linked Accounts Page
|
||||
linkedAccountsTitle=Contas conectadas
|
||||
linkedAccountsIntroMessage=Gerenciar acessos por contas de outras aplica\u00e7\u00f5es.
|
||||
linkedAccountsIntroMessage=Gerenciar acessos por contas de outras aplicações.
|
||||
linkedLoginProviders=Provedores de Acesso Conectados
|
||||
unlinkedLoginProviders=Provedores de Acesso N\u00e3o-Conectados
|
||||
unlinkedLoginProviders=Provedores de Acesso Não-Conectados
|
||||
linkedEmpty=Nenhum Provedor Conectado
|
||||
unlinkedEmpty=Nenhum Provedor N\u00e3o-Conectado
|
||||
unlinkedEmpty=Nenhum Provedor Não-Conectado
|
||||
socialLogin=Login Social
|
||||
systemDefined=Definido pelo Sistema
|
||||
link=Conectar Conta
|
||||
@@ -80,42 +78,42 @@ successRemovedMessage={0} removida com sucesso.
|
||||
stopUsingCred=Para de usar {0}?
|
||||
removeCred=Remover {0}
|
||||
setUpNew=Configurar {0}
|
||||
notSetUp={0} n\u00e3o est\u00e1 configurada.
|
||||
two-factor=Autentica\u00e7\u00e3o de Dois Fatores
|
||||
notSetUp={0} não está configurada.
|
||||
two-factor=Autenticação de Dois Fatores
|
||||
passwordless=Sem Senha
|
||||
unknown=Desconhecida
|
||||
password-display-name=Senha
|
||||
password-help-text=Entre inserindo a sua senha.
|
||||
password=Minha Senha
|
||||
otp-display-name=App Autenticador
|
||||
otp-help-text=Insira o c\u00f3digo de verifica\u00e7\u00e3o do app autenticador.
|
||||
webauthn-display-name=Chave de Seguran\u00e7a
|
||||
webauthn-help-text=Use a sua chave de seguran\u00e7a para entrar.
|
||||
webauthn-passwordless-display-name=Chave de Seguran\u00e7a
|
||||
webauthn-passwordless-help-text=Use a sua chave de seguran\u00e7a para entrar sem senha.
|
||||
basic-authentication=Autentica\u00e7\u00e3o B\u00e1sica
|
||||
invalidRequestMessage=Solicita\u00e7\u00e3o Inv\u00e1lida
|
||||
otp-help-text=Insira o código de verificação do app autenticador.
|
||||
webauthn-display-name=Chave de Segurança
|
||||
webauthn-help-text=Use a sua chave de segurança para entrar.
|
||||
webauthn-passwordless-display-name=Chave de Segurança
|
||||
webauthn-passwordless-help-text=Use a sua chave de segurança para entrar sem senha.
|
||||
basic-authentication=Autenticação Básica
|
||||
invalidRequestMessage=Solicitação Inválida
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=Aplica\u00e7\u00f5es
|
||||
applicationsPageTitle=Aplicações
|
||||
internalApp=Interna
|
||||
thirdPartyApp=De Terceiros
|
||||
offlineAccess=Acesso Offline
|
||||
inUse=Em uso
|
||||
notInUse=N\u00e3o utilizado
|
||||
applicationDetails=Detalhes da Aplica\u00e7\u00e3o
|
||||
notInUse=Não utilizado
|
||||
applicationDetails=Detalhes da Aplicação
|
||||
client=Cliente
|
||||
description=Descri\u00e7\u00e3o
|
||||
description=Descrição
|
||||
baseUrl=URL
|
||||
accessGrantedOn=Acesso concedido em
|
||||
removeButton=Remover acesso
|
||||
removeModalTitle=Remover Acesso
|
||||
removeModalMessage=Isto ir\u00e1 remover a permiss\u00e3o atual de acesso concedido para {0}. Voc\u00ea precisar\u00e1 repetir o processo de concess\u00e3o se for utilizar o app novamente.
|
||||
removeModalMessage=Isto irá remover a permissão atual de acesso concedido para {0}. Você precisará repetir o processo de concessão se for utilizar o app novamente.
|
||||
confirmButton=Confirmar
|
||||
infoMessage=Ao clicar em 'Remover Acesso', voc\u00ea ir\u00e1 remover as permiss\u00f5es concedidas a esta aplica\u00e7\u00e3o. Ela n\u00e3o poder\u00e1 mais utilizar as suas informa\u00e7\u00f5es.
|
||||
infoMessage=Ao clicar em 'Remover Acesso', você irá remover as permissões concedidas a esta aplicação. Ela não poderá mais utilizar as suas informações.
|
||||
|
||||
#Delete Account page
|
||||
doDelete=Apagar
|
||||
deleteAccountSummary=Apagar a sua conta ir\u00e1 remover todos os seus dados e finalizar a sess\u00e3o imediatamente.
|
||||
deleteAccountSummary=Apagar a sua conta irá remover todos os seus dados e finalizar a sessão imediatamente.
|
||||
deleteAccount=Apagar Conta
|
||||
deleteAccountWarning=Esta a\u00e7\u00e3o \u00e9 irrevers\u00edvel. Todos os seus dados ser\u00e3o apagados permanentemente e n\u00e3o poder\u00e3o ser recuperados.
|
||||
deleteAccountWarning=Esta ação é irreversível. Todos os seus dados serão apagados permanentemente e não poderão ser recuperados.
|
||||
|
||||
Regular → Executable
@@ -0,0 +1,174 @@
|
||||
pageNotFound=ไม่พบหน้า
|
||||
forbidden=ไม่มีสิทธิ์
|
||||
needAccessRights=คุณไม่มีสิทธิ์เข้าถึงคำขอนี้ ติดต่อผู้ดูแลระบบของคุณ
|
||||
invalidRoute={0} ไม่ใช่เส้นทางที่ถูกต้อง
|
||||
actionRequiresIDP=การกระทำนี้ต้องการการเปลี่ยนเส้นทางไปยังผู้ให้บริการตัวตนของคุณ
|
||||
actionNotDefined=ไม่มีการกระทำที่กำหนดไว้
|
||||
continue=ดำเนินการต่อ
|
||||
refreshPage=รีเฟรชหน้า
|
||||
refresh=รีเฟรช
|
||||
done=เสร็จสิ้น
|
||||
cancel=ยกเลิก
|
||||
remove=ลบ
|
||||
update=อัปเดต
|
||||
loadingMessage=กำลังโหลดคอนโซลบัญชี ...
|
||||
unknownUser=ไม่ระบุชื่อ
|
||||
fullName={0} {1}
|
||||
allFieldsRequired=จำเป็นต้องกรอกข้อมูลให้ครบทุกช่อง
|
||||
|
||||
selectLocale=เลือกภาษา
|
||||
doSignIn=ลงชื่อเข้าใช้
|
||||
|
||||
backToAdminConsole=กลับไปที่คอนโซลผู้ดูแลระบบ
|
||||
accountManagementWelcomeMessage=ยินดีต้อนรับสู่การจัดการบัญชี Keycloak
|
||||
|
||||
# Personal info page
|
||||
personalInfoHtmlTitle=ข้อมูลส่วนตัว
|
||||
|
||||
# Device activity page
|
||||
signedInDevices=อุปกรณ์ที่ลงชื่อเข้าใช้
|
||||
signedInDevicesExplanation=ลงชื่อออกจากอุปกรณ์ที่ไม่คุ้นเคย
|
||||
signOutWarning=ลงชื่อออกจากระยะไกล?
|
||||
signOutAllDevices=ลงชื่อออกจากอุปกรณ์ทั้งหมด
|
||||
signOutAllDevicesWarning=การกระทำนี้จะลงชื่อออกจากอุปกรณ์ทั้งหมดที่ได้ลงชื่อเข้าใช้บัญชีของคุณ รวมถึงอุปกรณ์ปัจจุบันที่คุณใช้อยู่.
|
||||
recentlyUsedDevices=อุปกรณ์ที่ใช้เมื่อเร็ว ๆ นี้
|
||||
recentlyUsedDevicesExplanation=อุปกรณ์ที่ใช้ในเดือนที่ผ่านมา แต่ไม่ได้ลงชื่อเข้าใช้ในขณะนี้
|
||||
lastAccess=การเข้าถึงครั้งล่าสุด
|
||||
unknownOperatingSystem=ระบบปฏิบัติการที่ไม่รู้จัก
|
||||
currentDevice=อุปกรณ์ปัจจุบัน
|
||||
currentSession=เซสชันปัจจุบัน
|
||||
signedOutSession=ลงชื่อออก {0}/{1}
|
||||
lastAccessedOn=เข้าถึงครั้งล่าสุด
|
||||
clients=ไคลเอนต์
|
||||
started=เริ่มต้น
|
||||
expires=หมดอายุ
|
||||
ipAddress=ที่อยู่ IP
|
||||
|
||||
# Resources page
|
||||
resourceName=ชื่อทรัพยากร
|
||||
nextPage=ต่อไป
|
||||
previousPage=ก่อนหน้า
|
||||
firstPage=หน้าแรก
|
||||
resourceSharedWith=ทรัพยากรถูกแบ่งปันกับ {0}
|
||||
and=\ และผู้ใช้งานคนอื่น ๆ อีก {0} ราย
|
||||
add=เพิ่ม
|
||||
share=แบ่งปัน
|
||||
shareWith=แบ่งปันกับ
|
||||
edit=แก้ไข
|
||||
close=ปิด
|
||||
unShare=ยกเลิกการแบ่งปันทั้งหมด
|
||||
shareSuccess=แบ่งปันทรัพยากรสำเร็จ
|
||||
unShareSuccess=ยกเลิกการแบ่งปันทรัพยากรสำเร็จ
|
||||
updateSuccess=อัปเดตทรัพยากรสำเร็จ
|
||||
resourceAlreadyShared=ทรัพยากรถูกแบ่งปันกับผู้ใช้งานนี้อยู่แล้ว
|
||||
resourceNotShared=ทรัพยากรนี้ไม่ได้ถูกแบ่งปัน
|
||||
permissionRequests=คำขออนุญาต
|
||||
permissions=สิทธิ์การใช้งาน
|
||||
selectPermissions=เลือกสิทธิ์การใช้งาน
|
||||
unShareAllConfirm=คุณแน่ใจหรือไม่ว่าต้องการลบการแบ่งปันทั้งหมด?
|
||||
userNotFound=ไม่พบผู้ใช้งานที่มีชื่อหรืออีเมล {0}
|
||||
|
||||
# Linked accounts page
|
||||
linkedAccountsTitle=บัญชีที่เชื่อมโยง
|
||||
linkedAccountsIntroMessage=จัดการการเข้าสู่ระบบผ่านบัญชีของบุคคลที่สาม
|
||||
linkedLoginProviders=ผู้ให้บริการเข้าสู่ระบบที่เชื่อมโยง
|
||||
unlinkedLoginProviders=ผู้ให้บริการเข้าสู่ระบบที่ไม่ได้เชื่อมโยง
|
||||
linkedEmpty=ไม่มีผู้ให้บริการที่เชื่อมโยง
|
||||
unlinkedEmpty=ไม่มีผู้ให้บริการที่ไม่ได้เชื่อมโยง
|
||||
socialLogin=การเข้าสู่ระบบด้วยโซเชียลมีเดีย
|
||||
systemDefined=กำหนดโดยระบบ
|
||||
link=เชื่อมโยงบัญชี
|
||||
unLink=ยกเลิกการเชื่อมโยงบัญชี
|
||||
|
||||
# Signing in page
|
||||
signingIn=ลงชื่อเข้าใช้
|
||||
signingInSubMessage=กำหนดค่าวิธีการลงชื่อเข้าใช้
|
||||
credentialCreatedAt=สร้างเมื่อ
|
||||
successRemovedMessage={0} ถูกลบแล้ว
|
||||
stopUsingCred=หยุดใช้ {0} หรือ?
|
||||
changePassword=เปลี่ยนรหัสผ่าน
|
||||
removeCred=ลบ {0}
|
||||
setUpNew=ตั้งค่า {0}
|
||||
removeCredAriaLabel=ลบข้อมูลประจำตัว
|
||||
updateCredAriaLabel=อัปเดตข้อมูลประจำตัว
|
||||
notSetUp={0} ไม่ได้ตั้งค่า
|
||||
two-factor=การตรวจสอบสิทธิ์แบบสองปัจจัย
|
||||
passwordless=ไม่ต้องใช้รหัสผ่าน
|
||||
unknown=ไม่ทราบ
|
||||
password-display-name=รหัสผ่าน
|
||||
password-help-text=ลงชื่อเข้าใช้โดยป้อนรหัสผ่านของคุณ
|
||||
password=รหัสผ่านของฉัน
|
||||
otp-display-name=แอปพลิเคชันพิสูจน์ตัวจริง
|
||||
otp-help-text=ป้อนรหัสยืนยันจากแอปพลิเคชันพิสูจน์ตัวจริง
|
||||
recovery-authn-code=รหัสพิสูจน์ตัวจริงสำหรับการกู้คืนของฉัน
|
||||
recovery-authn-codes-display-name=รหัสพิสูจน์ตัวจริงสำหรับการกู้คืน
|
||||
recovery-authn-codes-help-text=รหัสเหล่านี้สามารถใช้กู้คืนการเข้าถึงของคุณได้ในกรณีที่วิธีการ 2FA อื่น ๆ ของคุณไม่พร้อมใช้
|
||||
recovery-codes-number-used=รหัสกู้คืนถูกใช้แล้ว {0} รหัส
|
||||
recovery-codes-number-remaining=รหัสกู้คืนเหลือ {0} รหัส
|
||||
recovery-codes-generate-new-codes=สร้างรหัสใหม่เพื่อให้แน่ใจได้ว่าจะสามารถเข้าถึงบัญชีของคุณ
|
||||
webauthn-display-name=คีย์ความปลอดภัย
|
||||
webauthn-help-text=ใช้คีย์ความปลอดภัยของคุณเพื่อลงชื่อเข้าใช้
|
||||
webauthn-passwordless-display-name=คีย์ความปลอดภัย
|
||||
webauthn-passwordless-help-text=ใช้คีย์ความปลอดภัยของคุณสำหรับการลงชื่อเข้าใช้โดยไม่ต้องใช้รหัสผ่าน
|
||||
basic-authentication=การพิสูจน์ตัวจริงพื้นฐาน
|
||||
invalidRequestMessage=คำขอไม่ถูกต้อง
|
||||
|
||||
# Applications page
|
||||
applicationsPageTitle=แอปพลิเคชัน
|
||||
applicationsPageSubTitle=จัดการสิทธิ์การใช้งานแอปพลิเคชันของคุณ
|
||||
internalApp=ภายใน
|
||||
thirdPartyApp=บุคคลที่สาม
|
||||
offlineAccess=การเข้าถึงแบบออฟไลน์
|
||||
inUse=กำลังใช้งาน
|
||||
notInUse=ไม่ได้ใช้งาน
|
||||
applicationDetails=รายละเอียดแอปพลิเคชัน
|
||||
client=ไคลเอนต์
|
||||
description=คำอธิบาย
|
||||
baseUrl=URL
|
||||
accessGrantedOn=ได้รับอนุญาตให้เข้าถึงเมื่อ
|
||||
removeButton=ลบการเข้าถึง
|
||||
removeModalTitle=ลบการเข้าถึง
|
||||
removeModalMessage=การกระทำนี้จะลบสิทธิ์การเข้าถึงที่ให้ไว้แก่ {0} คุณจะต้องอนุญาตการเข้าถึงอีกครั้งหากต้องการใช้แอปพลิเคชันนี้
|
||||
confirmButton=ยืนยัน
|
||||
infoMessage=ในการคลิก 'ลบการเข้าถึง' คุณจะลบสิทธิ์การใช้งานที่ได้อนุญาตให้ไว้แก่แอปพลิเคชันนี้ แอปพลิเคชันนี้จะไม่สามารถใช้ข้อมูลของคุณได้อีกต่อไป
|
||||
termsOfService=ข้อกำหนดการให้บริการ
|
||||
policy=นโยบายความเป็นส่วนตัว
|
||||
applicationType=ประเภทแอปพลิเคชัน
|
||||
status=สถานะ
|
||||
logo=โลโก้
|
||||
|
||||
#Delete account page
|
||||
doDelete=ลบ
|
||||
deleteAccountSummary=การลบบัญชีของคุณจะลบข้อมูลทั้งหมดของคุณและทำให้คุณออกจากระบบทันที
|
||||
deleteAccount=ลบบัญชี
|
||||
deleteAccountWarning=กระบวนการนี้ไม่สามารถย้อนกลับได้ ข้อมูลทั้งหมดของคุณจะถูกทำลายอย่างถาวรและไม่สามารถกู้คืนได้อีก
|
||||
|
||||
error-invalid-value=''{0}'' มีค่าไม่ถูกต้อง
|
||||
error-invalid-blank=โปรดระบุค่าของ ''{0}''
|
||||
error-empty=โปรดระบุค่าของ ''{0}''
|
||||
error-invalid-length=''{0}'' ต้องมีความยาวตั้งแต่ {1} ถึง {2} ตัวอักษร
|
||||
error-invalid-length-too-short=''{0}'' ต้องมีความยาวอย่างน้อย {1} ตัวอักษร
|
||||
error-invalid-length-too-long=''{0}'' ต้องมีความยาวไม่เกิน {2} ตัวอักษร
|
||||
error-invalid-email=ที่อยู่อีเมลไม่ถูกต้อง
|
||||
error-invalid-number=''{0}'' เป็นตัวเลขที่ไม่ถูกต้อง
|
||||
error-number-out-of-range=''{0}'' ต้องเป็นตัวเลขที่มีค่าอยู่ในช่วง {1} ถึง {2}
|
||||
error-number-out-of-range-too-small=''{0}'' ต้องมีค่าอย่างน้อย {1}
|
||||
error-number-out-of-range-too-big=''{0}'' ต้องมีค่าไม่เกิน {2}
|
||||
error-pattern-no-match=''{0}'' ไม่ตรงตามรูปแบบที่กำหนด
|
||||
error-invalid-uri=''{0}'' เป็น URL ที่ไม่ถูกต้อง
|
||||
error-invalid-uri-scheme=''{0}'' มี URL scheme ที่ไม่ถูกต้อง
|
||||
error-invalid-uri-fragment=''{0}'' เป็น URL fragment ที่ไม่ถูกต้อง
|
||||
error-user-attribute-required=โปรดระบุ ''{0}''
|
||||
error-invalid-date=''{0}'' เป็นวันที่ที่ไม่ถูกต้อง
|
||||
error-username-invalid-character=''{0}'' มีอักขระที่ไม่ถูกต้อง
|
||||
error-person-name-invalid-character='{0}' มีอักขระที่ไม่ถูกต้อง
|
||||
|
||||
updateEmail=อัปเดตอีเมล
|
||||
|
||||
#groups
|
||||
groupLabel=กลุ่ม
|
||||
groupDescriptionLabel=ดูกลุ่มที่คุณเชื่อมโยงอยู่
|
||||
path=เส้นทาง
|
||||
directMembership=การเป็นสมาชิกโดยตรง
|
||||
noGroups=ไม่มีกลุ่ม
|
||||
noGroupsText=คุณไม่ได้เข้าร่วมกลุ่มใด ๆ
|
||||
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,36 +16,28 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import { PageNav } from "./PageNav.js";
|
||||
import { PageHeaderTool } from "./PageHeaderTool.js";
|
||||
import { makeRoutes } from "./ContentPages.js";
|
||||
import { Brand, Page, PageHeader, PageSidebar } from "../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { Brand, Page, PageHeader, PageSidebar } from "../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { KeycloakContext } from "./keycloak-service/KeycloakContext.js";
|
||||
;
|
||||
export class App extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
this.context = context;
|
||||
toggleReact();
|
||||
}
|
||||
|
||||
render() {
|
||||
toggleReact(); // check login
|
||||
toggleReact();
|
||||
|
||||
// check login
|
||||
if (!this.context.authenticated() && !isWelcomePage()) {
|
||||
this.context.login();
|
||||
}
|
||||
|
||||
const username = /*#__PURE__*/React.createElement("span", {
|
||||
style: {
|
||||
marginLeft: '10px'
|
||||
},
|
||||
id: "loggedInUser"
|
||||
}, loggedInUserName());
|
||||
const Header = /*#__PURE__*/React.createElement(PageHeader, {
|
||||
logo: /*#__PURE__*/React.createElement("a", {
|
||||
id: "brandLink",
|
||||
@@ -66,10 +59,7 @@ export class App extends React.Component {
|
||||
isManagedSidebar: true
|
||||
}, makeRoutes());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(App, "contextType", KeycloakContext);
|
||||
|
||||
;
|
||||
//# sourceMappingURL=App.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../src/app/App.tsx"],"names":["React","PageNav","PageHeaderTool","makeRoutes","Brand","Page","PageHeader","PageSidebar","KeycloakContext","App","Component","constructor","props","context","toggleReact","render","authenticated","isWelcomePage","login","username","marginLeft","loggedInUserName","Header","brandUrl","brandImg","Sidebar"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAO,KAAKA,KAAZ;AAIA,SAAQC,OAAR;AACA,SAAQC,cAAR;AACA,SAAQC,UAAR;AAEA,SACIC,KADJ,EAEIC,IAFJ,EAGIC,UAHJ,EAIIC,WAJJ;AAOA,SAASC,eAAT;AAS4B;AAC5B,OAAO,MAAMC,GAAN,SAAkBT,KAAK,CAACU,SAAxB,CAA4C;AAIxCC,EAAAA,WAAW,CAACC,KAAD,EAAkBC,OAAlB,EAAsE;AACpF,UAAMD,KAAN;;AADoF;;AAEpF,SAAKC,OAAL,GAAeA,OAAf;AACAC,IAAAA,WAAW;AACd;;AAEMC,EAAAA,MAAM,GAAoB;AAC7BD,IAAAA,WAAW,GADkB,CAG7B;;AACA,QAAI,CAAC,KAAKD,OAAL,CAAcG,aAAd,EAAD,IAAkC,CAACC,aAAa,EAApD,EAAwD;AACpD,WAAKJ,OAAL,CAAcK,KAAd;AACH;;AAED,UAAMC,QAAQ,gBACV;AAAM,MAAA,KAAK,EAAE;AAACC,QAAAA,UAAU,EAAE;AAAb,OAAb;AAAmC,MAAA,EAAE,EAAC;AAAtC,OAAsDC,gBAAgB,EAAtE,CADJ;AAIA,UAAMC,MAAM,gBACR,oBAAC,UAAD;AACI,MAAA,IAAI,eAAE;AAAG,QAAA,EAAE,EAAC,WAAN;AAAkB,QAAA,IAAI,EAAEC;AAAxB,sBAAkC,oBAAC,KAAD;AAAO,QAAA,GAAG,EAAEC,QAAZ;AAAsB,QAAA,GAAG,EAAC,MAA1B;AAAiC,QAAA,SAAS,EAAC;AAA3C,QAAlC,CADV;AAEI,MAAA,WAAW,eAAE,oBAAC,cAAD,OAFjB;AAGI,MAAA,aAAa;AAHjB,MADJ;AAQA,UAAMC,OAAO,gBAAG,oBAAC,WAAD;AAAa,MAAA,GAAG,eAAE,oBAAC,OAAD;AAAlB,MAAhB;AAEA,wBACI,oBAAC,IAAD;AAAM,MAAA,MAAM,EAAEH,MAAd;AAAsB,MAAA,OAAO,EAAEG,OAA/B;AAAwC,MAAA,gBAAgB;AAAxD,OACKtB,UAAU,EADf,CADJ;AAKH;;AArC8C;;gBAAtCM,G,iBACYD,e;;AAqCxB","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {KeycloakService} from './keycloak-service/keycloak.service';\n\nimport {PageNav} from './PageNav';\nimport {PageHeaderTool} from './PageHeaderTool';\nimport {makeRoutes} from './ContentPages';\n\nimport {\n Brand,\n Page,\n PageHeader,\n PageSidebar\n} from '@patternfly/react-core';\n\nimport { KeycloakContext } from './keycloak-service/KeycloakContext';\n\ndeclare function toggleReact(): void;\ndeclare function isWelcomePage(): boolean;\ndeclare function loggedInUserName(): string;\n\ndeclare const brandImg: string;\ndeclare const brandUrl: string;\n\nexport interface AppProps {};\nexport class App extends React.Component<AppProps> {\n static contextType = KeycloakContext;\n context: React.ContextType<typeof KeycloakContext>;\n\n public constructor(props: AppProps, context: React.ContextType<typeof KeycloakContext>) {\n super(props);\n this.context = context;\n toggleReact();\n }\n\n public render(): React.ReactNode {\n toggleReact();\n\n // check login\n if (!this.context!.authenticated() && !isWelcomePage()) {\n this.context!.login();\n }\n\n const username = (\n <span style={{marginLeft: '10px'}} id=\"loggedInUser\">{loggedInUserName()}</span>\n );\n\n const Header = (\n <PageHeader\n logo={<a id=\"brandLink\" href={brandUrl}><Brand src={brandImg} alt=\"Logo\" className=\"brand\"/></a>}\n headerTools={<PageHeaderTool/>}\n showNavToggle\n />\n );\n\n const Sidebar = <PageSidebar nav={<PageNav/>} />;\n\n return (\n <Page header={Header} sidebar={Sidebar} isManagedSidebar>\n {makeRoutes()}\n </Page>\n );\n }\n};\n"],"file":"App.js"}
|
||||
{"version":3,"file":"App.js","names":["React","PageNav","PageHeaderTool","makeRoutes","Brand","Page","PageHeader","PageSidebar","KeycloakContext","App","Component","constructor","props","context","_defineProperty","toggleReact","render","authenticated","isWelcomePage","login","Header","createElement","logo","id","href","brandUrl","src","brandImg","alt","className","headerTools","showNavToggle","Sidebar","nav","header","sidebar","isManagedSidebar"],"sources":["../src/app/App.tsx"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {KeycloakService} from './keycloak-service/keycloak.service';\n\nimport {PageNav} from './PageNav';\nimport {PageHeaderTool} from './PageHeaderTool';\nimport {makeRoutes} from './ContentPages';\n\nimport {\n Brand,\n Page,\n PageHeader,\n PageSidebar\n} from '@patternfly/react-core';\n\nimport { KeycloakContext } from './keycloak-service/KeycloakContext';\n\ndeclare function toggleReact(): void;\ndeclare function isWelcomePage(): boolean;\n\ndeclare const brandImg: string;\ndeclare const brandUrl: string;\n\nexport interface AppProps {};\nexport class App extends React.Component<AppProps> {\n static contextType = KeycloakContext;\n context: React.ContextType<typeof KeycloakContext>;\n\n public constructor(props: AppProps, context: React.ContextType<typeof KeycloakContext>) {\n super(props);\n this.context = context;\n toggleReact();\n }\n\n public render(): React.ReactNode {\n toggleReact();\n\n // check login\n if (!this.context!.authenticated() && !isWelcomePage()) {\n this.context!.login();\n }\n\n const Header = (\n <PageHeader\n logo={<a id=\"brandLink\" href={brandUrl}><Brand src={brandImg} alt=\"Logo\" className=\"brand\"/></a>}\n headerTools={<PageHeaderTool/>}\n showNavToggle\n />\n );\n\n const Sidebar = <PageSidebar nav={<PageNav/>} />;\n\n return (\n <Page header={Header} sidebar={Sidebar} isManagedSidebar>\n {makeRoutes()}\n </Page>\n );\n }\n};\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK;AAIjB,SAAQC,OAAO;AACf,SAAQC,cAAc;AACtB,SAAQC,UAAU;AAElB,SACIC,KAAK,EACLC,IAAI,EACJC,UAAU,EACVC,WAAW;AAGf,SAASC,eAAe;AAQI;AAC5B,OAAO,MAAMC,GAAG,SAAST,KAAK,CAACU,SAAS,CAAW;EAIxCC,WAAWA,CAACC,KAAe,EAAEC,OAAkD,EAAE;IACpF,KAAK,CAACD,KAAK,CAAC;IAACE,eAAA;IACb,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtBE,WAAW,CAAC,CAAC;EACjB;EAEOC,MAAMA,CAAA,EAAoB;IAC7BD,WAAW,CAAC,CAAC;;IAEb;IACA,IAAI,CAAC,IAAI,CAACF,OAAO,CAAEI,aAAa,CAAC,CAAC,IAAI,CAACC,aAAa,CAAC,CAAC,EAAE;MACpD,IAAI,CAACL,OAAO,CAAEM,KAAK,CAAC,CAAC;IACzB;IAEA,MAAMC,MAAM,gBACRpB,KAAA,CAAAqB,aAAA,CAACf,UAAU;MACPgB,IAAI,eAAEtB,KAAA,CAAAqB,aAAA;QAAGE,EAAE,EAAC,WAAW;QAACC,IAAI,EAAEC;MAAS,gBAACzB,KAAA,CAAAqB,aAAA,CAACjB,KAAK;QAACsB,GAAG,EAAEC,QAAS;QAACC,GAAG,EAAC,MAAM;QAACC,SAAS,EAAC;MAAO,CAAC,CAAI,CAAE;MACjGC,WAAW,eAAE9B,KAAA,CAAAqB,aAAA,CAACnB,cAAc,MAAC,CAAE;MAC/B6B,aAAa;IAAA,CAChB,CACJ;IAED,MAAMC,OAAO,gBAAGhC,KAAA,CAAAqB,aAAA,CAACd,WAAW;MAAC0B,GAAG,eAAEjC,KAAA,CAAAqB,aAAA,CAACpB,OAAO,MAAC;IAAE,CAAE,CAAC;IAEhD,oBACID,KAAA,CAAAqB,aAAA,CAAChB,IAAI;MAAC6B,MAAM,EAAEd,MAAO;MAACe,OAAO,EAAEH,OAAQ;MAACI,gBAAgB;IAAA,GACnDjC,UAAU,CAAC,CACV,CAAC;EAEf;AACJ;AAACW,eAAA,CAlCYL,GAAG,iBACSD,eAAe;AAiCvC"}
|
||||
@@ -13,9 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
import { Route, Switch } from "../../common/keycloak/web_modules/react-router-dom.js";
|
||||
import { NavItem, NavExpandable } from "../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import { Route, Switch } from "../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { NavItem, NavExpandable } from "../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { Msg } from "./widgets/Msg.js";
|
||||
import { PageNotFound } from "./content/page-not-found/PageNotFound.js";
|
||||
import { ForbiddenPage } from "./content/forbidden-page/ForbiddenPage.js";
|
||||
@@ -26,29 +27,23 @@ export function isModulePageDef(item) {
|
||||
export function isExpansion(contentItem) {
|
||||
return contentItem.content !== undefined;
|
||||
}
|
||||
|
||||
function groupId(group) {
|
||||
return 'grp-' + group;
|
||||
}
|
||||
|
||||
function itemId(group, item) {
|
||||
return 'grp-' + group + '_itm-' + item;
|
||||
}
|
||||
|
||||
function isChildOf(parent, child) {
|
||||
for (var item of parent.content) {
|
||||
if (isExpansion(item) && isChildOf(item, child)) return true;
|
||||
if (parent.groupId === child.groupId) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function createNavItems(activePage, contentParam, groupNum) {
|
||||
if (typeof content === 'undefined') return /*#__PURE__*/React.createElement(React.Fragment, null);
|
||||
const links = contentParam.map(item => {
|
||||
const navLinkId = `nav-link-${item.id}`;
|
||||
|
||||
if (isExpansion(item)) {
|
||||
return /*#__PURE__*/React.createElement(NavExpandable, {
|
||||
id: navLinkId,
|
||||
@@ -72,21 +67,17 @@ function createNavItems(activePage, contentParam, groupNum) {
|
||||
});
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, links);
|
||||
}
|
||||
|
||||
export function makeNavItems(activePage) {
|
||||
console.log({
|
||||
activePage
|
||||
});
|
||||
return createNavItems(activePage, content, 0);
|
||||
}
|
||||
|
||||
function setIds(contentParam, groupNum) {
|
||||
if (typeof contentParam === 'undefined') return groupNum;
|
||||
let expansionGroupNum = groupNum;
|
||||
|
||||
for (let i = 0; i < contentParam.length; i++) {
|
||||
const item = contentParam[i];
|
||||
|
||||
if (isExpansion(item)) {
|
||||
item.itemId = itemId(groupNum, i);
|
||||
expansionGroupNum = expansionGroupNum + 1;
|
||||
@@ -98,21 +89,19 @@ function setIds(contentParam, groupNum) {
|
||||
item.itemId = itemId(groupNum, i);
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
return expansionGroupNum;
|
||||
}
|
||||
|
||||
export function initGroupAndItemIds() {
|
||||
setIds(content, 0);
|
||||
console.log({
|
||||
content
|
||||
});
|
||||
} // get rid of Expansions and put all PageDef items into a single array
|
||||
}
|
||||
|
||||
// get rid of Expansions and put all PageDef items into a single array
|
||||
export function flattenContent(pageDefs) {
|
||||
const flat = [];
|
||||
|
||||
for (let item of pageDefs) {
|
||||
if (isExpansion(item)) {
|
||||
flat.push(...flattenContent(item.content));
|
||||
@@ -120,7 +109,6 @@ export function flattenContent(pageDefs) {
|
||||
flat.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
return flat;
|
||||
}
|
||||
export function makeRoutes() {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -13,9 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
import * as ReactDOM from "../../common/keycloak/web_modules/react-dom.js";
|
||||
import { HashRouter } from "../../common/keycloak/web_modules/react-router-dom.js";
|
||||
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import * as ReactDOM from "../keycloak.v2/web_modules/react-dom.js";
|
||||
import { HashRouter } from "../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { App } from "./App.js";
|
||||
import { flattenContent, initGroupAndItemIds, isExpansion, isModulePageDef } from "./ContentPages.js";
|
||||
import { KeycloakService } from "./keycloak-service/keycloak.service.js";
|
||||
@@ -26,12 +27,10 @@ export class Main extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
isReactLoading = false;
|
||||
toggleReact();
|
||||
}
|
||||
|
||||
render() {
|
||||
const keycloakService = new KeycloakService(keycloak);
|
||||
return /*#__PURE__*/React.createElement(HashRouter, null, /*#__PURE__*/React.createElement(KeycloakContext.Provider, {
|
||||
@@ -40,21 +39,16 @@ export class Main extends React.Component {
|
||||
value: new AccountServiceClient(keycloakService)
|
||||
}, /*#__PURE__*/React.createElement(App, null))));
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
const e = React.createElement;
|
||||
|
||||
function removeHidden(items) {
|
||||
const visible = [];
|
||||
|
||||
for (let item of items) {
|
||||
if (item.hidden && eval(item.hidden)) continue;
|
||||
|
||||
if (isExpansion(item)) {
|
||||
visible.push(item);
|
||||
item.content = removeHidden(item.content);
|
||||
|
||||
if (item.content.length === 0) {
|
||||
visible.pop(); // remove empty expansion
|
||||
}
|
||||
@@ -62,13 +56,10 @@ function removeHidden(items) {
|
||||
visible.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
return visible;
|
||||
}
|
||||
|
||||
content = removeHidden(content);
|
||||
initGroupAndItemIds();
|
||||
|
||||
function loadModule(modulePage) {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log('loading: ' + resourceUrl + modulePage.modulePath);
|
||||
@@ -81,15 +72,15 @@ function loadModule(modulePage) {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
;
|
||||
const moduleLoaders = [];
|
||||
flattenContent(content).forEach(item => {
|
||||
if (isModulePageDef(item)) {
|
||||
moduleLoaders.push(loadModule(item));
|
||||
}
|
||||
}); // load content modules and start
|
||||
});
|
||||
|
||||
// load content modules and start
|
||||
Promise.all(moduleLoaders).then(() => {
|
||||
const domContainer = document.querySelector('#main_react_container');
|
||||
ReactDOM.render(e(Main), domContainer);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,23 +1,27 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
import { PageHeaderTools } from "../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import { PageHeaderTools } from "../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { ReferrerLink } from "./widgets/ReferrerLink.js";
|
||||
import { LogoutButton } from "./widgets/Logout.js";
|
||||
export class PageHeaderTool extends React.Component {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
|
||||
_defineProperty(this, "hasReferrer", typeof referrerName !== 'undefined');
|
||||
}
|
||||
|
||||
render() {
|
||||
const username = loggedInUserName();
|
||||
return /*#__PURE__*/React.createElement(PageHeaderTools, null, this.hasReferrer && /*#__PURE__*/React.createElement("div", {
|
||||
className: "pf-c-page__header-tools-group"
|
||||
}, /*#__PURE__*/React.createElement(ReferrerLink, null)), /*#__PURE__*/React.createElement("div", {
|
||||
className: "pf-c-page__header-tools-group"
|
||||
}, /*#__PURE__*/React.createElement(LogoutButton, null)));
|
||||
}, /*#__PURE__*/React.createElement(LogoutButton, null)), /*#__PURE__*/React.createElement("span", {
|
||||
style: {
|
||||
marginLeft: '10px'
|
||||
},
|
||||
id: "loggedInUser"
|
||||
}, username));
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=PageHeaderTool.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../src/app/PageHeaderTool.tsx"],"names":["React","PageHeaderTools","ReferrerLink","LogoutButton","PageHeaderTool","Component","referrerName","render","hasReferrer"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ;AAEA,SAAQC,eAAR;AACA,SAAQC,YAAR;AACA,SAAQC,YAAR;AAIA,OAAO,MAAMC,cAAN,SAA6BJ,KAAK,CAACK,SAAnC,CAA6C;AAAA;AAAA;;AAAA,yCACjB,OAAOC,YAAP,KAAwB,WADP;AAAA;;AAGzCC,EAAAA,MAAM,GAAoB;AAC7B,wBACI,oBAAC,eAAD,QACK,KAAKC,WAAL,iBACG;AAAK,MAAA,SAAS,EAAC;AAAf,oBACI,oBAAC,YAAD,OADJ,CAFR,eAOI;AAAK,MAAA,SAAS,EAAC;AAAf,oBACI,oBAAC,YAAD,OADJ,CAPJ,CADJ;AAaH;;AAjB+C","sourcesContent":["import * as React from 'react';\n\nimport {PageHeaderTools} from '@patternfly/react-core';\nimport {ReferrerLink} from './widgets/ReferrerLink';\nimport {LogoutButton} from './widgets/Logout';\n\ndeclare const referrerName: string;\n\nexport class PageHeaderTool extends React.Component {\n private hasReferrer: boolean = typeof referrerName !== 'undefined';\n\n public render(): React.ReactNode {\n return (\n <PageHeaderTools>\n {this.hasReferrer &&\n <div className=\"pf-c-page__header-tools-group\">\n <ReferrerLink/>\n </div>\n }\n\n <div className=\"pf-c-page__header-tools-group\">\n <LogoutButton/>\n </div>\n </PageHeaderTools>\n );\n }\n}\n"],"file":"PageHeaderTool.js"}
|
||||
{"version":3,"file":"PageHeaderTool.js","names":["React","PageHeaderTools","ReferrerLink","LogoutButton","PageHeaderTool","Component","constructor","args","_defineProperty","referrerName","render","username","loggedInUserName","createElement","hasReferrer","className","style","marginLeft","id"],"sources":["../src/app/PageHeaderTool.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {PageHeaderTools} from '@patternfly/react-core';\nimport {ReferrerLink} from './widgets/ReferrerLink';\nimport {LogoutButton} from './widgets/Logout';\n\ndeclare const referrerName: string;\ndeclare function loggedInUserName(): string;\n\nexport class PageHeaderTool extends React.Component {\n private hasReferrer: boolean = typeof referrerName !== 'undefined';\n\n public render(): React.ReactNode {\n const username = loggedInUserName();\n \n return (\n <PageHeaderTools>\n {this.hasReferrer &&\n <div className=\"pf-c-page__header-tools-group\">\n <ReferrerLink/>\n </div>\n }\n\n <div className=\"pf-c-page__header-tools-group\">\n <LogoutButton/>\n </div>\n\n <span style={{marginLeft: '10px'}} id=\"loggedInUser\">{username}</span>\n </PageHeaderTools>\n );\n }\n}\n"],"mappings":";;;AAAA,OAAO,KAAKA,KAAK;AAEjB,SAAQC,eAAe;AACvB,SAAQC,YAAY;AACpB,SAAQC,YAAY;AAKpB,OAAO,MAAMC,cAAc,SAASJ,KAAK,CAACK,SAAS,CAAC;EAAAC,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,sBACjB,OAAOC,YAAY,KAAK,WAAW;EAAA;EAE3DC,MAAMA,CAAA,EAAoB;IAC7B,MAAMC,QAAQ,GAAGC,gBAAgB,CAAC,CAAC;IAEnC,oBACIZ,KAAA,CAAAa,aAAA,CAACZ,eAAe,QACX,IAAI,CAACa,WAAW,iBACbd,KAAA,CAAAa,aAAA;MAAKE,SAAS,EAAC;IAA+B,gBAC1Cf,KAAA,CAAAa,aAAA,CAACX,YAAY,MAAC,CACb,CAAC,eAGVF,KAAA,CAAAa,aAAA;MAAKE,SAAS,EAAC;IAA+B,gBAC1Cf,KAAA,CAAAa,aAAA,CAACV,YAAY,MAAC,CACb,CAAC,eAENH,KAAA,CAAAa,aAAA;MAAMG,KAAK,EAAE;QAACC,UAAU,EAAE;MAAM,CAAE;MAACC,EAAE,EAAC;IAAc,GAAEP,QAAe,CACxD,CAAC;EAE1B;AACJ"}
|
||||
@@ -13,39 +13,32 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
import { withRouter } from "../../common/keycloak/web_modules/react-router-dom.js";
|
||||
import { Nav, NavList } from "../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { makeNavItems, flattenContent } from "./ContentPages.js";
|
||||
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import { withRouter } from "../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { Nav, NavList } from "../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { makeNavItems, flattenContent } from "./ContentPages.js";
|
||||
class PageNavigation extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
findActiveItem() {
|
||||
const currentPath = this.props.location.pathname;
|
||||
const items = flattenContent(content);
|
||||
const firstItem = items[0];
|
||||
|
||||
for (let item of items) {
|
||||
const itemPath = '/' + item.path;
|
||||
|
||||
if (itemPath === currentPath) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
return firstItem;
|
||||
}
|
||||
|
||||
render() {
|
||||
const activeItem = this.findActiveItem();
|
||||
return /*#__PURE__*/React.createElement(Nav, null, /*#__PURE__*/React.createElement(NavList, null, makeNavItems(activeItem)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const PageNav = withRouter(PageNavigation);
|
||||
//# sourceMappingURL=PageNav.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../src/app/PageNav.tsx"],"names":["React","withRouter","Nav","NavList","makeNavItems","flattenContent","PageNavigation","Component","constructor","props","findActiveItem","currentPath","location","pathname","items","content","firstItem","item","itemPath","path","render","activeItem","PageNav"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAO,KAAKA,KAAZ;AACA,SAAQC,UAAR;AACA,SAAQC,GAAR,EAAaC,OAAb;AAEA,SAAQC,YAAR,EAAsBC,cAAtB;;AAQA,MAAMC,cAAN,SAA6BN,KAAK,CAACO,SAAnC,CAAyE;AAE9DC,EAAAA,WAAW,CAACC,KAAD,EAAsB;AACpC,UAAMA,KAAN;AACH;;AAEOC,EAAAA,cAAc,GAAY;AAC9B,UAAMC,WAAmB,GAAG,KAAKF,KAAL,CAAWG,QAAX,CAAoBC,QAAhD;AACA,UAAMC,KAAgB,GAAGT,cAAc,CAACU,OAAD,CAAvC;AACA,UAAMC,SAAS,GAAGF,KAAK,CAAC,CAAD,CAAvB;;AACA,SAAK,IAAIG,IAAT,IAAiBH,KAAjB,EAAwB;AACpB,YAAMI,QAAgB,GAAG,MAAMD,IAAI,CAACE,IAApC;;AACA,UAAID,QAAQ,KAAKP,WAAjB,EAA8B;AAC1B,eAAOM,IAAP;AACH;AACJ;;AAAA;AAED,WAAOD,SAAP;AACH;;AAEMI,EAAAA,MAAM,GAAoB;AAC7B,UAAMC,UAAmB,GAAG,KAAKX,cAAL,EAA5B;AACA,wBACI,oBAAC,GAAD,qBACI,oBAAC,OAAD,QACKN,YAAY,CAACiB,UAAD,CADjB,CADJ,CADJ;AAOH;;AA7BoE;;AAgCzE,OAAO,MAAMC,OAAO,GAAGrB,UAAU,CAACK,cAAD,CAA1B","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Nav, NavList} from '@patternfly/react-core';\n\nimport {makeNavItems, flattenContent, ContentItem, PageDef} from './ContentPages';\n\ndeclare const content: ContentItem[];\n\nexport interface PageNavProps extends RouteComponentProps {}\n\nexport interface PageNavState {}\n\nclass PageNavigation extends React.Component<PageNavProps, PageNavState> {\n\n public constructor(props: PageNavProps) {\n super(props);\n }\n\n private findActiveItem(): PageDef {\n const currentPath: string = this.props.location.pathname;\n const items: PageDef[] = flattenContent(content);\n const firstItem = items[0];\n for (let item of items) {\n const itemPath: string = '/' + item.path;\n if (itemPath === currentPath) {\n return item;\n }\n };\n\n return firstItem;\n }\n\n public render(): React.ReactNode {\n const activeItem: PageDef = this.findActiveItem();\n return (\n <Nav>\n <NavList>\n {makeNavItems(activeItem)}\n </NavList>\n </Nav>\n );\n }\n}\n\nexport const PageNav = withRouter(PageNavigation);\n"],"file":"PageNav.js"}
|
||||
{"version":3,"file":"PageNav.js","names":["React","withRouter","Nav","NavList","makeNavItems","flattenContent","PageNavigation","Component","constructor","props","findActiveItem","currentPath","location","pathname","items","content","firstItem","item","itemPath","path","render","activeItem","createElement","PageNav"],"sources":["../src/app/PageNav.tsx"],"sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Nav, NavList} from '@patternfly/react-core';\n\nimport {makeNavItems, flattenContent, ContentItem, PageDef} from './ContentPages';\n\ndeclare const content: ContentItem[];\n\nexport interface PageNavProps extends RouteComponentProps {}\n\nexport interface PageNavState {}\n\nclass PageNavigation extends React.Component<PageNavProps, PageNavState> {\n\n public constructor(props: PageNavProps) {\n super(props);\n }\n\n private findActiveItem(): PageDef {\n const currentPath: string = this.props.location.pathname;\n const items: PageDef[] = flattenContent(content);\n const firstItem = items[0];\n for (let item of items) {\n const itemPath: string = '/' + item.path;\n if (itemPath === currentPath) {\n return item;\n }\n };\n\n return firstItem;\n }\n\n public render(): React.ReactNode {\n const activeItem: PageDef = this.findActiveItem();\n return (\n <Nav>\n <NavList>\n {makeNavItems(activeItem)}\n </NavList>\n </Nav>\n );\n }\n}\n\nexport const PageNav = withRouter(PageNavigation);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK;AACjB,SAAQC,UAAU;AAClB,SAAQC,GAAG,EAAEC,OAAO;AAEpB,SAAQC,YAAY,EAAEC,cAAc;AAQpC,MAAMC,cAAc,SAASN,KAAK,CAACO,SAAS,CAA6B;EAE9DC,WAAWA,CAACC,KAAmB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;EAChB;EAEQC,cAAcA,CAAA,EAAY;IAC9B,MAAMC,WAAmB,GAAG,IAAI,CAACF,KAAK,CAACG,QAAQ,CAACC,QAAQ;IACxD,MAAMC,KAAgB,GAAGT,cAAc,CAACU,OAAO,CAAC;IAChD,MAAMC,SAAS,GAAGF,KAAK,CAAC,CAAC,CAAC;IAC1B,KAAK,IAAIG,IAAI,IAAIH,KAAK,EAAE;MACpB,MAAMI,QAAgB,GAAG,GAAG,GAAGD,IAAI,CAACE,IAAI;MACxC,IAAID,QAAQ,KAAKP,WAAW,EAAE;QAC1B,OAAOM,IAAI;MACf;IACJ;IAAC;IAED,OAAOD,SAAS;EACpB;EAEOI,MAAMA,CAAA,EAAoB;IAC7B,MAAMC,UAAmB,GAAG,IAAI,CAACX,cAAc,CAAC,CAAC;IACjD,oBACIV,KAAA,CAAAsB,aAAA,CAACpB,GAAG,qBACAF,KAAA,CAAAsB,aAAA,CAACnB,OAAO,QACHC,YAAY,CAACiB,UAAU,CACnB,CACR,CAAC;EAEd;AACJ;AAEA,OAAO,MAAME,OAAO,GAAGtB,UAAU,CAACK,cAAc,CAAC"}
|
||||
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,27 +16,24 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../common/keycloak/web_modules/react.js";
|
||||
import { Toolbar, ToolbarGroup, ToolbarItem } from "../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
|
||||
import * as React from "../keycloak.v2/web_modules/react.js";
|
||||
import { Toolbar, ToolbarGroup, ToolbarItem } from "../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { ReferrerLink } from "./widgets/ReferrerLink.js";
|
||||
import { LogoutButton } from "./widgets/Logout.js";
|
||||
export class PageToolbar extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "hasReferrer", typeof referrerName !== 'undefined');
|
||||
|
||||
_defineProperty(this, "onKebabDropdownToggle", isKebabDropdownOpen => {
|
||||
this.setState({
|
||||
isKebabDropdownOpen
|
||||
});
|
||||
});
|
||||
|
||||
this.state = {
|
||||
isKebabDropdownOpen: false
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(Toolbar, null, this.hasReferrer && /*#__PURE__*/React.createElement(ToolbarGroup, {
|
||||
key: "referrerGroup",
|
||||
@@ -55,6 +53,5 @@ export class PageToolbar extends React.Component {
|
||||
key: "logout"
|
||||
}, /*#__PURE__*/React.createElement(LogoutButton, null))));
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=PageToolbar.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../src/app/PageToolbar.tsx"],"names":["React","Toolbar","ToolbarGroup","ToolbarItem","ReferrerLink","LogoutButton","PageToolbar","Component","constructor","props","referrerName","isKebabDropdownOpen","setState","state","render","hasReferrer","default"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAO,KAAKA,KAAZ;AAEA,SAA+BC,OAA/B,EAAwCC,YAAxC,EAAsDC,WAAtD;AAGA,SAAQC,YAAR;AAEA,SAAQC,YAAR;AAOA,OAAO,MAAMC,WAAN,SAA0BN,KAAK,CAACO,SAAhC,CAA8E;AAG1EC,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACxC,UAAMA,KAAN;;AADwC,yCAFb,OAAOC,YAAP,KAAwB,WAEX;;AAAA,mDAQXC,mBAAD,IAAkC;AAC9D,WAAKC,QAAL,CAAc;AACVD,QAAAA;AADU,OAAd;AAGH,KAZ2C;;AAGxC,SAAKE,KAAL,GAAa;AACTF,MAAAA,mBAAmB,EAAE;AADZ,KAAb;AAGH;;AAQMG,EAAAA,MAAM,GAAoB;AAC7B,wBACI,oBAAC,OAAD,QACK,KAAKC,WAAL,iBACG,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAC,eAAlB;AAAkC,MAAA,SAAS,EAAE;AAACC,QAAAA,OAAO,EAAC;AAAT;AAA7C,oBACI,oBAAC,WAAD;AAAa,MAAA,SAAS,EAAC,YAAvB;AAAoC,MAAA,GAAG,EAAC;AAAxC,oBACI,oBAAC,YAAD,OADJ,CADJ,CAFR,eASI,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAC,aAAlB;AAAgC,MAAA,SAAS,EAAE;AAACA,QAAAA,OAAO,EAAC;AAAT;AAA3C,oBACI,oBAAC,WAAD;AAAa,MAAA,SAAS,EAAC,YAAvB;AAAoC,MAAA,GAAG,EAAC;AAAxC,oBACI,oBAAC,YAAD,OADJ,CADJ,CATJ,CADJ;AAiBH;;AAnCgF","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Dropdown, KebabToggle, Toolbar, ToolbarGroup, ToolbarItem} from '@patternfly/react-core';\n\nimport {ReferrerDropdownItem} from './widgets/ReferrerDropdownItem';\nimport {ReferrerLink} from './widgets/ReferrerLink';\nimport {Features} from './widgets/features';\nimport {LogoutButton,LogoutDropdownItem} from './widgets/Logout';\n\ndeclare const referrerName: string;\ndeclare const features: Features;\n\ninterface PageToolbarProps {}\ninterface PageToolbarState {isKebabDropdownOpen: boolean}\nexport class PageToolbar extends React.Component<PageToolbarProps, PageToolbarState> {\n private hasReferrer: boolean = typeof referrerName !== 'undefined';\n\n public constructor(props: PageToolbarProps) {\n super(props);\n\n this.state = {\n isKebabDropdownOpen: false,\n };\n }\n\n private onKebabDropdownToggle = (isKebabDropdownOpen: boolean) => {\n this.setState({\n isKebabDropdownOpen\n });\n };\n\n public render(): React.ReactNode {\n return (\n <Toolbar>\n {this.hasReferrer &&\n <ToolbarGroup key='referrerGroup' alignment={{default:\"alignRight\"}}>\n <ToolbarItem className=\"pf-m-icons\" key='referrer'>\n <ReferrerLink/>\n </ToolbarItem>\n </ToolbarGroup>\n }\n\n <ToolbarGroup key='secondGroup' alignment={{default:\"alignRight\"}}>\n <ToolbarItem className=\"pf-m-icons\" key='logout'>\n <LogoutButton/>\n </ToolbarItem>\n </ToolbarGroup>\n </Toolbar>\n );\n }\n}\n"],"file":"PageToolbar.js"}
|
||||
{"version":3,"file":"PageToolbar.js","names":["React","Toolbar","ToolbarGroup","ToolbarItem","ReferrerLink","LogoutButton","PageToolbar","Component","constructor","props","_defineProperty","referrerName","isKebabDropdownOpen","setState","state","render","createElement","hasReferrer","key","alignment","default","className"],"sources":["../src/app/PageToolbar.tsx"],"sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Dropdown, KebabToggle, Toolbar, ToolbarGroup, ToolbarItem} from '@patternfly/react-core';\n\nimport {ReferrerDropdownItem} from './widgets/ReferrerDropdownItem';\nimport {ReferrerLink} from './widgets/ReferrerLink';\nimport {Features} from './widgets/features';\nimport {LogoutButton,LogoutDropdownItem} from './widgets/Logout';\n\ndeclare const referrerName: string;\ndeclare const features: Features;\n\ninterface PageToolbarProps {}\ninterface PageToolbarState {isKebabDropdownOpen: boolean}\nexport class PageToolbar extends React.Component<PageToolbarProps, PageToolbarState> {\n private hasReferrer: boolean = typeof referrerName !== 'undefined';\n\n public constructor(props: PageToolbarProps) {\n super(props);\n\n this.state = {\n isKebabDropdownOpen: false,\n };\n }\n\n private onKebabDropdownToggle = (isKebabDropdownOpen: boolean) => {\n this.setState({\n isKebabDropdownOpen\n });\n };\n\n public render(): React.ReactNode {\n return (\n <Toolbar>\n {this.hasReferrer &&\n <ToolbarGroup key='referrerGroup' alignment={{default:\"alignRight\"}}>\n <ToolbarItem className=\"pf-m-icons\" key='referrer'>\n <ReferrerLink/>\n </ToolbarItem>\n </ToolbarGroup>\n }\n\n <ToolbarGroup key='secondGroup' alignment={{default:\"alignRight\"}}>\n <ToolbarItem className=\"pf-m-icons\" key='logout'>\n <LogoutButton/>\n </ToolbarItem>\n </ToolbarGroup>\n </Toolbar>\n );\n }\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK;AAEjB,SAA+BC,OAAO,EAAEC,YAAY,EAAEC,WAAW;AAGjE,SAAQC,YAAY;AAEpB,SAAQC,YAAY;AAOpB,OAAO,MAAMC,WAAW,SAASN,KAAK,CAACO,SAAS,CAAqC;EAG1EC,WAAWA,CAACC,KAAuB,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,sBAHc,OAAOC,YAAY,KAAK,WAAW;IAAAD,eAAA,gCAUjCE,mBAA4B,IAAK;MAC9D,IAAI,CAACC,QAAQ,CAAC;QACVD;MACJ,CAAC,CAAC;IACN,CAAC;IATG,IAAI,CAACE,KAAK,GAAG;MACTF,mBAAmB,EAAE;IACzB,CAAC;EACL;EAQOG,MAAMA,CAAA,EAAoB;IAC7B,oBACIf,KAAA,CAAAgB,aAAA,CAACf,OAAO,QACH,IAAI,CAACgB,WAAW,iBACbjB,KAAA,CAAAgB,aAAA,CAACd,YAAY;MAACgB,GAAG,EAAC,eAAe;MAACC,SAAS,EAAE;QAACC,OAAO,EAAC;MAAY;IAAE,gBAChEpB,KAAA,CAAAgB,aAAA,CAACb,WAAW;MAACkB,SAAS,EAAC,YAAY;MAACH,GAAG,EAAC;IAAU,gBAC9ClB,KAAA,CAAAgB,aAAA,CAACZ,YAAY,MAAC,CACL,CACH,CAAC,eAGnBJ,KAAA,CAAAgB,aAAA,CAACd,YAAY;MAACgB,GAAG,EAAC,aAAa;MAACC,SAAS,EAAE;QAACC,OAAO,EAAC;MAAY;IAAE,gBAC9DpB,KAAA,CAAAgB,aAAA,CAACb,WAAW;MAACkB,SAAS,EAAC,YAAY;MAACH,GAAG,EAAC;IAAQ,gBAC5ClB,KAAA,CAAAgB,aAAA,CAACX,YAAY,MAAC,CACL,CACH,CACT,CAAC;EAElB;AACJ"}
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
import * as React from "../../../common/keycloak/web_modules/react.js";
|
||||
import * as React from "../../keycloak.v2/web_modules/react.js";
|
||||
export const AccountServiceContext = React.createContext(undefined);
|
||||
//# sourceMappingURL=AccountServiceContext.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/account-service/AccountServiceContext.tsx"],"names":["React","AccountServiceContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAGA,OAAO,MAAMC,qBAAqB,GAAGD,KAAK,CAACE,aAAN,CAAsDC,SAAtD,CAA9B","sourcesContent":["import * as React from 'react';\nimport { AccountServiceClient } from './account.service';\n\nexport const AccountServiceContext = React.createContext<AccountServiceClient | undefined>(undefined);"],"file":"AccountServiceContext.js"}
|
||||
{"version":3,"file":"AccountServiceContext.js","names":["React","AccountServiceContext","createContext","undefined"],"sources":["../../src/app/account-service/AccountServiceContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { AccountServiceClient } from './account.service';\n\nexport const AccountServiceContext = React.createContext<AccountServiceClient | undefined>(undefined);"],"mappings":"AAAA,OAAO,KAAKA,KAAK;AAGjB,OAAO,MAAMC,qBAAqB,GAAGD,KAAK,CAACE,aAAa,CAAmCC,SAAS,CAAC"}
|
||||
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat Inc. and/or its affiliates and other contributors
|
||||
* as indicated by the @author tags. All rights reserved.
|
||||
@@ -16,71 +17,64 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
import { ContentAlert } from "../content/ContentAlert.js";
|
||||
export class AccountServiceError extends Error {
|
||||
constructor(response) {
|
||||
super(response.statusText);
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.
|
||||
*/
|
||||
|
||||
export class AccountServiceClient {
|
||||
constructor(keycloakService) {
|
||||
_defineProperty(this, "kcSvc", void 0);
|
||||
|
||||
_defineProperty(this, "accountUrl", void 0);
|
||||
|
||||
this.kcSvc = keycloakService;
|
||||
this.accountUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/account';
|
||||
}
|
||||
|
||||
async doGet(endpoint, config) {
|
||||
return this.doRequest(endpoint, { ...config,
|
||||
return this.doRequest(endpoint, {
|
||||
...config,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
async doDelete(endpoint, config) {
|
||||
return this.doRequest(endpoint, { ...config,
|
||||
return this.doRequest(endpoint, {
|
||||
...config,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
async doPost(endpoint, body, config) {
|
||||
return this.doRequest(endpoint, { ...config,
|
||||
return this.doRequest(endpoint, {
|
||||
...config,
|
||||
body: JSON.stringify(body),
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
|
||||
async doPut(endpoint, body, config) {
|
||||
return this.doRequest(endpoint, { ...config,
|
||||
return this.doRequest(endpoint, {
|
||||
...config,
|
||||
body: JSON.stringify(body),
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
|
||||
async doRequest(endpoint, config) {
|
||||
const response = await fetch(this.makeUrl(endpoint, config).toString(), await this.makeConfig(config));
|
||||
|
||||
try {
|
||||
response.data = await response.json();
|
||||
} catch (e) {} // ignore. Might be empty
|
||||
|
||||
|
||||
if (!response.ok) {
|
||||
this.handleError(response);
|
||||
throw new AccountServiceError(response);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
handleError(response) {
|
||||
if (response !== null && response.status === 401) {
|
||||
if (this.kcSvc.authenticated() && !this.kcSvc.audiencePresent()) {
|
||||
@@ -91,40 +85,36 @@ export class AccountServiceClient {
|
||||
this.kcSvc.login();
|
||||
}
|
||||
}
|
||||
|
||||
if (response !== null && response.status === 403) {
|
||||
window.location.href = baseUrl + '#/forbidden';
|
||||
}
|
||||
|
||||
if (response !== null && response.data != null) {
|
||||
if (response.data['errors'] != null) {
|
||||
for (let err of response.data['errors']) ContentAlert.danger(err['errorMessage'], err['params']);
|
||||
} else {
|
||||
ContentAlert.danger(`${response.statusText}: ${response.data['errorMessage'] ? response.data['errorMessage'] : ''} ${response.data['error'] ? response.data['error'] : ''}`);
|
||||
}
|
||||
|
||||
;
|
||||
} else {
|
||||
ContentAlert.danger(response.statusText);
|
||||
}
|
||||
}
|
||||
|
||||
makeUrl(endpoint, config) {
|
||||
if (endpoint.startsWith('http')) return new URL(endpoint);
|
||||
const url = new URL(this.accountUrl + endpoint); // add request params
|
||||
const url = new URL(this.accountUrl + endpoint);
|
||||
|
||||
// add request params
|
||||
if (config && config.hasOwnProperty('params')) {
|
||||
const params = config.params || {};
|
||||
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
makeConfig(config = {}) {
|
||||
return new Promise(resolve => {
|
||||
this.kcSvc.getToken().then(token => {
|
||||
resolve({ ...config,
|
||||
resolve({
|
||||
...config,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...config.headers,
|
||||
@@ -136,7 +126,6 @@ export class AccountServiceClient {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
window.addEventListener("unhandledrejection", event => {
|
||||
event.promise.catch(error => {
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -47,6 +47,16 @@
|
||||
"modulePath": "/content/applications-page/ApplicationsPage.js",
|
||||
"componentName": "ApplicationsPage"
|
||||
},
|
||||
{
|
||||
"id": "groups",
|
||||
"path": "groups",
|
||||
"icon": "pf-icon-server-group",
|
||||
"label": "groupLabel",
|
||||
"descriptionLabel": "groupDescriptionLabel",
|
||||
"modulePath": "/content/group-page/GroupsPage.js",
|
||||
"componentName": "GroupsPage",
|
||||
"hidden": "!features.isViewGroupsEnabled"
|
||||
},
|
||||
{
|
||||
"id": "resources",
|
||||
"icon": "pf-icon-repository",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
var _class;
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,21 +17,19 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../common/keycloak/web_modules/react.js";
|
||||
import { Alert, AlertActionCloseButton, AlertGroup, AlertVariant } from "../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
|
||||
import * as React from "../../keycloak.v2/web_modules/react.js";
|
||||
import { Alert, AlertActionCloseButton, AlertGroup, AlertVariant } from "../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { Msg } from "../widgets/Msg.js";
|
||||
export class ContentAlert extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "hideAlert", key => {
|
||||
this.setState({
|
||||
alerts: [...this.state.alerts.filter(el => el.key !== key)]
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "getUniqueId", () => new Date().getTime());
|
||||
|
||||
_defineProperty(this, "postAlert", (variant, message, params) => {
|
||||
const alerts = this.state.alerts;
|
||||
const key = this.getUniqueId();
|
||||
@@ -41,50 +41,43 @@ export class ContentAlert extends React.Component {
|
||||
this.setState({
|
||||
alerts
|
||||
});
|
||||
|
||||
if (variant !== AlertVariant.danger) {
|
||||
setTimeout(() => this.hideAlert(key), 8000);
|
||||
}
|
||||
});
|
||||
|
||||
this.state = {
|
||||
alerts: []
|
||||
};
|
||||
ContentAlert.instance = this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message A literal text message or localization key.
|
||||
*/
|
||||
|
||||
|
||||
static success(message, params) {
|
||||
ContentAlert.instance.postAlert(AlertVariant.success, message, params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message A literal text message or localization key.
|
||||
*/
|
||||
|
||||
|
||||
static danger(message, params) {
|
||||
ContentAlert.instance.postAlert(AlertVariant.danger, message, params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message A literal text message or localization key.
|
||||
*/
|
||||
|
||||
|
||||
static warning(message, params) {
|
||||
ContentAlert.instance.postAlert(AlertVariant.warning, message, params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message A literal text message or localization key.
|
||||
*/
|
||||
|
||||
|
||||
static info(message, params) {
|
||||
ContentAlert.instance.postAlert(AlertVariant.info, message, params);
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(AlertGroup, {
|
||||
isToast: true,
|
||||
@@ -106,8 +99,7 @@ export class ContentAlert extends React.Component {
|
||||
key: key
|
||||
})));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_class = ContentAlert;
|
||||
_defineProperty(ContentAlert, "instance", void 0);
|
||||
//# sourceMappingURL=ContentAlert.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -13,12 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../common/keycloak/web_modules/react.js";
|
||||
import { Button, Text, Title, Tooltip, PageSection, TextContent, PageSectionVariants, SplitItem, Split } from "../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { SyncAltIcon } from "../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../keycloak.v2/web_modules/react.js";
|
||||
import { Button, Text, Title, Tooltip, PageSection, TextContent, PageSectionVariants, SplitItem, Split } from "../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { SyncAltIcon } from "../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { Msg } from "../widgets/Msg.js";
|
||||
import { ContentAlert } from "./ContentAlert.js";
|
||||
|
||||
/**
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.
|
||||
*/
|
||||
@@ -26,7 +26,6 @@ export class ContentPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ContentAlert, null), /*#__PURE__*/React.createElement(PageSection, {
|
||||
variant: PageSectionVariants.light,
|
||||
@@ -57,7 +56,6 @@ export class ContentPage extends React.Component {
|
||||
msgKey: "refresh"
|
||||
})))))), this.props.children);
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
//# sourceMappingURL=ContentPage.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,8 +16,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { ActionGroup, Button, Form, FormGroup, TextInput, Grid, GridItem, ExpandableSection, ValidatedOptions, PageSection, PageSectionVariants, Text, TextVariants, TextContent } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { ActionGroup, Button, Form, FormGroup, TextInput, InputGroup, Grid, GridItem, ExpandableSection, ValidatedOptions, PageSection, PageSectionVariants, Text, TextVariants, TextContent } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { ContentPage } from "../ContentPage.js";
|
||||
@@ -24,22 +25,19 @@ import { ContentAlert } from "../ContentAlert.js";
|
||||
import { LocaleSelector } from "../../widgets/LocaleSelectors.js";
|
||||
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js";
|
||||
import { AIACommand } from "../../util/AIACommand.js";
|
||||
|
||||
import { ExternalLinkSquareAltIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
/**
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.
|
||||
*/
|
||||
export class AccountPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "isRegistrationEmailAsUsername", features.isRegistrationEmailAsUsername);
|
||||
|
||||
_defineProperty(this, "isEditUserNameAllowed", features.isEditUserNameAllowed);
|
||||
|
||||
_defineProperty(this, "isDeleteAccountAllowed", features.deleteAccountAllowed);
|
||||
|
||||
_defineProperty(this, "isUpdateEmailFeatureEnabled", features.updateEmailFeatureEnabled);
|
||||
_defineProperty(this, "isUpdateEmailActionEnabled", features.updateEmailActionEnabled);
|
||||
_defineProperty(this, "DEFAULT_STATE", {
|
||||
errors: {
|
||||
username: '',
|
||||
@@ -55,37 +53,34 @@ export class AccountPage extends React.Component {
|
||||
attributes: {}
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "state", this.DEFAULT_STATE);
|
||||
|
||||
_defineProperty(this, "handleCancel", () => {
|
||||
this.fetchPersonalInfo();
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleChange", (value, event) => {
|
||||
const target = event.currentTarget;
|
||||
const name = target.name;
|
||||
this.setState({
|
||||
errors: { ...this.state.errors,
|
||||
errors: {
|
||||
...this.state.errors,
|
||||
[name]: target.validationMessage
|
||||
},
|
||||
formFields: { ...this.state.formFields,
|
||||
formFields: {
|
||||
...this.state.formFields,
|
||||
[name]: value
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleSubmit", event => {
|
||||
event.preventDefault();
|
||||
const form = event.target;
|
||||
const isValid = form.checkValidity();
|
||||
|
||||
if (isValid) {
|
||||
const reqData = { ...this.state.formFields
|
||||
const reqData = {
|
||||
...this.state.formFields
|
||||
};
|
||||
this.context.doPost("/", reqData).then(() => {
|
||||
ContentAlert.success('accountUpdatedMessage');
|
||||
|
||||
if (locale !== this.state.formFields.attributes.locale[0]) {
|
||||
window.location.reload();
|
||||
}
|
||||
@@ -97,17 +92,19 @@ export class AccountPage extends React.Component {
|
||||
return acc;
|
||||
}, {});
|
||||
this.setState({
|
||||
errors: { ...validationMessages
|
||||
errors: {
|
||||
...validationMessages
|
||||
},
|
||||
formFields: this.state.formFields
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleDelete", keycloak => {
|
||||
new AIACommand(keycloak, "delete_account").execute();
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleEmailUpdate", keycloak => {
|
||||
new AIACommand(keycloak, "UPDATE_EMAIL").execute();
|
||||
});
|
||||
_defineProperty(this, "UsernameInput", () => /*#__PURE__*/React.createElement(TextInput, {
|
||||
isRequired: true,
|
||||
type: "text",
|
||||
@@ -118,7 +115,6 @@ export class AccountPage extends React.Component {
|
||||
onChange: this.handleChange,
|
||||
validated: this.state.errors.username !== '' ? ValidatedOptions.error : ValidatedOptions.default
|
||||
}));
|
||||
|
||||
_defineProperty(this, "RestrictedUsernameInput", () => /*#__PURE__*/React.createElement(TextInput, {
|
||||
isReadOnly: true,
|
||||
type: "text",
|
||||
@@ -126,16 +122,13 @@ export class AccountPage extends React.Component {
|
||||
name: "username",
|
||||
value: this.state.formFields.username
|
||||
}));
|
||||
|
||||
this.context = context;
|
||||
this.fetchPersonalInfo();
|
||||
}
|
||||
|
||||
fetchPersonalInfo() {
|
||||
this.context.doGet("/").then(response => {
|
||||
this.setState(this.DEFAULT_STATE);
|
||||
const formFields = response.data;
|
||||
|
||||
if (!formFields.attributes) {
|
||||
formFields.attributes = {
|
||||
locale: [locale]
|
||||
@@ -143,14 +136,13 @@ export class AccountPage extends React.Component {
|
||||
} else if (!formFields.attributes.locale) {
|
||||
formFields.attributes.locale = [locale];
|
||||
}
|
||||
|
||||
this.setState({ ...{
|
||||
this.setState({
|
||||
...{
|
||||
formFields: formFields
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
const fields = this.state.formFields;
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
@@ -166,13 +158,13 @@ export class AccountPage extends React.Component {
|
||||
}, Msg.localize('allFieldsRequired'))), /*#__PURE__*/React.createElement(Form, {
|
||||
onSubmit: event => this.handleSubmit(event),
|
||||
className: "personal-info-form"
|
||||
}, !this.isRegistrationEmailAsUsername && /*#__PURE__*/React.createElement(FormGroup, {
|
||||
}, !this.isRegistrationEmailAsUsername && fields.username != undefined && /*#__PURE__*/React.createElement(FormGroup, {
|
||||
label: Msg.localize("username"),
|
||||
fieldId: "user-name",
|
||||
helperTextInvalid: this.state.errors.username,
|
||||
validated: this.state.errors.username !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
||||
}, this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.UsernameInput, null), !this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.RestrictedUsernameInput, null)), /*#__PURE__*/React.createElement(FormGroup, {
|
||||
label: Msg.localize("email"),
|
||||
}, this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.UsernameInput, null), !this.isEditUserNameAllowed && /*#__PURE__*/React.createElement(this.RestrictedUsernameInput, null)), !this.isUpdateEmailFeatureEnabled && /*#__PURE__*/React.createElement(FormGroup, {
|
||||
label: Msg.localize('email'),
|
||||
fieldId: "email-address",
|
||||
helperTextInvalid: this.state.errors.email,
|
||||
validated: this.state.errors.email !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
||||
@@ -185,7 +177,24 @@ export class AccountPage extends React.Component {
|
||||
value: fields.email,
|
||||
onChange: this.handleChange,
|
||||
validated: this.state.errors.email !== "" ? ValidatedOptions.error : ValidatedOptions.default
|
||||
})), /*#__PURE__*/React.createElement(FormGroup, {
|
||||
})), this.isUpdateEmailFeatureEnabled && /*#__PURE__*/React.createElement(FormGroup, {
|
||||
label: Msg.localize('email'),
|
||||
fieldId: "email-address"
|
||||
}, /*#__PURE__*/React.createElement(InputGroup, null, /*#__PURE__*/React.createElement(TextInput, {
|
||||
isDisabled: true,
|
||||
type: "email",
|
||||
id: "email-address",
|
||||
name: "email",
|
||||
value: fields.email
|
||||
}), this.isUpdateEmailActionEnabled && (!this.isRegistrationEmailAsUsername || this.isEditUserNameAllowed) && /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => /*#__PURE__*/React.createElement(Button, {
|
||||
id: "update-email-btn",
|
||||
variant: "link",
|
||||
onClick: () => this.handleEmailUpdate(keycloak),
|
||||
icon: /*#__PURE__*/React.createElement(ExternalLinkSquareAltIcon, null),
|
||||
iconPosition: "right"
|
||||
}, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "updateEmail"
|
||||
}))))), /*#__PURE__*/React.createElement(FormGroup, {
|
||||
label: Msg.localize("firstName"),
|
||||
fieldId: "first-name",
|
||||
helperTextInvalid: this.state.errors.firstName,
|
||||
@@ -222,8 +231,10 @@ export class AccountPage extends React.Component {
|
||||
value: fields.attributes.locale || "",
|
||||
onChange: value => this.setState({
|
||||
errors: this.state.errors,
|
||||
formFields: { ...this.state.formFields,
|
||||
attributes: { ...this.state.formFields.attributes,
|
||||
formFields: {
|
||||
...this.state.formFields,
|
||||
attributes: {
|
||||
...this.state.formFields.attributes,
|
||||
locale: [value]
|
||||
}
|
||||
}
|
||||
@@ -247,7 +258,7 @@ export class AccountPage extends React.Component {
|
||||
marginTop: "30px"
|
||||
}
|
||||
}, /*#__PURE__*/React.createElement(ExpandableSection, {
|
||||
toggleText: "Delete Account"
|
||||
toggleText: Msg.localize("deleteAccount")
|
||||
}, /*#__PURE__*/React.createElement(Grid, {
|
||||
hasGutter: true
|
||||
}, /*#__PURE__*/React.createElement(GridItem, {
|
||||
@@ -267,10 +278,7 @@ export class AccountPage extends React.Component {
|
||||
span: 2
|
||||
}))))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(AccountPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
//# sourceMappingURL=AccountPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+16
-13
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,30 +16,33 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { withRouter } from "../../../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { AIACommand } from "../../util/AIACommand.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { Title, Button, EmptyState, EmptyStateVariant, EmptyStateIcon, EmptyStateBody, TitleSizes } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { PassportIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js"; // Note: This class demonstrates two features of the ContentPages framework:
|
||||
import { Title, Button, EmptyState, EmptyStateVariant, EmptyStateIcon, EmptyStateBody, TitleSizes } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { PassportIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js";
|
||||
|
||||
// Note: This class demonstrates two features of the ContentPages framework:
|
||||
// 1) The PageDef is available as a React property.
|
||||
// 2) You can add additional custom properties to the PageDef. In this case,
|
||||
// we add a value called kcAction in content.js and access it by extending the
|
||||
// PageDef interface.
|
||||
|
||||
// Extend RouteComponentProps to get access to router information such as
|
||||
// the hash-routed path associated with this page. See this.props.location.pathname
|
||||
// as used below.
|
||||
/**
|
||||
* @author Stan Silvert
|
||||
*/
|
||||
class ApplicationInitiatedActionPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "handleClick", keycloak => {
|
||||
new AIACommand(keycloak, this.props.pageDef.kcAction).execute();
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(EmptyState, {
|
||||
variant: EmptyStateVariant.full
|
||||
@@ -60,11 +64,10 @@ class ApplicationInitiatedActionPage extends React.Component {
|
||||
msgKey: "continue"
|
||||
}))));
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
|
||||
; // Note that the class name is not exported above. To get access to the router,
|
||||
// Note that the class name is not exported above. To get access to the router,
|
||||
// we use withRouter() and export a different name.
|
||||
|
||||
export const AppInitiatedActionPage = withRouter(ApplicationInitiatedActionPage);
|
||||
//# sourceMappingURL=AppInitiatedActionPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+16
-21
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,9 +16,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, DescriptionList, DescriptionListTerm, DescriptionListGroup, DescriptionListDescription, Grid, GridItem, Button, PageSection, PageSectionVariants, Stack } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { InfoAltIcon, CheckIcon, ExternalLinkAltIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, DescriptionList, DescriptionListTerm, DescriptionListGroup, DescriptionListDescription, Grid, GridItem, Button, PageSection, PageSectionVariants, Stack } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { InfoAltIcon, CheckIcon, ExternalLinkAltIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { ContentPage } from "../ContentPage.js";
|
||||
import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
@@ -25,15 +27,12 @@ import { Msg } from "../../widgets/Msg.js";
|
||||
export class ApplicationsPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "removeConsent", clientId => {
|
||||
this.context.doDelete("/applications/" + clientId + "/consent").then(() => {
|
||||
this.context.doDelete("/applications/" + encodeURIComponent(clientId) + "/consent").then(() => {
|
||||
this.fetchApplications();
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "onToggle", row => {
|
||||
const newIsRowOpen = this.state.isRowOpen;
|
||||
newIsRowOpen[row] = !newIsRowOpen[row];
|
||||
@@ -41,7 +40,6 @@ export class ApplicationsPage extends React.Component {
|
||||
isRowOpen: newIsRowOpen
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
isRowOpen: [],
|
||||
@@ -49,7 +47,6 @@ export class ApplicationsPage extends React.Component {
|
||||
};
|
||||
this.fetchApplications();
|
||||
}
|
||||
|
||||
fetchApplications() {
|
||||
this.context.doGet("/applications").then(response => {
|
||||
const applications = response.data || [];
|
||||
@@ -59,15 +56,13 @@ export class ApplicationsPage extends React.Component {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
elementId(item, application) {
|
||||
return `application-${item}-${application.clientId}`;
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: Msg.localize('applicationsPageTitle'),
|
||||
introMessage: "Manage your application permissions."
|
||||
introMessage: Msg.localize('applicationsPageSubTitle')
|
||||
}, /*#__PURE__*/React.createElement(PageSection, {
|
||||
isFilled: true,
|
||||
variant: PageSectionVariants.light
|
||||
@@ -147,11 +142,15 @@ export class ApplicationsPage extends React.Component {
|
||||
"aria-label": Msg.localize('applicationDetails'),
|
||||
id: this.elementId("expandable", application),
|
||||
isHidden: !this.state.isRowOpen[appIndex]
|
||||
}, /*#__PURE__*/React.createElement(DescriptionList, null, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('client')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.clientId)), application.description && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('description')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.description)), application.effectiveUrl && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, "URL"), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.effectiveUrl.split('"'))), application.consent && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, "Has access to"), application.consent.grantedScopes.map((scope, scopeIndex) => {
|
||||
}, /*#__PURE__*/React.createElement(DescriptionList, null, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('client')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.clientId)), application.description && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('description')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.description)), application.effectiveUrl && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, "URL"), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId("effectiveurl", application)
|
||||
}, application.effectiveUrl.split('"'))), application.consent && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, "Has access to"), application.consent.grantedScopes.map((scope, scopeIndex) => {
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, {
|
||||
key: 'scope-' + scopeIndex
|
||||
}, /*#__PURE__*/React.createElement(DescriptionListDescription, null, /*#__PURE__*/React.createElement(CheckIcon, null), " ", scope.name));
|
||||
})), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('accessGrantedOn') + ': '), /*#__PURE__*/React.createElement(DescriptionListDescription, null, new Intl.DateTimeFormat(locale, {
|
||||
}, /*#__PURE__*/React.createElement(DescriptionListDescription, null, /*#__PURE__*/React.createElement(CheckIcon, null), Msg.localize(scope.name)));
|
||||
})), application.tosUri && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('termsOfService')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.tosUri)), application.policyUri && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('policy')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, application.policyUri)), application.logoUri && /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('logo')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, /*#__PURE__*/React.createElement("img", {
|
||||
src: application.logoUri
|
||||
}))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('accessGrantedOn') + ': '), /*#__PURE__*/React.createElement(DescriptionListDescription, null, new Intl.DateTimeFormat(locale, {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
@@ -171,14 +170,10 @@ export class ApplicationsPage extends React.Component {
|
||||
modalContinueButtonLabel: Msg.localize('confirmButton') // defaults to 'Continue'
|
||||
,
|
||||
onContinue: () => this.removeConsent(application.clientId) // required
|
||||
|
||||
}))), /*#__PURE__*/React.createElement(GridItem, null, /*#__PURE__*/React.createElement(InfoAltIcon, null), " ", Msg.localize('infoMessage')))));
|
||||
})))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(ApplicationsPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
//# sourceMappingURL=ApplicationsPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+2
-3
@@ -13,16 +13,15 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
export class AuthenticatorPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h2", null, "Hello Authenticator Page"));
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
//# sourceMappingURL=AuthenticatorPage.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/app/content/authenticator-page/AuthenticatorPage.tsx"],"names":["React","AuthenticatorPage","Component","constructor","props","render"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAO,KAAKA,KAAZ;AAKA,OAAO,MAAMC,iBAAN,SAAgCD,KAAK,CAACE,SAAtC,CAAwE;AAEpEC,EAAAA,WAAW,CAACC,KAAD,EAAgC;AAC9C,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAM,GAAoB;AAC7B,wBACI,8CACE,2DADF,CADJ;AAKH;;AAZ0E;AAa9E","sourcesContent":["/* \n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n \nexport interface AuthenticatorPageProps {\n}\n \nexport class AuthenticatorPage extends React.Component<AuthenticatorPageProps> {\n \n public constructor(props: AuthenticatorPageProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n <div>\n <h2>Hello Authenticator Page</h2>\n </div>\n );\n }\n};"],"file":"AuthenticatorPage.js"}
|
||||
{"version":3,"file":"AuthenticatorPage.js","names":["React","AuthenticatorPage","Component","constructor","props","render","createElement"],"sources":["../../../src/app/content/authenticator-page/AuthenticatorPage.tsx"],"sourcesContent":["/* \n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n \nexport interface AuthenticatorPageProps {\n}\n \nexport class AuthenticatorPage extends React.Component<AuthenticatorPageProps> {\n \n public constructor(props: AuthenticatorPageProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n <div>\n <h2>Hello Authenticator Page</h2>\n </div>\n );\n }\n};"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK;AAKjB,OAAO,MAAMC,iBAAiB,SAASD,KAAK,CAACE,SAAS,CAAyB;EAEpEC,WAAWA,CAACC,KAA6B,EAAE;IAC9C,KAAK,CAACA,KAAK,CAAC;EAChB;EAEOC,MAAMA,CAAA,EAAoB;IAC7B,oBACIL,KAAA,CAAAM,aAAA,2BACEN,KAAA,CAAAM,aAAA,aAAI,0BAA4B,CAC7B,CAAC;EAEd;AACJ;AAAC"}
|
||||
+28
-31
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,46 +16,41 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import TimeUtil from "../../util/TimeUtil.js";
|
||||
import { Button, DataList, DataListItem, DataListItemRow, DataListContent, DescriptionList, DescriptionListTerm, DescriptionListDescription, DescriptionListGroup, Grid, GridItem, Label, PageSection, PageSectionVariants, Title, Tooltip, SplitItem, Split } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { DesktopIcon, MobileAltIcon, SyncAltIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
import { Button, DataList, DataListItem, DataListItemRow, DataListContent, DescriptionList, DescriptionListTerm, DescriptionListDescription, DescriptionListGroup, Grid, GridItem, Label, PageSection, PageSectionVariants, Title, Tooltip, SplitItem, Split } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { DesktopIcon, MobileAltIcon, SyncAltIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js";
|
||||
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js";
|
||||
import { ContentPage } from "../ContentPage.js";
|
||||
import { ContentAlert } from "../ContentAlert.js";
|
||||
|
||||
/**
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.
|
||||
*/
|
||||
export class DeviceActivityPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "signOutAll", keycloakService => {
|
||||
this.context.doDelete("/sessions").then(() => {
|
||||
keycloakService.logout();
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "signOutSession", (device, session) => {
|
||||
this.context.doDelete("/sessions/" + session.id).then(() => {
|
||||
this.context.doDelete("/sessions/" + encodeURIComponent(session.id)).then(() => {
|
||||
this.fetchDevices();
|
||||
ContentAlert.success('signedOutSession', [session.browser, device.os]);
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
devices: []
|
||||
};
|
||||
this.fetchDevices();
|
||||
}
|
||||
|
||||
fetchDevices() {
|
||||
this.context.doGet("/sessions/devices").then(response => {
|
||||
console.log({
|
||||
@@ -65,9 +61,9 @@ export class DeviceActivityPage extends React.Component {
|
||||
devices: devices
|
||||
});
|
||||
});
|
||||
} // current device and session should display at the top of their respective lists
|
||||
|
||||
}
|
||||
|
||||
// current device and session should display at the top of their respective lists
|
||||
moveCurrentToTop(devices) {
|
||||
let currentDevice = devices[0];
|
||||
devices.forEach((device, index) => {
|
||||
@@ -85,15 +81,12 @@ export class DeviceActivityPage extends React.Component {
|
||||
});
|
||||
return devices;
|
||||
}
|
||||
|
||||
time(time) {
|
||||
return TimeUtil.format(time * 1000);
|
||||
}
|
||||
|
||||
elementId(item, session, element = 'session') {
|
||||
return `${element}-${session.id.substring(0, 7)}-${item}`;
|
||||
}
|
||||
|
||||
findDeviceTypeIcon(session, device) {
|
||||
const deviceType = device.mobile;
|
||||
if (deviceType === true) return /*#__PURE__*/React.createElement(MobileAltIcon, {
|
||||
@@ -103,41 +96,34 @@ export class DeviceActivityPage extends React.Component {
|
||||
id: this.elementId('icon-desktop', session, 'device')
|
||||
});
|
||||
}
|
||||
|
||||
findOS(device) {
|
||||
if (device.os.toLowerCase().includes('unknown')) return Msg.localize('unknownOperatingSystem');
|
||||
return device.os;
|
||||
}
|
||||
|
||||
findOSVersion(device) {
|
||||
if (device.osVersion.toLowerCase().includes('unknown')) return '';
|
||||
return device.osVersion;
|
||||
}
|
||||
|
||||
makeClientsString(clients) {
|
||||
let clientsString = "";
|
||||
clients.forEach((client, index) => {
|
||||
let clientName;
|
||||
|
||||
if (client.hasOwnProperty('clientName') && client.clientName !== undefined && client.clientName !== '') {
|
||||
clientName = Msg.localize(client.clientName);
|
||||
} else {
|
||||
clientName = client.clientId;
|
||||
}
|
||||
|
||||
clientsString += clientName;
|
||||
if (clients.length > index + 1) clientsString += ', ';
|
||||
});
|
||||
return clientsString;
|
||||
}
|
||||
|
||||
isShowSignOutAll(devices) {
|
||||
if (devices.length === 0) return false;
|
||||
if (devices.length > 1) return true;
|
||||
if (devices[0].sessions.length > 1) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: "device-activity",
|
||||
@@ -168,7 +154,9 @@ export class DeviceActivityPage extends React.Component {
|
||||
variant: "link",
|
||||
onClick: this.fetchDevices.bind(this),
|
||||
icon: /*#__PURE__*/React.createElement(SyncAltIcon, null)
|
||||
}, "Refresh"))), /*#__PURE__*/React.createElement(SplitItem, null, /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => this.isShowSignOutAll(this.state.devices) && /*#__PURE__*/React.createElement(ContinueCancelModal, {
|
||||
}, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "refresh"
|
||||
})))), /*#__PURE__*/React.createElement(SplitItem, null, /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => this.isShowSignOutAll(this.state.devices) && /*#__PURE__*/React.createElement(ContinueCancelModal, {
|
||||
buttonTitle: "signOutAllDevices",
|
||||
buttonId: "sign-out-all",
|
||||
modalTitle: "signOutAllDevices",
|
||||
@@ -189,6 +177,7 @@ export class DeviceActivityPage extends React.Component {
|
||||
isHidden: false,
|
||||
className: "pf-u-flex-grow-1"
|
||||
}, /*#__PURE__*/React.createElement(Grid, {
|
||||
id: this.elementId("item", session),
|
||||
className: "signed-in-device-grid",
|
||||
hasGutter: true
|
||||
}, /*#__PURE__*/React.createElement(GridItem, {
|
||||
@@ -201,9 +190,10 @@ export class DeviceActivityPage extends React.Component {
|
||||
span: 10
|
||||
}, /*#__PURE__*/React.createElement("span", {
|
||||
id: this.elementId('browser', session),
|
||||
className: "pf-u-mr-md"
|
||||
className: "pf-u-mr-md session-title"
|
||||
}, this.findOS(device), " ", this.findOSVersion(device), " / ", session.browser), session.current && /*#__PURE__*/React.createElement(Label, {
|
||||
color: "green"
|
||||
color: "green",
|
||||
id: this.elementId('current-badge', session)
|
||||
}, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "currentSession"
|
||||
}))), /*#__PURE__*/React.createElement(GridItem, {
|
||||
@@ -225,14 +215,21 @@ export class DeviceActivityPage extends React.Component {
|
||||
sm: '2Col',
|
||||
lg: '3Col'
|
||||
}
|
||||
}, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('ipAddress')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, session.ipAddress)), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('lastAccessedOn')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, this.time(session.lastAccess))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('clients')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, this.makeClientsString(session.clients))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('started')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, this.time(session.started))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('expires')), /*#__PURE__*/React.createElement(DescriptionListDescription, null, this.time(session.expires)))))))));
|
||||
}, /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('ipAddress')), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId('ip', session)
|
||||
}, session.ipAddress)), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('lastAccessedOn')), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId('last-access', session)
|
||||
}, this.time(session.lastAccess))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('clients')), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId('clients', session)
|
||||
}, this.makeClientsString(session.clients))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('started')), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId('started', session)
|
||||
}, this.time(session.started))), /*#__PURE__*/React.createElement(DescriptionListGroup, null, /*#__PURE__*/React.createElement(DescriptionListTerm, null, Msg.localize('expires')), /*#__PURE__*/React.createElement(DescriptionListDescription, {
|
||||
id: this.elementId('expires', session)
|
||||
}, this.time(session.expires)))))))));
|
||||
}));
|
||||
})))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(DeviceActivityPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
//# sourceMappingURL=DeviceActivityPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+2
-4
@@ -13,15 +13,14 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { WarningTriangleIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { WarningTriangleIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import EmptyMessageState from "../../widgets/EmptyMessageState.js";
|
||||
export class ForbiddenPage extends React.Component {
|
||||
constructor() {
|
||||
super({});
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(EmptyMessageState, {
|
||||
icon: WarningTriangleIcon,
|
||||
@@ -30,7 +29,6 @@ export class ForbiddenPage extends React.Component {
|
||||
msgKey: "needAccessRights"
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
//# sourceMappingURL=ForbiddenPage.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/app/content/forbidden-page/ForbiddenPage.tsx"],"names":["React","WarningTriangleIcon","Msg","EmptyMessageState","ForbiddenPage","Component","constructor","render"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,KAAKA,KAAZ;AAEA,SAASC,mBAAT;AACA,SAAQC,GAAR;AACA,OAAOC,iBAAP;AAGA,OAAO,MAAMC,aAAN,SAA4BJ,KAAK,CAACK,SAAlC,CAA4C;AAExCC,EAAAA,WAAW,GAAG;AACjB,UAAM,EAAN;AACH;;AAEMC,EAAAA,MAAM,GAAoB;AAC7B,wBACI,oBAAC,iBAAD;AAAmB,MAAA,IAAI,EAAEN,mBAAzB;AAA8C,MAAA,UAAU,EAAC;AAAzD,oBACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MADJ,CADJ;AAKH;;AAZ8C;AAalD","sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\n\nexport class ForbiddenPage extends React.Component {\n\n public constructor() {\n super({});\n }\n\n public render(): React.ReactNode {\n return (\n <EmptyMessageState icon={WarningTriangleIcon} messageKey=\"forbidden\">\n <Msg msgKey=\"needAccessRights\"/>\n </EmptyMessageState>\n );\n }\n};\n"],"file":"ForbiddenPage.js"}
|
||||
{"version":3,"file":"ForbiddenPage.js","names":["React","WarningTriangleIcon","Msg","EmptyMessageState","ForbiddenPage","Component","constructor","render","createElement","icon","messageKey","msgKey"],"sources":["../../../src/app/content/forbidden-page/ForbiddenPage.tsx"],"sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\n\nexport class ForbiddenPage extends React.Component {\n\n public constructor() {\n super({});\n }\n\n public render(): React.ReactNode {\n return (\n <EmptyMessageState icon={WarningTriangleIcon} messageKey=\"forbidden\">\n <Msg msgKey=\"needAccessRights\"/>\n </EmptyMessageState>\n );\n }\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,KAAKA,KAAK;AAEjB,SAASC,mBAAmB;AAC5B,SAAQC,GAAG;AACX,OAAOC,iBAAiB;AAGxB,OAAO,MAAMC,aAAa,SAASJ,KAAK,CAACK,SAAS,CAAC;EAExCC,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,CAAC,CAAC,CAAC;EACb;EAEOC,MAAMA,CAAA,EAAoB;IAC7B,oBACIP,KAAA,CAAAQ,aAAA,CAACL,iBAAiB;MAACM,IAAI,EAAER,mBAAoB;MAACS,UAAU,EAAC;IAAW,gBAChEV,KAAA,CAAAQ,aAAA,CAACN,GAAG;MAACS,MAAM,EAAC;IAAkB,CAAC,CAChB,CAAC;EAE5B;AACJ;AAAC"}
|
||||
@@ -0,0 +1,133 @@
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Checkbox, DataList, DataListItem, DataListItemRow, DataListCell, DataListItemCells } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { ContentPage } from "../ContentPage.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
export class GroupsPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
_defineProperty(this, "context", void 0);
|
||||
_defineProperty(this, "changeDirectMembership", (checked, event) => {
|
||||
this.setState({
|
||||
isDirectMembership: checked
|
||||
});
|
||||
});
|
||||
this.context = context;
|
||||
this.state = {
|
||||
groups: [],
|
||||
directGroups: [],
|
||||
isDirectMembership: false
|
||||
};
|
||||
this.fetchGroups();
|
||||
}
|
||||
fetchGroups() {
|
||||
this.context.doGet("/groups").then(response => {
|
||||
const directGroups = response.data || [];
|
||||
const groups = [...directGroups];
|
||||
const groupsPaths = directGroups.map(s => s.path);
|
||||
directGroups.forEach(el => this.getParents(el, groups, groupsPaths));
|
||||
this.setState({
|
||||
groups: groups,
|
||||
directGroups: directGroups
|
||||
});
|
||||
});
|
||||
}
|
||||
getParents(el, groups, groupsPaths) {
|
||||
const parentPath = el.path.slice(0, el.path.lastIndexOf('/'));
|
||||
if (parentPath && groupsPaths.indexOf(parentPath) === -1) {
|
||||
el = {
|
||||
name: parentPath.slice(parentPath.lastIndexOf('/') + 1),
|
||||
path: parentPath
|
||||
};
|
||||
groups.push(el);
|
||||
groupsPaths.push(parentPath);
|
||||
this.getParents(el, groups, groupsPaths);
|
||||
}
|
||||
}
|
||||
emptyGroup() {
|
||||
return /*#__PURE__*/React.createElement(DataListItem, {
|
||||
key: "emptyItem",
|
||||
"aria-labelledby": "empty-item"
|
||||
}, /*#__PURE__*/React.createElement(DataListItemRow, {
|
||||
key: "emptyRow"
|
||||
}, /*#__PURE__*/React.createElement(DataListItemCells, {
|
||||
dataListCells: [/*#__PURE__*/React.createElement(DataListCell, {
|
||||
key: "empty"
|
||||
}, /*#__PURE__*/React.createElement("strong", null, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "noGroupsText"
|
||||
})))]
|
||||
})));
|
||||
}
|
||||
renderGroupList(group, appIndex) {
|
||||
return /*#__PURE__*/React.createElement(DataListItem, {
|
||||
id: `${appIndex}-group`,
|
||||
key: 'group-' + appIndex,
|
||||
"aria-labelledby": "groups-list"
|
||||
}, /*#__PURE__*/React.createElement(DataListItemRow, null, /*#__PURE__*/React.createElement(DataListItemCells, {
|
||||
dataListCells: [/*#__PURE__*/React.createElement(DataListCell, {
|
||||
id: `${appIndex}-group-name`,
|
||||
width: 2,
|
||||
key: 'name-' + appIndex
|
||||
}, group.name), /*#__PURE__*/React.createElement(DataListCell, {
|
||||
id: `${appIndex}-group-path`,
|
||||
width: 2,
|
||||
key: 'path-' + appIndex
|
||||
}, group.path), /*#__PURE__*/React.createElement(DataListCell, {
|
||||
id: `${appIndex}-group-directMembership`,
|
||||
width: 2,
|
||||
key: 'directMembership-' + appIndex
|
||||
}, /*#__PURE__*/React.createElement(Checkbox, {
|
||||
id: `${appIndex}-checkbox-directMembership`,
|
||||
isChecked: group.id != null,
|
||||
isDisabled: true
|
||||
}))]
|
||||
})));
|
||||
}
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: Msg.localize('groupLabel')
|
||||
}, /*#__PURE__*/React.createElement(DataList, {
|
||||
id: "groups-list",
|
||||
"aria-label": Msg.localize('groupLabel'),
|
||||
isCompact: true
|
||||
}, /*#__PURE__*/React.createElement(DataListItem, {
|
||||
id: "groups-list-header",
|
||||
"aria-labelledby": "Columns names"
|
||||
}, /*#__PURE__*/React.createElement(DataListItemRow, null, /*#__PURE__*/React.createElement(DataListItemCells, {
|
||||
dataListCells: [/*#__PURE__*/React.createElement(DataListCell, {
|
||||
key: "directMembership-header"
|
||||
}, /*#__PURE__*/React.createElement(Checkbox, {
|
||||
label: Msg.localize('directMembership'),
|
||||
id: "directMembership-checkbox",
|
||||
isChecked: this.state.isDirectMembership,
|
||||
onChange: this.changeDirectMembership
|
||||
}))]
|
||||
}))), /*#__PURE__*/React.createElement(DataListItem, {
|
||||
id: "groups-list-header",
|
||||
"aria-labelledby": "Columns names"
|
||||
}, /*#__PURE__*/React.createElement(DataListItemRow, null, /*#__PURE__*/React.createElement(DataListItemCells, {
|
||||
dataListCells: [/*#__PURE__*/React.createElement(DataListCell, {
|
||||
key: "group-name-header",
|
||||
width: 2
|
||||
}, /*#__PURE__*/React.createElement("strong", null, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "Name"
|
||||
}))), /*#__PURE__*/React.createElement(DataListCell, {
|
||||
key: "group-path-header",
|
||||
width: 2
|
||||
}, /*#__PURE__*/React.createElement("strong", null, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "path"
|
||||
}))), /*#__PURE__*/React.createElement(DataListCell, {
|
||||
key: "group-direct-membership-header",
|
||||
width: 2
|
||||
}, /*#__PURE__*/React.createElement("strong", null, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "directMembership"
|
||||
})))]
|
||||
}))), this.state.groups.length === 0 ? this.emptyGroup() : this.state.isDirectMembership ? this.state.directGroups.map((group, appIndex) => this.renderGroupList(group, appIndex)) : this.state.groups.map((group, appIndex) => this.renderGroupList(group, appIndex))));
|
||||
}
|
||||
}
|
||||
_defineProperty(GroupsPage, "contextType", AccountServiceContext);
|
||||
;
|
||||
//# sourceMappingURL=GroupsPage.js.map
|
||||
File diff suppressed because one or more lines are too long
+53
-34
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,24 +16,22 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js";
|
||||
import { Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItemRow, Label, PageSection, PageSectionVariants, Split, SplitItem, Stack, StackItem, Title, DataListItem } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { BitbucketIcon, CubeIcon, GitlabIcon, LinkIcon, PaypalIcon, UnlinkIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { withRouter } from "../../../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItemRow, Label, PageSection, PageSectionVariants, Split, SplitItem, Stack, StackItem, Title, DataListItem } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { BitbucketIcon, CubeIcon, GitlabIcon, LinkIcon, OpenshiftIcon, PaypalIcon, UnlinkIcon, FacebookIcon, GoogleIcon, InstagramIcon, MicrosoftIcon, TwitterIcon, StackOverflowIcon, LinkedinIcon, GithubIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { ContentPage } from "../ContentPage.js";
|
||||
import { createRedirect } from "../../util/RedirectUri.js";
|
||||
|
||||
/**
|
||||
* @author Stan Silvert
|
||||
*/
|
||||
class LinkedAccountsPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
linkedAccounts: [],
|
||||
@@ -40,7 +39,6 @@ class LinkedAccountsPage extends React.Component {
|
||||
};
|
||||
this.getLinkedAccounts();
|
||||
}
|
||||
|
||||
getLinkedAccounts() {
|
||||
this.context.doGet("/linked-accounts").then(response => {
|
||||
console.log({
|
||||
@@ -54,7 +52,6 @@ class LinkedAccountsPage extends React.Component {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
unLinkAccount(account) {
|
||||
const url = '/linked-accounts/' + account.providerName;
|
||||
this.context.doDelete(url).then(response => {
|
||||
@@ -64,7 +61,6 @@ class LinkedAccountsPage extends React.Component {
|
||||
this.getLinkedAccounts();
|
||||
});
|
||||
}
|
||||
|
||||
linkAccount(account) {
|
||||
const url = '/linked-accounts/' + account.providerName;
|
||||
const redirectUri = createRedirect(this.props.location.pathname);
|
||||
@@ -80,7 +76,6 @@ class LinkedAccountsPage extends React.Component {
|
||||
window.location.href = response.data.accountLinkUri;
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: Msg.localize('linkedAccountsTitle'),
|
||||
@@ -110,16 +105,13 @@ class LinkedAccountsPage extends React.Component {
|
||||
"aria-label": Msg.localize('unlinkedLoginProviders')
|
||||
}, this.makeRows(this.state.unLinkedAccounts, false))))));
|
||||
}
|
||||
|
||||
emptyRow(isLinked) {
|
||||
let isEmptyMessage = '';
|
||||
|
||||
if (isLinked) {
|
||||
isEmptyMessage = Msg.localize('linkedEmpty');
|
||||
} else {
|
||||
isEmptyMessage = Msg.localize('unlinkedEmpty');
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(DataListItem, {
|
||||
key: "emptyItem",
|
||||
"aria-labelledby": Msg.localize('isEmptyMessage')
|
||||
@@ -131,12 +123,10 @@ class LinkedAccountsPage extends React.Component {
|
||||
}, isEmptyMessage)]
|
||||
})));
|
||||
}
|
||||
|
||||
makeRows(accounts, isLinked) {
|
||||
if (accounts.length === 0) {
|
||||
return this.emptyRow(isLinked);
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, " ", accounts.map(account => /*#__PURE__*/React.createElement(DataListItem, {
|
||||
id: `${account.providerAlias}-idp`,
|
||||
key: account.providerName,
|
||||
@@ -191,7 +181,6 @@ class LinkedAccountsPage extends React.Component {
|
||||
msgKey: "link"
|
||||
})))))), " ");
|
||||
}
|
||||
|
||||
label(account) {
|
||||
if (account.social) {
|
||||
return /*#__PURE__*/React.createElement(Label, {
|
||||
@@ -200,49 +189,82 @@ class LinkedAccountsPage extends React.Component {
|
||||
msgKey: "socialLogin"
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(Label, {
|
||||
color: "green"
|
||||
}, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "systemDefined"
|
||||
}));
|
||||
}
|
||||
|
||||
findIcon(account) {
|
||||
const socialIconId = `${account.providerAlias}-idp-icon-social`;
|
||||
console.log(account);
|
||||
|
||||
switch (true) {
|
||||
case account.providerName.toLowerCase().includes('linkedin'):
|
||||
return /*#__PURE__*/React.createElement(LinkedinIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('facebook'):
|
||||
return /*#__PURE__*/React.createElement(FacebookIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('google'):
|
||||
return /*#__PURE__*/React.createElement(GoogleIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('instagram'):
|
||||
return /*#__PURE__*/React.createElement(InstagramIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('microsoft'):
|
||||
return /*#__PURE__*/React.createElement(MicrosoftIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('bitbucket'):
|
||||
return /*#__PURE__*/React.createElement(BitbucketIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
|
||||
case account.providerName.toLowerCase().includes('openshift'):
|
||||
return /*#__PURE__*/React.createElement("div", {
|
||||
className: "idp-icon-social",
|
||||
id: "openshift-idp-icon-social"
|
||||
case account.providerName.toLowerCase().includes('twitter'):
|
||||
return /*#__PURE__*/React.createElement(TwitterIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('openshift'):
|
||||
// return <div className="idp-icon-social" id="openshift-idp-icon-social" />;
|
||||
return /*#__PURE__*/React.createElement(OpenshiftIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
|
||||
case account.providerName.toLowerCase().includes('gitlab'):
|
||||
return /*#__PURE__*/React.createElement(GitlabIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
|
||||
case account.providerName.toLowerCase().includes('github'):
|
||||
return /*#__PURE__*/React.createElement(GithubIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName.toLowerCase().includes('paypal'):
|
||||
return /*#__PURE__*/React.createElement(PaypalIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
|
||||
case account.providerName.toLowerCase().includes('stackoverflow'):
|
||||
return /*#__PURE__*/React.createElement(StackOverflowIcon, {
|
||||
id: socialIconId,
|
||||
size: "lg"
|
||||
});
|
||||
case account.providerName !== '' && account.social:
|
||||
return /*#__PURE__*/React.createElement("div", {
|
||||
className: "idp-icon-social",
|
||||
id: socialIconId
|
||||
});
|
||||
|
||||
default:
|
||||
return /*#__PURE__*/React.createElement(CubeIcon, {
|
||||
id: `${account.providerAlias}-idp-icon-default`,
|
||||
@@ -250,11 +272,8 @@ class LinkedAccountsPage extends React.Component {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(LinkedAccountsPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
const LinkedAccountsPagewithRouter = withRouter(LinkedAccountsPage);
|
||||
export { LinkedAccountsPagewithRouter as LinkedAccountsPage };
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-6
@@ -1,22 +1,19 @@
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
export class AbstractResourcesTable extends React.Component {
|
||||
hasPermissions(row) {
|
||||
return this.state.permissions.has(row) && this.state.permissions.get(row).length > 0;
|
||||
}
|
||||
|
||||
firstUser(row) {
|
||||
if (!this.hasPermissions(row)) return 'ERROR!!!!'; // should never happen
|
||||
|
||||
return this.state.permissions.get(row)[0].username;
|
||||
}
|
||||
|
||||
numOthers(row) {
|
||||
if (!this.hasPermissions(row)) return -1; // should never happen
|
||||
|
||||
return this.state.permissions.get(row).length - 1;
|
||||
}
|
||||
|
||||
sharedWithUsersMessage(row) {
|
||||
if (!this.hasPermissions(row)) return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "resourceNotShared"
|
||||
@@ -27,7 +24,6 @@ export class AbstractResourcesTable extends React.Component {
|
||||
msgKey: "and"
|
||||
}, /*#__PURE__*/React.createElement("strong", null, this.numOthers(row))), ".");
|
||||
}
|
||||
|
||||
getClientName(client) {
|
||||
if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') {
|
||||
return Msg.localize(client.name);
|
||||
@@ -35,6 +31,5 @@ export class AbstractResourcesTable extends React.Component {
|
||||
return client.clientId;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=AbstractResourceTable.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/app/content/my-resources-page/AbstractResourceTable.tsx"],"names":["React","Msg","AbstractResourcesTable","Component","hasPermissions","row","state","permissions","has","get","length","firstUser","username","numOthers","sharedWithUsersMessage","getClientName","client","hasOwnProperty","name","localize","clientId"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAEA,SAASC,GAAT;AAUA,OAAO,MAAeC,sBAAf,SAA6EF,KAAK,CAACG,SAAnF,CAAqH;AAEhHC,EAAAA,cAAc,CAACC,GAAD,EAAuB;AAC7C,WAAQ,KAAKC,KAAL,CAAWC,WAAX,CAAuBC,GAAvB,CAA2BH,GAA3B,CAAD,IAAsC,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiCK,MAAjC,GAA0C,CAAvF;AACD;;AAEOC,EAAAA,SAAS,CAACN,GAAD,EAAsB;AACrC,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,OAAO,WAAP,CADM,CACc;;AAEnD,WAAO,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiC,CAAjC,EAAoCO,QAA3C;AACD;;AAESC,EAAAA,SAAS,CAACR,GAAD,EAAsB;AACvC,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,OAAO,CAAC,CAAR,CADQ,CACG;;AAE1C,WAAO,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiCK,MAAjC,GAA0C,CAAjD;AACD;;AAEMI,EAAAA,sBAAsB,CAACT,GAAD,EAA+B;AAC1D,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,oBAAQ,oBAAC,KAAD,CAAO,QAAP,qBAAgB,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MAAhB,CAAR;AAE/B,wBACE,oBAAC,KAAD,CAAO,QAAP,qBACE,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,oBACE,oCAAS,KAAKM,SAAL,CAAeN,GAAf,CAAT,CADF,CADF,EAIG,KAAKQ,SAAL,CAAeR,GAAf,IAAsB,CAAtB,iBAA2B,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,oBAC1B,oCAAS,KAAKQ,SAAL,CAAeR,GAAf,CAAT,CAD0B,CAJ9B,MADF;AAUD;;AAESU,EAAAA,aAAa,CAACC,MAAD,EAAyB;AAC9C,QAAIA,MAAM,CAACC,cAAP,CAAsB,MAAtB,KAAiCD,MAAM,CAACE,IAAP,KAAgB,IAAjD,IAAyDF,MAAM,CAACE,IAAP,KAAgB,EAA7E,EAAiF;AAC/E,aAAOjB,GAAG,CAACkB,QAAJ,CAAaH,MAAM,CAACE,IAApB,CAAP;AACD,KAFD,MAEO;AACL,aAAOF,MAAM,CAACI,QAAd;AACD;AACF;;AAvCyH","sourcesContent":["import * as React from 'react';\nimport { Permission, PaginatedResources, Client } from './resource-model';\nimport { Msg } from '../../widgets/Msg';\n\nexport interface ResourcesTableProps {\n resources: PaginatedResources;\n}\n\nexport interface ResourcesTableState {\n permissions: Map<number, Permission[]>;\n}\n\nexport abstract class AbstractResourcesTable<S extends ResourcesTableState> extends React.Component<ResourcesTableProps, S> {\n\n protected hasPermissions(row: number): boolean {\n return (this.state.permissions.has(row)) && (this.state.permissions.get(row)!.length > 0);\n }\n\n private firstUser(row: number): string {\n if (!this.hasPermissions(row)) return 'ERROR!!!!'; // should never happen\n\n return this.state.permissions.get(row)![0].username;\n }\n\n protected numOthers(row: number): number {\n if (!this.hasPermissions(row)) return -1; // should never happen\n\n return this.state.permissions.get(row)!.length - 1;\n }\n\n public sharedWithUsersMessage(row: number): React.ReactNode {\n if (!this.hasPermissions(row)) return (<React.Fragment><Msg msgKey='resourceNotShared' /></React.Fragment>);\n\n return (\n <React.Fragment>\n <Msg msgKey='resourceSharedWith'>\n <strong>{this.firstUser(row)}</strong>\n </Msg>\n {this.numOthers(row) > 0 && <Msg msgKey='and'>\n <strong>{this.numOthers(row)}</strong>\n </Msg>}.\n </React.Fragment>\n );\n }\n\n protected getClientName(client: Client): string {\n if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') {\n return Msg.localize(client.name!);\n } else {\n return client.clientId;\n }\n }\n}\n"],"file":"AbstractResourceTable.js"}
|
||||
{"version":3,"file":"AbstractResourceTable.js","names":["React","Msg","AbstractResourcesTable","Component","hasPermissions","row","state","permissions","has","get","length","firstUser","username","numOthers","sharedWithUsersMessage","createElement","Fragment","msgKey","getClientName","client","hasOwnProperty","name","localize","clientId"],"sources":["../../../src/app/content/my-resources-page/AbstractResourceTable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Permission, PaginatedResources, Client } from './resource-model';\nimport { Msg } from '../../widgets/Msg';\n\nexport interface ResourcesTableProps {\n resources: PaginatedResources;\n}\n\nexport interface ResourcesTableState {\n permissions: Map<number, Permission[]>;\n}\n\nexport abstract class AbstractResourcesTable<S extends ResourcesTableState> extends React.Component<ResourcesTableProps, S> {\n\n protected hasPermissions(row: number): boolean {\n return (this.state.permissions.has(row)) && (this.state.permissions.get(row)!.length > 0);\n }\n\n private firstUser(row: number): string {\n if (!this.hasPermissions(row)) return 'ERROR!!!!'; // should never happen\n\n return this.state.permissions.get(row)![0].username;\n }\n\n protected numOthers(row: number): number {\n if (!this.hasPermissions(row)) return -1; // should never happen\n\n return this.state.permissions.get(row)!.length - 1;\n }\n\n public sharedWithUsersMessage(row: number): React.ReactNode {\n if (!this.hasPermissions(row)) return (<React.Fragment><Msg msgKey='resourceNotShared' /></React.Fragment>);\n\n return (\n <React.Fragment>\n <Msg msgKey='resourceSharedWith'>\n <strong>{this.firstUser(row)}</strong>\n </Msg>\n {this.numOthers(row) > 0 && <Msg msgKey='and'>\n <strong>{this.numOthers(row)}</strong>\n </Msg>}.\n </React.Fragment>\n );\n }\n\n protected getClientName(client: Client): string {\n if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') {\n return Msg.localize(client.name!);\n } else {\n return client.clientId;\n }\n }\n}\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK;AAEjB,SAASC,GAAG;AAUZ,OAAO,MAAeC,sBAAsB,SAAwCF,KAAK,CAACG,SAAS,CAAyB;EAEhHC,cAAcA,CAACC,GAAW,EAAW;IAC7C,OAAQ,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAACH,GAAG,CAAC,IAAM,IAAI,CAACC,KAAK,CAACC,WAAW,CAACE,GAAG,CAACJ,GAAG,CAAC,CAAEK,MAAM,GAAG,CAAE;EAC3F;EAEQC,SAASA,CAACN,GAAW,EAAU;IACrC,IAAI,CAAC,IAAI,CAACD,cAAc,CAACC,GAAG,CAAC,EAAE,OAAO,WAAW,CAAC,CAAC;;IAEnD,OAAO,IAAI,CAACC,KAAK,CAACC,WAAW,CAACE,GAAG,CAACJ,GAAG,CAAC,CAAE,CAAC,CAAC,CAACO,QAAQ;EACrD;EAEUC,SAASA,CAACR,GAAW,EAAU;IACvC,IAAI,CAAC,IAAI,CAACD,cAAc,CAACC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;;IAE1C,OAAO,IAAI,CAACC,KAAK,CAACC,WAAW,CAACE,GAAG,CAACJ,GAAG,CAAC,CAAEK,MAAM,GAAG,CAAC;EACpD;EAEOI,sBAAsBA,CAACT,GAAW,EAAmB;IAC1D,IAAI,CAAC,IAAI,CAACD,cAAc,CAACC,GAAG,CAAC,EAAE,oBAAQL,KAAA,CAAAe,aAAA,CAACf,KAAK,CAACgB,QAAQ,qBAAChB,KAAA,CAAAe,aAAA,CAACd,GAAG;MAACgB,MAAM,EAAC;IAAmB,CAAE,CAAiB,CAAC;IAE1G,oBACEjB,KAAA,CAAAe,aAAA,CAACf,KAAK,CAACgB,QAAQ,qBACbhB,KAAA,CAAAe,aAAA,CAACd,GAAG;MAACgB,MAAM,EAAC;IAAoB,gBAC9BjB,KAAA,CAAAe,aAAA,iBAAS,IAAI,CAACJ,SAAS,CAACN,GAAG,CAAU,CAClC,CAAC,EACL,IAAI,CAACQ,SAAS,CAACR,GAAG,CAAC,GAAG,CAAC,iBAAIL,KAAA,CAAAe,aAAA,CAACd,GAAG;MAACgB,MAAM,EAAC;IAAK,gBAC3CjB,KAAA,CAAAe,aAAA,iBAAS,IAAI,CAACF,SAAS,CAACR,GAAG,CAAU,CAClC,CAAC,EAAC,GACO,CAAC;EAErB;EAEUa,aAAaA,CAACC,MAAc,EAAU;IAC9C,IAAIA,MAAM,CAACC,cAAc,CAAC,MAAM,CAAC,IAAID,MAAM,CAACE,IAAI,KAAK,IAAI,IAAIF,MAAM,CAACE,IAAI,KAAK,EAAE,EAAE;MAC/E,OAAOpB,GAAG,CAACqB,QAAQ,CAACH,MAAM,CAACE,IAAK,CAAC;IACnC,CAAC,MAAM;MACL,OAAOF,MAAM,CAACI,QAAQ;IACxB;EACF;AACF"}
|
||||
+8
-16
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,9 +16,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { Button, Modal, Form, FormGroup, TextInput, InputGroup, ModalVariant } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { OkIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Button, Modal, Form, FormGroup, TextInput, InputGroup, ModalVariant } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { OkIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { Scope } from "./resource-model.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
@@ -26,9 +28,7 @@ import { PermissionSelect } from "./PermissionSelect.js";
|
||||
export class EditTheResource extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "handleToggleDialog", () => {
|
||||
if (this.state.isOpen) {
|
||||
this.setState({
|
||||
@@ -42,7 +42,6 @@ export class EditTheResource extends React.Component {
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "updateChanged", row => {
|
||||
const changed = this.state.changed;
|
||||
changed[row] = !changed[row];
|
||||
@@ -50,23 +49,19 @@ export class EditTheResource extends React.Component {
|
||||
changed
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
changed: [],
|
||||
isOpen: false
|
||||
};
|
||||
}
|
||||
|
||||
clearState() {
|
||||
this.setState({});
|
||||
}
|
||||
|
||||
async savePermission(permission) {
|
||||
await this.context.doPut(`/resources/${this.props.resource._id}/permissions`, [permission]);
|
||||
await this.context.doPut(`/resources/${encodeURIComponent(this.props.resource._id)}/permissions`, [permission]);
|
||||
ContentAlert.success(Msg.localize('updateSuccess'));
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, this.props.children(this.handleToggleDialog), /*#__PURE__*/React.createElement(Modal, {
|
||||
title: 'Edit the resource - ' + this.props.resource.name,
|
||||
@@ -109,12 +104,9 @@ export class EditTheResource extends React.Component {
|
||||
onClick: () => this.savePermission(p)
|
||||
}, /*#__PURE__*/React.createElement(OkIcon, null)))), /*#__PURE__*/React.createElement("hr", null))))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(EditTheResource, "defaultProps", {
|
||||
permissions: []
|
||||
});
|
||||
|
||||
_defineProperty(EditTheResource, "contextType", AccountServiceContext);
|
||||
//# sourceMappingURL=EditTheResource.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+12
-38
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,9 +16,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import parse from "../../util/ParseLink.js";
|
||||
import { Button, Level, LevelItem, PageSection, PageSectionVariants, Stack, StackItem, Tab, Tabs, TextInput } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { Button, Level, LevelItem, PageSection, PageSectionVariants, Stack, StackItem, Tab, Tabs, TextInput } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Scope } from "./resource-model.js";
|
||||
import { ResourcesTable } from "./ResourcesTable.js";
|
||||
@@ -29,23 +31,17 @@ const SHARED_WITH_ME_TAB = 1;
|
||||
export class MyResourcesPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "first", 0);
|
||||
|
||||
_defineProperty(this, "max", 5);
|
||||
|
||||
_defineProperty(this, "makeScopeObj", scope => {
|
||||
return new Scope(scope.name, scope.displayName);
|
||||
});
|
||||
|
||||
_defineProperty(this, "fetchPermissionRequests", () => {
|
||||
this.state.myResources.data.forEach(resource => {
|
||||
this.fetchShareRequests(resource);
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "fetchPending", async () => {
|
||||
const response = await this.context.doGet(`/resources/pending-requests`);
|
||||
const resources = response.data || [];
|
||||
@@ -61,7 +57,6 @@ export class MyResourcesPage extends React.Component {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleFilterRequest", value => {
|
||||
this.setState({
|
||||
nameFilter: value
|
||||
@@ -70,11 +65,9 @@ export class MyResourcesPage extends React.Component {
|
||||
name: value
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleFirstPageClick", () => {
|
||||
this.fetchInitialResources();
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleNextClick", () => {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
this.fetchResources(this.state.sharedWithMe.nextUrl);
|
||||
@@ -82,7 +75,6 @@ export class MyResourcesPage extends React.Component {
|
||||
this.fetchResources(this.state.myResources.nextUrl);
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handlePreviousClick", () => {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
this.fetchResources(this.state.sharedWithMe.prevUrl);
|
||||
@@ -90,8 +82,7 @@ export class MyResourcesPage extends React.Component {
|
||||
this.fetchResources(this.state.myResources.prevUrl);
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleTabClick", (event, tabIndex) => {
|
||||
_defineProperty(this, "handleTabClick", tabIndex => {
|
||||
if (this.state.activeTabKey === tabIndex) return;
|
||||
this.setState({
|
||||
nameFilter: '',
|
||||
@@ -100,7 +91,6 @@ export class MyResourcesPage extends React.Component {
|
||||
this.fetchInitialResources();
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
activeTabKey: MY_RESOURCES_TAB,
|
||||
@@ -119,11 +109,9 @@ export class MyResourcesPage extends React.Component {
|
||||
};
|
||||
this.fetchInitialResources();
|
||||
}
|
||||
|
||||
isSharedWithMeTab() {
|
||||
return this.state.activeTabKey === SHARED_WITH_ME_TAB;
|
||||
}
|
||||
|
||||
hasNext() {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
return this.state.sharedWithMe.nextUrl !== null && this.state.sharedWithMe.nextUrl !== '';
|
||||
@@ -131,7 +119,6 @@ export class MyResourcesPage extends React.Component {
|
||||
return this.state.myResources.nextUrl !== null && this.state.myResources.nextUrl !== '';
|
||||
}
|
||||
}
|
||||
|
||||
hasPrevious() {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
return this.state.sharedWithMe.prevUrl !== null && this.state.sharedWithMe.prevUrl !== '';
|
||||
@@ -139,7 +126,6 @@ export class MyResourcesPage extends React.Component {
|
||||
return this.state.myResources.prevUrl !== null && this.state.myResources.prevUrl !== '';
|
||||
}
|
||||
}
|
||||
|
||||
fetchInitialResources() {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
this.fetchResources("/resources/shared-with-me");
|
||||
@@ -150,27 +136,26 @@ export class MyResourcesPage extends React.Component {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fetchFilteredResources(params) {
|
||||
if (this.isSharedWithMeTab()) {
|
||||
this.fetchResources("/resources/shared-with-me", params);
|
||||
} else {
|
||||
this.fetchResources("/resources", { ...params,
|
||||
this.fetchResources("/resources", {
|
||||
...params,
|
||||
first: this.first,
|
||||
max: this.max
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fetchResources(url, extraParams) {
|
||||
this.context.doGet(url, {
|
||||
params: extraParams
|
||||
}).then(response => {
|
||||
const resources = response.data || [];
|
||||
resources.forEach(resource => resource.shareRequests = []); // serialize the Scope objects from JSON so that toString() will work.
|
||||
resources.forEach(resource => resource.shareRequests = []);
|
||||
|
||||
// serialize the Scope objects from JSON so that toString() will work.
|
||||
resources.forEach(resource => resource.scopes = resource.scopes.map(this.makeScopeObj));
|
||||
|
||||
if (this.isSharedWithMeTab()) {
|
||||
this.setState({
|
||||
sharedWithMe: this.parseResourceResponse(response)
|
||||
@@ -182,28 +167,23 @@ export class MyResourcesPage extends React.Component {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fetchShareRequests(resource) {
|
||||
this.context.doGet('/resources/' + resource._id + '/permissions/requests').then(response => {
|
||||
resource.shareRequests = response.data || [];
|
||||
|
||||
if (resource.shareRequests.length > 0) {
|
||||
this.forceUpdate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
parseResourceResponse(response) {
|
||||
const links = response.headers.get('link') || undefined;
|
||||
const parsed = parse(links);
|
||||
let next = '';
|
||||
let prev = '';
|
||||
|
||||
if (parsed !== null) {
|
||||
if (parsed.next) next = parsed.next;
|
||||
if (parsed.prev) prev = parsed.prev;
|
||||
}
|
||||
|
||||
const resources = response.data || [];
|
||||
return {
|
||||
nextUrl: next,
|
||||
@@ -211,7 +191,6 @@ export class MyResourcesPage extends React.Component {
|
||||
data: resources
|
||||
};
|
||||
}
|
||||
|
||||
makeTab(eventKey, title, resources, sharedResourcesTab) {
|
||||
return /*#__PURE__*/React.createElement(Tab, {
|
||||
id: title,
|
||||
@@ -240,7 +219,6 @@ export class MyResourcesPage extends React.Component {
|
||||
resources: resources
|
||||
}))));
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: "resources",
|
||||
@@ -249,7 +227,7 @@ export class MyResourcesPage extends React.Component {
|
||||
variant: PageSectionVariants.light
|
||||
}, /*#__PURE__*/React.createElement(Tabs, {
|
||||
activeKey: this.state.activeTabKey,
|
||||
onSelect: this.handleTabClick
|
||||
onSelect: (event, index) => this.handleTabClick(index)
|
||||
}, this.makeTab(0, 'myResources', this.state.myResources, false), this.makeTab(1, 'sharedwithMe', this.state.sharedWithMe, true)), /*#__PURE__*/React.createElement(Level, {
|
||||
hasGutter: true
|
||||
}, /*#__PURE__*/React.createElement(LevelItem, null, this.hasPrevious() && /*#__PURE__*/React.createElement(Button, {
|
||||
@@ -266,7 +244,6 @@ export class MyResourcesPage extends React.Component {
|
||||
msgKey: "nextPage"
|
||||
}), ">")))));
|
||||
}
|
||||
|
||||
clearNextPrev() {
|
||||
const newMyResources = this.state.myResources;
|
||||
newMyResources.nextUrl = '';
|
||||
@@ -275,10 +252,7 @@ export class MyResourcesPage extends React.Component {
|
||||
myResources: newMyResources
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(MyResourcesPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
//# sourceMappingURL=MyResourcesPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+8
-19
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,42 +16,36 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { Button, Modal, Text, Badge, DataListItem, DataList, TextVariants, DataListItemRow, DataListItemCells, DataListCell, Chip, Split, SplitItem, ModalVariant } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { UserCheckIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Button, Modal, Text, Badge, DataListItem, DataList, TextVariants, DataListItemRow, DataListItemCells, DataListCell, Chip, Split, SplitItem, ModalVariant } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { UserCheckIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { ContentAlert } from "../ContentAlert.js";
|
||||
export class PermissionRequest extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "handleApprove", async (shareRequest, index) => {
|
||||
this.handle(shareRequest.username, shareRequest.scopes, true);
|
||||
this.props.resource.shareRequests.splice(index, 1);
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleDeny", async (shareRequest, index) => {
|
||||
this.handle(shareRequest.username, shareRequest.scopes);
|
||||
this.props.resource.shareRequests.splice(index, 1);
|
||||
});
|
||||
|
||||
_defineProperty(this, "handle", async (username, scopes, approve = false) => {
|
||||
const id = this.props.resource._id;
|
||||
this.handleToggleDialog();
|
||||
const permissionsRequest = await this.context.doGet(`/resources/${id}/permissions`);
|
||||
const permissionsRequest = await this.context.doGet(`/resources/${encodeURIComponent(id)}/permissions`);
|
||||
const permissions = permissionsRequest.data || [];
|
||||
const foundPermission = permissions.find(p => p.username === username);
|
||||
const userScopes = foundPermission ? foundPermission.scopes : [];
|
||||
|
||||
if (approve) {
|
||||
userScopes.push(...scopes);
|
||||
}
|
||||
|
||||
try {
|
||||
await this.context.doPut(`/resources/${id}/permissions`, [{
|
||||
await this.context.doPut(`/resources/${encodeURIComponent(id)}/permissions`, [{
|
||||
username: username,
|
||||
scopes: userScopes
|
||||
}]);
|
||||
@@ -60,19 +55,16 @@ export class PermissionRequest extends React.Component {
|
||||
console.error('Could not update permissions', e.error);
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleToggleDialog", () => {
|
||||
this.setState({
|
||||
isOpen: !this.state.isOpen
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
isOpen: false
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
const id = `shareRequest-${this.props.resource.name.replace(/\s/, '-')}`;
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
|
||||
@@ -139,13 +131,10 @@ export class PermissionRequest extends React.Component {
|
||||
}, "Deny"))))]
|
||||
})))))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(PermissionRequest, "defaultProps", {
|
||||
permissions: [],
|
||||
row: 0
|
||||
});
|
||||
|
||||
_defineProperty(PermissionRequest, "contextType", AccountServiceContext);
|
||||
//# sourceMappingURL=PermissionRequest.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+15
-24
@@ -1,55 +1,49 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { Select, SelectOption, SelectVariant } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Select, SelectOption, SelectVariant } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
|
||||
class ScopeValue {
|
||||
constructor(value) {
|
||||
_defineProperty(this, "value", void 0);
|
||||
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.value.displayName ? this.value.displayName : this.value.name;
|
||||
}
|
||||
|
||||
compareTo(selectOption) {
|
||||
return selectOption.name === this.value.name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class PermissionSelect extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "onSelect", (_event, selection) => {
|
||||
_defineProperty(this, "onSelect", (event, value) => {
|
||||
const {
|
||||
selected
|
||||
} = this.state;
|
||||
const {
|
||||
onSelect
|
||||
} = this.props;
|
||||
|
||||
if (selected.includes(selection)) {
|
||||
if (!(value instanceof ScopeValue)) {
|
||||
return;
|
||||
}
|
||||
if (selected.includes(value)) {
|
||||
this.setState(prevState => ({
|
||||
selected: prevState.selected.filter(item => item !== selection)
|
||||
selected: prevState.selected.filter(item => item !== value)
|
||||
}), () => onSelect(this.state.selected.map(sv => sv.value)));
|
||||
} else {
|
||||
this.setState(prevState => ({
|
||||
selected: [...prevState.selected, selection]
|
||||
selected: [...prevState.selected, value]
|
||||
}), () => onSelect(this.state.selected.map(sv => sv.value)));
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "onToggle", isExpanded => {
|
||||
this.setState({
|
||||
isExpanded
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "clearSelection", () => {
|
||||
this.setState({
|
||||
selected: [],
|
||||
@@ -57,13 +51,10 @@ export class PermissionSelect extends React.Component {
|
||||
});
|
||||
this.props.onSelect([]);
|
||||
});
|
||||
|
||||
let values = [];
|
||||
|
||||
if (this.props.selected) {
|
||||
values = this.props.selected.map(s => new ScopeValue(s));
|
||||
}
|
||||
|
||||
this.state = {
|
||||
isExpanded: false,
|
||||
selected: values,
|
||||
@@ -73,7 +64,6 @@ export class PermissionSelect extends React.Component {
|
||||
}))
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
isExpanded,
|
||||
@@ -86,6 +76,7 @@ export class PermissionSelect extends React.Component {
|
||||
}, /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "selectPermissions"
|
||||
})), /*#__PURE__*/React.createElement(Select, {
|
||||
maxHeight: 300,
|
||||
direction: this.props.direction || 'down',
|
||||
variant: SelectVariant.typeaheadMulti,
|
||||
typeAheadAriaLabel: Msg.localize("selectPermissions"),
|
||||
@@ -95,9 +86,9 @@ export class PermissionSelect extends React.Component {
|
||||
selections: selected,
|
||||
isOpen: isExpanded,
|
||||
"aria-labelledby": titleId,
|
||||
placeholderText: Msg.localize("selectPermissions")
|
||||
placeholderText: Msg.localize("selectPermissions"),
|
||||
menuAppendTo: "parent"
|
||||
}, this.state.scopes));
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=PermissionSelect.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+9
-19
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,9 +16,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, Level, LevelItem, Button, DataListAction, Dropdown, DropdownPosition, DropdownItem, KebabToggle } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { Remove2Icon, RepositoryIcon, ShareAltIcon, EditAltIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, Level, LevelItem, Button, DataListAction, Dropdown, DropdownPosition, DropdownItem, KebabToggle } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { Remove2Icon, RepositoryIcon, ShareAltIcon, EditAltIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { PermissionRequest } from "./PermissionRequest.js";
|
||||
import { ShareTheResource } from "./ShareTheResource.js";
|
||||
@@ -30,9 +32,7 @@ import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js";
|
||||
export class ResourcesTable extends AbstractResourcesTable {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "onToggle", row => {
|
||||
const newIsRowOpen = this.state.isRowOpen;
|
||||
newIsRowOpen[row] = !newIsRowOpen[row];
|
||||
@@ -41,23 +41,19 @@ export class ResourcesTable extends AbstractResourcesTable {
|
||||
isRowOpen: newIsRowOpen
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "onContextToggle", (row, isOpen) => {
|
||||
if (this.state.isModalActive) return;
|
||||
const data = this.props.resources.data;
|
||||
const contextOpen = this.state.contextOpen;
|
||||
contextOpen[row] = isOpen;
|
||||
|
||||
if (isOpen) {
|
||||
const index = row > data.length ? row - data.length - 1 : row;
|
||||
this.fetchPermissions(data[index], index);
|
||||
}
|
||||
|
||||
this.setState({
|
||||
contextOpen
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
isRowOpen: [],
|
||||
@@ -66,9 +62,8 @@ export class ResourcesTable extends AbstractResourcesTable {
|
||||
permissions: new Map()
|
||||
};
|
||||
}
|
||||
|
||||
fetchPermissions(resource, row) {
|
||||
this.context.doGet(`/resources/${resource._id}/permissions`).then(response => {
|
||||
this.context.doGet(`/resources/${encodeURIComponent(resource._id)}/permissions`).then(response => {
|
||||
const newPermissions = new Map(this.state.permissions);
|
||||
newPermissions.set(row, response.data || []);
|
||||
this.setState({
|
||||
@@ -76,17 +71,15 @@ export class ResourcesTable extends AbstractResourcesTable {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
removeShare(resource, row) {
|
||||
const permissions = this.state.permissions.get(row).map(a => ({
|
||||
username: a.username,
|
||||
scopes: []
|
||||
}));
|
||||
return this.context.doPut(`/resources/${resource._id}/permissions`, permissions).then(() => {
|
||||
return this.context.doPut(`/resources/${encodeURIComponent(resource._id)}/permissions`, permissions).then(() => {
|
||||
ContentAlert.success(Msg.localize('unShareSuccess'));
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.props.resources.data.length === 0) {
|
||||
return /*#__PURE__*/React.createElement(EmptyMessageState, {
|
||||
@@ -94,7 +87,6 @@ export class ResourcesTable extends AbstractResourcesTable {
|
||||
messageKey: "notHaveAnyResource"
|
||||
});
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(DataList, {
|
||||
"aria-label": Msg.localize('resources'),
|
||||
id: "resourcesList"
|
||||
@@ -306,8 +298,6 @@ export class ResourcesTable extends AbstractResourcesTable {
|
||||
id: 'shared-with-user-message-' + row
|
||||
}, this.sharedWithUsersMessage(row)), /*#__PURE__*/React.createElement(LevelItem, null, /*#__PURE__*/React.createElement("span", null)))))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(ResourcesTable, "contextType", AccountServiceContext);
|
||||
//# sourceMappingURL=ResourcesTable.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+8
-29
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,46 +16,39 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { Button, Chip, ChipGroup, Form, FormGroup, Gallery, GalleryItem, Modal, Stack, StackItem, TextInput, ModalVariant } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { Button, Chip, ChipGroup, Form, FormGroup, Gallery, GalleryItem, Modal, Stack, StackItem, TextInput, ModalVariant } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { ContentAlert } from "../ContentAlert.js";
|
||||
import { PermissionSelect } from "./PermissionSelect.js";
|
||||
|
||||
/**
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.
|
||||
*/
|
||||
export class ShareTheResource extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "handleAddPermission", () => {
|
||||
const rscId = this.props.resource._id;
|
||||
const newPermissions = [];
|
||||
|
||||
for (const permission of this.state.permissionsSelected) {
|
||||
newPermissions.push(permission.name);
|
||||
}
|
||||
|
||||
const permissions = [];
|
||||
|
||||
for (const username of this.state.usernames) {
|
||||
permissions.push({
|
||||
username: username,
|
||||
scopes: newPermissions
|
||||
});
|
||||
}
|
||||
|
||||
this.handleToggleDialog();
|
||||
this.context.doPut(`/resources/${rscId}/permissions`, permissions).then(() => {
|
||||
this.context.doPut(`/resources/${encodeURIComponent(rscId)}/permissions`, permissions).then(() => {
|
||||
ContentAlert.success('shareSuccess');
|
||||
this.props.onClose();
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleToggleDialog", () => {
|
||||
if (this.state.isOpen) {
|
||||
this.setState({
|
||||
@@ -68,21 +62,18 @@ export class ShareTheResource extends React.Component {
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleUsernameChange", username => {
|
||||
this.setState({
|
||||
usernameInput: username
|
||||
});
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleAddUsername", async () => {
|
||||
if (this.state.usernameInput !== '' && !this.state.usernames.includes(this.state.usernameInput)) {
|
||||
const response = await this.context.doGet(`/resources/${this.props.resource._id}/user`, {
|
||||
const response = await this.context.doGet(`/resources/${encodeURIComponent(this.props.resource._id)}/user`, {
|
||||
params: {
|
||||
value: this.state.usernameInput
|
||||
}
|
||||
});
|
||||
|
||||
if (response.data && response.data.username) {
|
||||
this.setState({
|
||||
usernameInput: '',
|
||||
@@ -93,21 +84,18 @@ export class ShareTheResource extends React.Component {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleEnterKeyInAddField", event => {
|
||||
if (event.key === "Enter") {
|
||||
event.preventDefault();
|
||||
this.handleAddUsername();
|
||||
}
|
||||
});
|
||||
|
||||
_defineProperty(this, "handleDeleteUsername", username => {
|
||||
const newUsernames = this.state.usernames.filter(user => user !== username);
|
||||
this.setState({
|
||||
usernames: newUsernames
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
isOpen: false,
|
||||
@@ -117,7 +105,6 @@ export class ShareTheResource extends React.Component {
|
||||
usernameInput: ''
|
||||
};
|
||||
}
|
||||
|
||||
clearState() {
|
||||
this.setState({
|
||||
permissionsSelected: [],
|
||||
@@ -126,23 +113,18 @@ export class ShareTheResource extends React.Component {
|
||||
usernameInput: ''
|
||||
});
|
||||
}
|
||||
|
||||
isAddDisabled() {
|
||||
return this.state.usernameInput === '' || this.isAlreadyShared();
|
||||
}
|
||||
|
||||
isAlreadyShared() {
|
||||
for (let permission of this.props.permissions) {
|
||||
if (permission.username === this.state.usernameInput) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
isFormInvalid() {
|
||||
return this.state.usernames.length === 0 || this.state.permissionsSelected.length === 0;
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null, this.props.children(this.handleToggleDialog), /*#__PURE__*/React.createElement(Modal, {
|
||||
title: 'Share the resource - ' + this.props.resource.name,
|
||||
@@ -211,12 +193,9 @@ export class ShareTheResource extends React.Component {
|
||||
isFilled: true
|
||||
}, this.props.sharedWithUsersMsg))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(ShareTheResource, "defaultProps", {
|
||||
permissions: []
|
||||
});
|
||||
|
||||
_defineProperty(ShareTheResource, "contextType", AccountServiceContext);
|
||||
//# sourceMappingURL=ShareTheResource.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+4
-6
@@ -13,9 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListItemCells, ChipGroup, Chip } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
import { RepositoryIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { DataList, DataListItem, DataListItemRow, DataListCell, DataListItemCells, ChipGroup, Chip } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { RepositoryIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import { AbstractResourcesTable } from "./AbstractResourceTable.js";
|
||||
import EmptyMessageState from "../../widgets/EmptyMessageState.js";
|
||||
@@ -26,7 +27,6 @@ export class SharedResourcesTable extends AbstractResourcesTable {
|
||||
permissions: new Map()
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.props.resources.data.length === 0) {
|
||||
return /*#__PURE__*/React.createElement(EmptyMessageState, {
|
||||
@@ -34,7 +34,6 @@ export class SharedResourcesTable extends AbstractResourcesTable {
|
||||
messageKey: "noResourcesSharedWithYou"
|
||||
});
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(DataList, {
|
||||
"aria-label": Msg.localize('resources'),
|
||||
id: "sharedResourcesList"
|
||||
@@ -92,6 +91,5 @@ export class SharedResourcesTable extends AbstractResourcesTable {
|
||||
}, scope.displayName || scope.name))))]
|
||||
})))));
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=SharedResourcesTable.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
-2
@@ -3,7 +3,6 @@ export class Scope {
|
||||
this.name = name;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
toString() {
|
||||
if (this.hasOwnProperty('displayName') && this.displayName) {
|
||||
return this.displayName;
|
||||
@@ -11,6 +10,5 @@ export class Scope {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=resource-model.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/app/content/my-resources-page/resource-model.ts"],"names":["Scope","constructor","name","displayName","toString","hasOwnProperty"],"mappings":"AAeA,OAAO,MAAMA,KAAN,CAAY;AACVC,EAAAA,WAAW,CAAQC,IAAR,EAA6BC,WAA7B,EAAmD;AAAA,SAA3CD,IAA2C,GAA3CA,IAA2C;AAAA,SAAtBC,WAAsB,GAAtBA,WAAsB;AAAE;;AAEhEC,EAAAA,QAAQ,GAAW;AACtB,QAAI,KAAKC,cAAL,CAAoB,aAApB,KAAuC,KAAKF,WAAhD,EAA8D;AAC1D,aAAO,KAAKA,WAAZ;AACH,KAFD,MAEO;AACH,aAAO,KAAKD,IAAZ;AACH;AACJ;;AATgB","sourcesContent":["export interface Resource {\n _id: string;\n name: string;\n client: Client;\n scopes: Scope[];\n uris: string[];\n shareRequests: Permission[];\n}\n\nexport interface Client {\n baseUrl: string;\n clientId: string;\n name?: string;\n}\n\nexport class Scope {\n public constructor(public name: string, public displayName?: string) {}\n\n public toString(): string {\n if (this.hasOwnProperty('displayName') && (this.displayName)) {\n return this.displayName;\n } else {\n return this.name;\n }\n }\n}\n\nexport interface PaginatedResources {\n nextUrl: string;\n prevUrl: string;\n data: Resource[];\n}\n\nexport interface Permission {\n email?: string;\n firstName?: string;\n lastName?: string;\n scopes: Scope[] | string[]; // this should be Scope[] - fix API\n username: string;\n}\n\nexport interface Permissions {\n permissions: Permission[];\n row?: number;\n}\n"],"file":"resource-model.js"}
|
||||
{"version":3,"file":"resource-model.js","names":["Scope","constructor","name","displayName","toString","hasOwnProperty"],"sources":["../../../src/app/content/my-resources-page/resource-model.ts"],"sourcesContent":["export interface Resource {\n _id: string;\n name: string;\n client: Client;\n scopes: Scope[];\n uris: string[];\n shareRequests: Permission[];\n}\n\nexport interface Client {\n baseUrl: string;\n clientId: string;\n name?: string;\n}\n\nexport class Scope {\n public constructor(public name: string, public displayName?: string) {}\n\n public toString(): string {\n if (this.hasOwnProperty('displayName') && (this.displayName)) {\n return this.displayName;\n } else {\n return this.name;\n }\n }\n}\n\nexport interface PaginatedResources {\n nextUrl: string;\n prevUrl: string;\n data: Resource[];\n}\n\nexport interface Permission {\n email?: string;\n firstName?: string;\n lastName?: string;\n scopes: Scope[] | string[]; // this should be Scope[] - fix API\n username: string;\n}\n\nexport interface Permissions {\n permissions: Permission[];\n row?: number;\n}\n"],"mappings":"AAeA,OAAO,MAAMA,KAAK,CAAC;EACVC,WAAWA,CAAQC,IAAY,EAASC,WAAoB,EAAE;IAAA,KAA3CD,IAAY,GAAZA,IAAY;IAAA,KAASC,WAAoB,GAApBA,WAAoB;EAAG;EAE/DC,QAAQA,CAAA,EAAW;IACtB,IAAI,IAAI,CAACC,cAAc,CAAC,aAAa,CAAC,IAAK,IAAI,CAACF,WAAY,EAAE;MAC1D,OAAO,IAAI,CAACA,WAAW;IAC3B,CAAC,MAAM;MACH,OAAO,IAAI,CAACD,IAAI;IACpB;EACJ;AACF"}
|
||||
+4
-7
@@ -3,17 +3,16 @@
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { WarningTriangleIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js";
|
||||
import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { WarningTriangleIcon } from "../../../keycloak.v2/web_modules/@patternfly/react-icons.js";
|
||||
import { withRouter } from "../../../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { Msg } from "../../widgets/Msg.js";
|
||||
import EmptyMessageState from "../../widgets/EmptyMessageState.js";
|
||||
|
||||
class PgNotFound extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(EmptyMessageState, {
|
||||
icon: WarningTriangleIcon,
|
||||
@@ -23,9 +22,7 @@ class PgNotFound extends React.Component {
|
||||
params: [this.props.location.pathname]
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
export const PageNotFound = withRouter(PgNotFound);
|
||||
//# sourceMappingURL=PageNotFound.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/app/content/page-not-found/PageNotFound.tsx"],"names":["React","WarningTriangleIcon","withRouter","Msg","EmptyMessageState","PgNotFound","Component","constructor","props","render","location","pathname","PageNotFound"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AAEA,OAAO,KAAKA,KAAZ;AAEA,SAASC,mBAAT;AACA,SAAQC,UAAR;AACA,SAAQC,GAAR;AACA,OAAOC,iBAAP;;AAIA,MAAMC,UAAN,SAAyBL,KAAK,CAACM,SAA/B,CAA4D;AAEjDC,EAAAA,WAAW,CAACC,KAAD,EAA2B;AACzC,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAM,GAAoB;AAC7B,wBACI,oBAAC,iBAAD;AAAmB,MAAA,IAAI,EAAER,mBAAzB;AAA8C,MAAA,UAAU,EAAC;AAAzD,oBACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC,cAAZ;AAA2B,MAAA,MAAM,EAAE,CAAC,KAAKO,KAAL,CAAWE,QAAX,CAAoBC,QAArB;AAAnC,MADJ,CADJ;AAKH;;AAZuD;;AAa3D;AAED,OAAO,MAAMC,YAAY,GAAGV,UAAU,CAACG,UAAD,CAA/B","sourcesContent":["/*\n * To change this license header, choose License Headers in Project Properties.\n * To change this template file, choose Tools | Templates\n * and open the template in the editor.\n */\n\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\nexport interface PageNotFoundProps extends RouteComponentProps {}\n\nclass PgNotFound extends React.Component<PageNotFoundProps> {\n\n public constructor(props: PageNotFoundProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n <EmptyMessageState icon={WarningTriangleIcon} messageKey=\"pageNotFound\">\n <Msg msgKey=\"invalidRoute\" params={[this.props.location.pathname]} />\n </EmptyMessageState>\n );\n }\n};\n\nexport const PageNotFound = withRouter(PgNotFound);"],"file":"PageNotFound.js"}
|
||||
{"version":3,"file":"PageNotFound.js","names":["React","WarningTriangleIcon","withRouter","Msg","EmptyMessageState","PgNotFound","Component","constructor","props","render","createElement","icon","messageKey","msgKey","params","location","pathname","PageNotFound"],"sources":["../../../src/app/content/page-not-found/PageNotFound.tsx"],"sourcesContent":["/*\n * To change this license header, choose License Headers in Project Properties.\n * To change this template file, choose Tools | Templates\n * and open the template in the editor.\n */\n\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\nexport interface PageNotFoundProps extends RouteComponentProps {}\n\nclass PgNotFound extends React.Component<PageNotFoundProps> {\n\n public constructor(props: PageNotFoundProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n <EmptyMessageState icon={WarningTriangleIcon} messageKey=\"pageNotFound\">\n <Msg msgKey=\"invalidRoute\" params={[this.props.location.pathname]} />\n </EmptyMessageState>\n );\n }\n};\n\nexport const PageNotFound = withRouter(PgNotFound);"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK;AAEjB,SAASC,mBAAmB;AAC5B,SAAQC,UAAU;AAClB,SAAQC,GAAG;AACX,OAAOC,iBAAiB;AAIxB,MAAMC,UAAU,SAASL,KAAK,CAACM,SAAS,CAAoB;EAEjDC,WAAWA,CAACC,KAAwB,EAAE;IACzC,KAAK,CAACA,KAAK,CAAC;EAChB;EAEOC,MAAMA,CAAA,EAAoB;IAC7B,oBACIT,KAAA,CAAAU,aAAA,CAACN,iBAAiB;MAACO,IAAI,EAAEV,mBAAoB;MAACW,UAAU,EAAC;IAAc,gBACnEZ,KAAA,CAAAU,aAAA,CAACP,GAAG;MAACU,MAAM,EAAC,cAAc;MAACC,MAAM,EAAE,CAAC,IAAI,CAACN,KAAK,CAACO,QAAQ,CAACC,QAAQ;IAAE,CAAE,CACrD,CAAC;EAE5B;AACJ;AAAC;AAED,OAAO,MAAMC,YAAY,GAAGf,UAAU,CAACG,UAAU,CAAC"}
|
||||
+12
-39
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -15,9 +16,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import * as React from "../../../../common/keycloak/web_modules/react.js";
|
||||
import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js";
|
||||
import { Alert, Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItem, DataListItemRow, EmptyState, EmptyStateVariant, EmptyStateBody, Split, SplitItem, Title, Dropdown, DropdownPosition, KebabToggle, PageSection, PageSectionVariants } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js";
|
||||
|
||||
import * as React from "../../../keycloak.v2/web_modules/react.js";
|
||||
import { withRouter } from "../../../keycloak.v2/web_modules/react-router-dom.js";
|
||||
import { Alert, Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItem, DataListItemRow, EmptyState, EmptyStateVariant, EmptyStateBody, Split, SplitItem, Title, Dropdown, DropdownPosition, KebabToggle, PageSection, PageSectionVariants } from "../../../keycloak.v2/web_modules/@patternfly/react-core.js";
|
||||
import { AIACommand } from "../../util/AIACommand.js";
|
||||
import TimeUtil from "../../util/TimeUtil.js";
|
||||
import { AccountServiceContext } from "../../account-service/AccountServiceContext.js";
|
||||
@@ -27,41 +29,37 @@ import { ContentPage } from "../ContentPage.js";
|
||||
import { ContentAlert } from "../ContentAlert.js";
|
||||
import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js";
|
||||
|
||||
// A CredentialContainer is unique by combo of credential type and credential category
|
||||
|
||||
/**
|
||||
* @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.
|
||||
*/
|
||||
class SigningInPage extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props);
|
||||
|
||||
_defineProperty(this, "context", void 0);
|
||||
|
||||
_defineProperty(this, "handleRemove", (credentialId, userLabel) => {
|
||||
this.context.doDelete("/credentials/" + credentialId).then(() => {
|
||||
this.context.doDelete("/credentials/" + encodeURIComponent(credentialId)).then(() => {
|
||||
this.getCredentialContainers();
|
||||
ContentAlert.success("successRemovedMessage", [userLabel]);
|
||||
});
|
||||
});
|
||||
|
||||
this.context = context;
|
||||
this.state = {
|
||||
credentialContainers: new Map()
|
||||
};
|
||||
this.getCredentialContainers();
|
||||
}
|
||||
|
||||
getCredentialContainers() {
|
||||
this.context.doGet("/credentials").then(response => {
|
||||
const allContainers = new Map();
|
||||
const containers = response.data || [];
|
||||
containers.forEach(container => {
|
||||
let categoryMap = allContainers.get(container.category);
|
||||
|
||||
if (!categoryMap) {
|
||||
categoryMap = new Map();
|
||||
allContainers.set(container.category, categoryMap);
|
||||
}
|
||||
|
||||
categoryMap.set(container.type, container);
|
||||
});
|
||||
this.setState({
|
||||
@@ -69,18 +67,15 @@ class SigningInPage extends React.Component {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static credElementId(credType, credId, item) {
|
||||
return `${credType}-${item}-${credId.substring(0, 8)}`;
|
||||
}
|
||||
|
||||
render() {
|
||||
return /*#__PURE__*/React.createElement(ContentPage, {
|
||||
title: "signingIn",
|
||||
introMessage: "signingInSubMessage"
|
||||
}, this.renderCategories());
|
||||
}
|
||||
|
||||
renderCategories() {
|
||||
return Array.from(this.state.credentialContainers.keys()).map(category => /*#__PURE__*/React.createElement(PageSection, {
|
||||
key: category,
|
||||
@@ -93,12 +88,10 @@ class SigningInPage extends React.Component {
|
||||
msgKey: category
|
||||
})), this.renderTypes(category)));
|
||||
}
|
||||
|
||||
renderTypes(category) {
|
||||
let credTypeMap = this.state.credentialContainers.get(category);
|
||||
return /*#__PURE__*/React.createElement(KeycloakContext.Consumer, null, keycloak => /*#__PURE__*/React.createElement(React.Fragment, null, Array.from(credTypeMap.keys()).map((credType, index, typeArray) => [this.renderCredTypeTitle(credTypeMap.get(credType), keycloak, category), this.renderUserCredentials(credTypeMap, credType, keycloak)])));
|
||||
}
|
||||
|
||||
renderEmptyRow(type, isLast) {
|
||||
if (isLast) return; // don't put empty row at the end
|
||||
|
||||
@@ -110,14 +103,12 @@ class SigningInPage extends React.Component {
|
||||
dataListCells: [/*#__PURE__*/React.createElement(DataListCell, null)]
|
||||
})));
|
||||
}
|
||||
|
||||
renderUserCredentials(credTypeMap, credType, keycloak) {
|
||||
const credContainer = credTypeMap.get(credType);
|
||||
const userCredentialMetadatas = credContainer.userCredentialMetadatas;
|
||||
const removeable = credContainer.removeable;
|
||||
const type = credContainer.type;
|
||||
const displayName = credContainer.displayName;
|
||||
|
||||
if (!userCredentialMetadatas || userCredentialMetadatas.length === 0) {
|
||||
const localizedDisplayName = Msg.localize(displayName);
|
||||
return /*#__PURE__*/React.createElement(DataList, {
|
||||
@@ -144,21 +135,17 @@ class SigningInPage extends React.Component {
|
||||
})]
|
||||
}))));
|
||||
}
|
||||
|
||||
userCredentialMetadatas.forEach(credentialMetadata => {
|
||||
let credential = credentialMetadata.credential;
|
||||
if (!credential.userLabel) credential.userLabel = Msg.localize(credential.type);
|
||||
|
||||
if (credential.hasOwnProperty('createdDate') && credential.createdDate && credential.createdDate > 0) {
|
||||
credential.strCreatedDate = TimeUtil.format(credential.createdDate);
|
||||
}
|
||||
});
|
||||
let updateAIA;
|
||||
|
||||
if (credContainer.updateAction) {
|
||||
updateAIA = new AIACommand(keycloak, credContainer.updateAction);
|
||||
}
|
||||
|
||||
let maxWidth = {
|
||||
maxWidth: 689
|
||||
};
|
||||
@@ -195,7 +182,6 @@ class SigningInPage extends React.Component {
|
||||
credRemover: this.handleRemove
|
||||
})))))), " ");
|
||||
}
|
||||
|
||||
credentialRowCells(credMetadata, type) {
|
||||
const credRowCells = [];
|
||||
const credential = credMetadata.credential;
|
||||
@@ -208,7 +194,6 @@ class SigningInPage extends React.Component {
|
||||
className: "pf-u-max-width",
|
||||
style: maxWidth
|
||||
}, credential.userLabel));
|
||||
|
||||
if (credential.strCreatedDate) {
|
||||
credRowCells.push( /*#__PURE__*/React.createElement(DataListCell, {
|
||||
id: `${SigningInPage.credElementId(type, credential.id, "created-at")}`,
|
||||
@@ -222,18 +207,14 @@ class SigningInPage extends React.Component {
|
||||
key: "spacer-" + credential.id
|
||||
}));
|
||||
}
|
||||
|
||||
return credRowCells;
|
||||
}
|
||||
|
||||
renderCredTypeTitle(credContainer, keycloak, category) {
|
||||
if (!credContainer.hasOwnProperty("helptext") && !credContainer.hasOwnProperty("createAction")) return;
|
||||
let setupAction;
|
||||
|
||||
if (credContainer.createAction) {
|
||||
setupAction = new AIACommand(keycloak, credContainer.createAction);
|
||||
}
|
||||
|
||||
const credContainerDisplayName = Msg.localize(credContainer.displayName);
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, {
|
||||
key: "credTypeTitle-" + credContainer.type
|
||||
@@ -277,7 +258,7 @@ class SigningInPage extends React.Component {
|
||||
}, /*#__PURE__*/React.createElement("span", {
|
||||
className: "pf-c-button__icon"
|
||||
}, /*#__PURE__*/React.createElement("i", {
|
||||
className: "fas fa-plus-circle",
|
||||
className: "fa fa-plus-circle",
|
||||
"aria-hidden": "true"
|
||||
})), /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "setUpNew",
|
||||
@@ -294,20 +275,16 @@ class SigningInPage extends React.Component {
|
||||
}, /*#__PURE__*/React.createElement("span", {
|
||||
className: "pf-c-button__icon"
|
||||
}, /*#__PURE__*/React.createElement("i", {
|
||||
className: "fas fa-plus-circle",
|
||||
className: "fa fa-plus-circle",
|
||||
"aria-hidden": "true"
|
||||
})), /*#__PURE__*/React.createElement(Msg, {
|
||||
msgKey: "setUpNew",
|
||||
params: [credContainerDisplayName]
|
||||
}))))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_defineProperty(SigningInPage, "contextType", AccountServiceContext);
|
||||
|
||||
;
|
||||
|
||||
class CredentialAction extends React.Component {
|
||||
render() {
|
||||
if (this.props.updateAction) {
|
||||
@@ -323,7 +300,6 @@ class CredentialAction extends React.Component {
|
||||
msgKey: "update"
|
||||
})));
|
||||
}
|
||||
|
||||
if (this.props.removeable) {
|
||||
const userLabel = this.props.credential.userLabel;
|
||||
return /*#__PURE__*/React.createElement(DataListAction, {
|
||||
@@ -339,12 +315,9 @@ class CredentialAction extends React.Component {
|
||||
onContinue: () => this.props.credRemover(this.props.credential.id, userLabel)
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const SigningInPageWithRouter = withRouter(SigningInPage);
|
||||
export { SigningInPageWithRouter as SigningInPage };
|
||||
//# sourceMappingURL=SigningInPage.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
||||
import * as React from "../../../common/keycloak/web_modules/react.js";
|
||||
import * as React from "../../keycloak.v2/web_modules/react.js";
|
||||
export const KeycloakContext = React.createContext(undefined);
|
||||
//# sourceMappingURL=KeycloakContext.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/keycloak-service/KeycloakContext.tsx"],"names":["React","KeycloakContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAGA,OAAO,MAAMC,eAAe,GAAGD,KAAK,CAACE,aAAN,CAAiDC,SAAjD,CAAxB","sourcesContent":["import * as React from 'react';\nimport { KeycloakService } from './keycloak.service';\n\nexport const KeycloakContext = React.createContext<KeycloakService | undefined>(undefined);"],"file":"KeycloakContext.js"}
|
||||
{"version":3,"file":"KeycloakContext.js","names":["React","KeycloakContext","createContext","undefined"],"sources":["../../src/app/keycloak-service/KeycloakContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeycloakService } from './keycloak.service';\n\nexport const KeycloakContext = React.createContext<KeycloakService | undefined>(undefined);"],"mappings":"AAAA,OAAO,KAAKA,KAAK;AAGjB,OAAO,MAAMC,eAAe,GAAGD,KAAK,CAACE,aAAa,CAA8BC,SAAS,CAAC"}
|
||||
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2017 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
@@ -16,55 +17,46 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export class KeycloakService {
|
||||
constructor(keycloak) {
|
||||
_defineProperty(this, "keycloakAuth", void 0);
|
||||
|
||||
this.keycloakAuth = keycloak;
|
||||
}
|
||||
|
||||
authenticated() {
|
||||
return this.keycloakAuth.authenticated ? this.keycloakAuth.authenticated : false;
|
||||
}
|
||||
|
||||
audiencePresent() {
|
||||
if (this.keycloakAuth.tokenParsed) {
|
||||
const audience = this.keycloakAuth.tokenParsed['aud'];
|
||||
return audience === 'account' || Array.isArray(audience) && audience.indexOf('account') >= 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
login(options) {
|
||||
this.keycloakAuth.login(options);
|
||||
}
|
||||
|
||||
logout(redirectUri = baseUrl) {
|
||||
this.keycloakAuth.logout({
|
||||
redirectUri: redirectUri
|
||||
});
|
||||
}
|
||||
|
||||
account() {
|
||||
this.keycloakAuth.accountManagement();
|
||||
}
|
||||
|
||||
authServerUrl() {
|
||||
const authServerUrl = this.keycloakAuth.authServerUrl;
|
||||
return authServerUrl.charAt(authServerUrl.length - 1) === '/' ? authServerUrl : authServerUrl + '/';
|
||||
}
|
||||
|
||||
realm() {
|
||||
return this.keycloakAuth.realm;
|
||||
}
|
||||
|
||||
getToken() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.keycloakAuth.token) {
|
||||
this.keycloakAuth.updateToken(5).success(() => {
|
||||
this.keycloakAuth.updateToken(5).then(() => {
|
||||
resolve(this.keycloakAuth.token);
|
||||
}).error(() => {
|
||||
}).catch(() => {
|
||||
reject('Failed to refresh token');
|
||||
});
|
||||
} else {
|
||||
@@ -72,6 +64,5 @@ export class KeycloakService {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=keycloak.service.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/keycloak-service/keycloak.service.ts"],"names":["KeycloakService","constructor","keycloak","keycloakAuth","authenticated","audiencePresent","tokenParsed","audience","Array","isArray","indexOf","login","options","logout","redirectUri","baseUrl","account","accountManagement","authServerUrl","charAt","length","realm","getToken","Promise","resolve","reject","token","updateToken","success","error"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,OAAO,MAAMA,eAAN,CAAsB;AAGlBC,EAAAA,WAAW,CAACC,QAAD,EAA2B;AAAA;;AACzC,SAAKC,YAAL,GAAoBD,QAApB;AACH;;AAEME,EAAAA,aAAa,GAAY;AAC5B,WAAO,KAAKD,YAAL,CAAkBC,aAAlB,GAAkC,KAAKD,YAAL,CAAkBC,aAApD,GAAoE,KAA3E;AACH;;AAEMC,EAAAA,eAAe,GAAY;AAC9B,QAAI,KAAKF,YAAL,CAAkBG,WAAtB,EAAmC;AAC/B,YAAMC,QAAQ,GAAG,KAAKJ,YAAL,CAAkBG,WAAlB,CAA8B,KAA9B,CAAjB;AACA,aAAOC,QAAQ,KAAK,SAAb,IAA2BC,KAAK,CAACC,OAAN,CAAcF,QAAd,KAA2BA,QAAQ,CAACG,OAAT,CAAiB,SAAjB,KAA+B,CAA5F;AACH;;AACD,WAAO,KAAP;AACH;;AAEMC,EAAAA,KAAK,CAACC,OAAD,EAAuC;AAC/C,SAAKT,YAAL,CAAkBQ,KAAlB,CAAwBC,OAAxB;AACH;;AAEMC,EAAAA,MAAM,CAACC,WAAmB,GAAGC,OAAvB,EAAsC;AAC/C,SAAKZ,YAAL,CAAkBU,MAAlB,CAAyB;AAACC,MAAAA,WAAW,EAAEA;AAAd,KAAzB;AACH;;AAEME,EAAAA,OAAO,GAAS;AACnB,SAAKb,YAAL,CAAkBc,iBAAlB;AACH;;AAEMC,EAAAA,aAAa,GAAuB;AACvC,UAAMA,aAAa,GAAG,KAAKf,YAAL,CAAkBe,aAAxC;AACA,WAAOA,aAAa,CAAEC,MAAf,CAAsBD,aAAa,CAAEE,MAAf,GAAwB,CAA9C,MAAqD,GAArD,GAA2DF,aAA3D,GAA2EA,aAAa,GAAG,GAAlG;AACH;;AAEMG,EAAAA,KAAK,GAAuB;AAC/B,WAAO,KAAKlB,YAAL,CAAkBkB,KAAzB;AACH;;AAEMC,EAAAA,QAAQ,GAAoB;AAC/B,WAAO,IAAIC,OAAJ,CAAoB,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC5C,UAAI,KAAKtB,YAAL,CAAkBuB,KAAtB,EAA6B;AACzB,aAAKvB,YAAL,CACKwB,WADL,CACiB,CADjB,EAEKC,OAFL,CAEa,MAAM;AACXJ,UAAAA,OAAO,CAAC,KAAKrB,YAAL,CAAkBuB,KAAnB,CAAP;AACH,SAJL,EAKKG,KALL,CAKW,MAAM;AACTJ,UAAAA,MAAM,CAAC,yBAAD,CAAN;AACH,SAPL;AAQH,OATD,MASO;AACHA,QAAAA,MAAM,CAAC,eAAD,CAAN;AACH;AACJ,KAbM,CAAP;AAcH;;AAvDwB","sourcesContent":["/*\n * Copyright 2017 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Keycloak, { KeycloakLoginOptions } from \"../../../../../../../../../../adapters/oidc/js\";\n\ndeclare const baseUrl: string;\nexport type KeycloakClient = Keycloak;\n\nexport class KeycloakService {\n private keycloakAuth: KeycloakClient;\n\n public constructor(keycloak: KeycloakClient) {\n this.keycloakAuth = keycloak;\n }\n\n public authenticated(): boolean {\n return this.keycloakAuth.authenticated ? this.keycloakAuth.authenticated : false;\n }\n\n public audiencePresent(): boolean {\n if (this.keycloakAuth.tokenParsed) {\n const audience = this.keycloakAuth.tokenParsed['aud'];\n return audience === 'account' || (Array.isArray(audience) && audience.indexOf('account') >= 0);\n }\n return false;\n }\n\n public login(options?: KeycloakLoginOptions): void {\n this.keycloakAuth.login(options);\n }\n\n public logout(redirectUri: string = baseUrl): void {\n this.keycloakAuth.logout({redirectUri: redirectUri});\n }\n\n public account(): void {\n this.keycloakAuth.accountManagement();\n }\n\n public authServerUrl(): string | undefined {\n const authServerUrl = this.keycloakAuth.authServerUrl;\n return authServerUrl!.charAt(authServerUrl!.length - 1) === '/' ? authServerUrl : authServerUrl + '/';\n }\n\n public realm(): string | undefined {\n return this.keycloakAuth.realm;\n }\n\n public getToken(): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (this.keycloakAuth.token) {\n this.keycloakAuth\n .updateToken(5)\n .success(() => {\n resolve(this.keycloakAuth.token as string);\n })\n .error(() => {\n reject('Failed to refresh token');\n });\n } else {\n reject('Not logged in');\n }\n });\n }\n}\n"],"file":"keycloak.service.js"}
|
||||
{"version":3,"file":"keycloak.service.js","names":["KeycloakService","constructor","keycloak","_defineProperty","keycloakAuth","authenticated","audiencePresent","tokenParsed","audience","Array","isArray","indexOf","login","options","logout","redirectUri","baseUrl","account","accountManagement","authServerUrl","charAt","length","realm","getToken","Promise","resolve","reject","token","updateToken","then","catch"],"sources":["../../src/app/keycloak-service/keycloak.service.ts"],"sourcesContent":["/*\n * Copyright 2017 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Keycloak, { KeycloakLoginOptions } from \"../../../../../../../../../../js/libs/keycloak-js\";\n\ndeclare const baseUrl: string;\nexport type KeycloakClient = Keycloak;\n\nexport class KeycloakService {\n private keycloakAuth: KeycloakClient;\n\n public constructor(keycloak: KeycloakClient) {\n this.keycloakAuth = keycloak;\n }\n\n public authenticated(): boolean {\n return this.keycloakAuth.authenticated ? this.keycloakAuth.authenticated : false;\n }\n\n public audiencePresent(): boolean {\n if (this.keycloakAuth.tokenParsed) {\n const audience = this.keycloakAuth.tokenParsed['aud'];\n return audience === 'account' || (Array.isArray(audience) && audience.indexOf('account') >= 0);\n }\n return false;\n }\n\n public login(options?: KeycloakLoginOptions): void {\n this.keycloakAuth.login(options);\n }\n\n public logout(redirectUri: string = baseUrl): void {\n this.keycloakAuth.logout({redirectUri: redirectUri});\n }\n\n public account(): void {\n this.keycloakAuth.accountManagement();\n }\n\n public authServerUrl(): string | undefined {\n const authServerUrl = this.keycloakAuth.authServerUrl;\n return authServerUrl!.charAt(authServerUrl!.length - 1) === '/' ? authServerUrl : authServerUrl + '/';\n }\n\n public realm(): string | undefined {\n return this.keycloakAuth.realm;\n }\n\n public getToken(): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (this.keycloakAuth.token) {\n this.keycloakAuth\n .updateToken(5)\n .then(() => {\n resolve(this.keycloakAuth.token as string);\n })\n .catch(() => {\n reject('Failed to refresh token');\n });\n } else {\n reject('Not logged in');\n }\n });\n }\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,OAAO,MAAMA,eAAe,CAAC;EAGlBC,WAAWA,CAACC,QAAwB,EAAE;IAAAC,eAAA;IACzC,IAAI,CAACC,YAAY,GAAGF,QAAQ;EAChC;EAEOG,aAAaA,CAAA,EAAY;IAC5B,OAAO,IAAI,CAACD,YAAY,CAACC,aAAa,GAAG,IAAI,CAACD,YAAY,CAACC,aAAa,GAAG,KAAK;EACpF;EAEOC,eAAeA,CAAA,EAAY;IAC9B,IAAI,IAAI,CAACF,YAAY,CAACG,WAAW,EAAE;MAC/B,MAAMC,QAAQ,GAAG,IAAI,CAACJ,YAAY,CAACG,WAAW,CAAC,KAAK,CAAC;MACrD,OAAOC,QAAQ,KAAK,SAAS,IAAKC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,IAAIA,QAAQ,CAACG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAE;IAClG;IACA,OAAO,KAAK;EAChB;EAEOC,KAAKA,CAACC,OAA8B,EAAQ;IAC/C,IAAI,CAACT,YAAY,CAACQ,KAAK,CAACC,OAAO,CAAC;EACpC;EAEOC,MAAMA,CAACC,WAAmB,GAAGC,OAAO,EAAQ;IAC/C,IAAI,CAACZ,YAAY,CAACU,MAAM,CAAC;MAACC,WAAW,EAAEA;IAAW,CAAC,CAAC;EACxD;EAEOE,OAAOA,CAAA,EAAS;IACnB,IAAI,CAACb,YAAY,CAACc,iBAAiB,CAAC,CAAC;EACzC;EAEOC,aAAaA,CAAA,EAAuB;IACvC,MAAMA,aAAa,GAAG,IAAI,CAACf,YAAY,CAACe,aAAa;IACrD,OAAOA,aAAa,CAAEC,MAAM,CAACD,aAAa,CAAEE,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,GAAGF,aAAa,GAAGA,aAAa,GAAG,GAAG;EACzG;EAEOG,KAAKA,CAAA,EAAuB;IAC/B,OAAO,IAAI,CAAClB,YAAY,CAACkB,KAAK;EAClC;EAEOC,QAAQA,CAAA,EAAoB;IAC/B,OAAO,IAAIC,OAAO,CAAS,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC5C,IAAI,IAAI,CAACtB,YAAY,CAACuB,KAAK,EAAE;QACzB,IAAI,CAACvB,YAAY,CACZwB,WAAW,CAAC,CAAC,CAAC,CACdC,IAAI,CAAC,MAAM;UACRJ,OAAO,CAAC,IAAI,CAACrB,YAAY,CAACuB,KAAe,CAAC;QAC9C,CAAC,CAAC,CACDG,KAAK,CAAC,MAAM;UACTJ,MAAM,CAAC,yBAAyB,CAAC;QACrC,CAAC,CAAC;MACV,CAAC,MAAM;QACHA,MAAM,CAAC,eAAe,CAAC;MAC3B;IACJ,CAAC,CAAC;EACN;AACJ"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,48 +15,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* Linked Accounts screen */
|
||||
.idp-icon-social {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
#github-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_github_transparent.svg);
|
||||
}
|
||||
|
||||
#linkedin-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_linkedin_transparent.svg);
|
||||
}
|
||||
|
||||
#facebook-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_facebook_transparent.svg);
|
||||
}
|
||||
|
||||
#google-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_google_transparent.svg);
|
||||
}
|
||||
|
||||
#microsoft-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_microsoft_transparent.svg);
|
||||
}
|
||||
|
||||
#instagram-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_instagram_transparent.svg);
|
||||
}
|
||||
|
||||
#stackoverflow-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_stack_transparent.svg);
|
||||
}
|
||||
|
||||
#twitter-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_twitter_transparent.svg);
|
||||
}
|
||||
|
||||
#openshift-idp-icon-social {
|
||||
background-image: url(../img/socialmedia/socialmedia_icons_openshift_transparent.svg);
|
||||
}
|
||||
|
||||
/* Account Page screen */
|
||||
.personal-info-form .pf-c-form__group-control {
|
||||
max-width: 600px;
|
||||
|
||||
@@ -22,12 +22,10 @@ export class AIACommand {
|
||||
this.keycloak = keycloak;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
execute() {
|
||||
this.keycloak.login({
|
||||
action: this.action
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
//# sourceMappingURL=AIACommand.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/util/AIACommand.ts"],"names":["AIACommand","constructor","keycloak","action","execute","login"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,OAAO,MAAMA,UAAN,CAAiB;AAEpBC,EAAAA,WAAW,CAASC,QAAT,EAA4CC,MAA5C,EAA4D;AAAA,SAAnDD,QAAmD,GAAnDA,QAAmD;AAAA,SAAhBC,MAAgB,GAAhBA,MAAgB;AAAE;;AAElEC,EAAAA,OAAO,GAAS;AACnB,SAAKF,QAAL,CAAcG,KAAd,CAAoB;AAChBF,MAAAA,MAAM,EAAE,KAAKA;AADG,KAApB;AAIH;;AATmB","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\n\n/**\n * @author Stan Silvert\n */\nexport class AIACommand {\n\n constructor(private keycloak: KeycloakService, private action: string) {}\n\n public execute(): void {\n this.keycloak.login({\n action: this.action,\n })\n\n }\n}"],"file":"AIACommand.js"}
|
||||
{"version":3,"file":"AIACommand.js","names":["AIACommand","constructor","keycloak","action","execute","login"],"sources":["../../src/app/util/AIACommand.ts"],"sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\n\n/**\n * @author Stan Silvert\n */\nexport class AIACommand {\n\n constructor(private keycloak: KeycloakService, private action: string) {}\n\n public execute(): void {\n this.keycloak.login({\n action: this.action,\n })\n\n }\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,CAAC;EAEpBC,WAAWA,CAASC,QAAyB,EAAUC,MAAc,EAAE;IAAA,KAAnDD,QAAyB,GAAzBA,QAAyB;IAAA,KAAUC,MAAc,GAAdA,MAAc;EAAG;EAEjEC,OAAOA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACG,KAAK,CAAC;MAChBF,MAAM,EAAE,IAAI,CAACA;IACjB,CAAC,CAAC;EAEN;AACJ"}
|
||||
@@ -6,14 +6,11 @@ function parse(linkHeader) {
|
||||
if (!matcher) return {};
|
||||
const linkUrl = matcher[1];
|
||||
const rel = matcher[2].match(/\s*(.+)\s*=\s*"?([^"]+)"?/);
|
||||
|
||||
if (rel) {
|
||||
acc[rel[2]] = linkUrl;
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
export default parse;
|
||||
//# sourceMappingURL=ParseLink.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/util/ParseLink.ts"],"names":["parse","linkHeader","links","split","reduce","acc","link","matcher","match","linkUrl","rel"],"mappings":"AAMA,SAASA,KAAT,CAAeC,UAAf,EAAsD;AACpD,MAAI,CAACA,UAAL,EAAiB,OAAO,EAAP;AACjB,QAAMC,KAAK,GAAGD,UAAU,CAACE,KAAX,CAAiB,OAAjB,CAAd;AACA,SAAOD,KAAK,CAACE,MAAN,CAAoB,CAACC,GAAD,EAAaC,IAAb,KAAqC;AAC9D,UAAMC,OAAO,GAAGD,IAAI,CAACE,KAAL,CAAW,gBAAX,CAAhB;AACA,QAAI,CAACD,OAAL,EAAc,OAAO,EAAP;AACd,UAAME,OAAO,GAAGF,OAAO,CAAC,CAAD,CAAvB;AACA,UAAMG,GAAG,GAAGH,OAAO,CAAC,CAAD,CAAP,CAAWC,KAAX,CAAiB,2BAAjB,CAAZ;;AACA,QAAIE,GAAJ,EAAS;AACLL,MAAAA,GAAG,CAACK,GAAG,CAAC,CAAD,CAAJ,CAAH,GAAcD,OAAd;AACH;;AACD,WAAOJ,GAAP;AACD,GATM,EASJ,EATI,CAAP;AAUD;;AAED,eAAeL,KAAf","sourcesContent":["\nexport interface Links {\n prev?: string;\n next?: string;\n}\n\nfunction parse(linkHeader: string | undefined): Links {\n if (!linkHeader) return {};\n const links = linkHeader.split(/,\\s*</);\n return links.reduce<Links>((acc: Links, link: string): Links => {\n const matcher = link.match(/<?([^>]*)>(.*)/);\n if (!matcher) return {};\n const linkUrl = matcher[1];\n const rel = matcher[2].match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\n if (rel) {\n acc[rel[2]] = linkUrl;\n }\n return acc;\n }, {});\n}\n\nexport default parse;"],"file":"ParseLink.js"}
|
||||
{"version":3,"file":"ParseLink.js","names":["parse","linkHeader","links","split","reduce","acc","link","matcher","match","linkUrl","rel"],"sources":["../../src/app/util/ParseLink.ts"],"sourcesContent":["\nexport interface Links {\n prev?: string;\n next?: string;\n}\n\nfunction parse(linkHeader: string | undefined): Links {\n if (!linkHeader) return {};\n const links = linkHeader.split(/,\\s*</);\n return links.reduce<Links>((acc: Links, link: string): Links => {\n const matcher = link.match(/<?([^>]*)>(.*)/);\n if (!matcher) return {};\n const linkUrl = matcher[1];\n const rel = matcher[2].match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\n if (rel) {\n acc[rel[2]] = linkUrl;\n }\n return acc;\n }, {});\n}\n\nexport default parse;"],"mappings":"AAMA,SAASA,KAAKA,CAACC,UAA8B,EAAS;EACpD,IAAI,CAACA,UAAU,EAAE,OAAO,CAAC,CAAC;EAC1B,MAAMC,KAAK,GAAGD,UAAU,CAACE,KAAK,CAAC,OAAO,CAAC;EACvC,OAAOD,KAAK,CAACE,MAAM,CAAQ,CAACC,GAAU,EAAEC,IAAY,KAAY;IAC9D,MAAMC,OAAO,GAAGD,IAAI,CAACE,KAAK,CAAC,gBAAgB,CAAC;IAC5C,IAAI,CAACD,OAAO,EAAE,OAAO,CAAC,CAAC;IACvB,MAAME,OAAO,GAAGF,OAAO,CAAC,CAAC,CAAC;IAC1B,MAAMG,GAAG,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,2BAA2B,CAAC;IACzD,IAAIE,GAAG,EAAE;MACLL,GAAG,CAACK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAGD,OAAO;IACzB;IACA,OAAOJ,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;AACR;AAEA,eAAeL,KAAK"}
|
||||
@@ -24,7 +24,6 @@
|
||||
*/
|
||||
export const createRedirect = currentLocation => {
|
||||
let redirectUri = baseUrl;
|
||||
|
||||
if (typeof referrer !== 'undefined') {
|
||||
// '_hash_' is a workaround for when uri encoding is not
|
||||
// sufficient to escape the # character properly.
|
||||
@@ -33,7 +32,6 @@ export const createRedirect = currentLocation => {
|
||||
// it sees the hash in the redirect param and stops.
|
||||
redirectUri += "?referrer=" + referrer + "&referrer_uri=" + referrerUri.replace('#', '_hash_');
|
||||
}
|
||||
|
||||
return encodeURIComponent(redirectUri) + encodeURIComponent("/#" + currentLocation);
|
||||
};
|
||||
//# sourceMappingURL=RedirectUri.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/util/RedirectUri.ts"],"names":["createRedirect","currentLocation","redirectUri","baseUrl","referrer","referrerUri","replace","encodeURIComponent"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,GAAIC,eAAD,IAAqC;AAC/D,MAAIC,WAAmB,GAAGC,OAA1B;;AAEA,MAAI,OAAOC,QAAP,KAAoB,WAAxB,EAAqC;AACjC;AACA;AACA;AACA;AACA;AACAF,IAAAA,WAAW,IAAI,eAAeE,QAAf,GAA0B,gBAA1B,GAA6CC,WAAW,CAACC,OAAZ,CAAoB,GAApB,EAAyB,QAAzB,CAA5D;AACH;;AAED,SAAOC,kBAAkB,CAACL,WAAD,CAAlB,GAAkCK,kBAAkB,CAAC,OAAON,eAAR,CAA3D;AACH,CAbM","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const baseUrl: string;\ndeclare const referrer: string;\ndeclare const referrerUri: string;\n\n/**\n * Create a redirect uri that can return to this application with referrer and referrer_uri intact.\n * \n * @param currentLocation The ReactRouter location to return to.\n * \n * @author Stan Silvert\n */\nexport const createRedirect = (currentLocation: string): string => {\n let redirectUri: string = baseUrl;\n \n if (typeof referrer !== 'undefined') {\n // '_hash_' is a workaround for when uri encoding is not\n // sufficient to escape the # character properly.\n // The problem is that both the redirect and the application URL contain a hash.\n // The browser will consider anything after the first hash to be client-side. So\n // it sees the hash in the redirect param and stops.\n redirectUri += \"?referrer=\" + referrer + \"&referrer_uri=\" + referrerUri.replace('#', '_hash_');\n }\n\n return encodeURIComponent(redirectUri) + encodeURIComponent(\"/#\" + currentLocation); \n}"],"file":"RedirectUri.js"}
|
||||
{"version":3,"file":"RedirectUri.js","names":["createRedirect","currentLocation","redirectUri","baseUrl","referrer","referrerUri","replace","encodeURIComponent"],"sources":["../../src/app/util/RedirectUri.ts"],"sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const baseUrl: string;\ndeclare const referrer: string;\ndeclare const referrerUri: string;\n\n/**\n * Create a redirect uri that can return to this application with referrer and referrer_uri intact.\n * \n * @param currentLocation The ReactRouter location to return to.\n * \n * @author Stan Silvert\n */\nexport const createRedirect = (currentLocation: string): string => {\n let redirectUri: string = baseUrl;\n \n if (typeof referrer !== 'undefined') {\n // '_hash_' is a workaround for when uri encoding is not\n // sufficient to escape the # character properly.\n // The problem is that both the redirect and the application URL contain a hash.\n // The browser will consider anything after the first hash to be client-side. So\n // it sees the hash in the redirect param and stops.\n redirectUri += \"?referrer=\" + referrer + \"&referrer_uri=\" + referrerUri.replace('#', '_hash_');\n }\n\n return encodeURIComponent(redirectUri) + encodeURIComponent(\"/#\" + currentLocation); \n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,GAAIC,eAAuB,IAAa;EAC/D,IAAIC,WAAmB,GAAGC,OAAO;EAEjC,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;IACjC;IACA;IACA;IACA;IACA;IACAF,WAAW,IAAI,YAAY,GAAGE,QAAQ,GAAG,gBAAgB,GAAGC,WAAW,CAACC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;EAClG;EAEA,OAAOC,kBAAkB,CAACL,WAAW,CAAC,GAAGK,kBAAkB,CAAC,IAAI,GAAGN,eAAe,CAAC;AACvF,CAAC"}
|
||||
@@ -1,5 +1,6 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
||||
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
||||
/*
|
||||
* Copyright 2020 Red Hat, Inc. and/or its affiliates.
|
||||
*
|
||||
@@ -28,9 +29,7 @@ class TimeUtil {
|
||||
hour: 'numeric',
|
||||
minute: 'numeric'
|
||||
});
|
||||
|
||||
_defineProperty(this, "formatter", void 0);
|
||||
|
||||
try {
|
||||
this.formatter = new Intl.DateTimeFormat(locale, this.options);
|
||||
} catch (e) {
|
||||
@@ -38,13 +37,10 @@ class TimeUtil {
|
||||
this.formatter = new Intl.DateTimeFormat('en', this.options);
|
||||
}
|
||||
}
|
||||
|
||||
format(time) {
|
||||
return this.formatter.format(time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const TimeUtilInstance = new TimeUtil();
|
||||
export default TimeUtilInstance;
|
||||
//# sourceMappingURL=TimeUtil.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/app/util/TimeUtil.ts"],"names":["TimeUtil","constructor","year","month","day","hour","minute","formatter","Intl","DateTimeFormat","locale","options","e","format","time","TimeUtilInstance"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,MAAMA,QAAN,CAAe;AAIXC,EAAAA,WAAW,GAAG;AAAA,qCAHI;AAAEC,MAAAA,IAAI,EAAE,SAAR;AAAmBC,MAAAA,KAAK,EAAE,MAA1B;AAAkCC,MAAAA,GAAG,EAAE,SAAvC;AAAkDC,MAAAA,IAAI,EAAE,SAAxD;AAAmEC,MAAAA,MAAM,EAAE;AAA3E,KAGJ;;AAAA;;AACV,QAAI;AACA,WAAKC,SAAL,GAAiB,IAAIC,IAAI,CAACC,cAAT,CAAwBC,MAAxB,EAAgC,KAAKC,OAArC,CAAjB;AACH,KAFD,CAEE,OAAMC,CAAN,EAAS;AACP;AACA,WAAKL,SAAL,GAAiB,IAAIC,IAAI,CAACC,cAAT,CAAwB,IAAxB,EAA8B,KAAKE,OAAnC,CAAjB;AACH;AACJ;;AAEDE,EAAAA,MAAM,CAACC,IAAD,EAAuB;AACzB,WAAO,KAAKP,SAAL,CAAeM,MAAf,CAAsBC,IAAtB,CAAP;AACH;;AAfU;;AAkBf,MAAMC,gBAA0B,GAAG,IAAIf,QAAJ,EAAnC;AACA,eAAee,gBAAf","sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const locale: string;\n\n/**\n * @author Stan Silvert\n */\nclass TimeUtil {\n private options = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };\n private formatter: Intl.DateTimeFormat;\n\n constructor() {\n try {\n this.formatter = new Intl.DateTimeFormat(locale, this.options);\n } catch(e) {\n // unknown locale falling back to English\n this.formatter = new Intl.DateTimeFormat('en', this.options);\n }\n }\n\n format(time: number): string {\n return this.formatter.format(time);\n }\n}\n\nconst TimeUtilInstance: TimeUtil = new TimeUtil();\nexport default TimeUtilInstance as TimeUtil;"],"file":"TimeUtil.js"}
|
||||
{"version":3,"file":"TimeUtil.js","names":["TimeUtil","constructor","_defineProperty","year","month","day","hour","minute","formatter","Intl","DateTimeFormat","locale","options","e","format","time","TimeUtilInstance"],"sources":["../../src/app/util/TimeUtil.ts"],"sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const locale: string;\n\n/**\n * @author Stan Silvert\n */\nclass TimeUtil {\n private options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };\n private formatter: Intl.DateTimeFormat;\n\n constructor() {\n try {\n this.formatter = new Intl.DateTimeFormat(locale, this.options);\n } catch(e) {\n // unknown locale falling back to English\n this.formatter = new Intl.DateTimeFormat('en', this.options);\n }\n }\n\n format(time: number): string {\n return this.formatter.format(time);\n }\n}\n\nconst TimeUtilInstance: TimeUtil = new TimeUtil();\nexport default TimeUtilInstance as TimeUtil;"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,MAAMA,QAAQ,CAAC;EAIXC,WAAWA,CAAA,EAAG;IAAAC,eAAA,kBAHgC;MAAEC,IAAI,EAAE,SAAS;MAAEC,KAAK,EAAE,MAAM;MAAEC,GAAG,EAAE,SAAS;MAAEC,IAAI,EAAE,SAAS;MAAEC,MAAM,EAAE;IAAU,CAAC;IAAAL,eAAA;IAIhI,IAAI;MACA,IAAI,CAACM,SAAS,GAAG,IAAIC,IAAI,CAACC,cAAc,CAACC,MAAM,EAAE,IAAI,CAACC,OAAO,CAAC;IAClE,CAAC,CAAC,OAAMC,CAAC,EAAE;MACP;MACA,IAAI,CAACL,SAAS,GAAG,IAAIC,IAAI,CAACC,cAAc,CAAC,IAAI,EAAE,IAAI,CAACE,OAAO,CAAC;IAChE;EACJ;EAEAE,MAAMA,CAACC,IAAY,EAAU;IACzB,OAAO,IAAI,CAACP,SAAS,CAACM,MAAM,CAACC,IAAI,CAAC;EACtC;AACJ;AAEA,MAAMC,gBAA0B,GAAG,IAAIhB,QAAQ,CAAC,CAAC;AACjD,eAAegB,gBAAgB"}
|
||||
+12
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+2
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+2
@@ -0,0 +1,2 @@
|
||||
function n(...o){const r=[],e={}.hasOwnProperty;return o.filter(Boolean).forEach(o=>{const t=typeof o;if("string"===t||"number"===t)r.push(o);else if(Array.isArray(o)&&o.length){const e=n(...o);e&&r.push(e)}else if("object"===t)for(const n in o)e.call(o,n)&&o[n]&&r.push(n)}),r.join(" ")}export{n as css};
|
||||
//# sourceMappingURL=react-styles.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"react-styles.js","sources":["../../node_modules/.pnpm/@patternfly+react-styles@4.92.8/node_modules/@patternfly/react-styles/dist/esm/index.js"],"sourcesContent":["/** Joins args into a className string\n *\n * @param {any} args list of objects, string, or arrays to reduce\n */\nexport function css(...args) {\n // Adapted from https://github.com/JedWatson/classnames/blob/master/index.js\n const classes = [];\n const hasOwn = {}.hasOwnProperty;\n args.filter(Boolean).forEach((arg) => {\n const argType = typeof arg;\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n }\n else if (Array.isArray(arg) && arg.length) {\n const inner = css(...arg);\n if (inner) {\n classes.push(inner);\n }\n }\n else if (argType === 'object') {\n for (const key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n });\n return classes.join(' ');\n}\n//# sourceMappingURL=index.js.map"],"names":["css","args","classes","hasOwn","hasOwnProperty","filter","Boolean","forEach","arg","argType","push","Array","isArray","length","inner","key","call","join"],"mappings":"AAIO,SAASA,KAAOC,GAEnB,MAAMC,EAAU,GACVC,EAAS,GAAGC,eAoBlB,OAnBAH,EAAKI,OAAOC,SAASC,QAASC,IAC1B,MAAMC,SAAiBD,EACvB,GAAgB,WAAZC,GAAoC,WAAZA,EACxBP,EAAQQ,KAAKF,QAEZ,GAAIG,MAAMC,QAAQJ,IAAQA,EAAIK,OAAQ,CACvC,MAAMC,EAAQd,KAAOQ,GACjBM,GACAZ,EAAQQ,KAAKI,QAGhB,GAAgB,WAAZL,EACL,IAAK,MAAMM,KAAOP,EACVL,EAAOa,KAAKR,EAAKO,IAAQP,EAAIO,IAC7Bb,EAAQQ,KAAKK,KAKtBb,EAAQe,KAAK"}
|
||||
@@ -0,0 +1,2 @@
|
||||
function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}function r(){}function n(){}n.resetWarningCache=r;var o=function(){function e(e,t,r,n,o,a){if("SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"!==a){var p=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw p.name="Invariant Violation",p}}function t(){return e}e.isRequired=e;var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:n,resetWarningCache:r};return o.PropTypes=o,o},a=t((function(e){e.exports=o()}));export{a as P,t as c,e as u};
|
||||
//# sourceMappingURL=index-e491ad49.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index-e491ad49.js","sources":["../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js","../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js","../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n"],"names":["emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","module","exports","require$$0"],"mappings":"iKAWA,SAASA,KACT,SAASC,KACTA,EAAuBC,kBAAoBF,EAE3C,MAAiB,WACf,SAASG,EAAKC,EAAOC,EAAUC,EAAeC,EAAUC,EAAcC,GACpE,GCRuB,iDDQnBA,EAAJ,CAIA,IAAIC,EAAM,IAAIC,MACZ,mLAKF,MADAD,EAAIE,KAAO,sBACLF,GAGR,SAASG,IACP,OAAOV,EAFTA,EAAKW,WAAaX,EAMlB,IAAIY,EAAiB,CACnBC,MAAOb,EACPc,OAAQd,EACRe,KAAMf,EACNgB,KAAMhB,EACNiB,OAAQjB,EACRkB,OAAQlB,EACRmB,OAAQnB,EACRoB,OAAQpB,EAERqB,IAAKrB,EACLsB,QAASZ,EACTa,QAASvB,EACTwB,YAAaxB,EACbyB,WAAYf,EACZgB,KAAM1B,EACN2B,SAAUjB,EACVkB,MAAOlB,EACPmB,UAAWnB,EACXoB,MAAOpB,EACPqB,MAAOrB,EAEPsB,eAAgBlC,EAChBC,kBAAmBF,GAKrB,OAFAe,EAAeqB,UAAYrB,EAEpBA,oBE9CPsB,EAAcC,QAAGC"}
|
||||
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"imports": {
|
||||
"@patternfly/react-core": "./@patternfly/react-core.js",
|
||||
"@patternfly/react-icons": "./@patternfly/react-icons.js",
|
||||
"@patternfly/react-styles": "./@patternfly/react-styles.js",
|
||||
"react": "./react.js",
|
||||
"react-dom": "./react-dom.js",
|
||||
"react-router-dom": "./react-router-dom.js"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user