Merge
This commit is contained in:
commit
ccf99f4f8e
8 changed files with 266 additions and 78 deletions
|
@ -323,23 +323,6 @@ bool CI18N::parseLabel(ucstring::const_iterator &it, ucstring::const_iterator &l
|
|||
ucstring::const_iterator rewind = it;
|
||||
label.erase();
|
||||
|
||||
// first char must be A-Za-z@_
|
||||
if (it != last &&
|
||||
(
|
||||
(*it >= '0' && *it <= '9')
|
||||
|| (*it >= 'A' && *it <= 'Z')
|
||||
|| (*it >= 'a' && *it <= 'z')
|
||||
|| (*it == '_')
|
||||
|| (*it == '@')
|
||||
)
|
||||
)
|
||||
label.push_back(char(*it++));
|
||||
else
|
||||
{
|
||||
it = rewind;
|
||||
return false;
|
||||
}
|
||||
|
||||
// other char must be [0-9A-Za-z@_]*
|
||||
while (it != last &&
|
||||
(
|
||||
|
|
|
@ -16,58 +16,62 @@ hardstatus alwayslastline "%w"
|
|||
|
||||
chdir $RYZOM_PATH/server
|
||||
|
||||
screen -t aes /bin/sh service_launcher.sh aes $RYZOM_PATH/../build/bin/ryzom_admin_service -A. -C. -L. --nobreak --fulladminname=admin_executor_service --shortadminname=AES
|
||||
screen -t aes /bin/sh ../tools/scripts/linux/service_launcher.sh aes $RYZOM_PATH/../build/bin/ryzom_admin_service -A. -C. -L. --nobreak --fulladminname=admin_executor_service --shortadminname=AES
|
||||
|
||||
# bms_master
|
||||
screen -t bms_master /bin/sh service_launcher.sh bms_master $RYZOM_PATH/../build/bin/ryzom_backup_service -C. -L. --nobreak --writepid -P49990
|
||||
screen -t bms_master /bin/sh ../tools/scripts/linux/service_launcher.sh bms_master $RYZOM_PATH/../build/bin/ryzom_backup_service -C. -L. --nobreak --writepid -P49990
|
||||
|
||||
# bms_pd_master
|
||||
#screen -t bms_pd_master /bin/sh service_launcher.sh bms_pd_master $RYZOM_PATH/../build/bin/ryzom_backup_service -C. -L. --nobreak --writepid -P49992
|
||||
#screen -t bms_pd_master /bin/sh ../tools/scripts/linux/service_launcher.sh bms_pd_master $RYZOM_PATH/../build/bin/ryzom_backup_service -C. -L. --nobreak --writepid -P49992
|
||||
|
||||
# egs
|
||||
screen -t egs /bin/sh service_launcher.sh egs $RYZOM_PATH/../build/bin/ryzom_entities_game_service -C. -L. --nobreak --writepid
|
||||
screen -t egs /bin/sh ../tools/scripts/linux/service_launcher.sh egs $RYZOM_PATH/../build/bin/ryzom_entities_game_service -C. -L. --nobreak --writepid
|
||||
|
||||
# gpms
|
||||
screen -t gpms /bin/sh service_launcher.sh gpms $RYZOM_PATH/../build/bin/ryzom_gpm_service -C. -L. --nobreak --writepid
|
||||
screen -t gpms /bin/sh ../tools/scripts/linux/service_launcher.sh gpms $RYZOM_PATH/../build/bin/ryzom_gpm_service -C. -L. --nobreak --writepid
|
||||
|
||||
# ios
|
||||
screen -t ios /bin/sh service_launcher.sh ios $RYZOM_PATH/../build/bin/ryzom_ios_service -C. -L. --nobreak --writepid
|
||||
screen -t ios /bin/sh ../tools/scripts/linux/service_launcher.sh ios $RYZOM_PATH/../build/bin/ryzom_ios_service -C. -L. --nobreak --writepid
|
||||
|
||||
# rns
|
||||
screen -t rns /bin/sh service_launcher.sh rns $RYZOM_PATH/../build/bin/ryzom_naming_service -C. -L. --nobreak --writepid
|
||||
screen -t rns /bin/sh ../tools/scripts/linux/service_launcher.sh rns $RYZOM_PATH/../build/bin/ryzom_naming_service -C. -L. --nobreak --writepid
|
||||
|
||||
# rws
|
||||
screen -t rws /bin/sh service_launcher.sh rws $RYZOM_PATH/../build/bin/ryzom_welcome_service -C. -L. --nobreak --writepid
|
||||
screen -t rws /bin/sh ../tools/scripts/linux/service_launcher.sh rws $RYZOM_PATH/../build/bin/ryzom_welcome_service -C. -L. --nobreak --writepid
|
||||
|
||||
# ts
|
||||
screen -t ts /bin/sh service_launcher.sh ts $RYZOM_PATH/../build/bin/ryzom_tick_service -C. -L. --nobreak --writepid
|
||||
screen -t ts /bin/sh ../tools/scripts/linux/service_launcher.sh ts $RYZOM_PATH/../build/bin/ryzom_tick_service -C. -L. --nobreak --writepid
|
||||
|
||||
# ms
|
||||
screen -t ms /bin/sh service_launcher.sh ms $RYZOM_PATH/../build/bin/ryzom_mirror_service -C. -L. --nobreak --writepid
|
||||
screen -t ms /bin/sh ../tools/scripts/linux/service_launcher.sh ms $RYZOM_PATH/../build/bin/ryzom_mirror_service -C. -L. --nobreak --writepid
|
||||
|
||||
# ais_newbyland
|
||||
screen -t ais_newbyland /bin/sh service_launcher.sh ais_newbyland $RYZOM_PATH/../build/bin/ryzom_ai_service -C. -L. --nobreak --writepid -mCommon:Newbieland:Post
|
||||
screen -t ais_newbyland /bin/sh ../tools/scripts/linux/service_launcher.sh ais_newbyland $RYZOM_PATH/../build/bin/ryzom_ai_service -C. -L. --nobreak --writepid -mCommon:Newbieland:Post
|
||||
|
||||
# mfs
|
||||
screen -t mfs /bin/sh service_launcher.sh mfs $RYZOM_PATH/../build/bin/ryzom_mail_forum_service -C. -L. --nobreak --writepid
|
||||
screen -t mfs /bin/sh ../tools/scripts/linux/service_launcher.sh mfs $RYZOM_PATH/../build/bin/ryzom_mail_forum_service -C. -L. --nobreak --writepid
|
||||
|
||||
# su
|
||||
screen -t su /bin/sh service_launcher.sh su $RYZOM_PATH/../build/bin/ryzom_shard_unifier_service -C. -L. --nobreak --writepid
|
||||
screen -t su /bin/sh ../tools/scripts/linux/service_launcher.sh su $RYZOM_PATH/../build/bin/ryzom_shard_unifier_service -C. -L. --nobreak --writepid
|
||||
|
||||
# fes
|
||||
screen -t fes /bin/sh service_launcher.sh fes $RYZOM_PATH/../build/bin/ryzom_frontend_service -C. -L. --nobreak --writepid
|
||||
screen -t fes /bin/sh ../tools/scripts/linux/service_launcher.sh fes $RYZOM_PATH/../build/bin/ryzom_frontend_service -C. -L. --nobreak --writepid
|
||||
|
||||
# sbs
|
||||
screen -t sbs /bin/sh service_launcher.sh sbs $RYZOM_PATH/../build/bin/ryzom_session_browser_service -C. -L. --nobreak --writepid
|
||||
screen -t sbs /bin/sh ../tools/scripts/linux/service_launcher.sh sbs $RYZOM_PATH/../build/bin/ryzom_session_browser_service -C. -L. --nobreak --writepid
|
||||
|
||||
# lgs
|
||||
screen -t lgs /bin/sh service_launcher.sh lgs $RYZOM_PATH/../build/bin/ryzom_logger_service -C. -L. --nobreak --writepid
|
||||
screen -t lgs /bin/sh ../tools/scripts/linux/service_launcher.sh lgs $RYZOM_PATH/../build/bin/ryzom_logger_service -C. -L. --nobreak --writepid
|
||||
|
||||
# mos
|
||||
#screen -t mos /bin/sh service_launcher.sh mos $RYZOM_PATH/../build/bin/ryzom_monitor_service -C. -L. --nobreak --writepid
|
||||
#screen -t mos /bin/sh ../tools/scripts/linux/service_launcher.sh mos $RYZOM_PATH/../build/bin/ryzom_monitor_service -C. -L. --nobreak --writepid
|
||||
|
||||
# pdss
|
||||
#screen -t pdss /bin/sh service_launcher.sh pdss $RYZOM_PATH/../build/bin/ryzom_pd_support_service -C. -L. --nobreak --writepid
|
||||
#screen -t pdss /bin/sh ../tools/scripts/linux/service_launcher.sh pdss $RYZOM_PATH/../build/bin/ryzom_pd_support_service -C. -L. --nobreak --writepid
|
||||
|
||||
# ras
|
||||
screen -t ras /bin/sh service_launcher.sh ras $RYZOM_PATH/../build/bin/ryzom_admin_service --fulladminname=admin_service --shortadminname=AS -C. -L. --nobreak --writepid
|
||||
screen -t ras /bin/sh ../tools/scripts/linux/service_launcher.sh ras $RYZOM_PATH/../build/bin/ryzom_admin_service --fulladminname=admin_service --shortadminname=AS -C. -L. --nobreak --writepid
|
||||
|
||||
# switch back to AES screen
|
||||
select 0
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ CMD=$1
|
|||
#DOMAIN=$(pwd|sed s%/home/nevrax/%%)
|
||||
DOMAIN=shard
|
||||
|
||||
if [ "$CMD" == "" ]
|
||||
if [ "$CMD" = "" ]
|
||||
then
|
||||
echo
|
||||
echo Screen sessions currently running:
|
||||
|
@ -21,7 +21,7 @@ then
|
|||
read CMD
|
||||
fi
|
||||
|
||||
if [ "$CMD" == "stop" ]
|
||||
if [ "$CMD" = "stop" ]
|
||||
then
|
||||
if [ $(screen -list | grep \\\.${DOMAIN} | wc -l) != 1 ]
|
||||
then
|
||||
|
@ -35,13 +35,13 @@ then
|
|||
fi
|
||||
|
||||
STARTARGS=
|
||||
if [ "$CMD" == "batchstart" ]
|
||||
if [ "$CMD" = "batchstart" ]
|
||||
then
|
||||
STARTARGS='-d -m'
|
||||
CMD='start'
|
||||
fi
|
||||
|
||||
if [ "$CMD" == "start" ]
|
||||
if [ "$CMD" = "start" ]
|
||||
then
|
||||
ulimit -c unlimited
|
||||
screen -wipe > /dev/null
|
||||
|
@ -52,9 +52,15 @@ then
|
|||
else
|
||||
screen $STARTARGS -S ${DOMAIN} -c ${DOMAIN}.screen.rc
|
||||
fi
|
||||
|
||||
if [ "$STARTARGS" != "" ]
|
||||
then
|
||||
# on "batchstart", AES needs to be launched and AES will then launch other services
|
||||
printf LAUNCH > aes/aes.launch_ctrl
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CMD" == "join" ]
|
||||
if [ "$CMD" = "join" ]
|
||||
then
|
||||
if [ $(screen -list | grep \\\.${DOMAIN} | wc -l) != 1 ]
|
||||
then
|
||||
|
@ -65,7 +71,7 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
if [ "$CMD" == "share" ]
|
||||
if [ "$CMD" = "share" ]
|
||||
then
|
||||
if [ $(screen -list | grep \\\.${DOMAIN} | wc -l) != 1 ]
|
||||
then
|
||||
|
@ -76,13 +82,13 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
if [ "$CMD" == "state" ]
|
||||
if [ "$CMD" = "state" ]
|
||||
then
|
||||
echo State of domain ${DOMAIN}:
|
||||
if [ $(echo */*.state) == "*/*.state" ]
|
||||
if [ "$(echo */*.state)" = "*/*.state" ]
|
||||
then
|
||||
echo - No state files found
|
||||
else
|
||||
grep RUNNING *state
|
||||
grep RUNNING */*state
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -53,7 +53,7 @@ do
|
|||
CTRL_COMMAND=_$(cat $CTRL_FILE)_
|
||||
|
||||
# do we have a 'launch' command?
|
||||
if [ $CTRL_COMMAND == _LAUNCH_ ]
|
||||
if [ $CTRL_COMMAND = _LAUNCH_ ]
|
||||
then
|
||||
|
||||
# update the start counter
|
||||
|
@ -90,10 +90,9 @@ do
|
|||
# we have some kind of relaunch directive lined up so deal with it
|
||||
mv $NEXT_CTRL_FILE $CTRL_FILE
|
||||
else
|
||||
# give the terminal user a chance to press enter to provoke a re-launch
|
||||
HOLD=HOLD
|
||||
read -t2 HOLD
|
||||
if [ _${HOLD}_ != _HOLD_ ]
|
||||
# give the terminal user a chance to press enter to provoke a re-launch when auto-relaunch in AES is disabled
|
||||
HOLD=`sh -ic '{ read a; echo "ENTER" 1>&3; kill 0; } | { sleep 2; kill 0; }' 3>&1 2>/dev/null`
|
||||
if [ "${HOLD}" = "ENTER" ]
|
||||
then
|
||||
printf LAUNCH > $CTRL_FILE
|
||||
fi
|
||||
|
|
|
@ -289,8 +289,11 @@ class Users{
|
|||
public static function createUser($values, $user_id){
|
||||
try {
|
||||
//make connection with and put into shard db
|
||||
$values['user_id']= $user_id;
|
||||
$dbs = new DBLayer("shard");
|
||||
$dbs->execute("INSERT INTO user (Login, Password, Email) VALUES (:name, :pass, :mail)",$values);
|
||||
$dbr = new DBLayer("ring");
|
||||
$dbr->execute("INSERT INTO ring_users (user_id, user_name, user_type) VALUES (:user_id, :name, 'ut_pioneer')",$values);
|
||||
ticket_user::createTicketUser( $user_id, 1);
|
||||
return "ok";
|
||||
}
|
||||
|
|
|
@ -37,6 +37,15 @@ function add_user(){
|
|||
$pageElements['ingame_webpath'] = $INGAME_WEBPATH;
|
||||
helpers :: loadtemplate( 'register_feedback', $pageElements);
|
||||
exit;
|
||||
}elseif ($_POST['page']=="settings"){
|
||||
// pass error and reload template accordingly
|
||||
$result['prevUsername'] = $_POST["Username"];
|
||||
$result['prevPassword'] = $_POST["Password"];
|
||||
$result['prevConfirmPass'] = $_POST["ConfirmPass"];
|
||||
$result['prevEmail'] = $_POST["Email"];
|
||||
$result['no_visible_elements'] = 'TRUE';
|
||||
helpers :: loadtemplate( 'settings', $result);
|
||||
exit;
|
||||
}else{
|
||||
// pass error and reload template accordingly
|
||||
$result['prevUsername'] = $_POST["Username"];
|
||||
|
|
|
@ -5,6 +5,32 @@
|
|||
* @author Daan Janssens, mentored by Matthew Lagoe
|
||||
*/
|
||||
|
||||
//set permissions
|
||||
if(chmod('../../../www/login/logs', 0660)) {
|
||||
echo "failed to set permissions on logs";
|
||||
exit;
|
||||
}
|
||||
if(chmod('../../../admin/graphs_output', 0660)) {
|
||||
echo "failed to set permissions on graphs_output";
|
||||
exit;
|
||||
}
|
||||
if(chmod('../../../templates/default_c', 0660)) {
|
||||
echo "failed to set permissions on default_c";
|
||||
exit;
|
||||
}
|
||||
if(chmod('../../www', 0660)) {
|
||||
echo "failed to set permissions on www";
|
||||
exit;
|
||||
}
|
||||
if(chmod('../../www/html/cache', 0660)) {
|
||||
echo "failed to set permissions on cache";
|
||||
exit;
|
||||
}
|
||||
if(chmod('../../www/html/templates_c', 0660)) {
|
||||
echo "failed to set permissions on templates_c";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!isset($_POST['function'])) {
|
||||
//require the pages that are being needed.
|
||||
require_once( '../config.default.php' );
|
||||
|
|
|
@ -52,6 +52,164 @@
|
|||
|
||||
|
||||
|
||||
{if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "OK"}
|
||||
<div class="alert alert-success">
|
||||
The password has been changed!
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "SHARDOFF"}
|
||||
<div class="alert alert-warning">
|
||||
The password has been changed, though the shard seems offline, it may take some time to see the change on the shard.
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<input type="hidden" name="function" value="change_password">
|
||||
<input type="hidden" name="target_id" value="{$target_id}">
|
||||
<div class="control-group">
|
||||
<label class="control-label"></label>
|
||||
<div class="controls">
|
||||
<button type="submit" class="btn btn-primary" style="margin-left:5px; margin-top:10px;">Change Password</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div><!--/span-->
|
||||
|
||||
|
||||
<div class="box span4">
|
||||
<div class="box-header well" data-original-title="">
|
||||
<h2><i class="icon-th"></i> Add User</h2>
|
||||
<div class="box-icon">
|
||||
<a href="#" class="btn btn-minimize btn-round"><i class="icon-chevron-up"></i></a>
|
||||
<a href="#" class="btn btn-close btn-round"><i class="icon-remove"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-content">
|
||||
<div class="row-fluid">
|
||||
<form id="addUser" class="form-vertical" method="post" action="index.php?page=settings&id={$target_id}">
|
||||
<legend>Add User</legend>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">Username</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span style="margin-left:5px;" class="add-on"><i class="icon-user"></i></span>
|
||||
<input type="text" value="Username" placeholder="Username" name="Username" id="Username" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group ">
|
||||
<label class="control-label">Password</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span style="margin-left:5px;" class="add-on"><i class="icon-lock"></i></span>
|
||||
<input type="password" placeholder="Password" name="Password" id="Password" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group ">
|
||||
<label class="control-label">Confirm Password</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span style="margin-left:5px;" class="add-on"><i class="icon-lock"></i></span>
|
||||
<input type="password" placeholder="Confirm Password" name="ConfirmPass" id="ConfirmPass" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group ">
|
||||
<label class="control-label">Email</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span style="margin-left:5px;" class="add-on"><i class="icon-envelope"></i></span>
|
||||
<input type="text" value="Email" placeholder="Email" name="Email" id="Email" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "OK"}
|
||||
<div class="alert alert-success">
|
||||
The user is created!
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "SHARDOFF"}
|
||||
<div class="alert alert-warning">
|
||||
The user can't be created.
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<input type="hidden" name="function" value="add_user">
|
||||
<input type="hidden" name="target_id" value="{$target_id}">
|
||||
<div class="control-group">
|
||||
<label class="control-label"></label>
|
||||
<div class="controls">
|
||||
<button type="submit" class="btn btn-primary" style="margin-left:5px; margin-top:10px;">Create User</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div><!--/span-->
|
||||
|
||||
|
||||
<div class="box span4">
|
||||
<div class="box-header well" data-original-title="">
|
||||
<h2><i class="icon-th"></i> Create User</h2>
|
||||
<div class="box-icon">
|
||||
<a href="#" class="btn btn-minimize btn-round"><i class="icon-chevron-up"></i></a>
|
||||
<a href="#" class="btn btn-close btn-round"><i class="icon-remove"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-content">
|
||||
<div class="row-fluid">
|
||||
<form id="changePassword" class="form-vertical" method="post" action="index.php?page=settings&id={$target_id}">
|
||||
<legend>Create User</legend>
|
||||
|
||||
{if !isset($changesOther) or $changesOther eq "FALSE"}
|
||||
<div class="control-group {if isset($MATCH_ERROR) and $MATCH_ERROR eq "TRUE"}error{else if
|
||||
isset($match_error_message) and $match_error_message neq "fail"}success{else}{/if}">
|
||||
<label class="control-label">Create User</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span class="add-on" style="margin-left:5px;"><i class="icon-lock"></i></span>
|
||||
<input type="password" class="input-xlarge" id="CurrentPass" name="CurrentPass" placeholder="Your current password" {if isset($prevCurrentPass)}value="{$prevCurrentPass}"{/if}>
|
||||
{if isset($MATCH_ERROR) and $MATCH_ERROR eq "TRUE"}<span class="help-inline">The password is incorrect</span>{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="control-group {if isset($NEWPASSWORD_ERROR) and $NEWPASSWORD_ERROR eq "TRUE"}error{else if
|
||||
isset($newpass_error_message) and $newpass_error_message eq "success"}success{else}{/if}">
|
||||
<label class="control-label">New Password</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span class="add-on" style="margin-left:5px;"><i class="icon-tag"></i></span>
|
||||
<input type="password" class="input-xlarge" id="NewPass" name="NewPass" placeholder="Your new password" {if isset($prevNewPass)}value="{$prevNewPass}"{/if}>
|
||||
{if isset($NEWPASSWORD_ERROR) and $NEWPASSWORD_ERROR eq "TRUE"}<span class="help-inline">{$newpass_error_message}</span>{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group {if isset($CNEWPASSWORD_ERROR) and $CNEWPASSWORD_ERROR eq "TRUE"}error{else if
|
||||
isset($confirmnewpass_error_message) and $confirmnewpass_error_message eq "success"}success{else}{/if}">
|
||||
<label class="control-label">Confirm New Password</label>
|
||||
<div class="controls">
|
||||
<div class="input-prepend">
|
||||
<span class="add-on" style="margin-left:5px;"><i class="icon-tags"></i></span>
|
||||
<input type="password" class="input-xlarge" id="ConfirmNewPass" name="ConfirmNewPass" placeholder="Re-enter the new password" {if isset($prevConfirmNewPass)}value="{$prevConfirmNewPass}"{/if}>
|
||||
{if isset($CNEWPASSWORD_ERROR) and $CNEWPASSWORD_ERROR eq "TRUE"}<span class="help-inline">{$confirmnewpass_error_message}</span>{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{if isset($SUCCESS_PASS) and $SUCCESS_PASS eq "OK"}
|
||||
<div class="alert alert-success">
|
||||
The password has been changed!
|
||||
|
|
Loading…
Reference in a new issue