1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/examples/http_header/include/OtpAuthToken.h
2015-01-23 17:24:36 +01:00

145 lines
4.0 KiB
C++

// OtpAuthToken.h
#ifndef OTP_AUTH_TOKEN_H
#define OTP_AUTH_TOKEN_H 1
#include <HttpField.h>
#ifdef U_PROXY_UNIT
# include <CryptEngine.h>
#else
class CryptEngine;
#endif
/*
Formato del cookie di autenticazione
--------------------------------------------------------------------------------
Authentication Token
Des3_encrypt(TID=Current_Server_ID;UID=User_ID;SID=Session_ID;TS=Timestamp;CF=Codice_Fiscale[;MIGRATE])
Nota:
E' auspicabile che CF=Codice_Fiscale sia esprimibile tramite configurazione in
Des3_encrypt(TID=Current_Server_ID;UID=User_ID;SID=Session_ID;TS=Timestamp[;[HP1=Profile_Header1][,HPn=Profile_Headern][...]][;MIGRATE])
Descrizione dei campi
--------------------------------------------------------------------------------
Current_Server_ID identificatore del trustACCESS che ha richiesto il Cookie con Set-Cookie
User_ID identificatore dell'utente loggato
Session_ID Identificativo di sessione
Timestamp timestamp nel formato AAAMMGGHHSS al momento del Set-Cookie
Codice_Fiscale Codice Fiscale utente reperito dai dati di profilo.
MIGRATE identificatore della richiesta di migrazione da effettuare inviando una response di tipo 401
--------------------------------------------------------------------------------
*/
class OtpAuthToken {
public:
//// Check for memory error
U_MEMORY_TEST
/// = Allocator e Deallocator.
U_MEMORY_ALLOCATOR
U_MEMORY_DEALLOCATOR
OtpAuthToken()
{
U_TRACE_REGISTER_OBJECT(5, OtpAuthToken, "")
}
/**
* @param eng_ Crypto engine to decrypt and encrypt data
* @param buf string buffer containing OTP authentication token
*/
OtpAuthToken(CryptEngine* eng_, const UString& buf);
/**
* @param eng_ Crypto engine to encrypt and decrypt data
* @param srvid trustACCESS identifier for session
* @param uid_ identificatore dell'utente loggato
* @param sid_ User identifier for session
* @param cf_ Codice Fiscale utente reperito dai dati di profilo
* @param timestamp_ time to insert in token
* @param migrate_ Tell next server to migrate
*/
OtpAuthToken(CryptEngine* eng_, const UString& srvid, const UString& uid_, const UString& sid_,
const UString& cf_, time_t timestamp_, bool migrate_ = false)
: tid(srvid), uid(uid_), sid(sid_), cf(cf_)
{
U_TRACE_REGISTER_OBJECT(5, OtpAuthToken, "%p,%.*S,%.*S,%.*S,%.*S,%p,%b", eng_, U_STRING_TO_TRACE(srvid),
U_STRING_TO_TRACE(uid_), U_STRING_TO_TRACE(sid_), U_STRING_TO_TRACE(cf_), timestamp_, migrate_)
valid = true;
eng = eng_;
migrate = migrate_;
timestamp = timestamp_;
}
/** Destructor of the class.
*/
~OtpAuthToken()
{
U_TRACE_UNREGISTER_OBJECT(0, OtpAuthToken)
}
/**
* @return if token is valid
*/
bool is_valid()
{
U_TRACE(5, "OtpAuthToken::is_valid()")
U_RETURN(valid);
}
/**
* @return converts ts string to calendar time representation
*/
time_t get_timestamp()
{
U_TRACE(5, "OtpAuthToken::get_timestamp()")
U_RETURN(timestamp);
}
/**
* @param name_ name of field in Profile_Header
* @param value_ Value of field in Profile_Header
*/
void add(const UString& name_, const UString& value_);
/**
* @param name_ Field name in Profile_Header
* @param value_ Value of Profile_Header
* return: true if succeded
*/
bool find(const UString& name_, UString& value_);
/**
* @param name_ Name of Profile_Header
* return: true if succeded
*/
bool del(const UString& name_);
/**
* @param field String where to save token as string
*/
void stringify(UString& field);
/// DEBUG
#if defined(U_STDCPP_ENABLE) && defined(DEBUG)
const char* dump(bool reset) const;
#endif
protected:
UString buffer;
time_t timestamp;
public:
CryptEngine* eng;
UString tid, uid, sid, ts, cf;
UVector<UString> vec, hp;
bool valid, migrate;
};
#endif