Skip to content

Commit dbc44db

Browse files
committed
reworked token management to not use tcl 8.4+ "dict" data types but use
standard tcl arrays instead. This should restore older CCU version compatibility with older tcl versions.
1 parent 69500f3 commit dbc44db

File tree

3 files changed

+32
-32
lines changed

3 files changed

+32
-32
lines changed

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.0b3
1+
2.0b4

xmlapi/session.tcl

+28-29
Original file line numberDiff line numberDiff line change
@@ -16,55 +16,53 @@ catch {
1616
proc get_tokens {} {
1717
set filename "/etc/config/addons/xmlapi/token.list"
1818

19-
set tokens ""
19+
array set tokens {}
2020
if {! [catch {set fd [open $filename r] } errmsg]} {
21-
set tokens [read $fd]
21+
array set tokens [read $fd]
2222
close $fd
2323
}
2424

25-
return $tokens
25+
return [array get tokens]
2626
}
2727

28-
proc register_token desc {
28+
proc save_tokens tokenlist {
2929
set filename "/etc/config/addons/xmlapi/token.list"
3030

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]
3434
close $fd
3535
}
36+
}
37+
38+
proc register_token desc {
39+
# get tokens
40+
array set tokens [get_tokens]
3641

3742
# function to generate a random string of 16 characters
3843
# cf. https://wiki.tcl-lang.org/page/Generating+random+strings
3944
set newToken [subst [string repeat {[format %c [expr {int(rand() * 26) + (rand() > .5 ? 97 : 65)}]]} 16]]
4045

41-
# add token to dict
42-
dict append tokens $newToken $desc
46+
# add token to array
47+
set tokens($newToken) $desc
4348

44-
if {! [catch {set fd [open $filename w] } errmsg]} {
45-
puts $fd $tokens
46-
}
49+
# save tokens
50+
save_tokens [array get tokens]
4751

4852
return $newToken
4953
}
5054

5155
proc revoke_token token {
52-
set filename "/etc/config/addons/xmlapi/token.list"
56+
# get tokens
57+
array set tokens [get_tokens]
5358

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)
5962

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
6866
}
6967

7068
return 0
@@ -74,10 +72,11 @@ proc check_session sid {
7472
# check for api tokens first and then check
7573
# for webui session ids as well as a fallback
7674
if {[regexp {^([0-9a-zA-Z]{16})$} $sid all sidnr]} {
77-
set tokens [get_tokens]
75+
# get tokens
76+
array set tokens [get_tokens]
7877

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)]} {
8180
return 1
8281
}
8382
} elseif {[regexp {^@([0-9a-zA-Z]{10})@$} $sid all sidnr]} {

xmlapi/tokenlist.cgi

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ puts -nonewline "<?xml version='1.0' encoding='ISO-8859-1' ?><tokens>"
1414

1515
if {[info exists sid] && [check_session $sid]} {
1616

17-
set tokens [get_tokens]
17+
# get tokens
18+
array set tokens [get_tokens]
1819

19-
dict for {token desc} $tokens {
20+
foreach {token desc} [array get tokens] {
2021
puts "<token desc='$desc'>$token</token>"
2122
}
2223

0 commit comments

Comments
 (0)