#ifndef REMOTING_HOST_THIRD_PARTY_AUTH_CONFIG_H_
#define REMOTING_HOST_THIRD_PARTY_AUTH_CONFIG_H_
#include <ostream>
#include <string>
#include "base/gtest_prod_util.h"
#include "base/values.h"
#include "url/gurl.h"
namespace remoting {
struct ThirdPartyAuthConfig {
GURL token_url;
GURL token_validation_url;
std::string token_validation_cert_issuer;
inline bool is_null() const {
return token_url.is_empty() && token_validation_url.is_empty();
}
enum ParseStatus {
InvalidPolicy,
NoPolicy,
ParsingSuccess,
};
static ParseStatus Parse(const base::Value::Dict& policy_dict,
ThirdPartyAuthConfig* result);
private:
static bool ParseStrings(const std::string& token_url,
const std::string& token_validation_url,
const std::string& token_validation_cert_issuer,
ThirdPartyAuthConfig* result);
FRIEND_TEST_ALL_PREFIXES(InvalidUrlTest, ParseInvalidUrl);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ParseEmpty);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ParseValidAll);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ParseValidNoCert);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ParseInvalidCombination);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ParseHttp);
static bool ExtractStrings(const base::Value::Dict& policy_dict,
std::string* token_url,
std::string* token_validation_url,
std::string* token_validation_cert_issuer);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ExtractEmpty);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ExtractUnknown);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ExtractAll);
FRIEND_TEST_ALL_PREFIXES(ThirdPartyAuthConfig, ExtractPartial);
};
std::ostream& operator<<(std::ostream& os, const ThirdPartyAuthConfig& cfg);
}
#endif