mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-9928: Allow native CloudStack users to change password in UI
This allows native CloudStack users to change password in UI when LDAP is enabled. Overall changes: - A new usersource returned in the listUsers response - Removed ldap check in the UI, replaced with check based on user source - DB changes to include user.source in user_view - Changed UI error message for non-native users trying to change password Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
parent
3a70c5cd16
commit
322e18a7b6
@ -93,6 +93,7 @@ env:
|
||||
smoke/misc/test_vm_sync"
|
||||
|
||||
- TESTS="component/find_hosts_for_migration
|
||||
component/test_accounts
|
||||
component/test_acl_isolatednetwork_delete
|
||||
component/test_acl_listsnapshot
|
||||
component/test_acl_listvm
|
||||
@ -146,7 +147,6 @@ env:
|
||||
# - TESTS="component/test_project_resources"
|
||||
# - TESTS="component/test_cpu_domain_limits"
|
||||
# - TESTS="component/test_acl_isolatednetwork"
|
||||
# - TESTS="component/test_accounts"
|
||||
# - TESTS="component/test_organization_states"
|
||||
|
||||
before_install: travis_wait 30 ./tools/travis/before_install.sh
|
||||
|
||||
@ -22,8 +22,9 @@ import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface User extends OwnedBy, InternalIdentity {
|
||||
|
||||
// UNKNOWN and NATIVE can be used interchangeably
|
||||
public enum Source {
|
||||
LDAP, SAML2, SAML2DISABLED, UNKNOWN
|
||||
LDAP, SAML2, SAML2DISABLED, UNKNOWN, NATIVE
|
||||
}
|
||||
|
||||
public static final long UID_SYSTEM = 1;
|
||||
|
||||
@ -66,6 +66,10 @@ public class UserResponse extends BaseResponse {
|
||||
@Param(description = "the account type of the user")
|
||||
private Short accountType;
|
||||
|
||||
@SerializedName("usersource")
|
||||
@Param(description = "the source type of the user in lowercase, such as native, ldap, saml2")
|
||||
private String userSource;
|
||||
|
||||
@SerializedName(ApiConstants.ROLE_ID)
|
||||
@Param(description = "the ID of the role")
|
||||
private String roleId;
|
||||
@ -260,4 +264,15 @@ public class UserResponse extends BaseResponse {
|
||||
public void setIsDefault(Boolean isDefault) {
|
||||
this.isDefault = isDefault;
|
||||
}
|
||||
|
||||
public String getUserSource() {
|
||||
return userSource;
|
||||
}
|
||||
|
||||
public void setUserSource(User.Source userSource) {
|
||||
this.userSource = userSource.toString().toLowerCase();
|
||||
if (this.userSource.equals(User.Source.UNKNOWN.toString().toLowerCase())) {
|
||||
this.userSource = User.Source.NATIVE.toString().toLowerCase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,6 +58,7 @@ public class UserAccountJoinDaoImpl extends GenericDaoBase<UserAccountJoinVO, Lo
|
||||
userResponse.setAccountId(usr.getAccountUuid());
|
||||
userResponse.setAccountName(usr.getAccountName());
|
||||
userResponse.setAccountType(usr.getAccountType());
|
||||
userResponse.setUserSource(usr.getSource());
|
||||
userResponse.setCreated(usr.getCreated());
|
||||
userResponse.setDomainId(usr.getDomainUuid());
|
||||
userResponse.setDomainName(usr.getDomainName());
|
||||
|
||||
@ -16,19 +16,20 @@
|
||||
// under the License.
|
||||
package com.cloud.api.query.vo;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.user.UserAccount;
|
||||
import com.cloud.utils.db.Encrypt;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import java.util.Date;
|
||||
|
||||
@Entity
|
||||
@Table(name = "user_view")
|
||||
@ -123,6 +124,10 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, I
|
||||
@Column(name = "default")
|
||||
boolean isDefault;
|
||||
|
||||
@Column(name = "source")
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private User.Source source;
|
||||
|
||||
public UserAccountJoinVO() {
|
||||
}
|
||||
|
||||
@ -258,4 +263,8 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, I
|
||||
public String getProjectName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public User.Source getSource() {
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,3 +22,48 @@
|
||||
DELETE FROM `cloud`.`configuration` WHERE name='consoleproxy.loadscan.interval';
|
||||
|
||||
DELETE FROM `cloud`.`host_details` where name = 'vmName' and value in (select name from `cloud`.`vm_instance` where state = 'Expunging' and hypervisor_type ='BareMetal');
|
||||
|
||||
DROP VIEW IF EXISTS `cloud`.`user_view`;
|
||||
CREATE VIEW `cloud`.`user_view` AS
|
||||
select
|
||||
user.id,
|
||||
user.uuid,
|
||||
user.username,
|
||||
user.password,
|
||||
user.firstname,
|
||||
user.lastname,
|
||||
user.email,
|
||||
user.state,
|
||||
user.api_key,
|
||||
user.secret_key,
|
||||
user.created,
|
||||
user.removed,
|
||||
user.timezone,
|
||||
user.registration_token,
|
||||
user.is_registered,
|
||||
user.incorrect_login_attempts,
|
||||
user.source,
|
||||
user.default,
|
||||
account.id account_id,
|
||||
account.uuid account_uuid,
|
||||
account.account_name account_name,
|
||||
account.type account_type,
|
||||
account.role_id account_role_id,
|
||||
domain.id domain_id,
|
||||
domain.uuid domain_uuid,
|
||||
domain.name domain_name,
|
||||
domain.path domain_path,
|
||||
async_job.id job_id,
|
||||
async_job.uuid job_uuid,
|
||||
async_job.job_status job_status,
|
||||
async_job.account_id job_account_id
|
||||
from
|
||||
`cloud`.`user`
|
||||
inner join
|
||||
`cloud`.`account` ON user.account_id = account.id
|
||||
inner join
|
||||
`cloud`.`domain` ON account.domain_id = domain.id
|
||||
left join
|
||||
`cloud`.`async_job` ON async_job.instance_id = user.id
|
||||
and async_job.instance_type = 'User'
|
||||
and async_job.job_status = 0;
|
||||
|
||||
@ -96,7 +96,7 @@ class Services:
|
||||
"template": {
|
||||
"displaytext": "Public Template",
|
||||
"name": "Public template",
|
||||
"ostype": 'CentOS 5.3 (64-bit)',
|
||||
"ostype": 'CentOS 5.6 (64-bit)',
|
||||
"url": "",
|
||||
"hypervisor": '',
|
||||
"format": '',
|
||||
@ -110,8 +110,7 @@ class Services:
|
||||
"privateport": 22,
|
||||
"protocol": 'TCP',
|
||||
},
|
||||
"ostype": 'CentOS 5.3 (64-bit)',
|
||||
# Cent OS 5.3 (64 bit)
|
||||
"ostype": 'CentOS 5.6 (64-bit)',
|
||||
"sleep": 60,
|
||||
"timeout": 10,
|
||||
}
|
||||
@ -249,6 +248,11 @@ class TestAccounts(cloudstackTestCase):
|
||||
user_response.state,
|
||||
"Check state of created user"
|
||||
)
|
||||
self.assertEqual(
|
||||
"native",
|
||||
user_response.usersource,
|
||||
"Check user source of created user"
|
||||
)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@ -232,6 +232,9 @@ class CodeGenerator(object):
|
||||
|
||||
for cmdName in self.cmdsName:
|
||||
body += self.space
|
||||
if cmdName in ["login", "logout"]:
|
||||
body += 'def %s(self, command, method="POST"):\n' % cmdName
|
||||
else:
|
||||
body += 'def %s(self, command, method="GET"):\n' % cmdName
|
||||
body += self.space + self.space
|
||||
body += 'response = %sResponse()\n' % cmdName
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "تغير خصائص العنصر",
|
||||
"confirm.enable.s3": "فضلا قم بتعبئة البيانات القادمة لتمكين التخزين S3 للذاكرة الثانوية.",
|
||||
"confirm.enable.swift": "Please fill in the following information to enable support for Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.enable.zone": "Could not enable zone",
|
||||
"error.installWizard.message": "Something went wrong; you may go back and correct any errors",
|
||||
"error.invalid.username.password": "Invalid username or password",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Changed item properties",
|
||||
"confirm.enable.s3": "Please fill in the following information to enable support for S3-backed Secondary Storage",
|
||||
"confirm.enable.swift": "Si us plau ompliu la següent informació per habilitar el suport per a Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.enable.zone": "Could not enable zone",
|
||||
"error.installWizard.message": "Quelcom ha fallat, vostè pot tornar enrere i corregir els errors detalls suggerime",
|
||||
"error.invalid.username.password": "Invalid username or password",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Geänderte Eintragseigenschaften",
|
||||
"confirm.enable.s3": "Bitte fügen Sie die folgenden Informationen hinzu, um die Unterstützung für \"S3-backed Secondary Storage\" hinzuzufügen",
|
||||
"confirm.enable.swift": "Bitte fügen Sie die folgenden Informationen hinzu, um die Unterstützung für Swift zu ermöglichen.",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Fehler! Ihr Passwort konnte nicht geändert werden, weil LDAP konfiguriert wurde.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Fehler! Ihr Passwort konnte nicht geändert werden, weil LDAP konfiguriert wurde.",
|
||||
"error.could.not.enable.zone": "Zone konnte nicht aktiviert werden",
|
||||
"error.installWizard.message": "Etwas ging schief; Sie können zurückgehen um mögliche Fehler zu beheben",
|
||||
"error.invalid.username.password": "Ungültiger Benutzername oder ungültiges Passwort",
|
||||
|
||||
@ -19,7 +19,7 @@ var dictionary = {"ICMP.code":"ICMP Code",
|
||||
"changed.item.properties":"Changed item properties",
|
||||
"confirm.enable.s3":"Please fill in the following information to enable support for S3-backed Secondary Storage",
|
||||
"confirm.enable.swift":"Please fill in the following information to enable support for Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled":"Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.change.your.password.because.non.native.user":"Error could not change your password because user is not a native CloudStack user.",
|
||||
"error.could.not.enable.zone":"Could not enable zone",
|
||||
"error.installWizard.message":"Something went wrong; you may go back and correct any errors",
|
||||
"error.invalid.username.password":"Invalid username or password",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Cambiadas las propiedades del elemento",
|
||||
"confirm.enable.s3": "Por favor, complete la siguiente información para habilitar el soporte del Almacenamiento Secundario sobre S3",
|
||||
"confirm.enable.swift": "Por favor, complete la siguiente información para habilitar el soporte para Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Error, no se puede cambiar la contraseña porque LDAP esta activado",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Error, no se puede cambiar la contraseña porque LDAP esta activado",
|
||||
"error.could.not.enable.zone": "No se pudo habilitar la zona",
|
||||
"error.installWizard.message": "Algo salio mal, debes ir para atrás y corregir los errores.",
|
||||
"error.invalid.username.password": "Usuario o contraseña invalido",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Propriétés de l'élément modifiées",
|
||||
"confirm.enable.s3": "Remplir les informations suivantes pour activer le support de stockage secondaire S3",
|
||||
"confirm.enable.swift": "Remplir les informations suivantes pour activer Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Erreur: impossible de changer votre mot de passe car le mode LDAP est activé.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Erreur: impossible de changer votre mot de passe car le mode LDAP est activé.",
|
||||
"error.could.not.enable.zone": "Impossible d'activer la zone",
|
||||
"error.installWizard.message": "Une erreur s'est produite ; vous pouvez retourner en arrière et corriger les erreurs",
|
||||
"error.invalid.username.password": "Identifiant ou mot de passe invalide",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Az elem tulajdonságai megváltoztak",
|
||||
"confirm.enable.s3": "Töltsd ki a következő információkat az S3 másodlagos tár bekapcsolásához!",
|
||||
"confirm.enable.swift": "Töltsd ki a következő információkat a Swift támogatás bekapcsolásához!",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Nem sikerült megváltoztatni a jelszavadat, mert az LDAP be van kapcsolva.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Nem sikerült megváltoztatni a jelszavadat, mert az LDAP be van kapcsolva.",
|
||||
"error.could.not.enable.zone": "A zóna engedélyezése sikertelen",
|
||||
"error.installWizard.message": "Valami nem sikerült, visszamehetsz kijavítani a hibákat.",
|
||||
"error.invalid.username.password": "Érvénytelen felhasználónév vagy jelszó",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Elementi delle proprietà modificati",
|
||||
"confirm.enable.s3": "Si prega di inserire i valori richiesti per abilitare il supporto per il Secondary Storage di tipo S3",
|
||||
"confirm.enable.swift": "Si prega di inserire i valori richiesti per abilitare il supporto per Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Errore non è possibile cambiare la tua password perchè LDAP è abilitato.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Errore non è possibile cambiare la tua password perchè LDAP è abilitato.",
|
||||
"error.could.not.enable.zone": "Impossibile abilitare la zona",
|
||||
"error.installWizard.message": "E' stato rilevato un errore: tornare agli step precedenti e correggere gli errori",
|
||||
"error.invalid.username.password": "Username o Password non valida",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "項目のプロパティの変更",
|
||||
"confirm.enable.s3": "S3 ベースのセカンダリ ストレージのサポートを有効にするには、次の情報を入力してください。",
|
||||
"confirm.enable.swift": "Swift のサポートを有効にするには、次の情報を入力してください。",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "エラー。LDAP が有効なためパスワードを変更できません。",
|
||||
"error.could.not.change.your.password.because.non.native.user": "エラー。LDAP が有効なためパスワードを変更できません。",
|
||||
"error.could.not.enable.zone": "ゾーンを有効にできませんでした",
|
||||
"error.installWizard.message": "問題が発生しました。戻ってエラーを修正できます。",
|
||||
"error.invalid.username.password": "無効なユーザー名またはパスワードです。",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "항목 속성 변경",
|
||||
"confirm.enable.s3": "S3 기반 2차 저장소 지원을 하려면 아래 정보를 입력해 주십시오.",
|
||||
"confirm.enable.swift": "Swift 기술 지원를 사용 하려면 다음 정보를 입력해 주십시오.",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "LDAP 기능이 활성화 되어 있기 때문에 패스워드 변경을 실패하였습니다.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "LDAP 기능이 활성화 되어 있기 때문에 패스워드 변경을 실패하였습니다.",
|
||||
"error.could.not.enable.zone": "Zone을 사용 할 수 없습니다.",
|
||||
"error.installWizard.message": "문제가 발생했습니다. 다시 오류를 수정할 수 있습니다.",
|
||||
"error.invalid.username.password": "유효하지 않은 사용자명 또는 암호",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Endrede egenskaper",
|
||||
"confirm.enable.s3": "Vennligst fyll inn følgende informasjon for å aktivere støtte for S3-støttet sekundærlagring",
|
||||
"confirm.enable.swift": "Vennligst fyll inn følgende informasjon for å aktivere støtte for Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Feil kunne ikke bytte ditt passord fordi LDAP er aktivert.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Feil kunne ikke bytte ditt passord fordi LDAP er aktivert.",
|
||||
"error.could.not.enable.zone": "Kunne ikke aktivere sonen",
|
||||
"error.installWizard.message": "Noe gikk galt. Gå tilbake og korriger feilene.",
|
||||
"error.invalid.username.password": "Ugyldig brukernavn eller passord",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Item eigenschappen gewijzigd",
|
||||
"confirm.enable.s3": "Vul de volgende informatie in om ondersteuning voor S3-aangestuurde Secundaire Opslag te activeren",
|
||||
"confirm.enable.swift": "Vul de volgende informatie in om ondersteuning voor Swift te activeren",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Fout. Kan wachtwoord niet wijzigen omdat LDAP is uitgeschakeld.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Fout. Kan wachtwoord niet wijzigen omdat LDAP is uitgeschakeld.",
|
||||
"error.could.not.enable.zone": "Kon zone niet activeren",
|
||||
"error.installWizard.message": "Er ging iets mis; je kunt teruggaan om de eventuele fouten te herstellen",
|
||||
"error.invalid.username.password": "Ongeldige gebruikersnaam of wachtwoord",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Changed item properties",
|
||||
"confirm.enable.s3": "Please fill in the following information to enable support for S3-backed Secondary Storage",
|
||||
"confirm.enable.swift": "Please fill in the following information to enable support for Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.enable.zone": "Could not enable zone",
|
||||
"error.installWizard.message": "Something went wrong; you may go back and correct any errors",
|
||||
"error.invalid.username.password": "Błędna nazwa użytkownika lub hasło",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Propriedades do item alteradas",
|
||||
"confirm.enable.s3": "Por favor, preencha as informações abaixo para habilitar suporte o Storage Secundário fornecido por S3",
|
||||
"confirm.enable.swift": "Por favor, preencha as informações abaixo para habilitar suporte ao Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Erro: a nuvem não alterou sua senha porque o LDAP está ativo.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Erro: a nuvem não alterou sua senha porque o LDAP está ativo.",
|
||||
"error.could.not.enable.zone": "Não foi possível habilitar a zona",
|
||||
"error.installWizard.message": "Alguma coisa está errada; você pode voltar e corrigir quaisquer erros",
|
||||
"error.invalid.username.password": "Usuário ou senha inválidos",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "Параметры элемента изменены",
|
||||
"confirm.enable.s3": "Заполните информацию для включения S3-совместимого дополнительного хранилища",
|
||||
"confirm.enable.swift": "Заполните нижеследующую информацию для включения поддержи Swift",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.change.your.password.because.non.native.user": "Error could not change your password because LDAP is enabled.",
|
||||
"error.could.not.enable.zone": "Не удалось включить зону",
|
||||
"error.installWizard.message": "Что-то не так. Вернитесь назад и исправьте ошибки.",
|
||||
"error.invalid.username.password": "Неправильній логин или пароль",
|
||||
|
||||
@ -20,7 +20,7 @@ var dictionary = {
|
||||
"changed.item.properties": "更改项目属性",
|
||||
"confirm.enable.s3": "请填写以下信息以启用对 S3 支持的二级存储的支持",
|
||||
"confirm.enable.swift": "请填写以下信息以启用对 SWIFT 的支持",
|
||||
"error.could.not.change.your.password.because.ldap.is.enabled": "错误。LDAP 处于启用状态,无法更改您的密码。",
|
||||
"error.could.not.change.your.password.because.non.native.user": "错误。LDAP 处于启用状态,无法更改您的密码。",
|
||||
"error.could.not.enable.zone": "无法启用资源域",
|
||||
"error.installWizard.message": "出现问题;请返回并更正任何错误",
|
||||
"error.invalid.username.password": "用户名或密码无效",
|
||||
|
||||
@ -1267,9 +1267,8 @@
|
||||
var complete = args.complete;
|
||||
var context = args.context;
|
||||
|
||||
if (isLdapEnabled()) {
|
||||
cloudStack.dialog.notice({ message: _l('error.could.not.change.your.password.because.ldap.is.enabled') });
|
||||
} else {
|
||||
var userSource = context.users[0].usersource;
|
||||
if (userSource == "native") {
|
||||
cloudStack.dialog.createForm({
|
||||
form: {
|
||||
title: 'label.action.change.password',
|
||||
@ -1316,6 +1315,8 @@
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
cloudStack.dialog.notice({ message: _l('error.could.not.change.your.password.because.non.native.user') });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user