Skip to content

Commit 2d0edaf

Browse files
committed
Code review fixes
Signed-off-by: Scott R. Shinn <scott@atomicorp.com>
1 parent c8379d5 commit 2d0edaf

4 files changed

Lines changed: 29 additions & 21 deletions

File tree

server/auth.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import secrets
1010
import pwd
1111
import grp
12+
import threading
1213
from pathlib import Path
1314
from typing import Dict, Optional
1415
from datetime import datetime, UTC
@@ -24,6 +25,7 @@ def __init__(self, config_file: str = '/etc/chelon/chelon.conf'):
2425
self.config_file = Path(config_file)
2526
self.tokens_file = Path('/var/lib/chelon/tokens.json')
2627
self.rate_limits = {} # token_id -> {'count': int, 'window_start': float}
28+
self._lock = threading.Lock()
2729

2830
# Load tokens
2931
self.tokens = self._load_tokens()
@@ -126,25 +128,26 @@ def validate_token(self, token: str) -> Dict:
126128
now = datetime.now(UTC)
127129
window_size = 3600 # 1 hour in seconds
128130

129-
limit_data = self.rate_limits.get(token_id, {
130-
'count': 0,
131-
'window_start': now.timestamp()
132-
})
133-
134-
# Check if window has expired
135-
if now.timestamp() - limit_data['window_start'] > window_size:
136-
# Reset window
137-
limit_data = {
131+
with self._lock:
132+
limit_data = self.rate_limits.get(token_id, {
138133
'count': 0,
139134
'window_start': now.timestamp()
140-
}
141-
142-
if limit_data['count'] >= token_info['rate_limit']:
143-
raise ValueError("Rate limit exceeded")
144-
145-
# Increment request count
146-
limit_data['count'] += 1
147-
self.rate_limits[token_id] = limit_data
135+
})
136+
137+
# Check if window has expired
138+
if now.timestamp() - limit_data['window_start'] > window_size:
139+
# Reset window
140+
limit_data = {
141+
'count': 0,
142+
'window_start': now.timestamp()
143+
}
144+
145+
if limit_data['count'] >= token_info['rate_limit']:
146+
raise ValueError("Rate limit exceeded")
147+
148+
# Increment request count
149+
limit_data['count'] += 1
150+
self.rate_limits[token_id] = limit_data
148151

149152
# Update last used timestamp
150153
token_info['last_used'] = datetime.now(UTC).isoformat()

tests/test_rate_limit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import shutil
55
import tempfile
66
import unittest
7-
from unittest.mock import patch, MagicMock
7+
from unittest.mock import patch
88
from datetime import datetime, timedelta, timezone
99

1010
# Add server to path
11-
sys.path.insert(0, '/home/sshinn/src/chelon/server')
11+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../server'))
1212

1313
from auth import TokenAuth
1414

tests/test_signing_fix.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from unittest.mock import patch, MagicMock
88

99
# Add server to path
10-
sys.path.insert(0, '/usr/share/chelon/server')
10+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../server'))
1111

1212
from signing_engine import SigningEngine
1313
import gnupg

tools/chelon-admin

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import json
1010
from pathlib import Path
1111

1212
# Add server directory to path
13-
sys.path.insert(0, '/usr/share/chelon/server')
13+
# Try local path first (dev environment), then fallback to installed path
14+
local_path = os.path.join(os.path.dirname(__file__), '../server')
15+
if os.path.isdir(local_path):
16+
sys.path.insert(0, local_path)
17+
else:
18+
sys.path.insert(0, '/usr/share/chelon/server')
1419

1520
from auth import TokenAuth
1621
from audit import AuditLogger

0 commit comments

Comments
 (0)