41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
import urllib.parse
 | 
						|
import oauthlib.oauth2
 | 
						|
 | 
						|
from funkwhale_api.common import authentication
 | 
						|
 | 
						|
 | 
						|
def check(request):
 | 
						|
    user = request.user
 | 
						|
    request.user = user.__class__.objects.all().for_auth().get(pk=user.pk)
 | 
						|
    if authentication.should_verify_email(request.user):
 | 
						|
        raise authentication.UnverifiedEmail(user)
 | 
						|
    return True
 | 
						|
 | 
						|
 | 
						|
class OAuth2Server(oauthlib.oauth2.Server):
 | 
						|
    def verify_request(self, uri, *args, **kwargs):
 | 
						|
        valid, request = super().verify_request(uri, *args, **kwargs)
 | 
						|
        if valid:
 | 
						|
            if not check(request):
 | 
						|
                return False, request
 | 
						|
            return valid, request
 | 
						|
 | 
						|
        # maybe the token was given in the querystring?
 | 
						|
        query = urllib.parse.urlparse(request.uri).query
 | 
						|
        token = None
 | 
						|
        if query:
 | 
						|
            parsed_qs = urllib.parse.parse_qs(query)
 | 
						|
            token = parsed_qs.get("token", [])
 | 
						|
            if len(token) > 0:
 | 
						|
                token = token[0]
 | 
						|
 | 
						|
        if token:
 | 
						|
            valid = self.request_validator.validate_bearer_token(
 | 
						|
                token, request.scopes, request
 | 
						|
            )
 | 
						|
        if valid:
 | 
						|
            if not check(request):
 | 
						|
                return False, request
 | 
						|
 | 
						|
        return valid, request
 |