summaryrefslogtreecommitdiffstats
path: root/cloud_print
diff options
context:
space:
mode:
authormaksymb@chromium.org <maksymb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-31 14:48:29 +0000
committermaksymb@chromium.org <maksymb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-31 14:48:29 +0000
commitc282c110a8f6e2760853cffbd3ba8d8129bf9879 (patch)
treebe3eb91a68fe96a6597772be4498ca62e1ac915e /cloud_print
parent86a2774c49052378ac773b1fd30aa39c7dfec482 (diff)
downloadchromium_src-c282c110a8f6e2760853cffbd3ba8d8129bf9879.zip
chromium_src-c282c110a8f6e2760853cffbd3ba8d8129bf9879.tar.gz
chromium_src-c282c110a8f6e2760853cffbd3ba8d8129bf9879.tar.bz2
GCP2.0 Device: Fixed bug with two separators in X-Privet-Token.
BUG= Review URL: https://chromiumcodereview.appspot.com/21268002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214738 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cloud_print')
-rw-r--r--cloud_print/gcp20/prototype/x_privet_token.cc15
-rw-r--r--cloud_print/gcp20/prototype/x_privet_token.h2
-rw-r--r--cloud_print/gcp20/prototype/x_privet_token_unittest.cc9
3 files changed, 12 insertions, 14 deletions
diff --git a/cloud_print/gcp20/prototype/x_privet_token.cc b/cloud_print/gcp20/prototype/x_privet_token.cc
index b9afd10..df26d8e 100644
--- a/cloud_print/gcp20/prototype/x_privet_token.cc
+++ b/cloud_print/gcp20/prototype/x_privet_token.cc
@@ -16,6 +16,7 @@ namespace {
const char kXPrivetTokenDelimeter = ':';
const uint64 kTimeExpiration = 24*60*60; // in seconds
+const uint64 kTimeSecretRefresh = 24*60*60; // in seconds
} // namespace
@@ -33,17 +34,13 @@ XPrivetToken::XPrivetToken(const std::string& secret,
}
std::string XPrivetToken::GenerateXToken() {
- if (Time::Now() > last_gen_time_ + TimeDelta::FromSeconds(kTimeExpiration))
+ if (Time::Now() > last_gen_time_ + TimeDelta::FromSeconds(kTimeSecretRefresh))
UpdateSecret();
return GenerateXTokenWithTime(static_cast<uint64>(Time::Now().ToTimeT()));
}
-bool XPrivetToken::CheckValidXToken(const std::string& token_encoded) const {
- std::string token;
- if (!base::Base64Decode(token_encoded, &token))
- return false;
-
+bool XPrivetToken::CheckValidXToken(const std::string& token) const {
size_t delimeter_pos = token.find(kXPrivetTokenDelimeter);
if (delimeter_pos == std::string::npos)
return false;
@@ -53,7 +50,7 @@ bool XPrivetToken::CheckValidXToken(const std::string& token_encoded) const {
if (!base::StringToUint64(issue_time_str, &issue_time))
return false;
- if (GenerateXTokenWithTime(issue_time) != token_encoded)
+ if (GenerateXTokenWithTime(issue_time) != token)
return false;
return Time::FromTimeT(issue_time) - last_gen_time_ <
@@ -66,8 +63,8 @@ std::string XPrivetToken::GenerateXTokenWithTime(uint64 issue_time) const {
std::string hash = base::SHA1HashString(secret_ +
kXPrivetTokenDelimeter +
issue_time_str);
- base::Base64Encode(hash + kXPrivetTokenDelimeter + issue_time_str, &result);
- return result;
+ base::Base64Encode(hash, &result);
+ return result + kXPrivetTokenDelimeter + issue_time_str;
}
void XPrivetToken::UpdateSecret() {
diff --git a/cloud_print/gcp20/prototype/x_privet_token.h b/cloud_print/gcp20/prototype/x_privet_token.h
index edfc283..58c90f8 100644
--- a/cloud_print/gcp20/prototype/x_privet_token.h
+++ b/cloud_print/gcp20/prototype/x_privet_token.h
@@ -25,7 +25,7 @@ class XPrivetToken {
std::string GenerateXToken();
// Checks
- bool CheckValidXToken(const std::string& token_encoded) const;
+ bool CheckValidXToken(const std::string& token) const;
private:
FRIEND_TEST_ALL_PREFIXES(XPrivetTokenTest, Generation);
diff --git a/cloud_print/gcp20/prototype/x_privet_token_unittest.cc b/cloud_print/gcp20/prototype/x_privet_token_unittest.cc
index 4317459..38d783b 100644
--- a/cloud_print/gcp20/prototype/x_privet_token_unittest.cc
+++ b/cloud_print/gcp20/prototype/x_privet_token_unittest.cc
@@ -23,16 +23,17 @@ TEST(XPrivetTokenTest, Generation) {
XPrivetToken xtoken(secret, base::Time::FromTimeT(gen_time));
- std::string issue_time_str = base::StringPrintf("%"PRIu64, issue_time);
+ std::string issue_time_str = base::StringPrintf("%" PRIu64, issue_time);
std::string sha1_val = base::SHA1HashString(secret + ":" + issue_time_str);
- EXPECT_STRCASEEQ("2216828f9eefc3931c1b9a110dcca3dbec23571d",
+ ASSERT_STRCASEEQ("2216828f9eefc3931c1b9a110dcca3dbec23571d",
base::HexEncode(sha1_val.data(), sha1_val.size()).c_str());
std::string base64_val;
- base::Base64Encode(sha1_val + ":" + issue_time_str, &base64_val);
+ base::Base64Encode(sha1_val, &base64_val);
+ std::string token = base64_val + ":" + issue_time_str;
- EXPECT_EQ(base64_val, xtoken.GenerateXTokenWithTime(issue_time));
+ ASSERT_EQ(token, xtoken.GenerateXTokenWithTime(issue_time));
EXPECT_NE(xtoken.GenerateXTokenWithTime(issue_time),
xtoken.GenerateXTokenWithTime(issue_time + 1));