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

Side by Side Diff: remoting/protocol/pairing_registry.h

Issue 15709005: Linux pairing registry delegate implementation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_PROTOCOL_PAIRING_REGISTRY_H_ 5 #ifndef REMOTING_PROTOCOL_PAIRING_REGISTRY_H_
6 #define REMOTING_PROTOCOL_PAIRING_REGISTRY_H_ 6 #define REMOTING_PROTOCOL_PAIRING_REGISTRY_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/threading/non_thread_safe.h" 14 #include "base/threading/non_thread_safe.h"
15 #include "base/time.h"
16
17 namespace base {
18 class TaskRunner;
19 } // namespace base
15 20
16 namespace remoting { 21 namespace remoting {
17 namespace protocol { 22 namespace protocol {
18 23
19 // PairingRegistry holds information about paired clients to support 24 // PairingRegistry holds information about paired clients to support
20 // PIN-less authentication. For each paired client, the registry holds 25 // PIN-less authentication. For each paired client, the registry holds
21 // the following information: 26 // the following information:
22 // * The name of the client. This is supplied by the client and is not 27 // * The name of the client. This is supplied by the client and is not
23 // guaranteed to be unique. 28 // guaranteed to be unique.
24 // * The unique id of the client. This is generated on-demand by this 29 // * The unique id of the client. This is generated on-demand by this
25 // class and sent in plain-text by the client during authentication. 30 // class and sent in plain-text by the client during authentication.
26 // * The shared secret for the client. This is generated on-demand by this 31 // * The shared secret for the client. This is generated on-demand by this
27 // class and used in the SPAKE2 exchange to mutually verify identity. 32 // class and used in the SPAKE2 exchange to mutually verify identity.
28 class PairingRegistry : public base::RefCountedThreadSafe<PairingRegistry>, 33 class PairingRegistry : public base::RefCountedThreadSafe<PairingRegistry>,
29 public base::NonThreadSafe { 34 public base::NonThreadSafe {
30 public: 35 public:
31 struct Pairing { 36 struct Pairing {
37 bool operator==(const Pairing& other) const;
38
39 base::Time created_time;
Jamie 2013/05/31 01:14:22 Not strictly related to this CL, and I'm not sure
32 std::string client_id; 40 std::string client_id;
33 std::string client_name; 41 std::string client_name;
34 std::string shared_secret; 42 std::string shared_secret;
35 }; 43 };
36 44
37 // Mapping from client id to pairing information. 45 // Mapping from client id to pairing information.
38 typedef std::map<std::string, Pairing> PairedClients; 46 typedef std::map<std::string, Pairing> PairedClients;
39 47
40 // Interface representing the persistent storage back-end. 48 // Interface representing the persistent storage back-end.
41 class Delegate { 49 class Delegate {
42 public: 50 public:
43 virtual ~Delegate() {} 51 virtual ~Delegate() {}
44 52
45 // Save pairing information to persistent storage. Must not block. 53 // Save pairing information to persistent storage. Must not block.
46 virtual void Save(const PairedClients& paired_clients) = 0; 54 virtual void Save(const PairedClients& paired_clients) = 0;
55
56 // Load the pairing information synchronously from persistent storage.
57 // Note that this method is not used by the PairingRegistry class; instead
58 // it should be called on the result of CreateDelegate prior to creating
59 // a PairingRegistry. Unlike Save, LoadOnCurrentThread may block while
60 // loading the pairings--it is the caller's responsibility to make sure
61 // it is called on a suitable thread.
62 virtual PairedClients LoadOnCurrentThread() = 0;
47 }; 63 };
48 64
49 explicit PairingRegistry(scoped_ptr<Delegate> delegate, 65 explicit PairingRegistry(scoped_ptr<Delegate> delegate,
50 const PairedClients& paired_clients); 66 const PairedClients& paired_clients);
51 67
52 // Create a pairing for a new client and save it to disk. 68 // Create a pairing for a new client and save it to disk.
53 const Pairing& CreatePairing(const std::string& client_name); 69 const Pairing& CreatePairing(const std::string& client_name);
54 70
55 // Look up the shared secret for the specified client id. Returns an empty 71 // Look up the shared secret for the specified client id. Returns an empty
56 // string if the client id is not known. 72 // string if the client id is not known.
57 std::string GetSecret(const std::string &client_id) const; 73 std::string GetSecret(const std::string &client_id) const;
58 74
75 // Return a platform-specific Delegate that will save to permanent storage
76 // using the specified TaskRunner. Return NULL on platforms that don't
77 // support pairing.
78 static scoped_ptr<Delegate> CreateDelegate(
79 scoped_refptr<base::TaskRunner> task_runner);
80
59 private: 81 private:
60 friend class base::RefCountedThreadSafe<PairingRegistry>; 82 friend class base::RefCountedThreadSafe<PairingRegistry>;
61 83
62 virtual ~PairingRegistry(); 84 virtual ~PairingRegistry();
63 85
64 // Callback for the Delegate::Load method. Invoked when the stored pairings 86 // Callback for the Delegate::Load method. Invoked when the stored pairings
65 // have been loaded. 87 // have been loaded.
66 void OnLoad(const PairedClients& paired_clients); 88 void OnLoad(const PairedClients& paired_clients);
67 89
68 scoped_ptr<Delegate> delegate_; 90 scoped_ptr<Delegate> delegate_;
69 PairedClients paired_clients_; 91 PairedClients paired_clients_;
70 92
71 DISALLOW_COPY_AND_ASSIGN(PairingRegistry); 93 DISALLOW_COPY_AND_ASSIGN(PairingRegistry);
72 }; 94 };
73 95
74 // Temporary delegate that just logs NOTIMPLEMENTED for Load/Save. 96 // Temporary delegate that just logs NOTIMPLEMENTED for Load/Save.
75 // TODO(jamiewalch): Delete once Delegates are implemented for all platforms. 97 // TODO(jamiewalch): Delete once Delegates are implemented for all platforms.
76 class NotImplementedPairingRegistryDelegate : public PairingRegistry::Delegate { 98 class NotImplementedPairingRegistryDelegate : public PairingRegistry::Delegate {
77 public: 99 public:
78 virtual void Save( 100 virtual void Save(
79 const PairingRegistry::PairedClients& paired_clients) OVERRIDE; 101 const PairingRegistry::PairedClients& paired_clients) OVERRIDE;
102 virtual PairingRegistry::PairedClients LoadOnCurrentThread() OVERRIDE;
80 }; 103 };
81 104
82 } // namespace protocol 105 } // namespace protocol
83 } // namespace remoting 106 } // namespace remoting
84 107
85 #endif // REMOTING_PROTOCOL_PAIRING_REGISTRY_H_ 108 #endif // REMOTING_PROTOCOL_PAIRING_REGISTRY_H_
OLDNEW
« no previous file with comments | « remoting/host/pairing_registry_delegate_linux_unittest.cc ('k') | remoting/protocol/pairing_registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698