// Copyright 2014 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.

#ifndef DEBUGD_SRC_HELPERS_DEV_FEATURES_PASSWORD_UTILS_H_
#define DEBUGD_SRC_HELPERS_DEV_FEATURES_PASSWORD_UTILS_H_

#include <string>
#include <vector>

#include <base/files/file_path.h>
#include <base/macros.h>

namespace debugd {

// Class to provide functionality to set and check user passwords.
//
// Functions are gathered into this class in order to provide a testable
// interface.
class DevFeaturesPasswordUtils {
 public:
  DevFeaturesPasswordUtils() = default;
  virtual ~DevFeaturesPasswordUtils() = default;

  // Checks if |username| is valid. This may be slightly different than the
  // actual allowed set of usernames, but it will work for our primary use cases
  // of chronos and root.
  bool IsUsernameValid(const std::string& username);

  // Checks if |username| has a valid password in |password_file|. Valid
  // passwords are defined as any non-empty hash that doesn't start with any
  // of '!', '*', or ':'.
  bool IsPasswordSet(const std::string& username,
                     const base::FilePath& password_file);

  // Sets |password| for |username| in |password_file|.
  bool SetPassword(const std::string& username,
                   const std::string& password,
                   const base::FilePath& password_file);

 private:
  // Hash a raw password. Virtual so that we can mock it for testing. Returns
  // false and prints to stderr if hashing failed.
  virtual bool HashPassword(const std::string& password,
                            std::string* hashed_password);

  // Search through |entries| to find the one corresponding to |username|, and
  // replace the password with |hashed_password|. If |username| is not found,
  // a new entry will be added to |entries|.
  bool SetPasswordInEntries(const std::string& username,
                            const std::string& hashed_password,
                            std::vector<std::string>* entries);

  DISALLOW_COPY_AND_ASSIGN(DevFeaturesPasswordUtils);
};

}  // namespace debugd

#endif  // DEBUGD_SRC_HELPERS_DEV_FEATURES_PASSWORD_UTILS_H_
