-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4a4dfa0
commit 2058179
Showing
22 changed files
with
323 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
from rest_framework import authentication, exceptions | ||
from .models import Hotkey | ||
from bittensor import Keypair | ||
import json | ||
|
||
class HotkeyAuthentication(authentication.BaseAuthentication): | ||
def authenticate(self, request): | ||
hotkey_address = request.headers.get('Hotkey') | ||
nonce = request.headers.get('Nonce') | ||
signature = request.headers.get('Signature') | ||
|
||
if not hotkey_address or not nonce or not signature: | ||
raise exceptions.AuthenticationFailed('Missing authentication headers.') | ||
|
||
if not Hotkey.objects.filter(hotkey=hotkey_address).exists(): | ||
raise exceptions.AuthenticationFailed('Unauthorized hotkey.') | ||
|
||
client_headers = { | ||
'Nonce': nonce, | ||
'Hotkey': hotkey_address, | ||
'Note': request.headers.get('Note'), | ||
'SubnetID': request.headers.get('SubnetID'), | ||
'Realm': request.headers.get('Realm') | ||
} | ||
client_headers = {k: v for k, v in client_headers.items() if v is not None} | ||
headers_str = json.dumps(client_headers, sort_keys=True) | ||
|
||
method = request.method.upper() | ||
url = request.build_absolute_uri() | ||
data_to_sign = f"{method}{url}{headers_str}" | ||
|
||
if 'file' in request.FILES: | ||
uploaded_file = request.FILES['file'] | ||
file_content = uploaded_file.read() | ||
decoded_file_content = file_content.decode(errors='ignore') | ||
data_to_sign += decoded_file_content | ||
|
||
data_to_sign = data_to_sign.encode() | ||
try: | ||
is_valid = Keypair(ss58_address=hotkey_address).verify( | ||
data=data_to_sign, | ||
signature=bytes.fromhex(signature) | ||
) | ||
except Exception as e: | ||
raise exceptions.AuthenticationFailed(f'Signature verification failed: {e}') | ||
|
||
if not is_valid: | ||
raise exceptions.AuthenticationFailed('Invalid signature.') | ||
|
||
return (None, None) |
17 changes: 17 additions & 0 deletions
17
app/src/auto_validator/core/migrations/0006_remove_uploadedfile_user.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Generated by Django 4.2.15 on 2024-09-24 20:57 | ||
|
||
from django.db import migrations | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('core', '0005_alter_validatorinstance_server_and_more'), | ||
] | ||
|
||
operations = [ | ||
migrations.RemoveField( | ||
model_name='uploadedfile', | ||
name='user', | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import redis | ||
import json | ||
|
||
def trigger_bot_send_message(channel_name: str, message: str, realm: str): | ||
redis_client = redis.Redis(host='localhost', port=8379, db=0) | ||
command = { | ||
'action': 'send_message', | ||
'channel_name': channel_name, | ||
'message': message, | ||
'realm': realm | ||
} | ||
redis_client.publish('bot_commands', json.dumps(command)) |
Oops, something went wrong.