HttpOtpPostLogin::HttpOtpPostLogin(const char* buf, unsigned len, const UString& user_field, const UString& pin_field, const UString& token_field, const UString& passwd_field, const UString& cf_field, HttpHeader& header) { U_TRACE(5, "HttpOtpPostLogin::HttpOtpPostLogin(%.*S,%u,%.*S,%.*S,%.*S,%.*S,%p)", len, buf, len, U_STRING_TO_TRACE(user_field), U_STRING_TO_TRACE(pin_field), U_STRING_TO_TRACE(token_field), U_STRING_TO_TRACE(passwd_field), U_STRING_TO_TRACE(cf_field), &header) HttpField* f = header.find(U_STRING_FROM_CONSTANT("Content-Type")); U_INTERNAL_ASSERT_POINTER(f) U_INTERNAL_ASSERT(f->value.find("application/x-www-form-urlencoded") != unsigned(-1)) buffer.assign(buf, len); (void) U_VEC_SPLIT(vec, buffer, "=&"); // "user=stefano+casazza&pin=12345&token=autorizzativo" unsigned i = 0; while (i < vec.size()) { if (vec[i] == user_field) { U_STR_RESERVE(user, 64); Url::decode(vec[i+1], user); } else if (vec[i] == pin_field) { U_STR_RESERVE(pin, 64); Url::decode(vec[i+1], pin); } else if (vec[i] == token_field) { U_STR_RESERVE(token, 64); Url::decode(vec[i+1], token); } else if (vec[i] == passwd_field) { U_STR_RESERVE(passwd, 64); Url::decode(vec[i+1], passwd); } else if (vec[i] == cf_field) { U_STR_RESERVE(cf, 64); Url::decode(vec[i+1], cf); } i += 2; } }
HttpBaWwwAuthenticate::HttpBaWwwAuthenticate(const char* name_, unsigned name_len, const char* value_, unsigned value_len) { U_TRACE_REGISTER_OBJECT(5, HttpBaWwwAuthenticate, "%.*S,%u,%.*S,%u", name_len, name_, name_len, value_len, value_, value_len) U_INTERNAL_ASSERT(memcmp(name_, U_CONSTANT_TO_PARAM("WWW-Authenticate")) == 0) U_INTERNAL_ASSERT(memcmp(value_, U_CONSTANT_TO_PARAM(" Basic realm")) == 0) name.assign(name_, name_len); UVector<UString> vec; buffer.assign(value_, value_len); (void) U_VEC_SPLIT(vec, buffer, "="); realm = vec[2]; }
OtpAuthToken::OtpAuthToken(CryptEngine* eng_, const UString& buf) { U_TRACE_REGISTER_OBJECT(5, OtpAuthToken, "%p,%.*S", eng_, U_STRING_TO_TRACE(buf)) eng = eng_; U_STR_RESERVE(buffer, 1000); long pos; unsigned char ptr[1000]; #ifdef U_PROXY_UNIT Base64engine eng1; pos = eng1.decode((unsigned char*)buf.data(), (long)buf.size(), ptr); pos = eng->decrypt(ptr, pos, (unsigned char*)buffer.data()); #else pos = u_base64_decode(U_STRING_TO_PARAM(buf), ptr); # ifdef USE_LIBSSL pos = u_des3_decode(ptr, pos, (unsigned char*)buffer.data()); # endif #endif U_STR_SIZE_ADJUST_FORCE(buffer, pos); migrate = false; valid = (memcmp(buffer.data(), U_CONSTANT_TO_PARAM("TID=")) == 0); timestamp = 0; if (valid) { unsigned n = U_VEC_SPLIT(vec, buffer, "=; \r\n"), i = 10; if (n < i) { valid = false; return; } U_INTERNAL_ASSERT(vec[0] == U_STRING_FROM_CONSTANT("TID")) tid = vec[1]; U_INTERNAL_ASSERT(vec[2] == U_STRING_FROM_CONSTANT("UID")) uid = vec[3]; U_INTERNAL_ASSERT(vec[4] == U_STRING_FROM_CONSTANT("SID")) sid = vec[5]; U_INTERNAL_ASSERT(vec[6] == U_STRING_FROM_CONSTANT("TS")) ts = vec[7]; U_INTERNAL_ASSERT(vec[8] == U_STRING_FROM_CONSTANT("CF")) cf = vec[9]; while (i < n) { if (vec[i] == U_STRING_FROM_CONSTANT("MIGRATE")) { migrate = true; ++i; } else { hp.push_back(vec[i]); ++i; if (i >= n) { valid = false; return; } hp.push_back(vec[i]); ++i; } } # ifdef U_STD_STRING char* _ptr = (char*) ts.c_str(); # else char* _ptr = ts.data(); # endif static struct tm tm; (void) strptime(_ptr, "%Y%m%d%H%M%S", &tm); timestamp = mktime(&tm); } }
HttpCookie::HttpCookie(const char* name_, unsigned name_len, const char* value_, unsigned value_len) { U_TRACE_REGISTER_OBJECT(5, HttpCookie, "%.*S,%u,%.*S,%u", name_len, name_, name_len, value_len, value_, value_len) U_INTERNAL_ASSERT(memcmp(name_, U_CONSTANT_TO_PARAM("Cookie")) == 0) name.assign(name_, name_len); buffer.assign(value_, value_len); #ifdef SERGIO // NOTA BENE: La virgola come separatore non viene supportata per consentire l'utilizzo di COOKIE_SPECIAL_VALUE UVector<UString> tvec,tvec1; (void) cookie_split(tvec, buffer, "="); const char* s; const char* p; const char* pc; const char* delim; unsigned i, num, size; for (i = 0; i < tvec.size(); i++) { s = tvec[i].data(); /* modifica stefano */ size = tvec[i].size(); pc = (const char*) memrchr(s, ',', size); p = (const char*) memrchr(s, ';', size); if (pc > p) { p = pc; delim = ","; } else { delim = ";"; } if (p != NULL) { /* modifica stefano */ num = cookie_split(tvec1, tvec[i], delim); U_INTERNAL_ASSERT(num > 1) vec.push_back(tvec1[0]); vec.push_back(tvec1[1]); tvec1.clear(); } else { vec.push_back(tvec[i]); } } tvec.clear(); #else (void) U_VEC_SPLIT(vec, buffer, "=;, \r\n"); #endif #ifdef DEBUG for (unsigned i = 0; i < vec.size(); ++i) { U_DUMP("vec[%d] = %.*S", i, U_STRING_TO_TRACE(vec[i])) } #endif }