Exemple #1
0
        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());
            }
        }
Exemple #2
0
        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" }));
        }