1// Copyright (c) 2012 The Chromium OS 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#ifndef LIBBRILLO_BRILLO_CRYPTOHOME_H_
6#define LIBBRILLO_BRILLO_CRYPTOHOME_H_
7
8#include <string>
9
10#include <base/files/file_path.h>
11#include <brillo/brillo_export.h>
12
13namespace brillo {
14namespace cryptohome {
15namespace home {
16
17BRILLO_EXPORT extern const char kGuestUserName[];
18
19// Returns the common prefix under which the mount points for user homes are
20// created.
21BRILLO_EXPORT base::FilePath GetUserPathPrefix();
22
23// Returns the common prefix under which the mount points for root homes are
24// created.
25BRILLO_EXPORT base::FilePath GetRootPathPrefix();
26
27// Returns the path at which the user home for |username| will be mounted.
28// Returns "" for failures.
29BRILLO_EXPORT base::FilePath GetUserPath(const std::string& username);
30
31// Returns the path at which the user home for |hashed_username| will be
32// mounted. Useful when you already have the username hashed.
33// Returns "" for failures.
34BRILLO_EXPORT base::FilePath GetHashedUserPath(
35    const std::string& hashed_username);
36
37// Returns the path at which the root home for |username| will be mounted.
38// Returns "" for failures.
39BRILLO_EXPORT base::FilePath GetRootPath(const std::string& username);
40
41// Returns the path at which the daemon |daemon| should store per-user data.
42BRILLO_EXPORT base::FilePath GetDaemonPath(const std::string& username,
43                                           const std::string& daemon);
44
45// Checks whether |sanitized| has the format of a sanitized username.
46BRILLO_EXPORT bool IsSanitizedUserName(const std::string& sanitized);
47
48// Returns a sanitized form of |username|. For x != y, SanitizeUserName(x) !=
49// SanitizeUserName(y).
50BRILLO_EXPORT std::string SanitizeUserName(const std::string& username);
51
52// Overrides the common prefix under which the mount points for user homes are
53// created. This is used for testing only.
54BRILLO_EXPORT void SetUserHomePrefix(const std::string& prefix);
55
56// Overrides the common prefix under which the mount points for root homes are
57// created. This is used for testing only.
58BRILLO_EXPORT void SetRootHomePrefix(const std::string& prefix);
59
60// Overrides the contents of the system salt.
61// salt should be non-NULL and non-empty when attempting to avoid filesystem
62// usage in tests.
63// Note:
64// (1) Never mix usage with SetSystemSaltPath().
65// (2) Ownership of the pointer stays with the caller.
66BRILLO_EXPORT void SetSystemSalt(std::string* salt);
67
68// Returns the system salt.
69BRILLO_EXPORT std::string* GetSystemSalt();
70
71}  // namespace home
72}  // namespace cryptohome
73}  // namespace brillo
74
75#endif  // LIBBRILLO_BRILLO_CRYPTOHOME_H_
76