mirror of https://github.com/acanas/swad-core.git
Version 21.54: Nov 07, 2021 New module swad_API_database for database queries related to API.
This commit is contained in:
parent
cdc0433c05
commit
e846b94218
4
Makefile
4
Makefile
|
@ -29,8 +29,8 @@
|
||||||
OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
|
OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
|
||||||
swad_admin_database.o swad_agenda.o swad_agenda_database.o swad_alert.o \
|
swad_admin_database.o swad_agenda.o swad_agenda_database.o swad_alert.o \
|
||||||
swad_announcement.o swad_announcement_database.o swad_API.o \
|
swad_announcement.o swad_announcement_database.o swad_API.o \
|
||||||
swad_assignment.o swad_assignment_database.o swad_attendance.o \
|
swad_API_database.o swad_assignment.o swad_assignment_database.o \
|
||||||
swad_attendance_database.o \
|
swad_attendance.o swad_attendance_database.o \
|
||||||
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
||||||
swad_browser_database.o swad_building.o swad_building_database.o \
|
swad_browser_database.o swad_building.o swad_building_database.o \
|
||||||
swad_button.o \
|
swad_button.o \
|
||||||
|
|
231
swad_API.c
231
swad_API.c
|
@ -103,9 +103,11 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/
|
||||||
|
|
||||||
#include "swad_account.h"
|
#include "swad_account.h"
|
||||||
#include "swad_API.h"
|
#include "swad_API.h"
|
||||||
|
#include "swad_API_database.h"
|
||||||
#include "swad_attendance_database.h"
|
#include "swad_attendance_database.h"
|
||||||
#include "swad_browser.h"
|
#include "swad_browser.h"
|
||||||
#include "swad_browser_database.h"
|
#include "swad_browser_database.h"
|
||||||
|
#include "swad_course_database.h"
|
||||||
#include "swad_database.h"
|
#include "swad_database.h"
|
||||||
#include "swad_error.h"
|
#include "swad_error.h"
|
||||||
#include "swad_forum.h"
|
#include "swad_forum.h"
|
||||||
|
@ -119,10 +121,12 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/
|
||||||
#include "swad_notice.h"
|
#include "swad_notice.h"
|
||||||
#include "swad_notification.h"
|
#include "swad_notification.h"
|
||||||
#include "swad_password.h"
|
#include "swad_password.h"
|
||||||
|
#include "swad_plugin_database.h"
|
||||||
#include "swad_question_database.h"
|
#include "swad_question_database.h"
|
||||||
#include "swad_role.h"
|
#include "swad_role.h"
|
||||||
#include "swad_room_database.h"
|
#include "swad_room_database.h"
|
||||||
#include "swad_search.h"
|
#include "swad_search.h"
|
||||||
|
#include "swad_session_database.h"
|
||||||
#include "swad_test_config.h"
|
#include "swad_test_config.h"
|
||||||
#include "swad_test_visibility.h"
|
#include "swad_test_visibility.h"
|
||||||
#include "swad_user.h"
|
#include "swad_user.h"
|
||||||
|
@ -209,8 +213,6 @@ static const API_Role_t API_RolRole_to_SvcRole[Rol_NUM_ROLES] =
|
||||||
[Rol_TCH] = API_ROLE_TEACHER,
|
[Rol_TCH] = API_ROLE_TEACHER,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define API_BYTES_WS_KEY Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** Private prototypes ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -221,16 +223,14 @@ static void API_FreeSoapContext (struct soap *soap);
|
||||||
static int API_GetPlgCodFromAppKey (struct soap *soap,
|
static int API_GetPlgCodFromAppKey (struct soap *soap,
|
||||||
const char *appKey);
|
const char *appKey);
|
||||||
static int API_CheckIdSession (struct soap *soap,
|
static int API_CheckIdSession (struct soap *soap,
|
||||||
const char *IdSession);
|
const char *IdSes);
|
||||||
static int API_CheckWSKey (char WSKey[API_BYTES_WS_KEY + 1]);
|
static int API_CheckAPIKey (char APIKey[API_BYTES_KEY + 1]);
|
||||||
|
|
||||||
static int API_CheckCourseAndGroupCodes (struct soap *soap,
|
static int API_CheckCourseAndGroupCodes (struct soap *soap,
|
||||||
long CrsCod,long GrpCod);
|
long CrsCod,long GrpCod);
|
||||||
static int API_GenerateNewWSKey (struct soap *soap,
|
static int API_GenerateNewAPIKey (struct soap *soap,
|
||||||
long UsrCod,
|
long UsrCod,
|
||||||
char WSKey[API_BYTES_WS_KEY + 1]);
|
char APIKey[API_BYTES_KEY + 1]);
|
||||||
static int API_RemoveOldWSKeys (struct soap *soap);
|
|
||||||
static int API_GetCurrentDegCodFromCurrentCrsCod (void);
|
|
||||||
static bool API_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod);
|
static bool API_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod);
|
||||||
|
|
||||||
static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
|
static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
|
||||||
|
@ -364,13 +364,8 @@ static void API_FreeSoapContext (struct soap *soap)
|
||||||
static int API_GetPlgCodFromAppKey (struct soap *soap,
|
static int API_GetPlgCodFromAppKey (struct soap *soap,
|
||||||
const char *appKey)
|
const char *appKey)
|
||||||
{
|
{
|
||||||
/***** Get number of plugins with a IP address *****/
|
/***** Get plugin code from application key *****/
|
||||||
Gbl.WebService.PlgCod = DB_QuerySELECTCode ("can not check application key",
|
if ((Gbl.WebService.PlgCod = Plg_DB_GetPlgCodFromAppKey (appKey)) <= 0)
|
||||||
"SELECT PlgCod"
|
|
||||||
" FROM plg_plugins"
|
|
||||||
" WHERE AppKey='%s'",
|
|
||||||
appKey); // Session found in table of sessions
|
|
||||||
if (Gbl.WebService.PlgCod < 0)
|
|
||||||
return soap_sender_fault (soap,
|
return soap_sender_fault (soap,
|
||||||
"Unknown application key",
|
"Unknown application key",
|
||||||
"Unknown application");
|
"Unknown application");
|
||||||
|
@ -394,25 +389,25 @@ const char *API_GetFunctionNameFromFunCod (long FunCod)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static int API_CheckIdSession (struct soap *soap,
|
static int API_CheckIdSession (struct soap *soap,
|
||||||
const char *IdSession)
|
const char *IdSes)
|
||||||
{
|
{
|
||||||
const char *Ptr;
|
const char *Ptr;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
/***** Check if pointer is NULL *****/
|
/***** Check if pointer is NULL *****/
|
||||||
if (IdSession == NULL)
|
if (IdSes == NULL)
|
||||||
return soap_sender_fault (soap,
|
return soap_sender_fault (soap,
|
||||||
"Bad session identifier",
|
"Bad session identifier",
|
||||||
"Session identifier is a null pointer");
|
"Session identifier is a null pointer");
|
||||||
|
|
||||||
/***** Check length of session identifier *****/
|
/***** Check length of session identifier *****/
|
||||||
if (strlen (IdSession) != Cns_BYTES_SESSION_ID)
|
if (strlen (IdSes) != Cns_BYTES_SESSION_ID)
|
||||||
return soap_sender_fault (soap,
|
return soap_sender_fault (soap,
|
||||||
"Bad session identifier",
|
"Bad session identifier",
|
||||||
"The length of the session identifier is wrong");
|
"The length of the session identifier is wrong");
|
||||||
|
|
||||||
/***** Check if session identifier is in base64url *****/
|
/***** Check if session identifier is in base64url *****/
|
||||||
for (Ptr = IdSession;
|
for (Ptr = IdSes;
|
||||||
*Ptr;
|
*Ptr;
|
||||||
Ptr++)
|
Ptr++)
|
||||||
{
|
{
|
||||||
|
@ -428,11 +423,7 @@ static int API_CheckIdSession (struct soap *soap,
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Query if session identifier already exists in database *****/
|
/***** Query if session identifier already exists in database *****/
|
||||||
if (DB_QueryCOUNT ("can not get session data",
|
if (!Ses_DB_CheckIfSessionExists (IdSes))
|
||||||
"SELECT COUNT(*)"
|
|
||||||
" FROM ses_sessions"
|
|
||||||
" WHERE SessionId='%s'",
|
|
||||||
IdSession) != 1)
|
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
"Bad session identifier",
|
"Bad session identifier",
|
||||||
"Session identifier does not exist in database");
|
"Session identifier does not exist in database");
|
||||||
|
@ -444,7 +435,7 @@ static int API_CheckIdSession (struct soap *soap,
|
||||||
/************** Check if a web service key exists in database ****************/
|
/************** Check if a web service key exists in database ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static int API_CheckWSKey (char WSKey[API_BYTES_WS_KEY + 1])
|
static int API_CheckAPIKey (char APIKey[API_BYTES_KEY + 1])
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
@ -455,12 +446,7 @@ static int API_CheckWSKey (char WSKey[API_BYTES_WS_KEY + 1])
|
||||||
Gbl.WebService.PlgCod = -1L;
|
Gbl.WebService.PlgCod = -1L;
|
||||||
|
|
||||||
/***** Check that key does not exist in database *****/
|
/***** Check that key does not exist in database *****/
|
||||||
if (DB_QuerySELECT (&mysql_res,"can not get existence of key",
|
if (API_DB_GetDataFromAPIKey (&mysql_res,APIKey))
|
||||||
"SELECT UsrCod," // row[0]
|
|
||||||
"PlgCod" // row[1]
|
|
||||||
" FROM api_keys"
|
|
||||||
" WHERE WSKey='%s'",
|
|
||||||
WSKey)) // Session found in table of sessions
|
|
||||||
{
|
{
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
|
@ -489,31 +475,17 @@ static int API_CheckCourseAndGroupCodes (struct soap *soap,
|
||||||
"Course code must be a integer greater than 0");
|
"Course code must be a integer greater than 0");
|
||||||
|
|
||||||
/***** Query if course code already exists in database *****/
|
/***** Query if course code already exists in database *****/
|
||||||
if (DB_QueryCOUNT ("can not get course",
|
if (!Crs_DB_CheckIfCrsCodExists (CrsCod))
|
||||||
"SELECT COUNT(*)"
|
|
||||||
" FROM crs_courses"
|
|
||||||
" WHERE CrsCod=%ld",
|
|
||||||
CrsCod) != 1)
|
|
||||||
return soap_sender_fault (soap,
|
return soap_sender_fault (soap,
|
||||||
"Bad course code",
|
"Bad course code",
|
||||||
"Course code does not exist in database");
|
"Course code does not exist in database");
|
||||||
|
|
||||||
/***** Course code exists in database, so check if group code exists in database and belongs to course *****/
|
/***** Course code exists in database, so check if group code exists in database and belongs to course *****/
|
||||||
if (GrpCod > 0) // <=0 means "the whole course"
|
if (GrpCod > 0) // <= 0 means "the whole course"
|
||||||
{
|
if (!Grp_DB_CheckIfGrpBelongsToCrs (GrpCod,CrsCod))
|
||||||
/***** Query if group code already exists in database *****/
|
|
||||||
if (DB_QueryCOUNT ("can not get group",
|
|
||||||
"SELECT COUNT(*)"
|
|
||||||
" FROM grp_types,"
|
|
||||||
"grp_groups"
|
|
||||||
" WHERE grp_types.CrsCod=%ld"
|
|
||||||
" AND grp_types.GrpTypCod=grp_groups.GrpTypCod"
|
|
||||||
" AND grp_groups.GrpCod=%ld",
|
|
||||||
CrsCod,GrpCod) != 1)
|
|
||||||
return soap_sender_fault (soap,
|
return soap_sender_fault (soap,
|
||||||
"Bad group code",
|
"Bad group code",
|
||||||
"Group code does not exist in database or it's not a group of the specified course");
|
"Group code does not exist in database or it's not a group of the specified course");
|
||||||
}
|
|
||||||
|
|
||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
|
@ -522,77 +494,24 @@ static int API_CheckCourseAndGroupCodes (struct soap *soap,
|
||||||
/***** Generate a key used in subsequents calls to other web services ********/
|
/***** Generate a key used in subsequents calls to other web services ********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static int API_GenerateNewWSKey (struct soap *soap,
|
static int API_GenerateNewAPIKey (struct soap *soap,
|
||||||
long UsrCod,
|
long UsrCod,
|
||||||
char WSKey[API_BYTES_WS_KEY + 1])
|
char APIKey[API_BYTES_KEY + 1])
|
||||||
{
|
{
|
||||||
int ReturnCode;
|
|
||||||
|
|
||||||
/***** Remove expired web service keys *****/
|
/***** Remove expired web service keys *****/
|
||||||
if ((ReturnCode = API_RemoveOldWSKeys (soap)) != SOAP_OK)
|
API_DB_RemoveOldAPIKeys ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
/***** Create a unique name for the key *****/
|
/***** Create a unique name for the key *****/
|
||||||
Str_Copy (WSKey,Gbl.UniqueNameEncrypted,API_BYTES_WS_KEY);
|
Str_Copy (APIKey,Gbl.UniqueNameEncrypted,API_BYTES_KEY);
|
||||||
|
|
||||||
/***** Check that key does not exist in database *****/
|
/***** Check that key does not exist in database *****/
|
||||||
if (DB_QueryEXISTS ("can not get existence of key",
|
if (API_DB_CheckIfAPIKeyExists (APIKey))
|
||||||
"SELECT EXISTS"
|
|
||||||
"(SELECT *"
|
|
||||||
" FROM api_keys"
|
|
||||||
" WHERE WSKey='%s')",
|
|
||||||
WSKey))
|
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
"Error when generating key",
|
"Error when generating key",
|
||||||
"Generated key already existed in database");
|
"Generated key already existed in database");
|
||||||
|
|
||||||
/***** Insert key into database *****/
|
/***** Insert key into database *****/
|
||||||
DB_QueryINSERT ("can not insert new key",
|
API_DB_CreateAPIKey (APIKey,UsrCod,Gbl.WebService.PlgCod);
|
||||||
"INSERT INTO api_keys"
|
|
||||||
" (WSKey,UsrCod,PlgCod,LastTime)"
|
|
||||||
" VALUES"
|
|
||||||
" ('%s',%ld,%ld,NOW())",
|
|
||||||
WSKey,
|
|
||||||
UsrCod,
|
|
||||||
Gbl.WebService.PlgCod);
|
|
||||||
|
|
||||||
return SOAP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************************ Remove old web service keys ************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static int API_RemoveOldWSKeys (struct soap *soap)
|
|
||||||
{
|
|
||||||
char Query[512];
|
|
||||||
|
|
||||||
/***** Remove expired sessions *****/
|
|
||||||
/* A session expire when last click (LastTime) is too old,
|
|
||||||
or when there was at least one refresh (navigator supports AJAX) and last refresh is too old (browser probably was closed) */
|
|
||||||
sprintf (Query,"DELETE LOW_PRIORITY FROM api_keys"
|
|
||||||
" WHERE LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
|
|
||||||
Cfg_TIME_TO_DELETE_WEB_SERVICE_KEY);
|
|
||||||
if (mysql_query (&Gbl.mysql,Query))
|
|
||||||
return soap_receiver_fault (soap,
|
|
||||||
"Can not remove old web service keys from database",
|
|
||||||
mysql_error (&Gbl.mysql));
|
|
||||||
|
|
||||||
return SOAP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/********************* Get degree code from course code **********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static int API_GetCurrentDegCodFromCurrentCrsCod (void)
|
|
||||||
{
|
|
||||||
/***** Check that key does not exist in database *****/
|
|
||||||
Gbl.Hierarchy.Deg.DegCod = DB_QuerySELECTCode ("can not get the degree of a course",
|
|
||||||
"SELECT DegCod"
|
|
||||||
" FROM crs_courses"
|
|
||||||
" WHERE CrsCod=%ld",
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod); // Course found in table of courses
|
|
||||||
|
|
||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
|
@ -692,7 +611,7 @@ int swad__createAccount (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_createAccount;
|
Gbl.WebService.Function = API_createAccount;
|
||||||
|
|
||||||
/***** Allocate space for strings *****/
|
/***** Allocate space for strings *****/
|
||||||
createAccountOut->wsKey = soap_malloc (soap,API_BYTES_WS_KEY + 1);
|
createAccountOut->wsKey = soap_malloc (soap,API_BYTES_KEY + 1);
|
||||||
|
|
||||||
/***** Default values returned on error *****/
|
/***** Default values returned on error *****/
|
||||||
createAccountOut->userCode = 0; // Undefined error
|
createAccountOut->userCode = 0; // Undefined error
|
||||||
|
@ -744,7 +663,7 @@ int swad__createAccount (struct soap *soap,
|
||||||
createAccountOut->userCode = Gbl.Usrs.Me.UsrDat.UsrCod;
|
createAccountOut->userCode = Gbl.Usrs.Me.UsrDat.UsrCod;
|
||||||
|
|
||||||
/***** Generate a key used in subsequents calls to other web services *****/
|
/***** Generate a key used in subsequents calls to other web services *****/
|
||||||
return API_GenerateNewWSKey (soap,
|
return API_GenerateNewAPIKey (soap,
|
||||||
(long) createAccountOut->userCode,
|
(long) createAccountOut->userCode,
|
||||||
createAccountOut->wsKey);
|
createAccountOut->wsKey);
|
||||||
}
|
}
|
||||||
|
@ -827,7 +746,7 @@ int swad__loginByUserPasswordKey (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_loginByUserPasswordKey;
|
Gbl.WebService.Function = API_loginByUserPasswordKey;
|
||||||
|
|
||||||
/***** Allocate space for strings *****/
|
/***** Allocate space for strings *****/
|
||||||
loginByUserPasswordKeyOut->wsKey = soap_malloc (soap,API_BYTES_WS_KEY + 1);
|
loginByUserPasswordKeyOut->wsKey = soap_malloc (soap,API_BYTES_KEY + 1);
|
||||||
loginByUserPasswordKeyOut->userNickname = soap_malloc (soap,Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1);
|
loginByUserPasswordKeyOut->userNickname = soap_malloc (soap,Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1);
|
||||||
loginByUserPasswordKeyOut->userID = soap_malloc (soap,ID_MAX_BYTES_USR_ID + 1);
|
loginByUserPasswordKeyOut->userID = soap_malloc (soap,ID_MAX_BYTES_USR_ID + 1);
|
||||||
loginByUserPasswordKeyOut->userFirstname = soap_malloc (soap,Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME + 1);
|
loginByUserPasswordKeyOut->userFirstname = soap_malloc (soap,Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME + 1);
|
||||||
|
@ -946,7 +865,7 @@ int swad__loginByUserPasswordKey (struct soap *soap,
|
||||||
API_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs];
|
API_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs];
|
||||||
|
|
||||||
/***** Generate a key used in subsequents calls to other web services *****/
|
/***** Generate a key used in subsequents calls to other web services *****/
|
||||||
return API_GenerateNewWSKey (soap,
|
return API_GenerateNewAPIKey (soap,
|
||||||
(long) loginByUserPasswordKeyOut->userCode,
|
(long) loginByUserPasswordKeyOut->userCode,
|
||||||
loginByUserPasswordKeyOut->wsKey);
|
loginByUserPasswordKeyOut->wsKey);
|
||||||
}
|
}
|
||||||
|
@ -986,7 +905,7 @@ int swad__loginBySessionKey (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_loginBySessionKey;
|
Gbl.WebService.Function = API_loginBySessionKey;
|
||||||
|
|
||||||
/***** Allocate space for strings *****/
|
/***** Allocate space for strings *****/
|
||||||
loginBySessionKeyOut->wsKey = soap_malloc (soap,API_BYTES_WS_KEY + 1);
|
loginBySessionKeyOut->wsKey = soap_malloc (soap,API_BYTES_KEY + 1);
|
||||||
loginBySessionKeyOut->userNickname = soap_malloc (soap,Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1);
|
loginBySessionKeyOut->userNickname = soap_malloc (soap,Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1);
|
||||||
loginBySessionKeyOut->userID = soap_malloc (soap,ID_MAX_BYTES_USR_ID + 1);
|
loginBySessionKeyOut->userID = soap_malloc (soap,ID_MAX_BYTES_USR_ID + 1);
|
||||||
loginBySessionKeyOut->userFirstname = soap_malloc (soap,Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME + 1);
|
loginBySessionKeyOut->userFirstname = soap_malloc (soap,Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME + 1);
|
||||||
|
@ -1066,8 +985,7 @@ int swad__loginBySessionKey (struct soap *soap,
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK)
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
if (UsrFound)
|
if (UsrFound)
|
||||||
{
|
{
|
||||||
|
@ -1100,7 +1018,7 @@ int swad__loginBySessionKey (struct soap *soap,
|
||||||
loginBySessionKeyOut->userRole = API_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs];
|
loginBySessionKeyOut->userRole = API_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs];
|
||||||
|
|
||||||
/***** Generate a key used in subsequents calls to other web services *****/
|
/***** Generate a key used in subsequents calls to other web services *****/
|
||||||
return API_GenerateNewWSKey (soap,
|
return API_GenerateNewAPIKey (soap,
|
||||||
(long) loginBySessionKeyOut->userCode,
|
(long) loginBySessionKeyOut->userCode,
|
||||||
loginBySessionKeyOut->wsKey);
|
loginBySessionKeyOut->wsKey);
|
||||||
}
|
}
|
||||||
|
@ -1134,8 +1052,8 @@ int swad__getAvailableRoles (struct soap *soap,
|
||||||
/***** Default value returned on error *****/
|
/***** Default value returned on error *****/
|
||||||
getAvailableRolesOut->roles = 0; // error
|
getAvailableRolesOut->roles = 0; // error
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check API (web service) key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -1258,7 +1176,7 @@ int swad__getCourses (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getCourses;
|
Gbl.WebService.Function = API_getCourses;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -1378,7 +1296,7 @@ int swad__getCourseInfo (struct soap *soap,
|
||||||
Hie_InitHierarchy ();
|
Hie_InitHierarchy ();
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -1720,7 +1638,7 @@ int swad__getUsers (struct soap *soap,
|
||||||
-1L;
|
-1L;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -1750,8 +1668,7 @@ int swad__getUsers (struct soap *soap,
|
||||||
"Requester must belong to course");
|
"Requester must belong to course");
|
||||||
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK) // TODO: Is this necessary?
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
/***** Check requested users' role *****/
|
/***** Check requested users' role *****/
|
||||||
if (userRole != API_ROLE_STUDENT && // Students
|
if (userRole != API_ROLE_STUDENT && // Students
|
||||||
|
@ -1801,7 +1718,7 @@ int swad__findUsers (struct soap *soap,
|
||||||
-1L;
|
-1L;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -1833,11 +1750,8 @@ int swad__findUsers (struct soap *soap,
|
||||||
"Requester must belong to course");
|
"Requester must belong to course");
|
||||||
|
|
||||||
if (Gbl.Hierarchy.Level == HieLvl_CRS)
|
if (Gbl.Hierarchy.Level == HieLvl_CRS)
|
||||||
{
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK) // TODO: Is this necessary?
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Check requested users' role *****/
|
/***** Check requested users' role *****/
|
||||||
if (userRole < API_ROLE_UNKNOWN ||
|
if (userRole < API_ROLE_UNKNOWN ||
|
||||||
|
@ -1973,7 +1887,7 @@ int swad__getGroupTypes (struct soap *soap,
|
||||||
Grp_OpenGroupsAutomatically ();
|
Grp_OpenGroupsAutomatically ();
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2092,7 +2006,7 @@ int swad__getGroups (struct soap *soap,
|
||||||
Grp_OpenGroupsAutomatically ();
|
Grp_OpenGroupsAutomatically ();
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2230,7 +2144,7 @@ int swad__sendMyGroups (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2454,7 +2368,7 @@ int swad__getAttendanceEvents (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2671,7 +2585,7 @@ int swad__sendAttendanceEvent (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2774,7 +2688,7 @@ int swad__removeAttendanceEvent (struct soap *soap,
|
||||||
removeAttendanceEventOut->attendanceEventCode = 0;
|
removeAttendanceEventOut->attendanceEventCode = 0;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -2886,7 +2800,7 @@ int swad__getAttendanceUsers (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getAttendanceUsers;
|
Gbl.WebService.Function = API_getAttendanceUsers;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3096,7 +3010,7 @@ int swad__sendAttendanceUsers (struct soap *soap,
|
||||||
sendAttendanceUsersOut->numUsers = 0;
|
sendAttendanceUsersOut->numUsers = 0;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3243,7 +3157,7 @@ int swad__getNotifications (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getNotifications;
|
Gbl.WebService.Function = API_getNotifications;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3519,7 +3433,7 @@ int swad__markNotificationsAsRead (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_markNotificationsAsRead;
|
Gbl.WebService.Function = API_markNotificationsAsRead;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3595,7 +3509,7 @@ int swad__sendMessage (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_sendMessage;
|
Gbl.WebService.Function = API_sendMessage;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3869,7 +3783,7 @@ int swad__sendNotice (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3891,8 +3805,7 @@ int swad__sendNotice (struct soap *soap,
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK)
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
/***** Check if I am a teacher *****/
|
/***** Check if I am a teacher *****/
|
||||||
if (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs != Rol_TCH)
|
if (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs != Rol_TCH)
|
||||||
|
@ -3940,7 +3853,7 @@ int swad__getTestConfig (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -3970,8 +3883,7 @@ int swad__getTestConfig (struct soap *soap,
|
||||||
"Requester must belong to course");
|
"Requester must belong to course");
|
||||||
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK)
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
/***** Set default result to empty *****/
|
/***** Set default result to empty *****/
|
||||||
getTestConfigOut->numQuestions =
|
getTestConfigOut->numQuestions =
|
||||||
|
@ -4066,7 +3978,7 @@ int swad__getTests (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -4096,8 +4008,7 @@ int swad__getTests (struct soap *soap,
|
||||||
"Requester must belong to course");
|
"Requester must belong to course");
|
||||||
|
|
||||||
/***** Get degree of current course *****/
|
/***** Get degree of current course *****/
|
||||||
if ((ReturnCode = API_GetCurrentDegCodFromCurrentCrsCod ()) != SOAP_OK)
|
Gbl.Hierarchy.Deg.DegCod = Crs_DB_GetCurrentDegCodFromCurrentCrsCod ();
|
||||||
return ReturnCode;
|
|
||||||
|
|
||||||
/***** Set default result to empty *****/
|
/***** Set default result to empty *****/
|
||||||
getTestsOut->tagsArray.__size = 0;
|
getTestsOut->tagsArray.__size = 0;
|
||||||
|
@ -4512,7 +4423,7 @@ int swad__getTrivialQuestion (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getTrivialQuestion;
|
Gbl.WebService.Function = API_getTrivialQuestion;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -4748,7 +4659,7 @@ int swad__getGames (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -4921,7 +4832,7 @@ int swad__getMatches (struct soap *soap,
|
||||||
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
Gbl.Hierarchy.Crs.CrsCod = (long) courseCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5107,7 +5018,7 @@ int swad__getMatchStatus (struct soap *soap,
|
||||||
getMatchStatusOut->answerIndex = -1;
|
getMatchStatusOut->answerIndex = -1;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5230,7 +5141,7 @@ int swad__answerMatchQuestion (struct soap *soap,
|
||||||
answerMatchQuestionOut->matchCode = -1;
|
answerMatchQuestionOut->matchCode = -1;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5358,7 +5269,7 @@ int swad__getDirectoryTree (struct soap *soap,
|
||||||
Gbl.Crs.Grps.GrpCod = (long) groupCode;
|
Gbl.Crs.Grps.GrpCod = (long) groupCode;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5668,7 +5579,7 @@ int swad__getFile (struct soap *soap,
|
||||||
getFileOut->publisherPhoto[0] = '\0';
|
getFileOut->publisherPhoto[0] = '\0';
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5817,7 +5728,7 @@ int swad__getMarks (struct soap *soap,
|
||||||
getMarksOut->content = NULL;
|
getMarksOut->content = NULL;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5913,7 +5824,7 @@ int swad__getLocation (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getLocation;
|
Gbl.WebService.Function = API_getLocation;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -5992,7 +5903,7 @@ int swad__sendMyLocation (struct soap *soap,
|
||||||
sendMyLocationOut->success = 0; // error
|
sendMyLocationOut->success = 0; // error
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
@ -6044,7 +5955,7 @@ int swad__getLastLocation (struct soap *soap,
|
||||||
Gbl.WebService.Function = API_getLastLocation;
|
Gbl.WebService.Function = API_getLastLocation;
|
||||||
|
|
||||||
/***** Check web service key *****/
|
/***** Check web service key *****/
|
||||||
if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK)
|
if ((ReturnCode = API_CheckAPIKey (wsKey)) != SOAP_OK)
|
||||||
return ReturnCode;
|
return ReturnCode;
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database
|
||||||
return soap_receiver_fault (soap,
|
return soap_receiver_fault (soap,
|
||||||
|
|
|
@ -27,12 +27,16 @@
|
||||||
/********************************* Headers ***********************************/
|
/********************************* Headers ***********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include "swad_cryptography.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Public constants ******************************/
|
/***************************** Public constants ******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define API_NUM_FUNCTIONS 35
|
#define API_NUM_FUNCTIONS 35
|
||||||
|
|
||||||
|
#define API_BYTES_KEY Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************* Public types ********************************/
|
/******************************* Public types ********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
|
||||||
|
|
||||||
|
// swad_API.c: SWAD web API provided to external plugins
|
||||||
|
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
// #include <dirent.h> // For scandir, etc.
|
||||||
|
// #include <linux/limits.h> // For PATH_MAX
|
||||||
|
// #include <stddef.h> // For NULL
|
||||||
|
// #include <string.h>
|
||||||
|
// #include <stdsoap2.h>
|
||||||
|
// #include <sys/stat.h> // For lstat
|
||||||
|
|
||||||
|
// #include "soap/soapH.h" // gSOAP header
|
||||||
|
// #include "soap/swad.nsmap" // Namespaces map used
|
||||||
|
|
||||||
|
// #include "swad_account.h"
|
||||||
|
#include "swad_API_database.h"
|
||||||
|
// #include "swad_attendance_database.h"
|
||||||
|
// #include "swad_browser.h"
|
||||||
|
// #include "swad_browser_database.h"
|
||||||
|
#include "swad_config.h"
|
||||||
|
#include "swad_database.h"
|
||||||
|
// #include "swad_error.h"
|
||||||
|
// #include "swad_forum.h"
|
||||||
|
// #include "swad_global.h"
|
||||||
|
// #include "swad_group_database.h"
|
||||||
|
// #include "swad_hierarchy.h"
|
||||||
|
// #include "swad_hierarchy_level.h"
|
||||||
|
// #include "swad_ID.h"
|
||||||
|
// #include "swad_match.h"
|
||||||
|
// #include "swad_nickname_database.h"
|
||||||
|
// #include "swad_notice.h"
|
||||||
|
// #include "swad_notification.h"
|
||||||
|
// #include "swad_password.h"
|
||||||
|
// #include "swad_plugin_database.h"
|
||||||
|
// #include "swad_question_database.h"
|
||||||
|
// #include "swad_role.h"
|
||||||
|
// #include "swad_room_database.h"
|
||||||
|
// #include "swad_search.h"
|
||||||
|
// #include "swad_session_database.h"
|
||||||
|
// #include "swad_test_config.h"
|
||||||
|
// #include "swad_test_visibility.h"
|
||||||
|
// #include "swad_user.h"
|
||||||
|
// #include "swad_user_database.h"
|
||||||
|
// #include "swad_xml.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************** External global variables from others modules ****************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
// extern struct Globals Gbl;
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private constants *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private prototypes ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/****************************** Insert API key *******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void API_DB_CreateAPIKey (char APIKey[API_BYTES_KEY + 1],long UsrCod,long PlgCod)
|
||||||
|
{
|
||||||
|
DB_QueryINSERT ("can not insert new key",
|
||||||
|
"INSERT INTO api_keys"
|
||||||
|
" (WSKey,UsrCod,PlgCod,LastTime)"
|
||||||
|
" VALUES"
|
||||||
|
" ('%s',%ld,%ld,NOW())",
|
||||||
|
APIKey,
|
||||||
|
UsrCod,
|
||||||
|
PlgCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************** Check API key exists in database *********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool API_DB_CheckIfAPIKeyExists (char APIKey[API_BYTES_KEY + 1])
|
||||||
|
{
|
||||||
|
return
|
||||||
|
DB_QueryEXISTS ("can not get existence of key",
|
||||||
|
"SELECT EXISTS"
|
||||||
|
"(SELECT *"
|
||||||
|
" FROM api_keys"
|
||||||
|
" WHERE WSKey='%s')",
|
||||||
|
APIKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************** Get data from an API key *************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
unsigned API_DB_GetDataFromAPIKey (MYSQL_RES **mysql_res,char APIKey[API_BYTES_KEY + 1])
|
||||||
|
{
|
||||||
|
return (unsigned)
|
||||||
|
DB_QuerySELECT (mysql_res,"can not data from API key",
|
||||||
|
"SELECT UsrCod," // row[0]
|
||||||
|
"PlgCod" // row[1]
|
||||||
|
" FROM api_keys"
|
||||||
|
" WHERE WSKey='%s'",
|
||||||
|
APIKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Remove old API keys ***************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void API_DB_RemoveOldAPIKeys (void)
|
||||||
|
{
|
||||||
|
/***** Remove expired API keys *****/
|
||||||
|
/* A session expire when last click (LastTime) is too old */
|
||||||
|
DB_QueryDELETE ("can not remove old API keys",
|
||||||
|
"DELETE LOW_PRIORITY FROM api_keys"
|
||||||
|
" WHERE LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
|
||||||
|
Cfg_TIME_TO_DELETE_API_KEY);
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
// swad_API_database.h: SWAD web API provided to external plugins, operations with database
|
||||||
|
|
||||||
|
#ifndef _SWAD_API_DB
|
||||||
|
#define _SWAD_API_DB
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance in Spanish),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include <mysql/mysql.h> // To access MySQL databases
|
||||||
|
|
||||||
|
#include "swad_API.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public constants ******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************************* Public types ********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public prototypes *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void API_DB_CreateAPIKey (char APIKey[API_BYTES_KEY + 1],long UsrCod,long PlgCod);
|
||||||
|
|
||||||
|
bool API_DB_CheckIfAPIKeyExists (char APIKey[API_BYTES_KEY + 1]);
|
||||||
|
unsigned API_DB_GetDataFromAPIKey (MYSQL_RES **mysql_res,char APIKey[API_BYTES_KEY + 1]);
|
||||||
|
|
||||||
|
void API_DB_RemoveOldAPIKeys (void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -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.
|
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 21.53.1 (2021-11-07)"
|
#define Log_PLATFORM_VERSION "SWAD 21.54 (2021-11-07)"
|
||||||
#define CSS_FILE "swad20.45.css"
|
#define CSS_FILE "swad20.45.css"
|
||||||
#define JS_FILE "swad20.69.1.js"
|
#define JS_FILE "swad20.69.1.js"
|
||||||
/*
|
/*
|
||||||
TODO: Rename CENTRE to CENTER in help wiki.
|
TODO: Rename CENTRE to CENTER in help wiki.
|
||||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||||
|
|
||||||
|
Version 21.54: Nov 07, 2021 New module swad_API_database for database queries related to API. (322001 lines)
|
||||||
Version 21.53.1: Nov 07, 2021 Queries moved to module swad_room_database. (321879 lines)
|
Version 21.53.1: Nov 07, 2021 Queries moved to module swad_room_database. (321879 lines)
|
||||||
Version 21.53: Nov 06, 2021 Queries moved to module swad_user_database and other modules. (321926 lines)
|
Version 21.53: Nov 06, 2021 Queries moved to module swad_user_database and other modules. (321926 lines)
|
||||||
Version 21.52.3: Nov 06, 2021 Queries moved to module swad_user_database. (321894 lines)
|
Version 21.52.3: Nov 06, 2021 Queries moved to module swad_user_database. (321894 lines)
|
||||||
|
|
|
@ -500,7 +500,7 @@
|
||||||
#define Cfg_TIME_TO_CHANGE_BANNER ((time_t)( 2UL * 60UL)) // After these seconds, change banner
|
#define Cfg_TIME_TO_CHANGE_BANNER ((time_t)( 2UL * 60UL)) // After these seconds, change banner
|
||||||
#define Cfg_NUMBER_OF_BANNERS 1 // Number of banners to show simultaneously
|
#define Cfg_NUMBER_OF_BANNERS 1 // Number of banners to show simultaneously
|
||||||
|
|
||||||
#define Cfg_TIME_TO_DELETE_WEB_SERVICE_KEY ((time_t)( 7UL * 24UL * 60UL * 60UL)) // After these seconds, a web service key is removed
|
#define Cfg_TIME_TO_DELETE_API_KEY ((time_t)( 7UL * 24UL * 60UL * 60UL)) // After these seconds, a web service key is removed
|
||||||
|
|
||||||
#define Cfg_TIME_TO_DELETE_HTML_OUTPUT ((time_t)( 30UL * 60UL)) // Remove the HTML output files older than these seconds
|
#define Cfg_TIME_TO_DELETE_HTML_OUTPUT ((time_t)( 30UL * 60UL)) // Remove the HTML output files older than these seconds
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,19 @@ unsigned Crs_DB_GetDataOfCourseByCod (MYSQL_RES **mysql_res,long CrsCod)
|
||||||
CrsCod);
|
CrsCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Get degree code from course code **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
long Crs_DB_GetCurrentDegCodFromCurrentCrsCod (void)
|
||||||
|
{
|
||||||
|
return DB_QuerySELECTCode ("can not get the degree of a course",
|
||||||
|
"SELECT DegCod"
|
||||||
|
" FROM crs_courses"
|
||||||
|
" WHERE CrsCod=%ld",
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******* Get the short names of degree and course from a course code *********/
|
/******* Get the short names of degree and course from a course code *********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -195,6 +208,21 @@ void Crs_DB_GetShortNamesByCod (long CrsCod,
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************** Check if course code exists in existing courses **************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool Crs_DB_CheckIfCrsCodExists (long CrsCod)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
DB_QueryEXISTS ("can not check if a course already existed",
|
||||||
|
"SELECT EXISTS"
|
||||||
|
"(SELECT *"
|
||||||
|
" FROM crs_courses"
|
||||||
|
" WHERE CrsCod=%ld)",
|
||||||
|
CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********** Check if the name of course exists in existing courses ***********/
|
/********** Check if the name of course exists in existing courses ***********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -49,9 +49,11 @@ unsigned Crs_DB_GetCrssInDeg (MYSQL_RES **mysql_res,long DegCod);
|
||||||
unsigned Crs_DB_GetCrssInCurrentDegBasic (MYSQL_RES **mysql_res);
|
unsigned Crs_DB_GetCrssInCurrentDegBasic (MYSQL_RES **mysql_res);
|
||||||
unsigned Crs_DB_GetCrssInCurrentDegFull (MYSQL_RES **mysql_res);
|
unsigned Crs_DB_GetCrssInCurrentDegFull (MYSQL_RES **mysql_res);
|
||||||
unsigned Crs_DB_GetDataOfCourseByCod (MYSQL_RES **mysql_res,long CrsCod);
|
unsigned Crs_DB_GetDataOfCourseByCod (MYSQL_RES **mysql_res,long CrsCod);
|
||||||
|
long Crs_DB_GetCurrentDegCodFromCurrentCrsCod (void);
|
||||||
void Crs_DB_GetShortNamesByCod (long CrsCod,
|
void Crs_DB_GetShortNamesByCod (long CrsCod,
|
||||||
char CrsShortName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1],
|
char CrsShortName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1],
|
||||||
char DegShortName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]);
|
char DegShortName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]);
|
||||||
|
bool Crs_DB_CheckIfCrsCodExists (long CrsCod);
|
||||||
bool Crs_DB_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
bool Crs_DB_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name,long CrsCod,
|
||||||
long DegCod,unsigned Year);
|
long DegCod,unsigned Year);
|
||||||
unsigned Crs_DB_GetCrssOfAUsr (MYSQL_RES **mysql_res,long UsrCod,Rol_Role_t Role);
|
unsigned Crs_DB_GetCrssOfAUsr (MYSQL_RES **mysql_res,long UsrCod,Rol_Role_t Role);
|
||||||
|
|
|
@ -175,6 +175,7 @@ unsigned Plg_DB_GetListPlugins (MYSQL_RES **mysql_res)
|
||||||
" FROM plg_plugins"
|
" FROM plg_plugins"
|
||||||
" ORDER BY Name");
|
" ORDER BY Name");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*************************** Get data of a plugin ****************************/
|
/*************************** Get data of a plugin ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -194,6 +195,20 @@ unsigned Plg_DB_GetDataOfPluginByCod (MYSQL_RES **mysql_res,long PlgCod)
|
||||||
PlgCod);
|
PlgCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/****** Check if the application key of the requester of a web service *******/
|
||||||
|
/****** is one of the application keys allowed in the plugins *******/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
long Plg_DB_GetPlgCodFromAppKey (const char *AppKey)
|
||||||
|
{
|
||||||
|
return DB_QuerySELECTCode ("can not check application key",
|
||||||
|
"SELECT PlgCod"
|
||||||
|
" FROM plg_plugins"
|
||||||
|
" WHERE AppKey='%s'",
|
||||||
|
AppKey);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************** Check if the name of plugin exists *********************/
|
/******************** Check if the name of plugin exists *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -59,6 +59,7 @@ void Plg_DB_ChangeIP (long PlgCod,
|
||||||
|
|
||||||
unsigned Plg_DB_GetListPlugins (MYSQL_RES **mysql_res);
|
unsigned Plg_DB_GetListPlugins (MYSQL_RES **mysql_res);
|
||||||
unsigned Plg_DB_GetDataOfPluginByCod (MYSQL_RES **mysql_res,long PlgCod);
|
unsigned Plg_DB_GetDataOfPluginByCod (MYSQL_RES **mysql_res,long PlgCod);
|
||||||
|
long Plg_DB_GetPlgCodFromAppKey (const char *AppKey);
|
||||||
bool Plg_DB_CheckIfPluginNameExists (const char *Name,long PlgCod);
|
bool Plg_DB_CheckIfPluginNameExists (const char *Name,long PlgCod);
|
||||||
|
|
||||||
void Plg_DB_RemovePlugin (long PlgCod);
|
void Plg_DB_RemovePlugin (long PlgCod);
|
||||||
|
|
Loading…
Reference in New Issue