github.com/DapperCollectives/CAST/backend@v0.0.0-20230921221157-1350c8be7c96/main/cadence/float/GrantedAccountAccess.cdc (about) 1 // MADE BY: Emerald City, Jacob Tucker 2 3 // This is a very simple contract that lets users add addresses 4 // to an "Info" resource signifying they want them to share their account. 5 6 // This is specifically used by the 7 // `pub fun borrowSharedRef(fromHost: Address): &FLOATEvents` 8 // function inside FLOAT.cdc to give users access to someone elses 9 // FLOATEvents if they are on this shared list. 10 11 // This contract is my way of saying I hate private capabilities, so I 12 // implemented an alternative solution to private access. 13 14 pub contract GrantedAccountAccess { 15 16 pub let InfoStoragePath: StoragePath 17 pub let InfoPublicPath: PublicPath 18 19 pub resource interface InfoPublic { 20 pub fun getAllowed(): [Address] 21 pub fun isAllowed(account: Address): Bool 22 } 23 24 // A list of people you allow to share your 25 // account. 26 pub resource Info: InfoPublic { 27 access(account) var allowed: {Address: Bool} 28 29 // Allow someone to share your account 30 pub fun addAccount(account: Address) { 31 self.allowed[account] = true 32 } 33 34 pub fun removeAccount(account: Address) { 35 self.allowed.remove(key: account) 36 } 37 38 pub fun getAllowed(): [Address] { 39 return self.allowed.keys 40 } 41 42 pub fun isAllowed(account: Address): Bool { 43 return self.allowed.containsKey(account) 44 } 45 46 init() { 47 self.allowed = {} 48 } 49 } 50 51 pub fun createInfo(): @Info { 52 return <- create Info() 53 } 54 55 init() { 56 self.InfoStoragePath = /storage/GrantedAccountAccessInfo 57 self.InfoPublicPath = /public/GrantedAccountAccessInfo 58 } 59 60 }