15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jingle/notifier/communicator/login_settings.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jingle/notifier/base/server_information.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/cert_verifier.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "webrtc/base/common.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "webrtc/base/socketaddress.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace notifier {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginSettings::LoginSettings(const buzz::XmppClientSettings& user_settings,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const scoped_refptr<net::URLRequestContextGetter>&
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 request_context_getter,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const ServerList& default_servers,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             bool try_ssltcp_first,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const std::string& auth_mechanism)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : user_settings_(user_settings),
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      request_context_getter_(request_context_getter),
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default_servers_(default_servers),
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      try_ssltcp_first_(try_ssltcp_first),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      auth_mechanism_(auth_mechanism) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_GT(default_servers_.size(), 0u);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginSettings::~LoginSettings() {}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginSettings::set_user_settings(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const buzz::XmppClientSettings& user_settings) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_settings_ = user_settings;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServerList LoginSettings::GetServers() const {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetServersForTime(base::Time::Now());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// How long a redirect is valid for.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kRedirectExpirationTimeMinutes = 5;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginSettings::SetRedirectServer(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ServerInformation& redirect_server) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  redirect_server_ = redirect_server;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  redirect_expiration_ =
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Now() +
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::TimeDelta::FromMinutes(kRedirectExpirationTimeMinutes);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServerList LoginSettings::GetServersForTimeForTest(base::Time now) const {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetServersForTime(now);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time LoginSettings::GetRedirectExpirationForTest() const {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return redirect_expiration_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServerList LoginSettings::GetServersForTime(base::Time now) const {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (now < redirect_expiration_) ?
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ServerList(1, redirect_server_) :
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default_servers_;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace notifier
73