From e9ee26fa1f9b7e163c93924b914f4cdd25ba7034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johana=20Sup=C3=ADkov=C3=A1?= Date: Mon, 19 Dec 2022 12:22:44 +0100 Subject: [PATCH 1/2] feat: validation for admin-meta pwd and login --- .../client/resources/PerunTranslation.java | 27 +++ .../resources/PerunTranslation_cs.properties | 9 + .../resources/PerunPwdResetTranslation.java | 2 +- .../resources/PerunRegistrarTranslation.java | 2 +- .../wui/registrar/widgets/items/Password.java | 3 + .../widgets/items/PerunFormItemEditable.java | 10 + .../wui/registrar/widgets/items/Username.java | 3 + .../AdminMetaPasswordValidator.java | 203 ++++++++++++++++++ .../AdminMetaUsernameValidator.java | 65 ++++++ 9 files changed, 322 insertions(+), 2 deletions(-) create mode 100644 perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaPasswordValidator.java create mode 100644 perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaUsernameValidator.java diff --git a/perun-wui-core/src/main/java/cz/metacentrum/perun/wui/client/resources/PerunTranslation.java b/perun-wui-core/src/main/java/cz/metacentrum/perun/wui/client/resources/PerunTranslation.java index 8e5dbe24..5493e29d 100644 --- a/perun-wui-core/src/main/java/cz/metacentrum/perun/wui/client/resources/PerunTranslation.java +++ b/perun-wui-core/src/main/java/cz/metacentrum/perun/wui/client/resources/PerunTranslation.java @@ -267,45 +267,72 @@ public interface PerunTranslation extends Messages { @DefaultMessage("Login must") public String einfraLoginHelp(); + @DefaultMessage("Login must") + public String adminMetaLoginHelp(); + @DefaultMessage("Login must be 2-15 characters long!") public String einfraLoginLength(); + @DefaultMessage("Login must be 2-15 characters long!") + public String adminMetaLoginLength(); + @DefaultMessage("Login must start with lower-case letter!") public String einfraLoginStart(); + @DefaultMessage("Login must start with lower-case letter!") + public String adminMetaLoginStart(); + @DefaultMessage("Login can contain only") public String einfraLoginFormat(); + @DefaultMessage("Login can contain only") + public String adminMetaLoginFormat(); + @DefaultMessage("Password must ") public String einfraPasswordHelp(); @DefaultMessage("Password must ") public String muAdmPasswordHelp(); + @DefaultMessage("Password must ") + public String adminMetaPasswordHelp(); + @DefaultMessage("Password must be at least 10 characters long!") public String einfraPasswordLength(); @DefaultMessage("Password must be at least 14 characters long!") public String muAdmPasswordLength(); + @DefaultMessage("Password must be at least 10 characters long!") + public String adminMetaPasswordLength(); + @DefaultMessage("Password can`t contain accented characters (diacritics) or non-printing and control characters!") public String einfraPasswordFormat(); @DefaultMessage("Password can`t contain accented characters (diacritics) or non-printing and control characters!") public String muAdmPasswordFormat(); + @DefaultMessage("Password can`t contain accented characters (diacritics) or non-printing and control characters!") + public String adminMetaPasswordFormat(); + @DefaultMessage("Password must consist of at least 3 of 4 character groups") public String einfraPasswordStrength(); @DefaultMessage("Password must consist of at least 3 of 4 character groups") public String muAdmPasswordStrength(); + @DefaultMessage("Password must consist of at least 3 of 4 character groups") + public String adminMetaPasswordStrength(); + @DefaultMessage("Password can`t contain login, name or surname, not even backwards!") public String einfraPasswordStrengthForNameLogin(); @DefaultMessage("Password can`t contain login, not even backwards!") public String muAdmPasswordStrengthForNameLogin(); + @DefaultMessage("Password can`t contain login, name or surname, not even backwards!") + public String adminMetaPasswordStrengthForNameLogin(); + @DefaultMessage("New password can`t be empty!") public String passwordCantBeEmpty(); diff --git a/perun-wui-core/src/main/resources/cz/metacentrum/perun/wui/client/resources/PerunTranslation_cs.properties b/perun-wui-core/src/main/resources/cz/metacentrum/perun/wui/client/resources/PerunTranslation_cs.properties index fb0e42fd..2ebceec8 100644 --- a/perun-wui-core/src/main/resources/cz/metacentrum/perun/wui/client/resources/PerunTranslation_cs.properties +++ b/perun-wui-core/src/main/resources/cz/metacentrum/perun/wui/client/resources/PerunTranslation_cs.properties @@ -110,6 +110,15 @@ muAdmPasswordFormat=Heslo nesmí obsahovat diakritiku nebo řídící a f muAdmPasswordStrengthForNameLogin=Heslo nesmí obsahovat login a to ani pozpátku! muAdmPasswordStrength=Heslo musí obsahovat alespoň 3 ze 4 kategorií znaků muAdmPasswordHelp=Heslo musí +adminMetaLoginHelp=Uživatelské jméno musí +adminMetaLoginLength=Uživatelské jméno musí být dlouhé 2-15 znaků! +adminMetaLoginStart=Uživatelské jméno musí začínat malým písmenem! +adminMetaLoginFormat=Uživatelské jméno smí obsahovat pouze +adminMetaPasswordHelp=Heslo musí +adminMetaPasswordLength=Heslo musí mít alespoň 10 znaků! +adminMetaPasswordFormat=Heslo nesmí obsahovat diakritiku nebo řídící a formátovací znaky! +adminMetaPasswordStrength=Heslo musí obsahovat alespoň 3 ze 4 kategorií znaků +adminMetaPasswordStrengthForNameLogin=Heslo nesmí obsahovat login, jméno nebo příjmení a to ani pozpátku! passwordCantBeEmpty=Nové heslo nesmí být prázdné! passwordMismatch=Hesla se neshodují! secondPasswordIsEmpty=Zopakujte nové heslo pro kontrolu diff --git a/perun-wui-pwdreset/src/main/java/cz/metacentrum/perun/wui/pwdreset/client/resources/PerunPwdResetTranslation.java b/perun-wui-pwdreset/src/main/java/cz/metacentrum/perun/wui/pwdreset/client/resources/PerunPwdResetTranslation.java index 41a7197c..6f0a7b6c 100644 --- a/perun-wui-pwdreset/src/main/java/cz/metacentrum/perun/wui/pwdreset/client/resources/PerunPwdResetTranslation.java +++ b/perun-wui-pwdreset/src/main/java/cz/metacentrum/perun/wui/pwdreset/client/resources/PerunPwdResetTranslation.java @@ -32,7 +32,7 @@ public interface PerunPwdResetTranslation extends PerunTranslation { @DefaultMessage("Reset password") public String submitPwdResetButton(); - @DefaultMessage("Passwords doesn`t match!") + @DefaultMessage("Passwords don`t match!") public String passwordsDoesnMatch(); @DefaultMessage("Password can`t be empty!") diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/client/resources/PerunRegistrarTranslation.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/client/resources/PerunRegistrarTranslation.java index f7132c5d..e2d0965c 100644 --- a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/client/resources/PerunRegistrarTranslation.java +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/client/resources/PerunRegistrarTranslation.java @@ -148,7 +148,7 @@ public interface PerunRegistrarTranslation extends PerunTranslation { @DefaultMessage("Password can`t be empty!") public String passEmpty(); - @DefaultMessage("Passwords doesn`t match!") + @DefaultMessage("Passwords don`t match!") public String passMismatch(); @DefaultMessage("Confirm password!") diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Password.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Password.java index f015a556..8a55b9b4 100644 --- a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Password.java +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Password.java @@ -11,6 +11,7 @@ import cz.metacentrum.perun.wui.registrar.widgets.items.validators.MuAdmPasswordValidator; import cz.metacentrum.perun.wui.registrar.widgets.items.validators.PasswordValidator; import cz.metacentrum.perun.wui.registrar.widgets.items.validators.PerunFormItemValidator; +import cz.metacentrum.perun.wui.registrar.widgets.items.validators.AdminMetaPasswordValidator; import cz.metacentrum.perun.wui.widgets.boxes.ExtendedPasswordTextBox; import org.gwtbootstrap3.client.ui.InputGroup; import org.gwtbootstrap3.client.ui.InputGroupAddon; @@ -38,6 +39,8 @@ public Password(PerunForm form, ApplicationFormItemData item, String lang) { this.validator = new EinfraPasswordValidator(); } else if (item.getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:def:login-namespace:mu-adm", item.getFormItem().getPerunDestinationAttribute())) { this.validator = new MuAdmPasswordValidator(); + } else if (item.getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:def:login-namespace:admin-meta", item.getFormItem().getPerunDestinationAttribute())) { + this.validator = new AdminMetaPasswordValidator(); } else { this.validator = new PasswordValidator(); } diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/PerunFormItemEditable.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/PerunFormItemEditable.java index 1f922d0c..448c76b3 100644 --- a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/PerunFormItemEditable.java +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/PerunFormItemEditable.java @@ -138,6 +138,16 @@ protected Widget initFormItem() { } } + // replace admin-meta help texts to support HTML formatting + if (this.getItemData().getFormItem() != null && + "urn:perun:user:attribute-def:def:login-namespace:admin-meta".equals(this.getItemData().getFormItem().getPerunDestinationAttribute())) { + if (this instanceof Password) { + help.setHTML(translation.adminMetaPasswordHelp()); + } else if (this instanceof Username) { + help.setHTML(translation.adminMetaLoginHelp()); + } + } + widgetWithTexts.add(help); } diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Username.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Username.java index 6fb0c88d..8653d26d 100644 --- a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Username.java +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/Username.java @@ -7,6 +7,7 @@ import cz.metacentrum.perun.wui.model.PerunException; import cz.metacentrum.perun.wui.model.beans.ApplicationFormItemData; import cz.metacentrum.perun.wui.registrar.widgets.PerunForm; +import cz.metacentrum.perun.wui.registrar.widgets.items.validators.AdminMetaUsernameValidator; import cz.metacentrum.perun.wui.registrar.widgets.items.validators.EinfraUsernameValidator; import cz.metacentrum.perun.wui.registrar.widgets.items.validators.PerunFormItemValidator; import cz.metacentrum.perun.wui.registrar.widgets.items.validators.UsernameValidator; @@ -42,6 +43,8 @@ public Username(PerunForm form, ApplicationFormItemData item, String lang) { super(form, item, lang); if (item.getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:def:login-namespace:einfra", item.getFormItem().getPerunDestinationAttribute())) { this.validator = new EinfraUsernameValidator(); + } else if (item.getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:def:login-namespace:admin-meta", item.getFormItem().getPerunDestinationAttribute())) { + this.validator = new AdminMetaUsernameValidator(); } else { this.validator = new UsernameValidator(); } diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaPasswordValidator.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaPasswordValidator.java new file mode 100644 index 00000000..f7078b32 --- /dev/null +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaPasswordValidator.java @@ -0,0 +1,203 @@ +package cz.metacentrum.perun.wui.registrar.widgets.items.validators; + +import com.google.gwt.regexp.shared.RegExp; +import cz.metacentrum.perun.wui.registrar.widgets.items.Password; +import cz.metacentrum.perun.wui.registrar.widgets.items.PerunFormItem; +import cz.metacentrum.perun.wui.registrar.widgets.items.Username; +import org.gwtbootstrap3.client.ui.constants.ValidationState; + +import java.util.List; +import java.util.Objects; + +/** + * Specific password validator for admin-meta namespace + * + * TODO: We must revalidate this form item when person`s name changes after entering password value !! + */ +public class AdminMetaPasswordValidator extends PasswordValidator { + + @Override + public boolean validateLocal(Password password) { + + if (password.isRequired() && isNullOrEmpty(password.getValue())) { + setResult(Result.EMPTY_PASSWORD); + password.setRawStatus(getTransl().passEmpty(), ValidationState.ERROR); + return false; + } + + // limit only to ASCII printable chars + RegExp regExp2 = RegExp.compile("^[\\x20-\\x7E]{1,}$"); + if(regExp2.exec(password.getValue()) == null){ + setResult(Result.INVALID_FORMAT); + password.setRawStatus(getTransl().adminMetaPasswordFormat(), ValidationState.ERROR); + return false; + } + + // Check that password contains at least 3 of 4 character groups + + RegExp regExpDigit = RegExp.compile("^.*[0-9].*$"); + RegExp regExpLower = RegExp.compile("^.*[a-z].*$"); + RegExp regExpUpper = RegExp.compile("^.*[A-Z].*$"); + RegExp regExpSpec = RegExp.compile("^.*[\\x20-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E].*$"); // FIXME - are those correct printable specific chars? + + int matchCounter = 0; + if (regExpDigit.exec(password.getValue()) != null) matchCounter++; + if (regExpLower.exec(password.getValue()) != null) matchCounter++; + if (regExpUpper.exec(password.getValue()) != null) matchCounter++; + if (regExpSpec.exec(password.getValue()) != null) matchCounter++; + + if(matchCounter < 3){ + setResult(Result.INVALID_FORMAT); + password.setRawStatus(getTransl().adminMetaPasswordStrength(), ValidationState.ERROR); + return false; + } + + if (!checkOnNamesAndLogins(getLoginValue(password), password)) return false; + if (!checkOnNamesAndLogins(getName(password), password)) return false; + if (!checkOnNamesAndLogins(getFirstName(password), password)) return false; + if (!checkOnNamesAndLogins(getSurname(password), password)) return false; + + // check length + if (password.getValue().length() < 10) { + setResult(Result.INVALID_FORMAT); + password.setRawStatus(getTransl().adminMetaPasswordLength(), ValidationState.ERROR); + return false; + } + + // check typos + if (!password.getPassword().getValue().equals(password.getPasswordSecond().getValue())) { + if (isNullOrEmpty(password.getPasswordSecond().getValue())) { + setResult(Result.SECOND_PASSWORD_EMPTY); + password.setStatus(getTransl().secondPassEmpty(), ValidationState.WARNING); + return false; + } + setResult(Result.PASSWORD_MISSMATCH); + password.setStatus(getTransl().passMismatch(), ValidationState.ERROR); + return false; + } + + password.setStatus(ValidationState.SUCCESS); + return true; + + } + + private String getLoginValue(Password password) { + + List items = password.getForm().getPerunFormItems(); + for (PerunFormItem item : items) { + if (item instanceof Username) { + if (item.getItemData().getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:def:login-namespace:admin-meta", item.getItemData().getFormItem().getPerunDestinationAttribute())) { + return item.getValue(); + } + } + } + return null; + + } + + private String getName(Password password) { + + List items = password.getForm().getPerunFormItems(); + for (PerunFormItem item : items) { + if (item.getItemData().getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:core:displayName", item.getItemData().getFormItem().getPerunDestinationAttribute())) { + return item.getValue(); + } + } + return null; + + } + + private String getFirstName(Password password) { + + List items = password.getForm().getPerunFormItems(); + for (PerunFormItem item : items) { + if (item.getItemData().getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:core:firstName", item.getItemData().getFormItem().getPerunDestinationAttribute())) { + return item.getValue(); + } + } + return null; + + } + + private String getSurname(Password password) { + + List items = password.getForm().getPerunFormItems(); + for (PerunFormItem item : items) { + if (item.getItemData().getFormItem() != null && Objects.equals("urn:perun:user:attribute-def:core:lastName", item.getItemData().getFormItem().getPerunDestinationAttribute())) { + return item.getValue(); + } + } + return null; + + } + + public static String reverse(String string) { + if (string == null || string.isEmpty() || string.length() == 1) return string; + return string.charAt(string.length()-1)+reverse(string.substring(1, string.length()-1))+string.charAt(0); + } + + /** + * Return FALSE if password contains "login" + * + * @param string + * @param password + * @return + */ + public boolean checkOnNamesAndLogins(String string, Password password) { + + // do not check too small string parts !! + if (string == null || string.length() < 3) return true; + + if (string.split("\\s").length > 1) { + + // consist of more pieces - check them individually - each piece must be relevant + String[] splitedString = string.split("\\s"); + for (String s : splitedString) { + + // too small part, skip + if (s == null || s.length() < 3) continue; + + // check part + if (password.getValue().toLowerCase().contains(s.toLowerCase()) || + password.getValue().toLowerCase().contains(reverse(s.toLowerCase())) || + normalizeString(password.getValue()).contains(normalizeString(s)) || + normalizeString(password.getValue()).contains(normalizeString(reverse(s)))) { + setResult(Result.INVALID_FORMAT); + password.setRawStatus(getTransl().adminMetaPasswordStrengthForNameLogin(), ValidationState.ERROR); + return false; + } + + } + + } + + // check also whole string + if (password.getValue().toLowerCase().contains(string.toLowerCase()) || + password.getValue().toLowerCase().contains(reverse(string.toLowerCase())) || + normalizeString(password.getValue()).contains(normalizeString(string)) || + normalizeString(password.getValue()).contains(normalizeString(reverse(string)))) { + setResult(Result.INVALID_FORMAT); + password.setRawStatus(getTransl().adminMetaPasswordStrengthForNameLogin(), ValidationState.ERROR); + return false; + } + + return true; + + } + + private String normalizeString(String string) { + String result = normalizeStringToNFD(string); + result = result.replaceAll("\\s",""); + return result; + } + + private final native String normalizeStringToNFD(String input) /*-{ + if (typeof input.normalize !== "undefined") { + // convert to normal decomposed form and replace all combining-diacritics marks + return input.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toLowerCase(); + } + // just lowercase + return input.toLowerCase(); + }-*/; + +} diff --git a/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaUsernameValidator.java b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaUsernameValidator.java new file mode 100644 index 00000000..37df8e24 --- /dev/null +++ b/perun-wui-registrar/src/main/java/cz/metacentrum/perun/wui/registrar/widgets/items/validators/AdminMetaUsernameValidator.java @@ -0,0 +1,65 @@ +package cz.metacentrum.perun.wui.registrar.widgets.items.validators; + +import com.google.gwt.regexp.shared.RegExp; +import cz.metacentrum.perun.wui.registrar.widgets.items.Password; +import cz.metacentrum.perun.wui.registrar.widgets.items.PerunFormItem; +import cz.metacentrum.perun.wui.registrar.widgets.items.Username; +import org.gwtbootstrap3.client.ui.constants.ValidationState; + +import java.util.List; + +/** + * Specific validation for admin-meta namespace + */ +public class AdminMetaUsernameValidator extends UsernameValidator { + + @Override + public boolean validateLocal(Username username) { + + if (username.isRequired() && isNullOrEmpty(username.getValue())) { + setResult(Result.EMPTY); + username.setRawStatus(getTransl().cantBeEmpty(), ValidationState.ERROR); + return false; + } + + // must start with lower-case char + RegExp regExp = RegExp.compile("^([a-z])(.*)$"); + if(regExp.exec(username.getValue()) == null){ + setResult(Result.INVALID_FORMAT); + username.setRawStatus(getTransl().adminMetaLoginStart(), ValidationState.ERROR); + return false; + } + + // must contain only valid chars + RegExp regExp2 = RegExp.compile("^[a-z0-9_-]+$"); + if(regExp2.exec(username.getValue()) == null){ + setResult(Result.INVALID_FORMAT); + username.setRawStatus(getTransl().adminMetaLoginFormat(), ValidationState.ERROR); + return false; + } + + // must have valid length + if (username.getValue().length() < 2 || username.getValue().length() > 15) { + setResult(Result.INVALID_FORMAT); + username.setRawStatus(getTransl().adminMetaLoginLength(), ValidationState.ERROR); + return false; + } + + // re-validate admin-meta password if login changes, but only if password was already entered + List allItems = username.getForm().getPerunFormItems(); + for (PerunFormItem item : allItems) { + if (item instanceof Password) { + if (((Password)item).getValidator() instanceof AdminMetaPasswordValidator) { + if (!ValidationState.NONE.equals(item.getValidationState())) { + item.validateLocal(); + break; + } + } + } + } + + username.setStatus(ValidationState.SUCCESS); + return true; + } + +} From 783fa879c9becef848f21ea7a7b4f15190816f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Zl=C3=A1mal?= Date: Tue, 3 Jan 2023 07:52:18 +0100 Subject: [PATCH 2/2] docs: fixed year in license and readme - Fixed http->https in pom.xml --- LICENSE | 2 +- README.md | 4 ++-- pom.xml | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/LICENSE b/LICENSE index 958ee822..a3d90902 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014-2022, CESNET, CERIT-SC. All rights reserved. +Copyright (c) 2014-2023, CESNET, CERIT-SC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index 42d19e02..c4c493d8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This project aims to deliver rich user graphical interface for Perun components. Project uses enterprise frameworks to make it work: -* [Google Web Toolkit](http://www.gwtproject.org/) +* [Google Web Toolkit](https://www.gwtproject.org/) * [GWT Platform (GWTP)](https://www.arcbees.com/#!/products/gwtp) * [GwtBootstrap3](https://github.com/gwtbootstrap3/gwtbootstrap3) @@ -23,7 +23,7 @@ See https://perun-aai.org/ for more details about the base project. ### License ### -© 2010-2022 [CESNET](https://www.cesnet.cz/?lang=en) and [CERIT-SC](https://www.cerit-sc.cz/en/index.html), all rights reserved. +© 2010-2023 [CESNET](https://www.cesnet.cz/?lang=en) and [CERIT-SC](https://www.cerit-sc.cz/en/index.html), all rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/pom.xml b/pom.xml index 16e4f9f1..bf96f72d 100644 --- a/pom.xml +++ b/pom.xml @@ -164,7 +164,7 @@ sonatype-nexus-snapshots - http://oss.sonatype.org/content/repositories/snapshots + https://oss.sonatype.org/content/repositories/snapshots true @@ -174,7 +174,7 @@ sonatype-nexus-snapshots2 - http://oss.sonatype.org/content/repositories/google-snapshots + https://oss.sonatype.org/content/repositories/google-snapshots true @@ -190,12 +190,12 @@ CESNET, z.s.p.o. - http://www.cesnet.cz/ + https://www.cesnet.cz/ 2014 - http://perun.cesnet.cz/web/ + https://perun.cesnet.cz/web/ scm:git:https://github.com/zlamalp/perun-wui.git