You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
6.1 KiB
146 lines
6.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
#ifndef GCWGJOB_H |
|
#define GCWGJOB_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
namespace GCSDK |
|
{ |
|
|
|
class CGCWGJobMgr; |
|
|
|
// defines a single parameter to a web api func |
|
struct WebApiParam_t |
|
{ |
|
const char *m_pchParam; |
|
const char *m_pchDescription; |
|
bool m_bOptional; // true if optional |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Privilege type for WG requests |
|
// NOTE: This enum is a copy of EWegApiPrivilege from servercommon.h. |
|
enum EGCWebApiPrivilege |
|
{ |
|
k_EGCWebApiPriv_None = 0, // doens't require any privileges |
|
k_EGCWebApiPriv_Account = 1, // user must have a Steam account with password set |
|
k_EGCWebApiPriv_Approved = 2, // user must not be blocked from community activity |
|
k_EGCWebApiPriv_Session = 3, // user must have a current Steam3 session |
|
k_EGCWebApiPriv_Support = 4, // user must have Support flag set |
|
k_EGCWebApiPriv_Admin = 5, // user must have Admin flag set |
|
////////////////////////////////////////////////////////////////////////// |
|
// Steamworks Application Editing - |
|
// |
|
// This represents a minimal requirement - The user must have some of the |
|
// EAppRights available to his account for a particular application. |
|
// This value is stored in the g_WebApiFuncs table. |
|
// |
|
// The functions dispatched to from the g_WebApiFuncs table are responsible |
|
// for doing finer grain permissions checks. |
|
// At this time, only the k_EAppRightManageCEG check is performed at the coarser grain. |
|
// |
|
// Some privileges such k_EAppRightEditInfo are implemented entirely within the |
|
// Web Server's .php code, as these rights do not manipulate data through the Web Gateway, |
|
// but manipulate through direct access to file system files and perforce operations ! |
|
// |
|
k_EGCWebApiPriv_EditApp = 6, // user has some rights onto specific app - is publisher-affiliated and rights match app (or is admin) |
|
// |
|
// End Steamworks Application Editing - |
|
// |
|
////////////////////////////////////////////////////////////////////////// |
|
|
|
////////////////////////////////////////////////////////////////////////// |
|
// Steamworks Publisher Editing - |
|
// |
|
// These represent requests for particular rights involving the manipulation of |
|
// publisher data. k_EGCWebApiPriv_MemberPublisher only requires that the user be a member of a publisher, |
|
// whereas k_EGCWebApiPriv_EditPublisher specifically requires the user has k_EPubRightManagerUsers permission |
|
// within a particular publisher. That is because at this time k_EPubRightManagerUsers is the ONLY |
|
// right defined so the coarse grain view of k_EGCWebApiPriv_EditPublisher exactly matches the finer grain |
|
// view defined by EPubRights. |
|
// |
|
k_EGCWebApiPriv_MemberPublisher = 7, // user is publisher-affiliated with specific publisher (or is admin) |
|
k_EGCWebApiPriv_EditPublisher = 8, // user can edit specific publisher (or is admin) |
|
// |
|
// End Steamworks Publisher Editing - |
|
// |
|
////////////////////////////////////////////////////////////////////////// |
|
k_EGCWebApiPriv_AccountOptional = 9, // validate the token if we get one but also allow public requests through |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
struct WebApiFunc_t |
|
{ |
|
const char *m_pchRequestName; |
|
const char *m_pchRequestHandlerJobName; |
|
EGCWebApiPrivilege m_eRequiredPrivilege; |
|
WebApiParam_t m_rgParams[20]; |
|
}; |
|
|
|
class CGCWGJobMgr |
|
{ |
|
public: |
|
CGCWGJobMgr( ); |
|
~CGCWGJobMgr(); |
|
bool BHandleMsg( IMsgNetPacket *pNetPacket ); |
|
static CUtlDict< const WebApiFunc_t* > &GetWGRequestMap(); |
|
|
|
static void SendErrorMessage( const CGCMsg<MsgGCWGRequest_t> & msg, const char *pchErrorMsg, int32 nResult ); |
|
static void SetErrorMessage( KeyValues *pkvErr, const char *pchErrorMsg, int32 nResult ); |
|
static void SendResponse( const CGCMsg<MsgGCWGRequest_t> & msg, KeyValues *pkvResponse, bool bResult ); |
|
|
|
#ifdef DBGFLAG_VALIDATE |
|
virtual void Validate( CValidator &validator, const char *pchName ); // Validate our internal structures |
|
static void ValidateStatics( CValidator &validator ); |
|
#endif // DBGFLAG_VALIDATE |
|
|
|
protected: |
|
static void RegisterWGJob( const WebApiFunc_t *pWGJobType, const JobType_t *pJobCreationFunc ); |
|
friend void GCWGJob_RegisterWGJobType( const WebApiFunc_t *pWGJobType, const JobType_t *pJobCreationFunc ); |
|
|
|
bool BVerifyPrivileges( const CGCMsg<MsgGCWGRequest_t> & msg, const WebApiFunc_t * pFunc ); |
|
bool BVerifyParams( const CGCMsg<MsgGCWGRequest_t> & msg, const WebApiFunc_t * pFunc ); |
|
}; |
|
|
|
inline void GCWGJob_RegisterWGJobType( const WebApiFunc_t *pWGJobType, const JobType_t *pJobCreationFunc ) |
|
{ |
|
CGCWGJobMgr::RegisterWGJob( pWGJobType, pJobCreationFunc ); |
|
} |
|
|
|
// declares a job as a wg job, require/optional params should be placed between begin and end declare. |
|
#define DECLARE_GCWG_JOB( gcbaseSubclass, jobclass, requestname, requiredprivilege ) \ |
|
CJob *CreateWGJob_##jobclass( gcbaseSubclass *pvParent, void * pvStartParam ); \ |
|
static const JobType_t g_JobType_##jobclass = { #jobclass, k_EGCMsgInvalid, k_EServerTypeGC, (JobCreationFunc_t)CreateWGJob_##jobclass }; \ |
|
CJob *CreateWGJob_##jobclass( gcbaseSubclass *pvParent, void * pvStartParam ) \ |
|
{ \ |
|
CJob *job = CJob::AllocateJob<jobclass>( pvParent ); \ |
|
Job_SetJobType( *job, &g_JobType_##jobclass ); \ |
|
if ( pvStartParam ) job->SetStartParam( pvStartParam ); \ |
|
return job; \ |
|
} \ |
|
static const WebApiFunc_t g_WGRequestInfo_##jobclass = { requestname, #jobclass, requiredprivilege, { |
|
|
|
#define REQUIRED_GCWG_PARAM( pstrParameter, pstrDescription ) { pstrParameter, pstrDescription, false }, |
|
|
|
#define OPTIONAL_GCWG_PARAM( pstrParameter, pstrDescription ) { pstrParameter, pstrDescription, true }, |
|
|
|
#define END_DECLARE_GCWG_JOB( jobclass ) } }; \ |
|
static class CRegWGJob_##jobclass \ |
|
{ \ |
|
public: CRegWGJob_##jobclass() \ |
|
{ \ |
|
GCWGJob_RegisterWGJobType( &g_WGRequestInfo_##jobclass, &g_JobType_##jobclass ); \ |
|
} \ |
|
} g_RegWGJob_##jobclass; |
|
|
|
// quick and dirty - register a job with no required/optional parameters |
|
#define REG_GCWG_JOB( jobclass, requestname, requiredprivilege ) \ |
|
DECLARE_WG_JOB( jobclass, requestname, requiredprivilege ) \ |
|
END_DECLARE_GCWG_JOB( jobclass ) |
|
|
|
} // namespace GCSDK |
|
|
|
#endif |