56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
from fediseer.apis.v1.base import *
|
|
from fediseer.badges import generate_endorsements_badge, generate_guarantee_badge
|
|
from sqlalchemy.orm import aliased
|
|
from fediseer.classes.instance import Guarantee, Endorsement
|
|
from flask import make_response
|
|
from sqlalchemy import func
|
|
|
|
class GuaranteeBadge(Resource):
|
|
|
|
def get(self, domain):
|
|
'''Retrieve Guarantee Badge SVG
|
|
'''
|
|
guaranteed_instance_alias = aliased(Instance)
|
|
query = db.session.query(
|
|
Instance.domain,
|
|
guaranteed_instance_alias.domain,
|
|
).join(
|
|
Guarantee, Instance.id == Guarantee.guaranteed_id
|
|
).join(
|
|
guaranteed_instance_alias, guaranteed_instance_alias.id == Guarantee.guarantor_id
|
|
).filter(
|
|
Instance.domain == domain
|
|
)
|
|
guarantor = query.first()
|
|
if guarantor is None:
|
|
svg = generate_guarantee_badge(domain, None)
|
|
else:
|
|
svg = generate_guarantee_badge(domain, guarantor[1])
|
|
response = make_response(svg)
|
|
response.headers['Content-Type'] = 'image/svg+xml'
|
|
return response
|
|
|
|
class EndorsementBadge(Resource):
|
|
|
|
def get(self, domain):
|
|
'''Retrieve Endorsement Badge SVG
|
|
'''
|
|
query = db.session.query(
|
|
Instance.domain,
|
|
func.count(Endorsement.id) # Count the number of endorsements
|
|
).join(
|
|
Endorsement, Instance.id == Endorsement.endorsed_id
|
|
).filter(
|
|
Instance.domain == domain
|
|
).group_by(
|
|
Instance.domain
|
|
)
|
|
endorsements = query.first()
|
|
if endorsements is None:
|
|
svg = generate_endorsements_badge(domain, 0)
|
|
else:
|
|
svg = generate_endorsements_badge(domain, endorsements[1])
|
|
response = make_response(svg)
|
|
response.headers['Content-Type'] = 'image/svg+xml'
|
|
return response
|