Skip to content

Commit 74fc4e9

Browse files
authored
Origin Metadata (#5)
1 parent 116553e commit 74fc4e9

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

src/SessionKeyRegistry.sol

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,53 @@ contract SessionKeyRegistry {
55
mapping(address user => mapping(address signer => mapping(bytes32 permission => uint256))) public
66
authorizationExpiry;
77

8-
function _setAuthorizations(address signer, uint256 expiry, bytes32[] calldata permissions) internal {
8+
event AuthorizationsUpdated(
9+
address indexed identity, address signer, uint256 expiry, bytes32[] permissions, string origin
10+
);
11+
12+
function _setAuthorizations(address signer, uint256 expiry, bytes32[] calldata permissions, string calldata origin) internal {
913
mapping(bytes32 => uint256) storage permissionExpiry = authorizationExpiry[msg.sender][signer];
1014
for (uint256 i = 0; i < permissions.length; i++) {
1115
permissionExpiry[permissions[i]] = expiry;
1216
}
17+
emit AuthorizationsUpdated(msg.sender, signer, expiry, permissions, origin);
1318
}
1419

1520
/**
1621
* @notice Caller revokes from the signer the specified permissions
1722
* @param signer the authorized account
1823
* @param permissions the scope of authority to revoke from the signer
24+
* @param origin indicates what app prompted this revocation
1925
*/
20-
function revoke(address signer, bytes32[] calldata permissions) external {
21-
_setAuthorizations(signer, 0, permissions);
26+
function revoke(address signer, bytes32[] calldata permissions, string calldata origin) external {
27+
_setAuthorizations(signer, 0, permissions, origin);
2228
}
2329

2430
/**
2531
* @notice Caller authorizes the signer with permissions until expiry
2632
* @param signer the account authorized
2733
* @param expiry when the authorization ends
2834
* @param permissions the scope of authority granted to the signer
35+
* @param origin indicates what app prompted this authorization
2936
*/
30-
function login(address signer, uint256 expiry, bytes32[] calldata permissions) external {
31-
_setAuthorizations(signer, expiry, permissions);
37+
function login(address signer, uint256 expiry, bytes32[] calldata permissions, string calldata origin) external {
38+
_setAuthorizations(signer, expiry, permissions, origin);
3239
}
3340

3441
/**
3542
* @notice Caller funds and authorizes the signer with permissions until expiry
3643
* @param signer the account authorized
3744
* @param expiry when the authorization ends
3845
* @param permissions the scope of authority granted to the signer
46+
* @param origin indicates what app prompted this authorization
3947
*/
40-
function loginAndFund(address payable signer, uint256 expiry, bytes32[] calldata permissions) external payable {
41-
_setAuthorizations(signer, expiry, permissions);
48+
function loginAndFund(
49+
address payable signer,
50+
uint256 expiry,
51+
bytes32[] calldata permissions,
52+
string calldata origin
53+
) external payable {
54+
_setAuthorizations(signer, expiry, permissions, origin);
4255
signer.transfer(msg.value);
4356
}
4457
}

test/SessionKeyRegistry.t.sol

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ contract SessionKeyRegistryTest is Test {
1212
bytes32 private constant PERMISSION1 = 0x1111111111111111111111111111111111111111111111111111111111111111;
1313
bytes32 private constant PERMISSION2 = 0x2222222222222222222222222222222222222222222222222222222222222222;
1414
bytes32 private constant PERMISSION3 = 0x3333333333333333333333333333333333333333333333333333333333333333;
15+
string constant ORIGIN = "SessionKeyRegistryTest";
1516

1617
uint256 private constant DAY_SECONDS = 1 days;
1718

@@ -27,14 +28,18 @@ contract SessionKeyRegistryTest is Test {
2728
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION3), 0);
2829

2930
uint256 expiry = block.timestamp + DAY_SECONDS;
30-
registry.loginAndFund{value: 1 ether}(SIGNER_ONE, expiry, permissions);
31+
vm.expectEmit(true, false, false, true, address(registry));
32+
emit SessionKeyRegistry.AuthorizationsUpdated(address(this), SIGNER_ONE, expiry, permissions, ORIGIN);
33+
registry.loginAndFund{value: 1 ether}(SIGNER_ONE, expiry, permissions, ORIGIN);
3134

3235
assertEq(SIGNER_ONE.balance, 1 ether);
3336
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION1), expiry);
3437
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION2), expiry);
3538
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION3), expiry);
3639

37-
registry.revoke(SIGNER_ONE, permissions);
40+
vm.expectEmit(true, false, false, true, address(registry));
41+
emit SessionKeyRegistry.AuthorizationsUpdated(address(this), SIGNER_ONE, 0, permissions, ORIGIN);
42+
registry.revoke(SIGNER_ONE, permissions, ORIGIN);
3843
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION1), 0);
3944
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION2), 0);
4045
assertEq(registry.authorizationExpiry(address(this), SIGNER_ONE, PERMISSION3), 0);
@@ -51,13 +56,17 @@ contract SessionKeyRegistryTest is Test {
5156

5257
uint256 expiry = block.timestamp + 4 * DAY_SECONDS;
5358

54-
registry.login(SIGNER_TWO, expiry, permissions);
59+
vm.expectEmit(true, false, false, true, address(registry));
60+
emit SessionKeyRegistry.AuthorizationsUpdated(address(this), SIGNER_TWO, expiry, permissions, ORIGIN);
61+
registry.login(SIGNER_TWO, expiry, permissions, ORIGIN);
5562

5663
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION1), expiry);
5764
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION2), 0);
5865
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION3), expiry);
5966

60-
registry.revoke(SIGNER_TWO, permissions);
67+
vm.expectEmit(true, false, false, true, address(registry));
68+
emit SessionKeyRegistry.AuthorizationsUpdated(address(this), SIGNER_TWO, 0, permissions, ORIGIN);
69+
registry.revoke(SIGNER_TWO, permissions, ORIGIN);
6170
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION1), 0);
6271
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION2), 0);
6372
assertEq(registry.authorizationExpiry(address(this), SIGNER_TWO, PERMISSION3), 0);

0 commit comments

Comments
 (0)