C++程序  |  77行  |  2.69 KB

// Copyright 2015 The Weave Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_
#define LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_

#include <memory>
#include <set>
#include <string>

#include <base/time/time.h>

#include "src/privet/privet_types.h"

namespace weave {
namespace privet {

// Interface to provide Security related logic for |PrivetHandler|.
class SecurityDelegate {
 public:
  virtual ~SecurityDelegate() {}

  // Creates access token for the given scope, user id and |time|.
  virtual bool CreateAccessToken(AuthType auth_type,
                                 const std::string& auth_code,
                                 AuthScope desired_scope,
                                 std::string* access_token,
                                 AuthScope* granted_scope,
                                 base::TimeDelta* ttl,
                                 ErrorPtr* error) = 0;

  // Validates |token| and returns scope, user id parsed from that.
  virtual bool ParseAccessToken(const std::string& token,
                                UserInfo* user_info,
                                ErrorPtr* error) const = 0;

  // Returns list of pairing methods by device.
  virtual std::set<PairingType> GetPairingTypes() const = 0;

  // Returns list of crypto methods supported by devices.
  virtual std::set<CryptoType> GetCryptoTypes() const = 0;

  // Returns list of auth methods supported by devices.
  virtual std::set<AuthType> GetAuthTypes() const = 0;

  // Returns Root Client Authorization Token.
  virtual std::string ClaimRootClientAuthToken(ErrorPtr* error) = 0;

  // Confirms pending pending token claim or checks that token is valid for the
  // active secret.
  virtual bool ConfirmClientAuthToken(const std::string& token,
                                      ErrorPtr* error) = 0;

  virtual bool StartPairing(PairingType mode,
                            CryptoType crypto,
                            std::string* session_id,
                            std::string* device_commitment,
                            ErrorPtr* error) = 0;

  virtual bool ConfirmPairing(const std::string& session_id,
                              const std::string& client_commitment,
                              std::string* fingerprint,
                              std::string* signature,
                              ErrorPtr* error) = 0;

  virtual bool CancelPairing(const std::string& session_id,
                             ErrorPtr* error) = 0;

  virtual std::string CreateSessionId() = 0;
};

}  // namespace privet
}  // namespace weave

#endif  // LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_