/
identity.mo
120 lines (99 loc) · 3.68 KB
/
identity.mo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import Nat "mo:base/Nat";
import Debug "mo:base/Debug";
import Text "mo:base/Text";
import Time "mo:base/Time";
import Error "mo:base/Error";
import Principal "mo:base/Principal";
import Utils "../utils/utils";
import Env "../env";
import T "../types";
import Prim "mo:⛔";
import Cycles "mo:base/ExperimentalCycles";
actor class Identity(innitialHash : Text) {
var VERSION: Nat = 1;
type StatusRequest = T.StatusRequest;
type StatusResponse = T.StatusResponse;
type Tokens = T.Tokens;
private var tokenHash = innitialHash;
public shared({caller}) func changeHash(newHash: Text) : async (Text){
if (not Utils.isManager(caller)) {
throw Error.reject("@changeHash: Unauthorized access. Caller is not the manager. Caller: " # Principal.toText(caller));
};
tokenHash := newHash;
return tokenHash;
};
public shared({caller}) func getHashedTokenManager(baseHash: Text, user: Text) : async Nat32 {
if (not Utils.isManager(caller)) {
throw Error.reject("@changeHash: Unauthorized access. Caller is not the manager. Caller: " # Principal.toText(caller));
};
let myHashedToken = baseHash # tokenHash # user # baseHash;
return Text.hash(myHashedToken);
};
public query ({caller}) func whoami() : async Principal {
Debug.print("caller principal: " # debug_show Principal.toText(caller));
return caller;
};
public query ({caller}) func getHashedToken(baseHash: Text) : async (Nat32, Text) {
Debug.print("caller principal: " # debug_show Principal.toText(caller));
let myHashedToken = baseHash # tokenHash # Principal.toText(caller) # baseHash;
return (Text.hash(myHashedToken), Principal.toText(caller));
};
private func getCurrentHeapMemory(): Nat {
Prim.rts_heap_size();
};
private func getCurrentMemory(): Nat {
Prim.rts_memory_size();
};
private func getCurrentCycles(): Nat {
Cycles.balance();
};
private func getVersion() : Nat {
return VERSION;
};
public shared({caller}) func getStatus(request: ?StatusRequest): async ?StatusResponse {
// assert(U.isAdmin(caller));
switch(request) {
case (null) {
return null;
};
case (?_request) {
var cycles: ?Nat = null;
switch(_request.cycles){
case(?checkCycles){
cycles := ?getCurrentCycles();
};case null {};
};
var memory_size: ?Nat = null;
switch(_request.memory_size){
case(?checkStableMemory){
memory_size := ?getCurrentMemory();
};case null {};
};
var heap_memory_size: ?Nat = null;
switch(_request.heap_memory_size){
case(?checkHeapMemory){
heap_memory_size := ?getCurrentHeapMemory();
};case null {};
};
var version: ?Nat = null;
switch(_request.version){
case(?checkVersion){
version := ?getVersion();
};case null {};
};
var icp_balance: ?Tokens = null;
var ckbtc_balance: ?Nat = null;
var trax_balance: ?Nat = null;
return ?{
cycles = cycles;
memory_size = memory_size;
heap_memory_size = heap_memory_size;
version = version;
icp_balance = icp_balance;
ckbtc_balance = ckbtc_balance;
trax_balance = trax_balance;
};
};
};
};
};