2019-09-06 23:43:07 -04:00
# include "users.h"
// This file is part of MRCI.
// MRCI is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// MRCI is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with MRCI under the LICENSE.md file. If not, see
// <http://www.gnu.org/licenses/>.
ListUsers : : ListUsers ( QObject * parent ) : TableViewer ( parent )
{
2019-11-08 22:06:09 -05:00
setParams ( TABLE_USERS , false ) ;
addTableColumn ( TABLE_USERS , COLUMN_TIME ) ;
addTableColumn ( TABLE_USERS , COLUMN_USERNAME ) ;
addTableColumn ( TABLE_USERS , COLUMN_HOST_RANK ) ;
addTableColumn ( TABLE_USERS , COLUMN_USER_ID ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
LockUser : : LockUser ( QObject * parent ) : CmdObject ( parent ) { }
CreateUser : : CreateUser ( QObject * parent ) : CmdObject ( parent ) { }
RemoveUser : : RemoveUser ( QObject * parent ) : CmdObject ( parent ) { }
ChangeUserRank : : ChangeUserRank ( QObject * parent ) : CmdObject ( parent ) { }
ChangePassword : : ChangePassword ( QObject * parent ) : CmdObject ( parent ) { }
ChangeDispName : : ChangeDispName ( QObject * parent ) : CmdObject ( parent ) { }
ChangeUsername : : ChangeUsername ( QObject * parent ) : CmdObject ( parent ) { }
OverWriteEmail : : OverWriteEmail ( QObject * parent ) : CmdObject ( parent ) { }
2019-09-06 23:43:07 -04:00
ChangeEmail : : ChangeEmail ( QObject * parent ) : OverWriteEmail ( parent ) { }
2019-11-08 22:06:09 -05:00
PasswordChangeRequest : : PasswordChangeRequest ( QObject * parent ) : CmdObject ( parent ) { }
NameChangeRequest : : NameChangeRequest ( QObject * parent ) : PasswordChangeRequest ( parent ) { }
2019-09-06 23:43:07 -04:00
QString ListUsers : : cmdName ( ) { return " ls_users " ; }
QString LockUser : : cmdName ( ) { return " lock_acct " ; }
QString CreateUser : : cmdName ( ) { return " add_acct " ; }
QString RemoveUser : : cmdName ( ) { return " rm_acct " ; }
2019-11-08 22:06:09 -05:00
QString ChangeUserRank : : cmdName ( ) { return " set_user_rank " ; }
2019-09-06 23:43:07 -04:00
QString ChangePassword : : cmdName ( ) { return " set_pw " ; }
QString ChangeDispName : : cmdName ( ) { return " set_disp_name " ; }
QString ChangeUsername : : cmdName ( ) { return " set_user_name " ; }
QString OverWriteEmail : : cmdName ( ) { return " force_set_email " ; }
QString ChangeEmail : : cmdName ( ) { return " set_email " ; }
QString PasswordChangeRequest : : cmdName ( ) { return " request_new_pw " ; }
QString NameChangeRequest : : cmdName ( ) { return " request_new_user_name " ; }
2019-11-08 22:06:09 -05:00
bool canModifyUser ( const QByteArray & uId , quint32 myRank , bool equalAcceptable )
{
Query db ;
db . setType ( Query : : PULL , TABLE_USERS ) ;
db . addColumn ( COLUMN_HOST_RANK ) ;
db . addCondition ( COLUMN_USER_ID , uId ) ;
db . exec ( ) ;
if ( equalAcceptable )
{
return myRank < = db . getData ( COLUMN_HOST_RANK ) . toUInt ( ) ;
}
else
{
return myRank < db . getData ( COLUMN_HOST_RANK ) . toUInt ( ) ;
}
}
void LockUser : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 4 ) ;
QString uName = getParam ( " -user " , args ) ;
QString state = getParam ( " -state " , args ) ;
2019-11-08 22:06:09 -05:00
QByteArray uId ;
2019-09-06 23:43:07 -04:00
if ( uName . isEmpty ( ) )
{
errTxt ( " err: User name (-user) argument not found or is empty. \n " ) ;
}
else if ( state . isEmpty ( ) )
{
errTxt ( " err: State (-state) argument not found or is empty. \n " ) ;
}
else if ( ! validUserName ( uName ) )
{
errTxt ( " err: Invalid user name. \n " ) ;
}
else if ( ! isBool ( state ) )
{
errTxt ( " err: The state bool value (-state) must be a 0 or 1. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! userExists ( uName , & uId ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The requested user name does not exists. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! canModifyUser ( uId , rd32BitFromBlock ( hostRank ) , false ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: The target user account out ranks you or is equal to your own rank. access denied. \n " ) ;
2019-09-06 23:43:07 -04:00
}
else
{
Query db ( this ) ;
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_LOCKED , static_cast < bool > ( state . toInt ( ) ) ) ;
2019-11-08 22:06:09 -05:00
db . addCondition ( COLUMN_USER_ID , uId ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
}
}
}
2019-11-08 22:06:09 -05:00
void CreateUser : : clear ( )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
flags = 0 ;
2019-09-06 23:43:07 -04:00
email . clear ( ) ;
newName . clear ( ) ;
}
2019-11-08 22:06:09 -05:00
void CreateUser : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
2019-11-08 22:06:09 -05:00
if ( flags & MORE_INPUT )
2019-09-06 23:43:07 -04:00
{
QString password = fromTEXT ( binIn ) ;
if ( password . isEmpty ( ) )
{
2019-11-08 22:06:09 -05:00
clear ( ) ;
2019-09-06 23:43:07 -04:00
}
else if ( ! validPassword ( password ) )
{
errTxt ( " err: Invalid password. it must be 8-200 chars long containing numbers, mixed case letters and special chars. \n \n " ) ;
privTxt ( " Enter a new password (leave blank to cancel): " ) ;
}
else if ( ! createUser ( newName , email , dispName , password ) )
{
errTxt ( " err: The requested User name already exists. \n " ) ;
2019-11-08 22:06:09 -05:00
clear ( ) ;
2019-09-06 23:43:07 -04:00
}
else
{
2019-11-08 22:06:09 -05:00
clear ( ) ;
2019-09-06 23:43:07 -04:00
}
}
else
{
2019-11-08 22:06:09 -05:00
QStringList args = parseArgs ( binIn , 6 ) ;
2019-09-06 23:43:07 -04:00
dispName = getParam ( " -disp " , args ) ;
newName = getParam ( " -name " , args ) ;
email = getParam ( " -email " , args ) ;
if ( newName . isEmpty ( ) )
{
errTxt ( " err: Username (-name) argument not found or is empty. \n " ) ;
}
else if ( email . isEmpty ( ) )
{
errTxt ( " err: Email (-email) argument not found or is empty. \n " ) ;
}
else if ( ! validUserName ( newName ) )
{
errTxt ( " err: Invalid username. it must be 2-24 chars long and contain no spaces. \n " ) ;
}
else if ( ! validEmailAddr ( email ) )
{
errTxt ( " err: Invalid email address. it must contain a '@' symbol along with a vaild host address and user name that contain no spaces. it must also be less than 64 chars long. \n " ) ;
}
else if ( ! validDispName ( dispName ) )
{
errTxt ( " err: The display name is too large or contains a newline char. char limit: 32. \n " ) ;
}
else if ( userExists ( newName ) )
{
errTxt ( " err: The requested User name already exists. \n " ) ;
}
else if ( emailExists ( email ) )
{
errTxt ( " err: The requested email address is already in use. \n " ) ;
}
else
{
2019-11-08 22:06:09 -05:00
flags | = MORE_INPUT ;
2019-09-06 23:43:07 -04:00
privTxt ( " Enter a new password (leave blank to cancel): " ) ;
}
}
}
}
void RemoveUser : : rm ( )
{
Query db ;
db . setType ( Query : : DEL , TABLE_USERS ) ;
2019-11-08 22:06:09 -05:00
db . addCondition ( COLUMN_USER_ID , uId ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
2019-11-08 22:06:09 -05:00
flags & = ~ MORE_INPUT ;
2019-09-06 23:43:07 -04:00
2019-11-08 22:06:09 -05:00
async ( ASYNC_USER_DELETED , PUB_IPC_WITH_FEEDBACK , uId ) ;
2019-09-06 23:43:07 -04:00
}
void RemoveUser : : ask ( )
{
2019-11-08 22:06:09 -05:00
flags | = MORE_INPUT ;
2019-09-06 23:43:07 -04:00
mainTxt ( " Are you sure you want to permanently remove this user account? (y/n): " ) ;
}
2019-11-08 22:06:09 -05:00
void RemoveUser : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
2019-11-08 22:06:09 -05:00
if ( flags & MORE_INPUT )
2019-09-06 23:43:07 -04:00
{
QString ans = fromTEXT ( binIn ) ;
if ( noCaseMatch ( " y " , ans ) )
{
rm ( ) ;
}
else if ( noCaseMatch ( " n " , ans ) )
{
2019-11-08 22:06:09 -05:00
flags & = ~ MORE_INPUT ;
2019-09-06 23:43:07 -04:00
}
else
{
ask ( ) ;
}
}
else
{
2019-11-08 22:06:09 -05:00
QStringList args = parseArgs ( binIn , 2 ) ;
QString uName = getParam ( " -name " , args ) ;
2019-09-06 23:43:07 -04:00
if ( uName . isEmpty ( ) )
{
errTxt ( " err: User name argument (-name) not found or is empty. \n " ) ;
}
else if ( noCaseMatch ( ROOT_USER , uName ) )
{
errTxt ( " err: Unable to delete protected user: ' " + QString ( ROOT_USER ) + " ' \n " ) ;
}
else if ( ! validUserName ( uName ) )
{
errTxt ( " err: Invalid username. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! userExists ( uName , & uId ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The requested user name does not exists. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( isChOwner ( uId ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: The requested user name is the owner of one or more channels. assign new owners for these channels before attempting to delete this account. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( ! canModifyUser ( uId , rd32BitFromBlock ( hostRank ) , false ) & & ( rdFromBlock ( userId , BLKSIZE_USER_ID ) ! = uId ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The target user account out ranks you, access denied. \n " ) ;
}
else
{
if ( argExists ( " -force " , args ) )
{
rm ( ) ;
}
else
{
ask ( ) ;
}
}
}
}
}
2019-11-08 22:06:09 -05:00
void ChangeUserRank : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
2019-11-08 22:06:09 -05:00
QStringList args = parseArgs ( binIn , 4 ) ;
QString uName = getParam ( " -user " , args ) ;
QString rank = getParam ( " -rank " , args ) ;
QByteArray uId ;
2019-09-06 23:43:07 -04:00
if ( uName . isEmpty ( ) )
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: User name argument (-user) not found or is empty. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( rank . isEmpty ( ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: New rank argument (-rank) not found or is empty. \n " ) ;
2019-09-06 23:43:07 -04:00
}
else if ( noCaseMatch ( ROOT_USER , uName ) )
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: You are not allowed to change the rank of protected user: ' " + QString ( ROOT_USER ) + " ' \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( ! validUserName ( uName ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: Invalid username. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( ! isInt ( rank ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: Invalid 32bit unsigned integer for the new rank. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( rank . toUInt ( ) = = 0 )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: Rank 0 is invalid. please set a rank of 1 or higher. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( rank . toUInt ( ) < rd32BitFromBlock ( hostRank ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: You cannot assign a rank higher than your own. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( ! userExists ( uName , & uId ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: The requested user account does not exists. \n " ) ;
2019-09-06 23:43:07 -04:00
}
2019-11-08 22:06:09 -05:00
else if ( ! canModifyUser ( uId , rd32BitFromBlock ( hostRank ) , false ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: The target user out ranks you or is equal to your own rank. access denied. \n " ) ;
2019-09-06 23:43:07 -04:00
}
else
{
Query db ( this ) ;
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
2019-11-08 22:06:09 -05:00
db . addColumn ( COLUMN_HOST_RANK , rank . toUInt ( ) ) ;
db . addCondition ( COLUMN_USER_ID , uId ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
2019-11-08 22:06:09 -05:00
async ( ASYNC_USER_RANK_CHANGED , PUB_IPC_WITH_FEEDBACK , uId + wrInt ( rank . toUInt ( ) , 32 ) ) ;
2019-09-06 23:43:07 -04:00
}
}
}
2019-11-08 22:06:09 -05:00
void ChangePassword : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
2019-11-08 22:06:09 -05:00
if ( flags & MORE_INPUT )
2019-09-06 23:43:07 -04:00
{
QString password = fromTEXT ( binIn ) ;
if ( password . isEmpty ( ) )
{
2019-11-08 22:06:09 -05:00
flags & = ~ MORE_INPUT ;
2019-09-06 23:43:07 -04:00
}
else if ( ! validPassword ( password ) )
{
errTxt ( " err: Invalid password. it must be 8-200 chars long containing numbers, mixed case letters and special chars. \n \n " ) ;
privTxt ( " Enter a new password (leave blank to cancel): " ) ;
}
else
{
2019-11-08 22:06:09 -05:00
flags & = ~ MORE_INPUT ;
2019-09-06 23:43:07 -04:00
2019-11-08 22:06:09 -05:00
updatePassword ( rdFromBlock ( userId , BLKSIZE_USER_ID ) , password , TABLE_USERS ) ;
2019-09-06 23:43:07 -04:00
}
}
else
{
2019-11-08 22:06:09 -05:00
flags | = MORE_INPUT ;
2019-09-06 23:43:07 -04:00
privTxt ( " Enter a new password (leave blank to cancel): " ) ;
}
}
}
2019-11-08 22:06:09 -05:00
void ChangeUsername : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 2 ) ;
QString newName = getParam ( " -new_name " , args ) ;
if ( newName . isEmpty ( ) )
{
errTxt ( " err: New user name argument (-new_name) not found or is empty. \n " ) ;
}
else if ( ! validUserName ( newName ) )
{
errTxt ( " err: Invalid username. it must be 2-24 chars long and contain no spaces. \n " ) ;
}
else if ( userExists ( newName ) )
{
errTxt ( " err: The requested user name already exists. \n " ) ;
}
else
{
2019-11-08 22:06:09 -05:00
QByteArray uId = rdFromBlock ( userId , BLKSIZE_USER_ID ) ;
QByteArray newNameBa = fixedToTEXT ( newName , BLKSIZE_USER_NAME ) ;
2019-09-06 23:43:07 -04:00
Query db ( this ) ;
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_USERNAME , newName ) ;
2019-11-08 22:06:09 -05:00
db . addCondition ( COLUMN_USER_ID , rdFromBlock ( userId , BLKSIZE_USER_ID ) ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
2019-11-08 22:06:09 -05:00
async ( ASYNC_USER_RENAMED , PUB_IPC_WITH_FEEDBACK , uId + newNameBa ) ;
2019-09-06 23:43:07 -04:00
}
}
}
2019-11-08 22:06:09 -05:00
void ChangeDispName : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 2 ) ;
2019-11-08 22:06:09 -05:00
QString name = getParam ( " -new_name " , args ) . trimmed ( ) ;
2019-09-06 23:43:07 -04:00
2019-11-08 22:06:09 -05:00
if ( argExists ( " -new_name " , args ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: New display name argument (-new_name) not found. \n " ) ;
2019-09-06 23:43:07 -04:00
}
else if ( ! validDispName ( name ) )
{
errTxt ( " err: The display name is too large or contains a newline char. limit: 32 chars. \n " ) ;
}
else
{
Query db ( this ) ;
2019-11-08 22:06:09 -05:00
QByteArray uId = rdFromBlock ( userId , BLKSIZE_USER_ID ) ;
QByteArray newNameBa = fixedToTEXT ( name , BLKSIZE_DISP_NAME ) ;
2019-09-06 23:43:07 -04:00
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_DISPLAY_NAME , name ) ;
2019-11-08 22:06:09 -05:00
db . addCondition ( COLUMN_USER_ID , uId ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
2019-11-08 22:06:09 -05:00
async ( ASYNC_DISP_RENAMED , PUB_IPC_WITH_FEEDBACK , uId + newNameBa ) ;
2019-09-06 23:43:07 -04:00
}
}
}
2019-11-08 22:06:09 -05:00
void OverWriteEmail : : procArgs ( const QString & uName , const QString & newEmail , bool sameRank )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
QByteArray uId ;
2019-09-06 23:43:07 -04:00
if ( newEmail . isEmpty ( ) )
{
errTxt ( " err: New email address (-new_email) argument was not found or is empty. \n " ) ;
}
else if ( uName . isEmpty ( ) )
{
errTxt ( " err: User name (-user) argument was not found or is empty. \n " ) ;
}
else if ( ! validUserName ( uName ) )
{
errTxt ( " err: Invalid user name. \n " ) ;
}
else if ( ! validEmailAddr ( newEmail ) )
{
errTxt ( " err: Invalid email address. \n " ) ;
}
else if ( emailExists ( newEmail ) )
{
errTxt ( " err: The requested email address is already in use. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! userExists ( uName , & uId ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The requested user account does not exists. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! canModifyUser ( uId , rd32BitFromBlock ( hostRank ) , sameRank ) )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
errTxt ( " err: Access denied. \n " ) ;
2019-09-06 23:43:07 -04:00
}
else
{
Query db ( this ) ;
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_EMAIL , newEmail ) ;
db . addColumn ( COLUMN_EMAIL_VERIFIED , false ) ;
2019-11-08 22:06:09 -05:00
db . addCondition ( COLUMN_USER_ID , uId ) ;
2019-09-06 23:43:07 -04:00
db . exec ( ) ;
2019-11-08 22:06:09 -05:00
async ( ASYNC_RW_MY_INFO , PUB_IPC_WITH_FEEDBACK , uId ) ;
2019-09-06 23:43:07 -04:00
}
}
2019-11-08 22:06:09 -05:00
void OverWriteEmail : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 4 ) ;
QString uName = getParam ( " -user " , args ) ;
QString newEmail = getParam ( " -new_email " , args ) ;
2019-11-08 22:06:09 -05:00
procArgs ( uName , newEmail , false ) ;
2019-09-06 23:43:07 -04:00
}
}
2019-11-08 22:06:09 -05:00
void ChangeEmail : : procIn ( const QByteArray & binIn , quint8 dType )
2019-09-06 23:43:07 -04:00
{
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 2 ) ;
QString newEmail = getParam ( " -new_email " , args ) ;
2019-11-08 22:06:09 -05:00
procArgs ( rdStringFromBlock ( userName , BLKSIZE_USER_NAME ) , newEmail , true ) ;
2019-09-06 23:43:07 -04:00
}
}
2019-11-08 22:06:09 -05:00
void PasswordChangeRequest : : exec ( const QByteArray & uId , bool req )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
Query db ( this ) ;
2019-09-06 23:43:07 -04:00
2019-11-08 22:06:09 -05:00
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_NEED_PASS , req ) ;
db . addCondition ( COLUMN_USER_ID , uId ) ;
db . exec ( ) ;
}
void PasswordChangeRequest : : procIn ( const QByteArray & binIn , quint8 dType )
{
2019-09-06 23:43:07 -04:00
if ( dType = = TEXT )
{
QStringList args = parseArgs ( binIn , 4 ) ;
QString uName = getParam ( " -user " , args ) ;
QString req = getParam ( " -req " , args ) ;
2019-11-08 22:06:09 -05:00
QByteArray uId ;
2019-09-06 23:43:07 -04:00
if ( uName . isEmpty ( ) )
{
errTxt ( " err: User name (-user) argument is missing or empty. \n " ) ;
}
else if ( req . isEmpty ( ) )
{
errTxt ( " err: Request bool (-req) argument is missing or empty. \n " ) ;
}
else if ( ! isBool ( req ) )
{
errTxt ( " err: The request bool value (-req) must be a 0 or 1. \n " ) ;
}
else if ( ! validUserName ( uName ) )
{
errTxt ( " err: Invalid user name. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! userExists ( uName , & uId ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The requested user account does not exists. \n " ) ;
}
2019-11-08 22:06:09 -05:00
else if ( ! canModifyUser ( uId , rd32BitFromBlock ( hostRank ) , false ) )
2019-09-06 23:43:07 -04:00
{
errTxt ( " err: The target user account out ranks or is equal to your own rank. access denied. \n " ) ;
}
else
{
2019-11-08 22:06:09 -05:00
exec ( uId , static_cast < bool > ( req . toUInt ( ) ) ) ;
2019-09-06 23:43:07 -04:00
}
}
}
2019-11-08 22:06:09 -05:00
void NameChangeRequest : : exec ( const QByteArray & uId , bool req )
2019-09-06 23:43:07 -04:00
{
2019-11-08 22:06:09 -05:00
Query db ( this ) ;
2019-09-06 23:43:07 -04:00
2019-11-08 22:06:09 -05:00
db . setType ( Query : : UPDATE , TABLE_USERS ) ;
db . addColumn ( COLUMN_NEED_NAME , req ) ;
db . addCondition ( COLUMN_USER_ID , uId ) ;
db . exec ( ) ;
2019-09-06 23:43:07 -04:00
}