Пример #1
0
        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())
                }));
            }
        }
Пример #2
0
        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())
                }));
            }
        }
Пример #6
0
        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())
                }));
            }
        }