Core: add jwt auth
This commit is contained in:
		
							parent
							
								
									1e0ffd9b2d
								
							
						
					
					
						commit
						495312b060
					
				
					 12 changed files with 234 additions and 17 deletions
				
			
		
							
								
								
									
										0
									
								
								jwtauth/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								jwtauth/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								jwtauth/admin.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								jwtauth/admin.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
from django.contrib import admin
 | 
			
		||||
 | 
			
		||||
# Register your models here.
 | 
			
		||||
							
								
								
									
										6
									
								
								jwtauth/apps.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								jwtauth/apps.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
from django.apps import AppConfig
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class JwtauthConfig(AppConfig):
 | 
			
		||||
    default_auto_field = 'django.db.models.BigAutoField'
 | 
			
		||||
    name = 'jwtauth'
 | 
			
		||||
							
								
								
									
										22
									
								
								jwtauth/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								jwtauth/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
# Generated by Django 5.0.7 on 2024-08-19 12:06
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    initial = True
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='OkService',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | 
			
		||||
                ('name', models.CharField(max_length=30)),
 | 
			
		||||
                ('province', models.CharField(max_length=30)),
 | 
			
		||||
            ],
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
							
								
								
									
										0
									
								
								jwtauth/migrations/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								jwtauth/migrations/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										7
									
								
								jwtauth/models.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								jwtauth/models.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
from django.db import models
 | 
			
		||||
 | 
			
		||||
# Create your models here.
 | 
			
		||||
 | 
			
		||||
class OkService(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=30)
 | 
			
		||||
    province = models.CharField(max_length=30)
 | 
			
		||||
							
								
								
									
										3
									
								
								jwtauth/tests.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								jwtauth/tests.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
from django.test import TestCase
 | 
			
		||||
 | 
			
		||||
# Create your tests here.
 | 
			
		||||
							
								
								
									
										20
									
								
								jwtauth/urls.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								jwtauth/urls.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
from django.urls import path
 | 
			
		||||
 | 
			
		||||
from rest_framework_simplejwt.views import (
 | 
			
		||||
    TokenObtainPairView,
 | 
			
		||||
    TokenRefreshView,
 | 
			
		||||
    TokenVerifyView,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from .views import *
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    #to do: costumize this!
 | 
			
		||||
    path('register/', register_service, name='register_service'),
 | 
			
		||||
    #post username and password, get access and refresh token
 | 
			
		||||
    path('', TokenObtainPairView.as_view(), name='token_obtain_pair'),
 | 
			
		||||
    #post refresh token to this url to get a new access token
 | 
			
		||||
    path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
 | 
			
		||||
    #validates the access token
 | 
			
		||||
    path('verify/', TokenVerifyView.as_view(), name='token_verify'),
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										43
									
								
								jwtauth/views.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								jwtauth/views.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
from django.shortcuts import render
 | 
			
		||||
 | 
			
		||||
from rest_framework.decorators import api_view
 | 
			
		||||
from rest_framework_simplejwt.tokens import RefreshToken
 | 
			
		||||
from rest_framework_simplejwt.exceptions import InvalidToken
 | 
			
		||||
from rest_framework_simplejwt.tokens import UntypedToken
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
from .models import OkService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@api_view(['POST'])
 | 
			
		||||
def register_service(request):
 | 
			
		||||
    try: 
 | 
			
		||||
        data = dict(json.loads(request.body.decode('utf-8')))
 | 
			
		||||
        print(data, type(data))
 | 
			
		||||
        if "shared_key" in dict(data).keys:
 | 
			
		||||
            if first_step_check():
 | 
			
		||||
                ...
 | 
			
		||||
 | 
			
		||||
        services = OkService.objects.all()
 | 
			
		||||
    except Exception as ex:
 | 
			
		||||
        print(ex)
 | 
			
		||||
 | 
			
		||||
def first_step_check(shared_key):
 | 
			
		||||
    service_id = 1
 | 
			
		||||
    return service_id
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate_tokens(service_id):
 | 
			
		||||
    refresh = RefreshToken.for_user(service_id)
 | 
			
		||||
    return {
 | 
			
		||||
        'refresh': str(refresh),
 | 
			
		||||
        'access': str(refresh.access_token),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_token(token):
 | 
			
		||||
    try:
 | 
			
		||||
        UntypedToken(token)
 | 
			
		||||
        return True
 | 
			
		||||
    except InvalidToken:
 | 
			
		||||
        return False
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue