def wtm_cookie(self):
     return {
         "name": "wtm",
         "value":
         "|".join([f"{tag_type}:true" for tag_type in Tag.get_types()]),
         "path": "",
         "secure": False,
     }
Esempio n. 2
0
def scan_cookies(request):  # pragma: no cover
    def chop_microseconds(delta):
        return delta - timedelta(microseconds=delta.microseconds)

    try:
        options = webdriver.ChromeOptions()
        options.add_argument("headless")

        browser = webdriver.Chrome(options=options)
        browser.implicitly_wait(30)
        browser.get(request.site.root_page.full_url)
        browser.delete_all_cookies()
        for tag in Tag.get_types():
            browser.add_cookie(
                {
                    "name": Tag.get_cookie_name(tag),
                    "value": "true",
                    "path": "",
                    "secure": False,
                }
            )

        browser.get(request.site.root_page.full_url)
        now = datetime.utcnow()

        created = 0
        updated = 0

        for cookie in browser.get_cookies():
            expiry = datetime.fromtimestamp(cookie.get("expiry", now))

            obj, created = CookieDeclaration.objects.update_or_create(
                name=cookie.get("name"),
                domain=cookie.get("domain"),
                defaults={
                    "security": CookieDeclaration.INSECURE_COOKIE
                    if cookie.get("httpOnly")
                    else CookieDeclaration.SECURE_COOKIE,
                    "purpose": _("Unknown"),
                    "duration": chop_microseconds(expiry - now),
                },
            )

            if created:
                created = created + 1
            else:
                updated = updated + 1

        browser.quit()

        messages.success(
            request, _("Created %d declaration(s) and updated %d." % (created, updated))
        )
    except NotADirectoryError:
        messages.warning(
            request,
            mark_safe(
                _(
                    "Could not instantiate WebDriver session. Please ensure "
                    "<a href='http://chromedriver.chromium.org/' target='_blank' rel='noopener'>ChromeDriver</a> "
                    "is installed and available in your path."
                )
            ),
        )
    except Exception as e:
        messages.error(request, e)
Esempio n. 3
0
    def sorted(self):
        from wagtail_tag_manager.models import Tag

        order = [*Tag.get_types(), None]
        return sorted(self, key=lambda x: order.index(x.cookie_type))
Esempio n. 4
0
 def cookie_state(self):
     return {
         tag_type:
         self.consent.get(tag_type, CONSENT_FALSE) != CONSENT_FALSE
         for tag_type in Tag.get_types()
     }
Esempio n. 5
0
 def cookie_state(self):
     return {
         tag_type:
         self.cookies.get(Tag.get_cookie_name(tag_type), "false") != "false"
         for tag_type in Tag.get_types()
     }