public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] SetGraphMetadataRequest request, TraceWriter log) { try { const string extensionName = "techmikael_GenericSchema"; string schemaKey = PropertyMapper[request.Key]; string schemaLabel = schemaKey.Replace("Key", "Label"); string schemaValue = schemaKey.Replace("Key", "Value"); string label = GetLabel(request.Key); dynamic property = new ExpandoObject(); ((IDictionary <string, object>)property).Add(schemaKey, request.Key.ToString()); ((IDictionary <string, object>)property).Add(schemaLabel, label); ((IDictionary <string, object>)property).Add(schemaValue, request.Value); dynamic template = new ExpandoObject(); ((IDictionary <string, object>)template).Add(extensionName, property); var content = new StringContent(JsonConvert.SerializeObject(template), Encoding.UTF8, "application/json"); Uri uri = new Uri($"https://graph.microsoft.com/v1.0/groups/{request.GroupId}"); string bearerToken = await ConnectADAL.GetBearerToken(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var response = await client.PatchAsync(uri, content); if (response.IsSuccessStatusCode) { return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <SetGraphMetadataResponse>(new SetGraphMetadataResponse { Added = true }, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); dynamic errorMsg = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <object>(errorMsg, new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error(e.Message); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] CreateTeamRequest request, TraceWriter log) { try { if (string.IsNullOrWhiteSpace(request.GroupId)) { throw new ArgumentException("Parameter cannot be null", "GroupId"); } dynamic team = new ExpandoObject(); var content = new StringContent(JsonConvert.SerializeObject(team), Encoding.UTF8, "application/json"); log.Info(JsonConvert.SerializeObject(team)); Uri uri = new Uri($"https://graph.microsoft.com/beta/groups/{request.GroupId}/team"); log.Info(uri.AbsoluteUri); string bearerToken = await ConnectADAL.GetBearerToken(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var response = await client.PutAsync(uri, content); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); dynamic responseJson = JObject.Parse(responseBody); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <CreateTeamResponse>(new CreateTeamResponse { Created = true, TeamUrl = responseJson.webUrl }, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); log.Info(responseMsg); dynamic errorMsg = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <CreateTeamResponse>(new CreateTeamResponse { Created = false, ErrorMessage = errorMsg }, new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error(e.Message); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] SetLifecyclePolicyRequest request, TraceWriter log) { try { string bearerToken = await ConnectADAL.GetBearerToken(true); dynamic template = new { groupId = request.GroupId }; var content = new StringContent(JsonConvert.SerializeObject(template), Encoding.UTF8, "application/json"); string operation = request.Operation == Operation.Add ? "addGroup" : "removeGroup"; // Get all policies - should return 1 Uri policyUri = new Uri("https://graph.microsoft.com/beta/groupLifecyclePolicies"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); string policyResponse = await client.GetStringAsync(policyUri); JObject policies = JsonConvert.DeserializeObject <JObject>(policyResponse); var policyId = policies["value"][0]["id"] + ""; Uri uri = new Uri($"https://graph.microsoft.com/beta/groupLifecyclePolicies/{policyId}/{operation}"); var response = await client.PostAsync(uri, content); if (response.IsSuccessStatusCode) { return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <SetLifecyclePolicyResponse>(new SetLifecyclePolicyResponse { IsApplied = request.Operation == Operation.Add }, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); dynamic errorMsg = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <object>(errorMsg, new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error(e.Message); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] SetGraphMetadataBulkRequest request, TraceWriter log) { try { const string extensionName = "techmikael_GenericSchema"; var payload = $"{{\"{extensionName}\": {request.JSON}}}"; var content = new StringContent(payload, Encoding.UTF8, "application/json"); Uri uri = new Uri($"https://graph.microsoft.com/v1.0/groups/{request.GroupId}"); string bearerToken = await ConnectADAL.GetBearerToken(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var response = await client.PatchAsync(uri, content); if (response.IsSuccessStatusCode) { return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <SetGraphMetadataBulkResponse>(new SetGraphMetadataBulkResponse { Added = true }, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); dynamic errorMsg = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <object>(errorMsg, new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error(e.Message); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] SetGroupClassificationRequest request, TraceWriter log) { try { string bearerToken = await ConnectADAL.GetBearerToken(); dynamic template = new { classification = request.Classification }; var content = new StringContent(JsonConvert.SerializeObject(template), Encoding.UTF8, "application/json"); Uri uri = new Uri($"https://graph.microsoft.com/beta/groups/{request.GroupId}"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var response = await client.PatchAsync(uri, content); if (response.IsSuccessStatusCode) { return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <SetGroupClassificationResponse>(new SetGroupClassificationResponse { IsUpdated = true }, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); dynamic errorMsg = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <object>(errorMsg, new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error(e.Message); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] CreateGroupRequest request, TraceWriter log) { try { if (string.IsNullOrWhiteSpace(request.Name)) { throw new ArgumentException("Parameter cannot be null", "Name"); } if (string.IsNullOrWhiteSpace(request.Description)) { throw new ArgumentException("Parameter cannot be null", "Description"); } var members = await GetUsers(request.Members); var owners = await GetUsers(request.Owners); var content = await GenerateStringContent(request, owners, members); Uri uri = new Uri($"https://graph.microsoft.com/v1.0/groups"); string bearerToken = await ConnectADAL.GetBearerToken(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var response = await client.PostAsync(uri, content); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); dynamic responseJson = JObject.Parse(responseBody); var createGroupResponse = new CreateGroupResponse { DisplayName = responseJson.displayName, Mail = responseJson.mail, GroupId = responseJson.id }; await SetGroupSettings(request, createGroupResponse, log); await SetGroupMembership(createGroupResponse, owners, members, log); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <CreateGroupResponse>(createGroupResponse, new JsonMediaTypeFormatter()) })); } string responseMsg = await response.Content.ReadAsStringAsync(); dynamic errorJson = JsonConvert.DeserializeObject(responseMsg); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new ObjectContent <string>($"{errorJson.error.code}: {errorJson.error.message}", new JsonMediaTypeFormatter()) })); } catch (Exception e) { log.Error($"Error: {e.Message }\n\n{e.StackTrace}"); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }