public static async Task OnCreateRequest(Microsoft.AspNetCore.Http.HttpContext e, DbUser u, string token) { //Create a zip entry MemoryStream ms = new MemoryStream(); using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, true)) { //Add ARK user WriteJsonToZip(zip, "me.json", u); //Get servers this user owns WriteJsonToZip(zip, "owned_servers.json", u.GetOwnedServersAsync(Program.connection).GetAwaiter().GetResult()); //Download remote data Task[] remote = new Task[] { WriteAnalyticsZip(zip, token) }; //Wait for remote data Task.WaitAll(remote); } //Put file string url = TokenFileDownloadTool.PutFile(ms, "delta_user_archive.zip"); //Generate a response await Program.QuickWriteJsonToDoc(e, new ArchiveCreateToken { ok = true, url = url }); }
public static async Task OnHttpRequest(Microsoft.AspNetCore.Http.HttpContext e, DbUser u, string token) { //Validate challenges if (Program.FindRequestMethod(e) != RequestHttpMethod.delete) { throw new StandardError("A required challenge failed.", StandardErrorCode.MissingRequiredArg); } if (e.Request.Query["chal_name"] != u.screen_name) { throw new StandardError("A required challenge failed.", StandardErrorCode.MissingRequiredArg); } //We're confirmed to delete this user. Go ahead and start removing data //We'll remove analytic data first using (HttpClient hc = new HttpClient()) await hc.PostAsync("https://web-analytics.deltamap.net/v1/destroy?access_token=" + token, new StringContent("")); //Now, delete all servers we own var owned_servers = u.GetOwnedServersAsync(Program.connection).GetAwaiter().GetResult(); foreach (var s in owned_servers) { s.DeleteAsync(Program.connection).GetAwaiter().GetResult(); } //Destroy all of our tokens u.DevalidateAllTokens(Program.connection).GetAwaiter().GetResult(); //Finally, destroy our user u.DeleteAsync(Program.connection).GetAwaiter().GetResult(); //Goodbye! await Program.QuickWriteStatusToDoc(e, true); }