Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1296)

Unified Diff: remoting/test/refresh_token_store.cc

Issue 880273006: Adding the AccessTokenFetcher and Environment class to the app remoting test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing one last windows compile issue Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/test/refresh_token_store.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/test/refresh_token_store.cc
diff --git a/remoting/test/refresh_token_store.cc b/remoting/test/refresh_token_store.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0f70ecdc7f2131204eff6c4000e70bc82a72760b
--- /dev/null
+++ b/remoting/test/refresh_token_store.cc
@@ -0,0 +1,139 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/test/refresh_token_store.h"
+
+#include "base/files/file_util.h"
+#include "base/logging.h"
+
+namespace {
+const base::FilePath::CharType kTokenFileName[] =
+ FILE_PATH_LITERAL("refresh_token.txt");
+const base::FilePath::CharType kRemotingFolder[] =
+ FILE_PATH_LITERAL("remoting");
+const base::FilePath::CharType kRefreshTokenStoreFolder[] =
+ FILE_PATH_LITERAL("refresh_token_store");
+
+// Returns the FilePath of the token store file for |user_name|.
+base::FilePath GetRefreshTokenDirPath(const std::string& user_name) {
+ base::FilePath refresh_token_dir_path;
+ if (!GetTempDir(&refresh_token_dir_path)) {
+ LOG(WARNING) << "Failed to retrieve temporary directory path.";
+ return base::FilePath();
+ }
+
+ refresh_token_dir_path = refresh_token_dir_path.Append(kRemotingFolder);
+ refresh_token_dir_path = refresh_token_dir_path.Append(
+ kRefreshTokenStoreFolder);
+
+ // We call AppendASCII here our user_name is a std::string but wide strings
+ // are used on WIN platforms. ApendASCII will convert our std::string into
+ // the correct type for windows platforms.
+ refresh_token_dir_path = refresh_token_dir_path.AppendASCII(user_name);
+
+ return refresh_token_dir_path;
+}
+
+} // namespace
+
+namespace remoting {
+namespace test {
+
+// Provides functionality to write a refresh token to a local folder on disk and
+// read it back during subsequent tool runs.
+class RefreshTokenStoreOnDisk : public RefreshTokenStore {
+ public:
+ RefreshTokenStoreOnDisk(const std::string user_name);
+ ~RefreshTokenStoreOnDisk() override;
+
+ // RefreshTokenStore interface.
+ std::string FetchRefreshToken() override;
+ bool StoreRefreshToken(const std::string& refresh_token) override;
+
+ private:
+ // Used to access the user specific token file.
+ std::string user_name_;
+
+ DISALLOW_COPY_AND_ASSIGN(RefreshTokenStoreOnDisk);
+};
+
+RefreshTokenStoreOnDisk::RefreshTokenStoreOnDisk(const std::string user_name) :
+ user_name_(user_name) {}
+
+RefreshTokenStoreOnDisk::~RefreshTokenStoreOnDisk() {}
+
+std::string RefreshTokenStoreOnDisk::FetchRefreshToken() {
+ base::FilePath token_dir_path(GetRefreshTokenDirPath(user_name_));
+ DCHECK(!token_dir_path.empty());
+
+ DVLOG(2) << "Reading token from path: " << token_dir_path.value();
+ base::FilePath token_file_path(token_dir_path.Append(kTokenFileName));
+
+ std::string refresh_token;
+ if (!base::ReadFileToString(token_file_path, &refresh_token)) {
+ DVLOG(1) << "Failed to read token file from: " << token_dir_path.value();
+ return std::string();
+ }
+
+ return refresh_token;
+}
+
+bool RefreshTokenStoreOnDisk::StoreRefreshToken(
+ const std::string& refresh_token) {
+ DCHECK(!refresh_token.empty());
+
+ base::FilePath token_dir_path(GetRefreshTokenDirPath(user_name_));
+ if (token_dir_path.empty()) {
+ return false;
+ }
+
+ base::FilePath token_file_path(token_dir_path.Append(kTokenFileName));
+ if (!base::DirectoryExists(token_dir_path) &&
+ !base::CreateDirectory(token_dir_path)) {
+ LOG(ERROR) << "Failed to create directory, refresh token not stored.";
+ return false;
+ }
+
+#if defined(OS_POSIX)
+ // For POSIX we can set permissions on the token file so we do so here.
+ // The test code should not run on other platforms since the code to safely
+ // store the token has not been implemented yet.
+
+ // Create an empty stub file if one does not exist.
+ if (!base::PathExists(token_file_path) &&
+ base::WriteFile(token_file_path, "", 0) < 0) {
+ LOG(ERROR) << "Failed to create stub file, refresh token not stored.";
+ return false;
+ }
+
+ // Set permissions on the stub file.
+ int mode =
+ base::FILE_PERMISSION_READ_BY_USER | base::FILE_PERMISSION_WRITE_BY_USER;
+ if (!SetPosixFilePermissions(token_file_path, mode)) {
+ LOG(ERROR) << "Failed to set file permissions, refresh token not stored.";
+ return false;
+ }
+
+ // Write the refresh token to our newly created file.
+ if (base::WriteFile(token_file_path, refresh_token.c_str(),
+ refresh_token.size()) < 0) {
+ LOG(ERROR) << "Failed to save refresh token to the file on disk.";
+ return false;
+ }
+
+ return true;
+#else
+ NOTIMPLEMENTED();
+ return false;
+#endif // OS_POSIX
+}
+
+scoped_ptr<RefreshTokenStore> RefreshTokenStore::OnDisk(
+ const std::string& user_name) {
+ return make_scoped_ptr<RefreshTokenStore>(new RefreshTokenStoreOnDisk(
+ user_name));
+}
+
+} // namespace test
+} // namespace remoting
« no previous file with comments | « remoting/test/refresh_token_store.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698