예제 #1
0
        public async Task <Dictionary <String, String> > myHandles(String Community, String PubKey)
        {
            var toRet = new Dictionary <String, String>();

            var user = await _dbContext.Users.SingleOrDefaultAsync(
                u => u.communityHandle == Community &&
                u.pubKey == PubKey
                );

            if (null != user)
            {
                toRet["Handle"] = CommunityController.getUserPath(user.handle);
            }

            var communityObj = await _dbContext.Communities.SingleAsync(c => c.handle == Community);



            var ocs = new OpenChainServer(communityObj.OCUrl);

            using (var ad = ocs.Login(TokenController.OCAdminpassPhrase))
            {
                //check for admin
                var treasuryACL = await getACL(ad, CommunityController.getTreasuryPath(Community),
                                               new[] { new {
                                                           subjects = new [] { new {
                                                                                   addresses = new String[] { },
                                                                                   required  = 1
                                                                               } }
                                                       } }
                                               );

                var adminAddress = treasuryACL.SelectMany(t =>
                                                          t.subjects.SelectMany(s => s.addresses.Select(a => a)));

                if (adminAddress.Contains(PubKey))
                {
                    toRet["treasuryHandle"] = CommunityController.getTreasuryPath(Community);
                }
            }



            return(toRet);
        }
예제 #2
0
        public async Task <dynamic> Post(String Community, [FromBody] AuthRequest req)
        {
            var user = await _dbContext.Users.SingleOrDefaultAsync(
                u => u.communityHandle == Community &&
                u.pubKey == req.PubKey
                );

            var communityObj = await _dbContext.Communities.SingleAsync(c => c.handle == Community);

            var Claims = new Dictionary <string, string> ();

            if (null != user)
            {
                if (null == req.Handle_transaction)
                {
                    throw new Converters.DisplayableException("Handle transaction needed");
                }

                await TransactionVerifier(CommunityController.getUserPath(user.handle),
                                          req.Handle_transaction, communityObj.OCUrl);

                Claims[ACCLAIM] = "true";
            }

            if (null != req.treasuryHandle_transaction)
            {
                var ocs = new OpenChainServer(communityObj.OCUrl);
                using (var ad = ocs.Login(TokenController.OCAdminpassPhrase))
                {
                    //check for admin
                    var treasuryACL = await getACL(ad, CommunityController.getTreasuryPath(Community),
                                                   new[] { new {
                                                               subjects = new [] { new {
                                                                                       addresses = new String[] { },
                                                                                       required  = 1
                                                                                   } }
                                                           } }
                                                   );

                    var adminAddress = treasuryACL.SelectMany(t =>
                                                              t.subjects.SelectMany(s => s.addresses.Select(a => a)));

                    if (adminAddress.Contains(req.PubKey))
                    {
                        await TransactionVerifier(CommunityController.getTreasuryPath(Community),
                                                  req.treasuryHandle_transaction, communityObj.OCUrl);

                        //we have admin
                        Claims[ADMINCLAIM] = "true";

                        if (null == user)
                        {
                            user = _dbContext.Users.First(u =>
                                                          u.communityHandle == CommunityController.UNKNOWN_COMMUNITY &&
                                                          u.address == $"{Community}_admin");
                        }
                    }
                }
            }

            if (Claims.Count() == 0)
            {
                throw new Converters.DisplayableException("Failed to sign in");
            }

            Claims[COMMUNITYCLAIM] = Community;
            return(createToken(user, Claims));
        }