Version 21.14.1: Sep 23, 2021 Queries moved to module swad_mail_database.

This commit is contained in:
acanas 2021-09-23 01:49:25 +02:00
parent 7c29aff446
commit 2216fe7be5
9 changed files with 309 additions and 186 deletions

View File

@ -50,6 +50,7 @@
#include "swad_ID.h"
#include "swad_ID_database.h"
#include "swad_language.h"
#include "swad_mail_database.h"
#include "swad_match.h"
#include "swad_message.h"
#include "swad_network.h"

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/
#define Log_PLATFORM_VERSION "SWAD 21.14 (2021-09-22)"
#define Log_PLATFORM_VERSION "SWAD 21.14.1 (2021-09-23)"
#define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 21.14.1: Sep 23, 2021 Queries moved to module swad_mail_database. (316687 lines)
Version 21.14: Sep 22, 2021 New module swad_mail_database for database queries related to mail domains. (316594 lines)
Version 21.13: Sep 22, 2021 New module swad_log_database for database queries related to access logs. (316510 lines)
Version 21.12: Sep 22, 2021 New module swad_link_database for database queries related to institutional links. (316361 lines)

View File

@ -49,6 +49,7 @@
#include "swad_HTML.h"
#include "swad_ID.h"
#include "swad_info_database.h"
#include "swad_mail_database.h"
#include "swad_match.h"
#include "swad_message.h"
#include "swad_notification.h"
@ -1118,7 +1119,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role)
}
else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email
{
if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0)
if ((UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0)
{
ListUsrCods.NumUsrs = 1;
Usr_AllocateListUsrCods (&ListUsrCods);
@ -1246,7 +1247,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role)
}
else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email
{
if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0)
if ((UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0)
{
ListUsrCods.NumUsrs = 1;
Usr_AllocateListUsrCods (&ListUsrCods);

View File

@ -55,8 +55,6 @@ extern struct Globals Gbl;
/***************************** Private constants *****************************/
/*****************************************************************************/
#define Mai_LENGTH_EMAIL_CONFIRM_KEY Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
/*****************************************************************************/
/******************************* Private types *******************************/
/*****************************************************************************/
@ -97,8 +95,6 @@ static void Mai_PutParamsRemoveMyEmail (void *Email);
static void Mai_PutParamsRemoveOtherEmail (void *Email);
static void Mai_RemoveEmail (struct UsrData *UsrDat);
static void Mai_DB_RemoveEmail (long UsrCod,
const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
static void Mai_NewUsrEmail (struct UsrData *UsrDat,bool ItsMe);
static void Mai_InsertMailKey (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1],
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1]);
@ -968,20 +964,7 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
bool Found;
/***** Get current (last updated) user's nickname from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get email address",
"SELECT E_mail," // row[0]
"Confirmed" // row[1]
" FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC"
" LIMIT 1",
UsrDat->UsrCod) == 0)
{
UsrDat->Email[0] = '\0';
UsrDat->EmailConfirmed = false;
Found = false;
}
else
if (Mai_DB_GetEmailFromUsrCod (&mysql_res,UsrDat->UsrCod))
{
/* Get email */
row = mysql_fetch_row (mysql_res);
@ -989,6 +972,12 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
UsrDat->EmailConfirmed = (row[1][0] == 'Y');
Found = true;
}
else
{
UsrDat->Email[0] = '\0';
UsrDat->EmailConfirmed = false;
Found = false;
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -996,31 +985,6 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
return Found;
}
/*****************************************************************************/
/************* Get user's code of a user from his/her email ******************/
/*****************************************************************************/
// Returns -1L if email not found
long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
/***** Trivial check 1: email should be not null ******/
if (!Email)
return -1L;
/***** Trivial check 2: email should be not empty ******/
if (!Email[0])
return -1L;
/***** Get user's code from database *****/
return DB_QuerySELECTCode ("can not get user's code",
"SELECT usr_emails.UsrCod"
" FROM usr_emails,"
"usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email);
}
/*****************************************************************************/
/*********************** Show form to change my email ************************/
/*****************************************************************************/
@ -1121,14 +1085,7 @@ static void Mai_ShowFormChangeUsrEmail (bool ItsMe,
Ale_ShowAlert (Ale_WARNING,Txt_Please_confirm_your_email_address);
/***** Get my emails *****/
NumEmails = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get old email addresses of a user",
"SELECT E_mail," // row[0]
"Confirmed" // row[1]
" FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod);
NumEmails = Mai_DB_GetMyEmails (&mysql_res,UsrDat->UsrCod);
/***** Begin table *****/
HTM_TABLE_BeginWidePadding (2);
@ -1364,46 +1321,6 @@ static void Mai_RemoveEmail (struct UsrData *UsrDat)
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
}
/*****************************************************************************/
/*************** Remove an old email address from database *******************/
/*****************************************************************************/
static void Mai_DB_RemoveEmail (long UsrCod,
const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
/***** Remove an old email address *****/
DB_QueryREPLACE ("can not remove an old email address",
"DELETE FROM usr_emails"
" WHERE UsrCod=%ld"
" AND E_mail='%s'",
UsrCod,
Email);
}
/*****************************************************************************/
/**************************** Remove user's emails ***************************/
/*****************************************************************************/
void Mai_DB_RemoveUsrEmails (long UsrCod)
{
DB_QueryDELETE ("can not remove user's emails",
"DELETE FROM usr_emails"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/
/************** Remove a given user from list of pending emails **************/
/*****************************************************************************/
void Mai_DB_RemoveUsrPendingEmails (long UsrCod)
{
DB_QueryDELETE ("can not remove pending user's emails",
"DELETE FROM usr_pending_emails"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/
/************************* New user's email for me ***************************/
/*****************************************************************************/
@ -1511,40 +1428,15 @@ static void Mai_NewUsrEmail (struct UsrData *UsrDat,bool ItsMe)
bool Mai_UpdateEmailInDB (const struct UsrData *UsrDat,const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
/***** Check if the new email matches any of the confirmed emails of other users *****/
if (DB_QueryCOUNT ("can not check if email already existed",
"SELECT COUNT(*)"
" FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='Y'"
" AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod)) // An email of another user is the same that my email
if (Mai_DB_CheckIfEmailBelongToAnotherUsr (UsrDat->UsrCod,NewEmail)) // An email of another user is the same that my email
return false; // Don't update
/***** Delete email (not confirmed) for other users *****/
DB_QueryDELETE ("can not remove pending email for other users",
"DELETE FROM usr_pending_emails"
" WHERE E_mail='%s'"
" AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod);
DB_QueryDELETE ("can not remove not confirmed email for other users",
"DELETE FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='N'"
" AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod);
Mai_DB_RemovePendingEmailForOtherUsrs (UsrDat->UsrCod,NewEmail);
Mai_DB_RemoveNotConfirmedEmailForOtherUsrs (UsrDat->UsrCod,NewEmail);
/***** Update email in database *****/
DB_QueryREPLACE ("can not update email",
"REPLACE INTO usr_emails"
" (UsrCod,E_mail,CreatTime)"
" VALUES"
" (%ld,'%s',NOW())",
UsrDat->UsrCod,
NewEmail);
Mai_DB_UpdateEmail (UsrDat->UsrCod,NewEmail);
return true; // Successfully updated
}
@ -1640,20 +1532,10 @@ static void Mai_InsertMailKey (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1])
{
/***** Remove expired pending emails from database *****/
DB_QueryDELETE ("can not remove old pending mail keys",
"DELETE LOW_PRIORITY FROM usr_pending_emails"
" WHERE DateAndTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_TIME_TO_DELETE_OLD_PENDING_EMAILS);
Mai_DB_RemoveExpiredPendingEmails ();
/***** Insert mail key in database *****/
DB_QueryREPLACE ("can not create pending password",
"INSERT INTO usr_pending_emails"
" (UsrCod,E_mail,MailKey,DateAndTime)"
" VALUES"
" (%ld,'%s','%s',NOW())",
Gbl.Usrs.Me.UsrDat.UsrCod,
Email,
MailKey);
Mai_DB_InsertPendingEmail (Email,MailKey);
}
/*****************************************************************************/
@ -1671,25 +1553,19 @@ void Mai_ConfirmEmail (void)
long UsrCod;
char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
bool KeyIsCorrect;
char StrConfirmed[1 + 1];
/***** Get parameter Key *****/
Par_GetParToText ("key",MailKey,Mai_LENGTH_EMAIL_CONFIRM_KEY);
/***** Get user's code and email from key *****/
if (DB_QuerySELECT (&mysql_res,"can not get user's code and email from key",
"SELECT UsrCod," // row[0]
"E_mail" // row[1]
" FROM usr_pending_emails"
" WHERE MailKey='%s'",
MailKey))
if (Mai_DB_GetPendingEmail (&mysql_res,MailKey))
{
row = mysql_fetch_row (mysql_res);
/* Get user's code */
/* Get user's code (row[0]) */
UsrCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get user's email */
/* Get user's email (row[1]) */
Str_Copy (Email,row[1],sizeof (Email) - 1);
KeyIsCorrect = true;
@ -1706,22 +1582,12 @@ void Mai_ConfirmEmail (void)
if (KeyIsCorrect)
{
/***** Delete this key *****/
DB_QueryDELETE ("can not remove an email key",
"DELETE FROM usr_pending_emails"
" WHERE MailKey='%s'",
MailKey);
/***** Delete this pending email *****/
Mai_DB_RemovePendingEmail (MailKey);
/***** Check user's code and email
and get if email is already confirmed *****/
DB_QuerySELECTString (StrConfirmed,1,"can not check if email is confirmed",
"SELECT Confirmed"
" FROM usr_emails"
" WHERE UsrCod=%ld"
" AND E_mail='%s'",
UsrCod,
Email);
switch (StrConfirmed[0])
switch (Mai_DB_CheckIfEmailIsConfirmed (UsrCod,Email))
{
case '\0':
Ale_ShowAlert (Ale_WARNING,Txt_Failed_email_confirmation_key);
@ -1732,13 +1598,7 @@ void Mai_ConfirmEmail (void)
break;
default:
/***** Confirm email *****/
DB_QueryUPDATE ("can not confirm email",
"UPDATE usr_emails"
" SET Confirmed='Y'"
" WHERE usr_emails.UsrCod=%ld"
" AND usr_emails.E_mail='%s'",
UsrCod,
Email);
Mai_DB_ConfirmEmail (UsrCod,Email);
Ale_ShowAlert (Ale_SUCCESS,Txt_The_email_X_has_been_confirmed,
Email);
break;

View File

@ -36,6 +36,8 @@
#define Mai_MAX_CHARS_MAIL_INFO (128 - 1) // 127
#define Mai_MAX_BYTES_MAIL_INFO ((Mai_MAX_CHARS_MAIL_INFO + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
#define Mai_LENGTH_EMAIL_CONFIRM_KEY Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
#define Mai_NUM_ORDERS 3
typedef enum
{
@ -77,15 +79,12 @@ void Mai_GetSelUsrsAndListEmails (void);
bool Mai_CheckIfEmailIsValid (const char *Email);
bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat);
long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_ShowFormChangeMyEmail (bool IMustFillInEmail,bool IShouldConfirmEmail);
void Mai_ShowFormChangeOtherUsrEmail (void);
void Mai_RemoveMyUsrEmail (void);
void Mai_RemoveOtherUsrEmail (void);
void Mai_DB_RemoveUsrEmails (long UsrCod);
void Mai_DB_RemoveUsrPendingEmails (long UsrCod);
void May_NewMyUsrEmail (void);
void Mai_NewOtherUsrEmail (void);

View File

@ -25,25 +25,10 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
// #include <stddef.h> // For NULL
// #include <stdlib.h> // For calloc
// #include <string.h> // For string functions
// #include <sys/wait.h> // For the macro WEXITSTATUS
// #include <unistd.h> // For access, lstat, getpid, chdir, symlink, unlink
// #include "swad_account.h"
// #include "swad_box.h"
#include "swad_database.h"
// #include "swad_error.h"
// #include "swad_form.h"
#include "swad_global.h"
// #include "swad_HTML.h"
// #include "swad_language.h"
#include "swad_mail.h"
#include "swad_mail_database.h"
// #include "swad_parameter.h"
// #include "swad_QR.h"
// #include "swad_tab.h"
/*****************************************************************************/
/************** External global variables from others modules ****************/
@ -67,6 +52,253 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
/*****************************************************************************/
/*************************** Update a user's email ***************************/
/*****************************************************************************/
void Mai_DB_UpdateEmail (long UsrCod,const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
DB_QueryREPLACE ("can not update email",
"REPLACE INTO usr_emails"
" (UsrCod,E_mail,CreatTime)"
" VALUES"
" (%ld,'%s',NOW())",
UsrCod,
NewEmail);
}
/*****************************************************************************/
/*************************** Confirm a user's email **************************/
/*****************************************************************************/
void Mai_DB_ConfirmEmail (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
DB_QueryUPDATE ("can not confirm email",
"UPDATE usr_emails"
" SET Confirmed='Y'"
" WHERE usr_emails.UsrCod=%ld"
" AND usr_emails.E_mail='%s'",
UsrCod,
Email);
}
/*****************************************************************************/
/********************************* Get my emails *****************************/
/*****************************************************************************/
unsigned Mai_DB_GetMyEmails (MYSQL_RES **mysql_res,long UsrCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get old email addresses of a user",
"SELECT E_mail," // row[0]
"Confirmed" // row[1]
" FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrCod);
}
/*****************************************************************************/
/********** Get email address of a user from his/her user's code *************/
/*****************************************************************************/
unsigned Mai_DB_GetEmailFromUsrCod (MYSQL_RES **mysql_res,long UsrCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get email address",
"SELECT E_mail," // row[0]
"Confirmed" // row[1]
" FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC"
" LIMIT 1",
UsrCod);
}
/*****************************************************************************/
/************* Get user's code of a user from his/her email ******************/
/*****************************************************************************/
// Returns -1L if email not found
long Mai_DB_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
/***** Trivial check 1: email should be not null ******/
if (!Email)
return -1L;
/***** Trivial check 2: email should be not empty ******/
if (!Email[0])
return -1L;
/***** Get user's code from database *****/
return DB_QuerySELECTCode ("can not get user's code",
"SELECT usr_emails.UsrCod"
" FROM usr_emails,"
"usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email);
}
/*****************************************************************************/
/******************** Check if a user's email is confirmed *******************/
/*****************************************************************************/
char Mai_DB_CheckIfEmailIsConfirmed (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
char StrConfirmed[1 + 1];
DB_QuerySELECTString (StrConfirmed,1,"can not check if email is confirmed",
"SELECT Confirmed"
" FROM usr_emails"
" WHERE UsrCod=%ld"
" AND E_mail='%s'",
UsrCod,
Email);
return StrConfirmed[0];
}
/*****************************************************************************/
/**** Check if an email matches any of the confirmed emails of other users ***/
/*****************************************************************************/
bool Mai_DB_CheckIfEmailBelongToAnotherUsr (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
return (DB_QueryCOUNT ("can not check if email already existed",
"SELECT COUNT(*)"
" FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='Y'"
" AND UsrCod<>%ld",
Email,
UsrCod) != 0);
}
/*****************************************************************************/
/**************** Remove not confirmed email for other users *****************/
/*****************************************************************************/
void Mai_DB_RemoveNotConfirmedEmailForOtherUsrs (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
DB_QueryDELETE ("can not remove not confirmed email for other users",
"DELETE FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='N'"
" AND UsrCod<>%ld",
Email,
UsrCod);
}
/*****************************************************************************/
/*************** Remove an old email address from database *******************/
/*****************************************************************************/
void Mai_DB_RemoveEmail (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
DB_QueryREPLACE ("can not remove an old email address",
"DELETE FROM usr_emails"
" WHERE UsrCod=%ld"
" AND E_mail='%s'",
UsrCod,
Email);
}
/*****************************************************************************/
/**************************** Remove user's emails ***************************/
/*****************************************************************************/
void Mai_DB_RemoveUsrEmails (long UsrCod)
{
DB_QueryDELETE ("can not remove user's emails",
"DELETE FROM usr_emails"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/
/************************* Insert mail key in database ***********************/
/*****************************************************************************/
void Mai_DB_InsertPendingEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1],
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1])
{
DB_QueryREPLACE ("can not create pending password",
"INSERT INTO usr_pending_emails"
" (UsrCod,E_mail,MailKey,DateAndTime)"
" VALUES"
" (%ld,'%s','%s',NOW())",
Gbl.Usrs.Me.UsrDat.UsrCod,
Email,
MailKey);
}
/*****************************************************************************/
/******************** Get user's code and email from key *********************/
/*****************************************************************************/
unsigned Mai_DB_GetPendingEmail (MYSQL_RES **mysql_res,
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1])
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get user's code and email from key",
"SELECT UsrCod," // row[0]
"E_mail" // row[1]
" FROM usr_pending_emails"
" WHERE MailKey='%s'",
MailKey);
}
/*****************************************************************************/
/*************************** Remove pending email ****************************/
/*****************************************************************************/
void Mai_DB_RemovePendingEmailForOtherUsrs (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
DB_QueryDELETE ("can not remove pending email for other users",
"DELETE FROM usr_pending_emails"
" WHERE E_mail='%s'"
" AND UsrCod<>%ld",
Email,
UsrCod);
}
/*****************************************************************************/
/*************************** Remove pending email ****************************/
/*****************************************************************************/
void Mai_DB_RemovePendingEmail (const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1])
{
DB_QueryDELETE ("can not remove an email key",
"DELETE FROM usr_pending_emails"
" WHERE MailKey='%s'",
MailKey);
}
/*****************************************************************************/
/************** Remove a given user from list of pending emails **************/
/*****************************************************************************/
void Mai_DB_RemoveUsrPendingEmails (long UsrCod)
{
DB_QueryDELETE ("can not remove pending user's emails",
"DELETE FROM usr_pending_emails"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/
/**************** Remove expired pending emails from database ****************/
/*****************************************************************************/
void Mai_DB_RemoveExpiredPendingEmails (void)
{
DB_QueryDELETE ("can not remove old pending mail keys",
"DELETE LOW_PRIORITY FROM usr_pending_emails"
" WHERE DateAndTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_TIME_TO_DELETE_OLD_PENDING_EMAILS);
}
/*****************************************************************************/
/* Create temporary tables with all the mail domains in users' emails table **/
/*****************************************************************************/

View File

@ -37,6 +37,33 @@
/***************************** Public prototypes *****************************/
/*****************************************************************************/
//------------------------------ User email -----------------------------------
void Mai_DB_UpdateEmail (long UsrCod,const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_DB_ConfirmEmail (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
unsigned Mai_DB_GetMyEmails (MYSQL_RES **mysql_res,long UsrCod);
unsigned Mai_DB_GetEmailFromUsrCod (MYSQL_RES **mysql_res,long UsrCod);
long Mai_DB_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
char Mai_DB_CheckIfEmailIsConfirmed (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
bool Mai_DB_CheckIfEmailBelongToAnotherUsr (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_DB_RemoveNotConfirmedEmailForOtherUsrs (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_DB_RemoveEmail (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_DB_RemoveUsrEmails (long UsrCod);
//---------------------------- Pending emails ---------------------------------
void Mai_DB_InsertPendingEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1],
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1]);
unsigned Mai_DB_GetPendingEmail (MYSQL_RES **mysql_res,
const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1]);
void Mai_DB_RemovePendingEmailForOtherUsrs (long UsrCod,const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
void Mai_DB_RemovePendingEmail (const char MailKey[Mai_LENGTH_EMAIL_CONFIRM_KEY + 1]);
void Mai_DB_RemoveUsrPendingEmails (long UsrCod);
void Mai_DB_RemoveExpiredPendingEmails (void);
//----------------------------- Mail domains ----------------------------------
void Mai_DB_CreateTmpTables (void);
void Mai_DB_CreateMailDomain (const struct Mail *Mai);
void Mai_DB_UpdateMailDomainName (long MaiCod,

View File

@ -40,6 +40,7 @@
#include "swad_global.h"
#include "swad_HTML.h"
#include "swad_ID.h"
#include "swad_mail_database.h"
#include "swad_password.h"
#include "swad_parameter.h"
#include "swad_user.h"
@ -338,7 +339,7 @@ void Pwd_ChkIdLoginAndSendNewPwd (void)
}
else if (Mai_CheckIfEmailIsValid (Gbl.Usrs.Me.UsrIdLogin)) // 2: It's an email
{
if ((Gbl.Usrs.Me.UsrDat.UsrCod = Mai_GetUsrCodFromEmail (Gbl.Usrs.Me.UsrIdLogin)) > 0)
if ((Gbl.Usrs.Me.UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (Gbl.Usrs.Me.UsrIdLogin)) > 0)
{
/* Get user's data */
ListUsrCods.NumUsrs = 1;

View File

@ -61,6 +61,7 @@
#include "swad_HTML.h"
#include "swad_ID.h"
#include "swad_language.h"
#include "swad_mail_database.h"
#include "swad_MFU.h"
#include "swad_nickname.h"
#include "swad_notification.h"
@ -2925,7 +2926,7 @@ unsigned Usr_GetParamOtherUsrIDNickOrEMailAndGetUsrCods (struct ListUsrCods *Lis
}
else if (Mai_CheckIfEmailIsValid (Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail)) // 2: It's an email
{
if ((Gbl.Usrs.Other.UsrDat.UsrCod = Mai_GetUsrCodFromEmail (Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail)) > 0)
if ((Gbl.Usrs.Other.UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail)) > 0)
{
ListUsrCods->NumUsrs = 1; // One user found
Usr_AllocateListUsrCods (ListUsrCods);
@ -3230,7 +3231,7 @@ static bool Usr_ChkUsrAndGetUsrDataFromDirectLogin (void)
else if (Mai_CheckIfEmailIsValid (Gbl.Usrs.Me.UsrIdLogin)) // 2: It's an email
{
// User is trying to log using his/her email
if ((Gbl.Usrs.Me.UsrDat.UsrCod = Mai_GetUsrCodFromEmail (Gbl.Usrs.Me.UsrIdLogin)) <= 0)
if ((Gbl.Usrs.Me.UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (Gbl.Usrs.Me.UsrIdLogin)) <= 0)
{
Usr_ShowAlertUsrDoesNotExistsOrWrongPassword ();
return false;
@ -6041,7 +6042,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
}
else if (Mai_CheckIfEmailIsValid (UsrIDNickOrEmail)) // 2: It's an email
{
if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrIDNickOrEmail)) > 0)
if ((UsrDat.UsrCod = Mai_DB_GetUsrCodFromEmail (UsrIDNickOrEmail)) > 0)
{
ListUsrCods.NumUsrs = 1;
Usr_AllocateListUsrCods (&ListUsrCods);