1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromeos/login/auth/user_context.h"
6#include "chromeos/login/user_names.h"
7
8namespace chromeos {
9
10UserContext::UserContext()
11    : is_using_oauth_(true),
12      auth_flow_(AUTH_FLOW_OFFLINE),
13      user_type_(user_manager::USER_TYPE_REGULAR) {
14}
15
16UserContext::UserContext(const UserContext& other)
17    : user_id_(other.user_id_),
18      key_(other.key_),
19      auth_code_(other.auth_code_),
20      user_id_hash_(other.user_id_hash_),
21      is_using_oauth_(other.is_using_oauth_),
22      auth_flow_(other.auth_flow_),
23      user_type_(other.user_type_),
24      public_session_locale_(other.public_session_locale_),
25      public_session_input_method_(other.public_session_input_method_) {
26}
27
28UserContext::UserContext(const std::string& user_id)
29    : user_id_(login::CanonicalizeUserID(user_id)),
30      is_using_oauth_(true),
31      auth_flow_(AUTH_FLOW_OFFLINE),
32      user_type_(user_manager::USER_TYPE_REGULAR) {
33}
34
35UserContext::UserContext(user_manager::UserType user_type,
36                         const std::string& user_id)
37    : is_using_oauth_(true),
38      auth_flow_(AUTH_FLOW_OFFLINE),
39      user_type_(user_type) {
40  if (user_type_ == user_manager::USER_TYPE_REGULAR)
41    user_id_ = login::CanonicalizeUserID(user_id);
42  else
43    user_id_ = user_id;
44}
45
46UserContext::~UserContext() {
47}
48
49bool UserContext::operator==(const UserContext& context) const {
50  return context.user_id_ == user_id_ &&
51         context.key_ == key_ &&
52         context.auth_code_ == auth_code_ &&
53         context.user_id_hash_ == user_id_hash_ &&
54         context.is_using_oauth_ == is_using_oauth_ &&
55         context.auth_flow_ == auth_flow_ &&
56         context.user_type_ == user_type_ &&
57         context.public_session_locale_ == public_session_locale_ &&
58         context.public_session_input_method_ == public_session_input_method_;
59}
60
61bool UserContext::operator!=(const UserContext& context) const {
62  return !(*this == context);
63}
64
65const std::string& UserContext::GetUserID() const {
66  return user_id_;
67}
68
69const Key* UserContext::GetKey() const {
70  return &key_;
71}
72
73Key* UserContext::GetKey() {
74  return &key_;
75}
76
77const std::string& UserContext::GetAuthCode() const {
78  return auth_code_;
79}
80
81const std::string& UserContext::GetUserIDHash() const {
82  return user_id_hash_;
83}
84
85bool UserContext::IsUsingOAuth() const {
86  return is_using_oauth_;
87}
88
89UserContext::AuthFlow UserContext::GetAuthFlow() const {
90  return auth_flow_;
91}
92
93user_manager::UserType UserContext::GetUserType() const {
94  return user_type_;
95}
96
97const std::string& UserContext::GetPublicSessionLocale() const {
98  return public_session_locale_;
99}
100
101const std::string& UserContext::GetPublicSessionInputMethod() const {
102  return public_session_input_method_;
103}
104
105bool UserContext::HasCredentials() const {
106  return (!user_id_.empty() && !key_.GetSecret().empty()) ||
107         !auth_code_.empty();
108}
109
110void UserContext::SetUserID(const std::string& user_id) {
111  user_id_ = login::CanonicalizeUserID(user_id);
112}
113
114void UserContext::SetKey(const Key& key) {
115  key_ = key;
116}
117
118void UserContext::SetAuthCode(const std::string& auth_code) {
119  auth_code_ = auth_code;
120}
121
122void UserContext::SetUserIDHash(const std::string& user_id_hash) {
123  user_id_hash_ = user_id_hash;
124}
125
126void UserContext::SetIsUsingOAuth(bool is_using_oauth) {
127  is_using_oauth_ = is_using_oauth;
128}
129
130void UserContext::SetAuthFlow(AuthFlow auth_flow) {
131  auth_flow_ = auth_flow;
132}
133
134void UserContext::SetUserType(user_manager::UserType user_type) {
135  user_type_ = user_type;
136}
137
138void UserContext::SetPublicSessionLocale(const std::string& locale) {
139  public_session_locale_ = locale;
140}
141
142void UserContext::SetPublicSessionInputMethod(const std::string& input_method) {
143  public_session_input_method_ = input_method;
144}
145
146void UserContext::ClearSecrets() {
147  key_.ClearSecret();
148  auth_code_.clear();
149}
150
151}  // namespace chromeos
152