39 lines
1 KiB
Python
39 lines
1 KiB
Python
|
from html.parser import HTMLParser
|
||
|
|
||
|
|
||
|
class ParseCSRF(HTMLParser):
|
||
|
token: str = None
|
||
|
|
||
|
def __init__(self, name):
|
||
|
HTMLParser.__init__(self)
|
||
|
self.name = name
|
||
|
|
||
|
# @classmethod
|
||
|
# def dashboard_parser(cls) -> "ParseCSRF":
|
||
|
# return cls(name="csrfmiddlewaretoken")
|
||
|
#
|
||
|
# @classmethod
|
||
|
# def forgejo_parser(cls) -> "ParseCSRF":
|
||
|
# return cls(name="_csrf")
|
||
|
#
|
||
|
def handle_starttag(self, tag: str, attrs: (str, str)):
|
||
|
if self.token:
|
||
|
return
|
||
|
|
||
|
if tag != "input":
|
||
|
return
|
||
|
|
||
|
token = None
|
||
|
for index, (k, v) in enumerate(attrs):
|
||
|
if k == "value":
|
||
|
token = v
|
||
|
|
||
|
if all([k == "name", v == self.name]):
|
||
|
if token:
|
||
|
self.token = token
|
||
|
return
|
||
|
for inner_index, (nk, nv) in enumerate(attrs, start=index):
|
||
|
if nk == "value":
|
||
|
self.token = nv
|
||
|
return
|