@@ -16,55 +16,53 @@ catch {
16
16
proc get_tokens {} {
17
17
set filename " /etc/config/addons/xmlapi/token.list"
18
18
19
- set tokens " "
19
+ array set tokens {}
20
20
if {! [catch {set fd [open $filename r] } errmsg]} {
21
- set tokens [read $fd ]
21
+ array set tokens [read $fd ]
22
22
close $fd
23
23
}
24
24
25
- return $ tokens
25
+ return [ array get tokens]
26
26
}
27
27
28
- proc register_token desc {
28
+ proc save_tokens tokenlist {
29
29
set filename " /etc/config/addons/xmlapi/token.list"
30
30
31
- set tokens " "
32
- if {! [catch {set fd [open $filename r ] } errmsg]} {
33
- set tokens [ read $fd ]
31
+ array set tokens $tokenlist
32
+ if {! [catch {set fd [open $filename w ] } errmsg]} {
33
+ puts $fd [ array get tokens ]
34
34
close $fd
35
35
}
36
+ }
37
+
38
+ proc register_token desc {
39
+ # get tokens
40
+ array set tokens [get_tokens]
36
41
37
42
# function to generate a random string of 16 characters
38
43
# cf. https://wiki.tcl-lang.org/page/Generating+random+strings
39
44
set newToken [subst [string repeat {[format %c [expr {int(rand() * 26) + (rand() > .5 ? 97 : 65)}]]} 16]]
40
45
41
- # add token to dict
42
- dict append tokens $newToken $desc
46
+ # add token to array
47
+ set tokens( $newToken ) $desc
43
48
44
- if {! [catch {set fd [open $filename w] } errmsg]} {
45
- puts $fd $tokens
46
- }
49
+ # save tokens
50
+ save_tokens [array get tokens]
47
51
48
52
return $newToken
49
53
}
50
54
51
55
proc revoke_token token {
52
- set filename " /etc/config/addons/xmlapi/token.list"
56
+ # get tokens
57
+ array set tokens [get_tokens]
53
58
54
- set tokens " "
55
- if {! [catch {set fd [open $filename r] } errmsg]} {
56
- set tokens [read $fd ]
57
- close $fd
58
- }
59
+ if {[info exists tokens($token )]} {
60
+ # remove token from array
61
+ unset tokens($token )
59
62
60
- if {[dict exists $tokens $token ]} {
61
- # remove token from dict
62
- dict unset tokens $token
63
-
64
- if {! [catch {set fd [open $filename w] } errmsg]} {
65
- puts $fd $tokens
66
- return 1
67
- }
63
+ # write out new token list
64
+ save_tokens [array get tokens]
65
+ return 1
68
66
}
69
67
70
68
return 0
@@ -74,10 +72,11 @@ proc check_session sid {
74
72
# check for api tokens first and then check
75
73
# for webui session ids as well as a fallback
76
74
if {[regexp {^([0-9a-zA-Z]{16})$} $sid all sidnr]} {
77
- set tokens [get_tokens]
75
+ # get tokens
76
+ array set tokens [get_tokens]
78
77
79
- # check if sid exists in token dict
80
- if {[dict exists $ tokens $sid ]} {
78
+ # check if sid exists in token array
79
+ if {[info exists tokens( $sid ) ]} {
81
80
return 1
82
81
}
83
82
} elseif {[regexp {^@([0-9a-zA-Z]{10})@$} $sid all sidnr]} {
0 commit comments