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

#include <base/logging.h>
#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>
#include <sysexits.h>

#include "u2fd/u2f_daemon.h"

#ifndef VCSID
#define VCSID "<unknown>"
#endif

namespace {

constexpr uint32_t kDefaultVendorId = 0x18d1;
constexpr uint32_t kDefaultProductId = 0x502c;

}  // namespace

int main(int argc, char* argv[]) {
  DEFINE_bool(force_u2f, false, "force U2F mode even if disabled by policy");
  DEFINE_bool(
      force_g2f, false, "force U2F mode plus extensions regardless of policy");
  DEFINE_bool(g2f_allowlist_data, false,
              "append allowlisting data to G2F register responses");
  DEFINE_int32(product_id, kDefaultProductId, "Product ID for the HID device");
  DEFINE_int32(vendor_id, kDefaultVendorId, "Vendor ID for the HID device");
  DEFINE_bool(verbose, false, "verbose logging");
  DEFINE_bool(user_keys, false, "Whether to use user-specific keys");
  DEFINE_bool(legacy_kh_fallback, false,
              "Whether to allow auth with legacy keys when user-specific keys "
              "are enabled");

  brillo::FlagHelper::Init(argc, argv, "u2fd, U2FHID emulation daemon.");

  brillo::InitLog(brillo::kLogToSyslog | brillo::kLogHeader |
                  brillo::kLogToStderrIfTty);
  if (FLAGS_verbose)
    logging::SetMinLogLevel(-1);

  LOG(INFO) << "Daemon version " << VCSID;

  bool legacy_kh_fallback = FLAGS_legacy_kh_fallback || !FLAGS_user_keys;

  u2f::U2fDaemon daemon(FLAGS_force_u2f, FLAGS_force_g2f,
                        FLAGS_g2f_allowlist_data, legacy_kh_fallback,
                        FLAGS_vendor_id, FLAGS_product_id);
  int rc = daemon.Run();

  return rc == EX_UNAVAILABLE ? EX_OK : rc;
}
