|
|
- from django.conf import settings
- from django.core.signing import base64_hmac
- from django.template.loader import render_to_string
- from django.urls import reverse
-
- WIDTHS = {
- "a": 7,
- "b": 7,
- "c": 6,
- "d": 7,
- "e": 6,
- "f": 4,
- "g": 7,
- "h": 7,
- "i": 3,
- "j": 3,
- "k": 7,
- "l": 3,
- "m": 10,
- "n": 7,
- "o": 7,
- "p": 7,
- "q": 7,
- "r": 4,
- "s": 6,
- "t": 5,
- "u": 7,
- "v": 7,
- "w": 9,
- "x": 6,
- "y": 7,
- "z": 7,
- "0": 7,
- "1": 6,
- "2": 7,
- "3": 7,
- "4": 7,
- "5": 7,
- "6": 7,
- "7": 7,
- "8": 7,
- "9": 7,
- "A": 8,
- "B": 7,
- "C": 8,
- "D": 8,
- "E": 7,
- "F": 6,
- "G": 9,
- "H": 8,
- "I": 3,
- "J": 4,
- "K": 7,
- "L": 6,
- "M": 10,
- "N": 8,
- "O": 9,
- "P": 6,
- "Q": 9,
- "R": 7,
- "S": 7,
- "T": 7,
- "U": 8,
- "V": 8,
- "W": 11,
- "X": 7,
- "Y": 7,
- "Z": 7,
- "-": 4,
- "_": 6,
- }
-
- COLORS = {"up": "#4c1", "late": "#fe7d37", "down": "#e05d44"}
-
-
- def get_width(s):
- total = 0
- for c in s:
- total += WIDTHS.get(c, 7)
- return total
-
-
- def get_badge_svg(tag, status):
- w1 = get_width(tag) + 10
- w2 = get_width(status) + 10
- ctx = {
- "width": w1 + w2,
- "tag_width": w1,
- "status_width": w2,
- "tag_center_x": w1 / 2,
- "status_center_x": w1 + w2 / 2,
- "tag": tag,
- "status": status,
- "color": COLORS[status],
- }
-
- return render_to_string("badge.svg", ctx)
-
-
- def check_signature(username, tag, sig):
- ours = base64_hmac(str(username), tag, settings.SECRET_KEY)
- ours = ours[:8]
- return ours == sig
-
-
- def get_badge_url(username, tag, format="svg"):
- sig = base64_hmac(str(username), tag, settings.SECRET_KEY)
-
- if tag == "*":
- view = "hc-badge-json-all" if format == "json" else "hc-badge-all"
- url = reverse(view, args=[username, sig[:8]])
- else:
- view = "hc-badge-json" if format == "json" else "hc-badge"
- url = reverse(view, args=[username, sig[:8], tag])
-
- return settings.SITE_ROOT + url
|