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); }
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)); }