1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import json
from authlib.oauth2.rfc6749 import grants
from .models import Client
from .models import User
from .oauth2_server import TestCase
class PasswordTest(TestCase):
def create_server(self):
server = super().create_server()
server.register_grant(grants.ClientCredentialsGrant)
return server
def prepare_data(self, grant_type="client_credentials", scope=""):
user = User(username="foo")
user.save()
client = Client(
user_id=user.pk,
client_id="client",
client_secret="secret",
scope=scope,
grant_type=grant_type,
token_endpoint_auth_method="client_secret_basic",
default_redirect_uri="https://a.b",
)
client.save()
def test_invalid_client(self):
server = self.create_server()
self.prepare_data()
request = self.factory.post(
"/oauth/token",
data={"grant_type": "client_credentials"},
)
resp = server.create_token_response(request)
assert resp.status_code == 401
data = json.loads(resp.content)
assert data["error"] == "invalid_client"
request = self.factory.post(
"/oauth/token",
data={"grant_type": "client_credentials"},
HTTP_AUTHORIZATION=self.create_basic_auth("invalid", "secret"),
)
resp = server.create_token_response(request)
assert resp.status_code == 401
data = json.loads(resp.content)
assert data["error"] == "invalid_client"
def test_invalid_scope(self):
server = self.create_server()
server.scopes_supported = ["profile"]
self.prepare_data()
request = self.factory.post(
"/oauth/token",
data={"grant_type": "client_credentials", "scope": "invalid"},
HTTP_AUTHORIZATION=self.create_basic_auth("client", "secret"),
)
resp = server.create_token_response(request)
assert resp.status_code == 400
data = json.loads(resp.content)
assert data["error"] == "invalid_scope"
def test_invalid_request(self):
server = self.create_server()
self.prepare_data()
request = self.factory.get(
"/oauth/token?grant_type=client_credentials",
HTTP_AUTHORIZATION=self.create_basic_auth("client", "secret"),
)
resp = server.create_token_response(request)
assert resp.status_code == 400
data = json.loads(resp.content)
assert data["error"] == "unsupported_grant_type"
def test_unauthorized_client(self):
server = self.create_server()
self.prepare_data(grant_type="invalid")
request = self.factory.post(
"/oauth/token",
data={"grant_type": "client_credentials"},
HTTP_AUTHORIZATION=self.create_basic_auth("client", "secret"),
)
resp = server.create_token_response(request)
assert resp.status_code == 400
data = json.loads(resp.content)
assert data["error"] == "unauthorized_client"
def test_authorize_token(self):
server = self.create_server()
self.prepare_data()
request = self.factory.post(
"/oauth/token",
data={"grant_type": "client_credentials"},
HTTP_AUTHORIZATION=self.create_basic_auth("client", "secret"),
)
resp = server.create_token_response(request)
assert resp.status_code == 200
data = json.loads(resp.content)
assert "access_token" in data
|