Skip to content

Commit

Permalink
Code merge from develop to release-1.2.x (mosip#436)
Browse files Browse the repository at this point in the history
* [ES-255]

* translation files updated

* [ADDED] deeplink URI configuration corrected

* [DSD-3416] updated values.yaml file (mosip#389)

* [MOSIP-29168] Updated workflows as per reusable workflow format (mosip#391)

* [MOSIP-29168] Updated workflows as per reusable workflow format

[MOSIP-25631]

* [MOSIP-29168] minor fix

[MOSIP-25631]

---------

Co-authored-by: syed-salman-technoforte <[email protected]>

* [MOSIP-29519] added webhook secret in release-changes.yml file (mosip#401)

* default configuration for esignet UI updated

* [MOSIP-29519] added personal access token in release-changes.yml (mosip#405)

Signed-off-by: PRAFUL RAKHADE <[email protected]>

* [MOSIP-29519] added webhook secrets in tag.yml file (mosip#409)

* [ES-291] added validation in accepted claims and permittedAuthScope request list (mosip#408)

* Modified the version

* validation for empty acceptedCliams and permittedAuthorizeScopes

---------

Co-authored-by: Venkata Saidurga Polamraju <[email protected]>

* [ES-291] added test case for controllers (mosip#412)

* Modified the version

* validation for empty acceptedCliams and permittedAuthorizeScopes

* add test case for authcode controler and linkconsent

---------

Co-authored-by: Venkata Saidurga Polamraju <[email protected]>

* [FIXES] es-303 issue

* [ADDED] muliple wellknown endpoint through config

* [ES-295] (mosip#413)

* [ES-295]

* review comments fixed

* [MODIFIED] docker & nginx conf according wellknown api

* [ES-299] Added validation for codeChallenge (mosip#422)

* Modified the version

* validation for empty acceptedCliams and permittedAuthorizeScopes

* add test case for authcode controler and linkconsent

* added codeChallenge validtion

* added codeChallenge validation

* review changes

---------

Co-authored-by: Venkata Saidurga Polamraju <[email protected]>

* ES-298 ES-295 ES-310 (mosip#427)

* exp as epoch in JWK

* ES-295

* ES-310

* ES-298

---------

Co-authored-by: ase-101 <>

* [REMOVE] unused environment variable

* [MOSIP-29035] Updated esignet onboarder script to fetch value from docker env vars (mosip#414)

* [MOSIP-29035] Updated esignet onboarder script to fecth value from docker env vars

* [MOSIP-29035] Removed the dummy value for esignet misp key

* [MOSIP-29035] Updated dummy value with single quotes

---------

Co-authored-by: akilalakshmanan <[email protected]>

* [ADDED] openid credential issuer

* synced labels with artifactory

* [FIXES] spelling mistake

* ES-328 (mosip#434)

* ES-4 (mosip#432)

Co-authored-by: ase-101 <>

* ES-328

---------

Co-authored-by: ase-101 <>

* ES-328 (mosip#435)

Co-authored-by: ase-101 <>

---------

Signed-off-by: PRAFUL RAKHADE <[email protected]>
Co-authored-by: Venkata Saidurga Polamraju <[email protected]>
Co-authored-by: KONIJETI YASWANTHA NAGARJUNA <[email protected]>
Co-authored-by: anshulv1401 <[email protected]>
Co-authored-by: Zeeshan Mehboob <[email protected]>
Co-authored-by: PRAFUL RAKHADE <[email protected]>
Co-authored-by: syed salman <[email protected]>
Co-authored-by: syed-salman-technoforte <[email protected]>
Co-authored-by: anshulv1401 <[email protected]>
Co-authored-by: kaifk468 <[email protected]>
Co-authored-by: Zeeshan Mehboob <[email protected]>
Co-authored-by: pvsaidurga <[email protected]>
Co-authored-by: Akila Lakshmanan <[email protected]>
Co-authored-by: akilalakshmanan <[email protected]>
Co-authored-by: Sasikumar Ganesan <[email protected]>
Co-authored-by: ase-101 <>
  • Loading branch information
15 people committed Jan 22, 2024
1 parent a9f2331 commit 3ae6d12
Show file tree
Hide file tree
Showing 19 changed files with 132 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public io.mosip.esignet.core.dto.ClientDetail getClientDetails(String clientId)

@CacheEvict(value = Constants.CLIENT_DETAIL_CACHE, key = "#clientDetailCreateRequestV2.getClientId()")
@Override
public ClientDetailResponse createOIDCClientV2(ClientDetailCreateRequestV2 clientDetailCreateRequestV2) throws EsignetException {
public ClientDetailResponse createOAuthClient(ClientDetailCreateRequestV2 clientDetailCreateRequestV2) throws EsignetException {
Optional<ClientDetail> result = clientDetailRepository.findById(clientDetailCreateRequestV2.getClientId());
if (result.isPresent()) {
log.error("Duplicate Client Id : {}", ErrorConstants.DUPLICATE_CLIENT_ID);
Expand All @@ -224,14 +224,14 @@ public ClientDetailResponse createOIDCClientV2(ClientDetailCreateRequestV2 clien
}

auditWrapper.logAudit(AuditHelper.getClaimValue(SecurityContextHolder.getContext(), claimName),
Action.OIDC_CLIENT_CREATE, ActionStatus.SUCCESS, AuditHelper.buildAuditDto(clientDetailCreateRequestV2.getClientId()), null);
Action.OAUTH_CLIENT_CREATE, ActionStatus.SUCCESS, AuditHelper.buildAuditDto(clientDetailCreateRequestV2.getClientId()), null);

return getClientDetailResponse(clientDetail);
}

@CacheEvict(value = Constants.CLIENT_DETAIL_CACHE, key = "#clientId")
@Override
public ClientDetailResponse updateOIDCClientV2(String clientId, ClientDetailUpdateRequestV2 clientDetailUpdateRequestV2) throws EsignetException {
public ClientDetailResponse updateOAuthClient(String clientId, ClientDetailUpdateRequestV2 clientDetailUpdateRequestV2) throws EsignetException {
Optional<ClientDetail> result = clientDetailRepository.findById(clientId);
if (!result.isPresent()) {
log.error("Invalid Client Id : {}", ErrorConstants.INVALID_CLIENT_ID);
Expand All @@ -249,7 +249,7 @@ public ClientDetailResponse updateOIDCClientV2(String clientId, ClientDetailUpda
clientDetail = clientDetailRepository.save(clientDetail);

auditWrapper.logAudit(AuditHelper.getClaimValue(SecurityContextHolder.getContext(), claimName),
Action.OIDC_CLIENT_UPDATE, ActionStatus.SUCCESS, AuditHelper.buildAuditDto(clientId), null);
Action.OAUTH_CLIENT_UPDATE, ActionStatus.SUCCESS, AuditHelper.buildAuditDto(clientId), null);

return getClientDetailResponse(clientDetail);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public void createClientV2_withValidDetail_thenPass() throws Exception {
entity.setId("mock_id_v1");
entity.setStatus("active");
Mockito.when(clientDetailRepository.save(Mockito.any(ClientDetail.class))).thenReturn(entity);
ClientDetailResponse clientDetailResponse = clientManagementService.createOIDCClientV2(clientCreateV2ReqDto);
ClientDetailResponse clientDetailResponse = clientManagementService.createOAuthClient(clientCreateV2ReqDto);
Assert.assertNotNull(clientDetailResponse);
Assert.assertTrue(clientDetailResponse.getClientId().equals("mock_id_v1"));
Assert.assertTrue(clientDetailResponse.getStatus().equals("active"));
Expand All @@ -128,7 +128,7 @@ public void createClientV2_withExistingClientId_thenFail() {
ClientDetailCreateRequestV2 clientCreateV2ReqDto = new ClientDetailCreateRequestV2();
clientCreateV2ReqDto.setClientId("client_id_v1");
try {
clientManagementService.createOIDCClientV2(clientCreateV2ReqDto);
clientManagementService.createOAuthClient(clientCreateV2ReqDto);
} catch (EsignetException ex) {
Assert.assertEquals(ex.getErrorCode(), ErrorConstants.DUPLICATE_CLIENT_ID);
}
Expand Down Expand Up @@ -180,7 +180,7 @@ public void updateClient_withValidClientId_thenPass() throws EsignetException {
public void updateClientV2_withNonExistingClientId_thenFail() {
Mockito.when(clientDetailRepository.findById("client_id_v1")).thenReturn(Optional.empty());
try {
clientManagementService.updateOIDCClientV2("client_id_v1", null);
clientManagementService.updateOAuthClient("client_id_v1", null);
} catch (EsignetException ex) {
Assert.assertEquals(ex.getErrorCode(), ErrorConstants.INVALID_CLIENT_ID);
}
Expand Down Expand Up @@ -213,7 +213,7 @@ public void updateClientV2_withValidClientId_thenPass() throws EsignetException
entity.setId("client_id_v1");
entity.setStatus("inactive");
Mockito.when(clientDetailRepository.save(Mockito.any(ClientDetail.class))).thenReturn(entity);
ClientDetailResponse clientDetailResponse = clientManagementService.updateOIDCClientV2("client_id_v1", updateV2Request);
ClientDetailResponse clientDetailResponse = clientManagementService.updateOAuthClient("client_id_v1", updateV2Request);
Assert.assertNotNull(clientDetailResponse);
Assert.assertTrue(clientDetailResponse.getClientId().equals("client_id_v1"));
Assert.assertTrue(clientDetailResponse.getStatus().equals("inactive"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public interface ClientManagementService {
* @return
* @throws EsignetException
*/
ClientDetailResponse createOIDCClientV2(ClientDetailCreateRequestV2 clientDetailCreateRequestV2) throws EsignetException;
ClientDetailResponse createOAuthClient(ClientDetailCreateRequestV2 clientDetailCreateRequestV2) throws EsignetException;

/**
* API to update registered relying party client version 2
Expand All @@ -59,6 +59,6 @@ public interface ClientManagementService {
* @return
* @throws EsignetException
*/
ClientDetailResponse updateOIDCClientV2(String clientId, ClientDetailUpdateRequestV2 clientDetailUpdateRequestV2) throws EsignetException;
ClientDetailResponse updateOAuthClient(String clientId, ClientDetailUpdateRequestV2 clientDetailUpdateRequestV2) throws EsignetException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
public enum Action {
OIDC_CLIENT_CREATE,
OIDC_CLIENT_UPDATE,
OAUTH_CLIENT_CREATE,
OAUTH_CLIENT_UPDATE,
GET_OAUTH_DETAILS,
TRANSACTION_STARTED,
SEND_OTP,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,30 +86,30 @@ public ResponseWrapper<ClientDetailResponse> updateClient(@Valid @PathVariable("
return response;
}

@PostMapping(value = "/client-mgmt/v2/oidc-client", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper<ClientDetailResponse> createClientV2(@Valid @RequestBody RequestWrapper<ClientDetailCreateRequestV2> requestWrapper) throws Exception {
@PostMapping(value = "/client-mgmt/oauth-client", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper<ClientDetailResponse> createOAuthClient(@Valid @RequestBody RequestWrapper<ClientDetailCreateRequestV2> requestWrapper) throws Exception {
ResponseWrapper response = new ResponseWrapper<ClientDetailResponse>();
try {
response.setResponse(clientManagementService.createOIDCClientV2(requestWrapper.getRequest()));
response.setResponse(clientManagementService.createOAuthClient(requestWrapper.getRequest()));
} catch (EsignetException ex) {
auditWrapper.logAudit(AuditHelper.getClaimValue(SecurityContextHolder.getContext(), claimName),
Action.OIDC_CLIENT_CREATE, ActionStatus.ERROR, AuditHelper.buildAuditDto(requestWrapper.getRequest().getClientId()), ex);
Action.OAUTH_CLIENT_CREATE, ActionStatus.ERROR, AuditHelper.buildAuditDto(requestWrapper.getRequest().getClientId()), ex);
throw ex;
}
response.setResponseTime(IdentityProviderUtil.getUTCDateTime());
return response;
}


@PutMapping(value = "/client-mgmt/v2/oidc-client/{client_id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper<ClientDetailResponse> updateClientV2(@Valid @PathVariable("client_id") String clientId,
@PutMapping(value = "/client-mgmt/oauth-client/{client_id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper<ClientDetailResponse> updateOAuthClient(@Valid @PathVariable("client_id") String clientId,
@Valid @RequestBody RequestWrapper<ClientDetailUpdateRequestV2> requestWrapper) throws Exception {
ResponseWrapper response = new ResponseWrapper<ClientDetailResponse>();
try {
response.setResponse(clientManagementService.updateOIDCClientV2(clientId, requestWrapper.getRequest()));
response.setResponse(clientManagementService.updateOAuthClient(clientId, requestWrapper.getRequest()));
} catch (EsignetException ex) {
auditWrapper.logAudit(AuditHelper.getClaimValue(SecurityContextHolder.getContext(), claimName),
Action.OIDC_CLIENT_UPDATE, ActionStatus.ERROR, AuditHelper.buildAuditDto(clientId), ex);
Action.OAUTH_CLIENT_UPDATE, ActionStatus.ERROR, AuditHelper.buildAuditDto(clientId), ex);
throw ex;
}
response.setResponseTime(IdentityProviderUtil.getUTCDateTime());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,15 +233,15 @@ public void setup() throws Exception {
@Test
public void testClientManagementEndpoints() throws Exception {
if(this.clientDetailCreateRequestV2 != null) {
ResultActions createResultActions = mockMvc.perform(post("/client-mgmt/v2/oidc-client")
ResultActions createResultActions = mockMvc.perform(post("/client-mgmt/oauth-client")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(getRequestWrapper(this.clientDetailCreateRequestV2)));
evaluateResultActions(createResultActions, this.clientDetailCreateRequestV2.getClientId(),
Constants.CLIENT_ACTIVE_STATUS, this.errorCode);
}

if(this.clientDetailUpdateRequestV2 != null) {
ResultActions updateResultActions = mockMvc.perform(put("/client-mgmt/v2/oidc-client/"+this.clientIdQueryParam)
ResultActions updateResultActions = mockMvc.perform(put("/client-mgmt/oauth-client/"+this.clientIdQueryParam)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(getRequestWrapper(this.clientDetailUpdateRequestV2)));
evaluateResultActions(updateResultActions, this.clientIdQueryParam,
Expand Down
6 changes: 3 additions & 3 deletions helm/esignet/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ function installing_esignet() {
kubectl -n $NS create secret generic esignet-captcha --from-literal=esignet-captcha-site-key=$ESITE_KEY --from-literal=esignet-captcha-secret-key=$ESECRET_KEY --dry-run=client -o yaml | kubectl apply -f -

echo Setting up dummy values for esignet misp license key
kubectl create secret generic onboarder-keys -n $NS --from-literal=mosip-esignet-misp-key=111111 --dry-run=client -o yaml | kubectl apply -f -
kubectl create secret generic esignet-misp-onboarder-key -n $NS --from-literal=mosip-esignet-misp-key='' --dry-run=client -o yaml | kubectl apply -f -

./copy_cm_func.sh secret onboarder-keys esignet config-server
./copy_cm_func.sh secret esignet-misp-onboarder-key esignet config-server

echo Copy configmaps
./copy_cm.sh
Expand All @@ -40,7 +40,7 @@ function installing_esignet() {

kubectl -n config-server set env --keys=esignet-captcha-site-key --from secret/esignet-captcha deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_
kubectl -n config-server set env --keys=esignet-captcha-secret-key --from secret/esignet-captcha deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_
kubectl -n config-server set env --keys=mosip-esignet-misp-key --from secret/onboarder-keys deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_
kubectl -n config-server set env --keys=mosip-esignet-misp-key --from secret/esignet-misp-onboarder-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_

kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status

Expand Down
39 changes: 27 additions & 12 deletions oidc-ui/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,29 @@ FROM node:12.18.4-alpine as build_esignet_ui
ARG sign_in_with_esignet_plugin_url
ENV SIGN_IN_WITH_ESIGNET_PLUGIN_URL=$sign_in_with_esignet_plugin_url

COPY package*.json ./

# Set a build-time environment variable (replace YOUR_ENV_VARIABLE_NAME with the desired variable name)
ARG oidcUIPublicUrl
ARG defaultLang
ARG defaultWellknown

ENV OIDC_UI_PUBLIC_URL=$oidcUIPublicUrl
ENV DEFAULT_LANG=$defaultLang
ENV DEFAULT_WELLKNOWN=$defaultWellknown

# Set the environment variable as a placeholder for PUBLIC_URL
ENV PUBLIC_URL=_PUBLIC_URL_

COPY package*.json ./
RUN npm install
#Copy the working directory
COPY . ./
RUN npm run build

FROM nginx

RUN apt-get -y update \
&& apt-get install -y curl npm wget unzip zip

ARG SOURCE
ARG COMMIT_HASH
ARG COMMIT_ID
Expand All @@ -40,24 +47,27 @@ ARG container_user_uid=1001
# can be passed during Docker build as build time environment for github branch to pickup configuration from.
ARG container_user_gid=1001

ENV nginx_dir=/usr/share/nginx
ENV i18n_path=${nginx_dir}/html/locales
ENV plugins_path=${nginx_dir}/html/plugins
ENV plugins_format=iife

# can be passed during Docker build as build time environment for artifactory URL
ARG artifactory_url

# environment variable to pass artifactory url, at docker runtime
ENV artifactory_url_env=${artifactory_url}

ENV nginx_dir=/usr/share/nginx

ENV work_dir=${nginx_dir}/html

ENV i18n_path=${work_dir}/locales

ENV plugins_path=${nginx_dir}/html/plugins

ENV plugins_format=iife

# set working directory for the user
WORKDIR /home/${container_user}

# install packages and create user
RUN apt-get -y update \
&& apt-get install -y curl npm wget unzip zip \
&& groupadd -g ${container_user_gid} ${container_user_group} \
RUN groupadd -g ${container_user_gid} ${container_user_group} \
&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \
&& mkdir -p /var/run/nginx /var/tmp/nginx ${i18n_path} ${plugins_path} ${plugins_path}/temp \
&& chown -R ${container_user}:${container_user} /usr/share/nginx /var/run/nginx /var/tmp/nginx ${i18n_path} ${plugins_path} ${plugins_path}/temp
Expand All @@ -69,10 +79,15 @@ RUN chmod +x configure_start.sh
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf

# copy build files to nginx html directory
COPY --from=build_esignet_ui /build $nginx_dir/html
COPY --from=build_esignet_ui /build ${work_dir}

RUN echo "DEFAULT_LANG=$DEFAULT_LANG" >> ${work_dir}/env.env && echo "DEFAULT_WELLKNOWN=$DEFAULT_WELLKNOWN" >> ${work_dir}/env.env

RUN chown -R ${container_user}:${container_user} /home/${container_user}

# change permissions of file inside working dir
RUN chown -R ${container_user}:${container_user} ${work_dir}

# select container user for all tasks
USER ${container_user_uid}:${container_user_gid}

Expand All @@ -82,4 +97,4 @@ ENTRYPOINT [ "./configure_start.sh" ]

CMD echo "starting nginx" ; \
nginx ; \
sleep infinity
sleep infinity
16 changes: 16 additions & 0 deletions oidc-ui/nginx/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,22 @@ http {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /.well-known/oauth-authorization-server {
proxy_pass http://esignet.esignet/v1/esignet/oauth/.well-known/oauth-authorization-server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /.well-known/openid-credential-issuer {
proxy_pass http://esignet.esignet/v1/esignet/vci/.well-known/openid-credential-issuer;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
# location /oidc-ui {
# alias /usr/share/nginx/oidc-ui;
# try_files $uri $uri/ /oidc-ui/index.html;
Expand Down
18 changes: 18 additions & 0 deletions oidc-ui/public/env-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
window._env_ = {
DEFAULT_LANG: "en",
DEFAULT_WELLKNOWN: [
{
name: "OpenID Configuration",
value: "/.well-known/openid-configuration",
},
{ name: "Jwks Json", value: "/.well-known/jwks.json" },
{
name: "Authorization Server",
value: "/.well-known/oauth-authorization-server",
},
{
name: "OpenID Credential Issuer",
value: "/.well-known/openid-credential-issuer",
},
],
};
3 changes: 0 additions & 3 deletions oidc-ui/public/env_configs.js

This file was deleted.

2 changes: 1 addition & 1 deletion oidc-ui/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
Learn how to configure a non-root public URL by running `npm run build`.
-->
<!-- runtime config -->
<script src="%PUBLIC_URL%/env_configs.js"></script>
<script src="%PUBLIC_URL%/env-config.js"></script>
<!-- runtime config -->

<title>e-Signet</title>
Expand Down
11 changes: 7 additions & 4 deletions oidc-ui/public/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"password_placeholder": "كلمة المرور"
},
"LoginQRCode": {
"scan_with_wallet": "امسح باستخدام تطبيق {{walletName}} لتسجيل الدخول",
"scan_with_wallet": "قم بالمسح باستخدام {{walletName}} لتسجيل الدخول",
"dont_have_wallet": "؟{{walletName}} ليس لديك",
"download_now": "التحميل الان",
"link_code_status": "حالة رمز الارتباط",
Expand Down Expand Up @@ -108,7 +108,10 @@
"OTP": "OTP",
"PWD": "كلمة المرور",
"preferred_mode_of_login": "حدد الوضع المفضل لتسجيل الدخول",
"more_ways_to_sign_in": "المزيد من الطرق لتسجيل الدخول"
"more_ways_to_sign_in": "المزيد من الطرق لتسجيل الدخول",
"or": "أو",
"sign_in_with" : "التحقق باستخدام {{idProviderName}}",
"verify_using_national_id":"التحقق باستخدام الهويات الوطنية الأخرى"
},
"esignetDetails": {
"esignet_details_heading": "واجهات برمجة التطبيقات Esignet معروفة جيدا",
Expand Down Expand Up @@ -173,8 +176,6 @@
"invalid_assertion": "تأكيد العميل غير صالح",
"invalid_acr": "مراجع فئة سياق المصادقة غير صالحة / غير مدعومة",
"invalid_token": "رمز الوصول غير صالح / منتهي الصلاحية",
"invalid_language_code": "رمز اللغة غير صالح",
"invalid_client_name_value": "قيمة اسم العميل غير صالحة",
"auth_failed": "المصادقة فشلت",
"auth_passed": "نجاح المصادقة",
"acr_amr_mapping_not_found": "لم يتم العثور على ملف تعيين ACR-AMR",
Expand Down Expand Up @@ -269,6 +270,8 @@
"proof_invalid_aud": "قيمة غير صالحة في مطالبة Aud Payload.",
"proof_invalid_iat": "قيمة غير صالحة في مطالبة حمولة IAT.",
"proof_invalid_nonce": "قيمة غير صالحة في مطالبة PHAILLOLL NONCE.",
"invalid_state_response": "حالة غير صالحة",
"authCode_missing": "رمز المصادقة مفقود",
"0": "النجاح",
"100": "الجهاز غير مسجل",
"101": "غير قادر على الكشف عن كائن القياسات الحيوية",
Expand Down
Loading

0 comments on commit 3ae6d12

Please sign in to comment.