Je souhaite ajouter une liste de contrôle d'accès à un objet Google Storage à l'aide de l'API Json d'appengine. J'ai essayé le code suivant, mais je reçois une réponse 400 sans détails. Je n'utilise pas les bibliothèques client-java, cependant je suis prêt à essayer. Ci-dessous mon code:Définir la liste de contrôle d'accès pour l'objet de stockage Google avec JSON Api dans Appengine
public static void updateACL(String bucket, String object,
List<String> emails) {
try {
ArrayList scopes = new ArrayList();
scopes.add("https://www.googleapis.com/auth/devstorage.full_control");
AppIdentityService appIdentity = AppIdentityServiceFactory
.getAppIdentityService();
AppIdentityService.GetAccessTokenResult accessToken = appIdentity
.getAccessToken(scopes);
// The token asserts the identity reported by
// appIdentity.getServiceAccountName()
logger.log(Level.WARNING, "bucket: "+bucket+" object: "+object+ " email: "+emails.get(0));
JSONObject request = new JSONObject();
request.put("entity", "user-" + emails.get(0));
request.put("roles", "READER");
URL url = new URL("https://www.googleapis.com/storage/v1beta1/b/"
+ bucket + "/o/"+object+"/acl?key=" + API_KEY);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.addRequestProperty("Content-Type", "application/json");
connection.addRequestProperty("Authorization", "OAuth "
+ accessToken.getAccessToken());
String urlParameters = "bucket=" + bucket + "&object=" + object;
OutputStreamWriter writer = new OutputStreamWriter(
connection.getOutputStream());
request.write(writer);
writer.close();
logger.log(Level.WARNING, connection.getResponseMessage());
logger.log(Level.WARNING,
String.valueOf(connection.getResponseCode()));
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// Note: Should check the content-encoding.
// JSONTokener response_tokens = new
// JSONTokener(connection.getInputStream());
// JSONObject response = new JSONObject(response_tokens);
// return (String) response.get("id");
return;
} else {
Scanner s;
s = new Scanner(connection.getErrorStream());
s.useDelimiter("\\Z");
String response = s.next();
s.close();
throw new Exception(connection.getResponseCode()+" "+connection.getResponseMessage()+
response);
}
} catch (Exception e) {
logger.log(Level.WARNING, "exception: "+e.getMessage());
}
}
La réponse que je reçois est 400, mais les détails ne sont pas utiles à tous.
"erreur": { "erreurs": [ { "domaine": "global", "raison": "nécessaire", "message": "Obligatoire" } ], "code": 400, "message": "Obligatoire" }}
Essayez de changer les rôles en rôle dans request.put ("roles", "READER") – fejta