// Copyright 2016 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.
//
// Container configuration from the config.json data as specified in
// https://github.com/opencontainers/runtime-spec/tree/v1.0.0-rc2

#ifndef RUN_OCI_OCI_CONFIG_H_
#define RUN_OCI_OCI_CONFIG_H_

#include <linux/capability.h>
#include <stdint.h>

#include <bitset>
#include <map>
#include <memory>
#include <string>
#include <vector>

#include <base/time/time.h>

namespace run_oci {

struct OciPlatform {
  std::string os;
  std::string arch;
};

struct OciProcessUser {
  uint32_t uid;
  uint32_t gid;
  std::vector<uint32_t> additionalGids;  // Optional
};

using CapSet = std::bitset<CAP_LAST_CAP + 1>;

struct OciProcessRlimit {
  int type;
  uint32_t hard;
  uint32_t soft;
};

using OciEnvironment = std::map<std::string, std::string>;

struct OciProcess {
  bool terminal = false;  // Optional
  OciProcessUser user;
  std::vector<std::string> args;
  OciEnvironment env;  // Optional
  base::FilePath cwd;
  std::map<std::string, CapSet> capabilities;  // Optional
  std::vector<OciProcessRlimit> rlimits;       // Optional
  std::string selinuxLabel;
  mode_t umask = 0022;  // Optional, Chrome OS extension
  // Unused: apparmorProfile, noNewPrivileges
};

struct OciRoot {
  base::FilePath path;
  bool readonly = false;  // Optional
};

struct OciMount {
  base::FilePath destination;
  std::string type;
  base::FilePath source;
  std::vector<std::string> options;  // Optional
  bool performInIntermediateNamespace =
      false;  // Optional, Chrome OS extension.
};

struct OciLinuxNamespaceMapping {
  uint32_t hostID;
  uint32_t containerID;
  uint32_t size;
};

struct OciLinuxDevice {
  std::string type;
  base::FilePath path;
  uint32_t major = 0;         // Optional
  uint32_t minor = 0;         // Optional
  uint32_t fileMode = 0000;   // Optional
  uint32_t uid = 0;           // Optional
  uint32_t gid = 0;           // Optional
  bool dynamicMinor = false;  // Optional, Chrome OS extension.
};

struct OciSeccompArg {
  uint32_t index;
  uint64_t value;
  uint64_t value2;
  std::string op;
};

struct OciSeccompSyscall {
  std::string name;
  std::string action;
  std::vector<OciSeccompArg> args;  // Optional
};

struct OciLinuxCgroupDevice {
  bool allow;
  std::string access;   // Optional
  std::string type;     // Optional
  uint32_t major = -1;  // Optional
  uint32_t minor = -1;  // Optional
};

struct OciLinuxResources {
  std::vector<OciLinuxCgroupDevice> devices;
  // Other fields remain unused.
};

struct OciSeccomp {
  std::string defaultAction;
  std::vector<std::string> architectures;
  std::vector<OciSeccompSyscall> syscalls;
};

struct OciNamespace {
  std::string type;
  base::FilePath path;  // Optional
};

struct OciLinux {
  std::vector<OciLinuxDevice> devices;  // Optional
  base::FilePath cgroupsPath;           // Optional
  std::vector<OciNamespace> namespaces;
  OciLinuxResources resources;                        // Optional
  std::vector<OciLinuxNamespaceMapping> uidMappings;  // Optional
  std::vector<OciLinuxNamespaceMapping> gidMappings;  // Optional
  OciSeccomp seccomp;                                 // Optional
  int rootfsPropagation = 0;                          // Optional
  std::string altSyscall;       // Optional, Chrome OS extension.
  uint64_t skipSecurebits = 0;  // Optional, Chrome OS extension.
  // Unused: maskedPaths, readonlyPaths, mountLabel, sysctl
};

struct OciHook {
  base::FilePath path;
  std::vector<std::string> args;  // Optional
  OciEnvironment env;             // Optional
  base::TimeDelta timeout;        // Optional
};

struct OciConfig {
  std::string ociVersion;
  OciPlatform platform;
  OciRoot root;
  OciProcess process;
  std::string hostname;                   // Optional
  std::vector<OciMount> mounts;           // Optional
  std::vector<OciHook> pre_chroot_hooks;  // Optional, Chrome OS extension.
  std::vector<OciHook> pre_start_hooks;   // Optional
  std::vector<OciHook> post_start_hooks;  // Optional
  std::vector<OciHook> post_stop_hooks;   // Optional
  // json field name - linux
  OciLinux linux_config;  // Optional
  // Unused: annotations
};

}  // namespace run_oci

#endif  // RUN_OCI_OCI_CONFIG_H_
