public async Task <IActionResult> Get() { var id = User.FindFirst("appTenantId").Value; Guid guid; if (!Guid.TryParse(id, out guid)) { return(BadRequest("Invalid id")); } var http = await _graph.GetClientAsync(); try { var json = await http.GetStringAsync($"{Graph.BaseUrl}groups/{id}"); var result = JObject.Parse(json); var tenant = new TenantDef() { name = result["displayName"].Value <string>(), description = result["description"].Value <string>(), }; tenant.requireMFA = await IsMFARequired(id); return(new JsonResult(tenant)); } catch (HttpRequestException) { return(NotFound()); } }
public async Task <IActionResult> Post([FromBody] TenantDef tenant) { if ((User == null) || (!User.IsInRole("ief"))) { return(new UnauthorizedObjectResult("Unauthorized")); } if ((string.IsNullOrEmpty(tenant.name) || (string.IsNullOrEmpty(tenant.ownerId)))) { return(BadRequest("Invalid parameters")); } var http = await _graph.GetClientAsync(); try { await http.GetStringAsync($"{Graph.BaseUrl}users/{tenant.ownerId}"); } catch (HttpRequestException ex) { return(BadRequest("Unable to validate user id")); } if ((tenant.name.Length > 60) || !Regex.IsMatch(tenant.name, "^[A-Za-z]\\w*$")) { return(BadRequest("Invalid tenant name")); } var resp = await http.GetAsync($"{Graph.BaseUrl}groups?$filter=(displayName eq '{tenant.name}')"); if (!resp.IsSuccessStatusCode) { return(BadRequest("Unable to validate tenant existence")); } var values = JObject.Parse(await resp.Content.ReadAsStringAsync())["value"].Value <JArray>(); if (values.Count != 0) { return(new ConflictObjectResult(new { userMessage = "Tenant already exists", status = 409, version = 1.0 })); } var group = new { description = tenant.description, mailNickname = tenant.name, displayName = tenant.name.ToUpper(), groupTypes = new string[] { }, mailEnabled = false, securityEnabled = true, }; var jGroup = JObject.FromObject(group); var owners = new string[] { $"{Graph.BaseUrl}users/{tenant.ownerId}" }; jGroup.Add("*****@*****.**", JArray.FromObject(owners)); //jGroup.Add("*****@*****.**", JArray.FromObject(owners)); // https://docs.microsoft.com/en-us/graph/api/group-post-groups?view=graph-rest-1.0&tabs=http resp = await http.PostAsync( $"{Graph.BaseUrl}groups", new StringContent(jGroup.ToString(), System.Text.Encoding.UTF8, "application/json")); if (!resp.IsSuccessStatusCode) { return(BadRequest("Tenant creation failed")); } var json = await resp.Content.ReadAsStringAsync(); var newGroup = JObject.Parse(json); var id = newGroup["id"].Value <string>(); // add this group to the user's tenant collection return(new OkObjectResult(new { id, roles = new string[] { "admin", "member" }, userMessage = "Tenant created" })); }