<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
from pylint import checkers, interfaces
from pylint.checkers import utils

from pylint_django.__pkginfo__ import BASE_ID


class AuthUserChecker(checkers.BaseChecker):
    __implements__ = (interfaces.IAstroidChecker,)

    name = "auth-user-checker"

    msgs = {
        f"E{BASE_ID}41": (
            "Hard-coded 'auth.User'",
            "hard-coded-auth-user",
            "Don't hard-code the auth.User model. Use settings.AUTH_USER_MODEL instead!",
        ),
        f"E{BASE_ID}42": (
            "User model imported from django.contrib.auth.models",
            "imported-auth-user",
            "Don't import django.contrib.auth.models.User model. Use django.contrib.auth.get_user_model() instead!",
        ),
    }

    @utils.check_messages("hard-coded-auth-user")
    def visit_const(self, node):
        # for now we don't check if the parent is a ForeignKey field
        # because the user model should not be hard-coded anywhere
        if node.value == "auth.User":
            self.add_message("hard-coded-auth-user", node=node)

    @utils.check_messages("imported-auth-user")
    def visit_importfrom(self, node):
        if node.modname == "django.contrib.auth.models":
            for imported_names in node.names:
                if imported_names[0] in ["*", "User"]:
                    self.add_message("imported-auth-user", node=node)
                    break
