1 // Copyright (c) 2011 The Chromium 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 syntax = "proto2"; 6 7 option optimize_for = LITE_RUNTIME; 8 9 package enterprise_management; 10 11 // Meta-settings that control how a user receives regular settings 12 // (CloudPolicySettings) for Chrome. The name "Initial" indicates that 13 // these settings will be downloaded before Chrome starts requesting 14 // regular settings. 15 message ChromeInitialSettingsProto { 16 enum EnrollmentProvision { 17 // The users's device is not automatically enrolled for policies, but the 18 // user may choose to try to enroll it. 19 UNMANAGED = 0; 20 // The user must enroll its device for policies. 21 MANAGED = 1; 22 } 23 // Chrome will interpret this as UNMANAGED if unset. 24 optional EnrollmentProvision enrollment_provision = 1 [default = UNMANAGED]; 25 } 26 27 // Request from device to server to register device. 28 message DeviceRegisterRequest { 29 // Reregister device without erasing server state. It can be used 30 // to refresh dmtoken etc. Client MUST set this value to true if it 31 // reuses an existing device id. 32 optional bool reregister = 1; 33 34 // Device register type. This field does not exist for TT release. 35 // When a client requests for policies, server should verify the 36 // client has been registered properly. For example, a client must 37 // register with type DEVICE in order to retrieve device policies. 38 enum Type { 39 TT = 0; // Register for TT release. 40 USER = 1; // Register for user polices. 41 DEVICE = 2; // Register for device policies. 42 } 43 // NOTE: we also use this field to detect client version. If this 44 // field is missing, then the request comes from TT. We will remove 45 // Chrome OS TT support once it is over. 46 optional Type type = 2 [default = TT]; 47 48 // Machine hardware id, such as MEID, Mac adress. 49 // This field is required if register type == DEVICE. 50 optional string machine_id = 3; 51 52 // Machine model name, such as "ZGA", "Cr-48", "Nexus One". If the 53 // model name is not available, client SHOULD send generic name like 54 // "Android", or "Chrome OS". 55 optional string machine_model = 4; 56 } 57 58 // Response from server to device register request. 59 message DeviceRegisterResponse { 60 // Device mangement token for this registration. This token MUST be 61 // part of HTTP Authorization header for all future requests from 62 // device to server. 63 required string device_management_token = 1; 64 65 // Device display name. By default, server generates the name in 66 // the format of "Machine Model - Machine Id". However, domain 67 // admin can update it using CPanel, so do NOT treat it as constant. 68 optional string machine_name = 2; 69 } 70 71 // Request from device to server to unregister device. 72 // GoogleDMToken MUST be in HTTP Authorization header. 73 message DeviceUnregisterRequest { 74 } 75 76 // Response from server to device for unregister request. 77 message DeviceUnregisterResponse { 78 } 79 80 // Request for a setting or with optional watermark on client side. 81 // TODO(gfeher): remove this after Chrome OS TT is over. 82 message DevicePolicySettingRequest { 83 // setting key 84 required string key = 1; 85 // watermark last read from server if available. 86 optional string watermark = 2; 87 } 88 89 message PolicyFetchRequest { 90 // This is the policy type, which maps to D3 policy type internally. 91 // By convention, we use "/" as separator to create policy namespace. 92 // The policy type names are case insensitive. 93 // 94 // Possible values for Chrome OS are: 95 // google/chromeos/device => ChromeDeviceSettingsProto 96 // google/chromeos/user => ChromeSettingsProto 97 // google/chromeos/unregistered_user => ChromeInitialSettingsProto 98 optional string policy_type = 1; 99 100 // This is the last policy timestamp that client received from server. 101 optional int64 timestamp = 2; 102 103 // Tell server what kind of security signature is required. 104 enum SignatureType { 105 NONE = 0; 106 SHA1_RSA = 1; 107 } 108 optional SignatureType signature_type = 3 [default = NONE]; 109 110 // The version number of the public key that is currently stored 111 // on the client. This should be the last number the server had 112 // supplied as new_public_key_version in PolicyData. 113 // This field is unspecified if the client does not yet have a 114 // public key. 115 optional int32 public_key_version = 4; 116 } 117 118 // This message is included in serialized form in PolicyFetchResponse 119 // below. It may also be signed, with the signature being created for 120 // the serialized form. 121 message PolicyData { 122 // See PolicyFetchRequest.policy_type. 123 optional string policy_type = 1; 124 125 // [timestamp] is milli seconds since Epoch in UTC timezone. It is 126 // included here so that the time at which the server issued this 127 // response cannot be faked (as protection against replay attacks). 128 // It is the timestamp generated by DMServer, NOT the time admin 129 // last updated the policy or anything like that. 130 optional int64 timestamp = 2; 131 132 // The DM token that was used by the client in the HTTP POST header 133 // for authenticating the request. It is included here again so that 134 // the client can verify that the response is meant for him (and not 135 // issued by a replay or man-in-the-middle attack). 136 optional string request_token = 3; 137 138 // The serialized value of the actual policy protobuf. This can be 139 // deserialized to an instance of, for example, ChromeSettingsProto 140 // or ChromeUserSettingsProto. 141 optional bytes policy_value = 4; 142 143 // The device display name assigned by the server. It is only 144 // filled if the display name is available. 145 // 146 // The display name of the machine as generated by the server or set 147 // by the Administrator in the CPanel GUI. This is the same thing as 148 // |machine_name| in DeviceRegisterResponse but it might have 149 // changed since then. 150 optional string machine_name = 5; 151 152 // Version number of the server's current public key. (The key that 153 // was used to sign this response. Numbering should start at 1 and be 154 // increased by 1 at each key rotation.) 155 optional int32 public_key_version = 6; 156 157 // The user this policy is intended for. In case of device policy, the name 158 // of the owner (who registered the device). 159 optional string username = 7; 160 161 // In this field the DMServer should echo back the "deviceid" HTTP parameter 162 // from the request. 163 optional string device_id = 8; 164 } 165 166 message PolicyFetchResponse { 167 // Since a single policy request may ask for multiple policies, we 168 // provide separate error code for each individual policy fetch. 169 170 // We will use standard HTTP Status Code as error code. 171 optional int32 error_code = 1; 172 173 // Human readable error message for customer support purpose. 174 optional string error_message = 2; 175 176 // This is a serialized |PolicyData| protobuf (defined above). 177 optional bytes policy_data = 3; 178 179 // Signature of the policy data above. 180 optional bytes policy_data_signature = 4; 181 182 // If the public key has been rotated on the server, the new public 183 // key is sent here. It is already used for |policy_data_signature| 184 // above, whereas |new_public_key_signature| is created using the 185 // old key (so the client can trust the new key). If this is the 186 // first time when the client requests policies (so it doesn't have 187 // on old public key), then |new_public_key_signature| is empty. 188 optional bytes new_public_key = 5; 189 optional bytes new_public_key_signature = 6; 190 } 191 192 // Request from device to server for reading policies. 193 message DevicePolicyRequest { 194 // identify request scope: CrOS settings or other type of settings. 195 // TODO(gfeher): remove this after Chrome OS TT is over. 196 optional string policy_scope = 1; 197 // identify key to the settings: proxy etc. 198 // TODO(gfeher): remove this after Chrome OS TT is over. 199 repeated DevicePolicySettingRequest setting_request = 2; 200 201 // The policy fetch request. If this field exists, the request must 202 // comes from a non-TT client. The repeated field allows client to 203 // request multiple policies for better performance. 204 repeated PolicyFetchRequest request = 3; 205 } 206 207 // Response from server to device for reading policies. 208 message DevicePolicyResponse { 209 // The policy fetch response. 210 repeated PolicyFetchResponse response = 3; 211 } 212 213 // Request from the DMAgent on the device to the DMServer. This is 214 // container for all requests from device to server. The overall HTTP 215 // request MUST be in the following format: 216 // 217 // * HTTP method is POST 218 // * Data mime type is application/x-protobuffer 219 // * HTTP parameters are (all required, all case sensitive): 220 // * request: MUST BE one of register/unregister/policy/ping 221 // * devicetype: MUST BE "1" for Android or "2" for Chrome OS. 222 // * apptype: MUST BE Android or Chrome. 223 // * deviceid: MUST BE no more than 64-char in [\x21-\x7E]. 224 // * agent: MUST BE no more than 64-char long. 225 // * HTTP Authorization header MUST be in the following formats: 226 // * For register and ping requests 227 // Authorization: GoogleLogin auth=<auth cookie for Mobile Sync> 228 // 229 // * For unregister and policy requests 230 // Authorization: GoogleDMToken token=<dm token from register> 231 // 232 // * OAuth is NOT supported yet. 233 message DeviceManagementRequest { 234 // Register request. 235 optional DeviceRegisterRequest register_request = 1; 236 237 // Unregister request. 238 optional DeviceUnregisterRequest unregister_request = 2; 239 240 // Policy request. 241 optional DevicePolicyRequest policy_request = 3; 242 } 243 244 // Response from server to device. 245 // 246 // The server uses the following numbers as HTTP status codes 247 // to report top-level errors. 248 // 249 // 200 OK: valid response is returned to client. 250 // 400 Bad Request: invalid argument. 251 // 401 Unauthorized: invalid auth cookie or DM token. 252 // 403 Forbidden: device management is not allowed. 253 // 404 Not Found: the request URL is invalid. 254 // 491 Request Pending: the request is pending approval. 255 // 500 Internal Server Error: most likely a bug in DM server. 256 // 503 Service Unavailable: most likely a backend error. 257 // 901 Device Not Found: the device id is not found. 258 // 902 Policy Not Found: the policy is not found. 259 message DeviceManagementResponse { 260 // Error message. 261 optional string error_message = 2; 262 263 // Register response 264 optional DeviceRegisterResponse register_response = 3; 265 266 // Unregister response 267 optional DeviceUnregisterResponse unregister_response = 4; 268 269 // Policy response. 270 optional DevicePolicyResponse policy_response = 5; 271 } 272