コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: TokenController.cs プロジェクト: shreedee/sharonomy
        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 });
        }
コード例 #3
0
        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);
                }
        }