public async Task <Models.Community> Post([FromBody] Models.Community community) { User.EnsureCommunityAdmin(community.handle); using (var transaction = _dbContext.Database.BeginTransaction()) { var orgOCUrl = _dbContext.Communities.AsNoTracking().Single(c => c.handle == community.handle).OCUrl; var attached = _dbContext.Communities.Attach(community); attached.State = EntityState.Modified; attached.Property(c => c.OCUrl).IsModified = false; await _dbContext.SaveChangesAsync(); var ocs = new OpenChainServer(orgOCUrl); using (var ad = ocs.Login(TokenController.OCAdminpassPhrase)) { await updateLedgerInfo(ad, community); } transaction.Commit(); return(community); } }
public async Task <dynamic> Reset(String Community, String email) { if (Community == CommunityController.UNKNOWN_COMMUNITY) { //ensure unknowns community exists var unknown = _dbContext.Communities.SingleOrDefault(c => c.handle == Community); if (null == unknown) { unknown = new Models.Community { full_name = "not used unknown community", description = "used to initial signin for community creaters", handle = Community, OCUrl = "notusednodb" }; _dbContext.Communities.Add(unknown); await _dbContext.SaveChangesAsync(); } } var user = _dbContext.Users.Include(u => u.community). SingleOrDefault(u => u.communityHandle == Community && u.email == email); if (null == user) { if (Community == CommunityController.UNKNOWN_COMMUNITY) { user = new Models.User { address = "unknown address", communityHandle = CommunityController.UNKNOWN_COMMUNITY, email = email, name = "Community admin", handle = $"admincreater_{email}" }; _dbContext.Users.Add(user); } else { //check if this is an admin user = _dbContext.Users.SingleOrDefault(u => u.communityHandle == CommunityController.UNKNOWN_COMMUNITY && u.address == $"{Community}_admin" && u.handle == $"admincreater_{email}"); if (null == user) { throw new Converters.DisplayableException("email address not found"); } } } var random = new Random(); string resetPin = string.Empty; for (int i = 0; i < 9; i++) { resetPin = String.Concat(resetPin, random.Next(10).ToString()); } user.ResetPin = resetPin; await _dbContext.SaveChangesAsync(); using (var mailmessage = new System.Net.Mail.MailMessage( new System.Net.Mail.MailAddress("*****@*****.**"), new System.Net.Mail.MailAddress(email)) { Subject = "Your sharenomy reset code", Body = $"Your Sharenomy reset code is <strong>{resetPin}</strong>.<br/>If you did not request this code please ignore this message", IsBodyHtml = true, }) using (var mailclient = new System.Net.Mail.SmtpClient { DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory, PickupDirectoryLocation = @"C:\tmp\testMailDrop", }) { mailclient.Send(mailmessage); } return(new { success = true }); }
public async Task <Models.Community> Put(String handle, [FromBody] Models.UpdateCommunityReq req) { using (var transaction = _dbContext.Database.BeginTransaction()) using (var cli = new HttpClient()) { if (handle == UNKNOWN_COMMUNITY) { throw new Converters.DisplayableException("invalid handle"); } //fix the admin user detail var userHandle = this.User.Identity.Name; var adminUser = _dbContext.Users.Single(u => u.communityHandle == CommunityController.UNKNOWN_COMMUNITY && u.handle == userHandle); adminUser.address = $"{handle}_admin"; var newCommunity = new Models.Community { handle = handle, OCUrl = $"{_ocURLBase}{handle}/", description = req.description, full_name = req.full_name }; _dbContext.Communities.Add(newCommunity); await _dbContext.SaveChangesAsync(); var query = $"{_siteCreatorURL}?site={handle}"; var tresult = await cli.GetAsync(query); if (tresult.StatusCode != System.Net.HttpStatusCode.OK) { throw new Converters.DisplayableException("Site creation error"); } var s = await tresult.Content.ReadAsStringAsync(); var ocs = new OpenChainServer(newCommunity.OCUrl); using (var ad = ocs.Login(TokenController.OCAdminpassPhrase)) { await updateLedgerInfo(ad, req); //create the asset defination var assetPath = $"/treasury/{handle}_hours/"; var assetDef = await ad.GetData <Models.AssetDefination>(getTreasuryPath(handle), "asdef"); assetDef.Value = new Models.AssetDefination { name = $"Hour exchange of {req.full_name}" }; await ad.SetData(assetDef); var assetsToCreate = new[] { $"/asset/{handle}_hours/", $"/{handle}_login/" }; //create the assets var accs = await Task.WhenAll(assetsToCreate.Select(async a => { var record = await ad.Api.GetValue(getTreasuryPath(handle), "ACC", a); return(new AccountRecord(record).GetRecord()); }).ToArray()); var mutation = ad.Api.BuildMutation(Openchain.ByteString.Empty, accs); await ad.PostMutation(mutation); await SetAdminACL(ad, handle, req.adminPubKey); } transaction.Commit(); return(newCommunity); } }