def user_ics_file(token): from itsdangerous.exc import BadSignature try: try: uid = read_token(token, "ics") except BadSignature: # old key uid = read_token(token, "ics", key="vVjYyCM99DtirZqMaGMrle") user = SeminarsUser(uid=int(uid)) if not user.email_confirmed: return flask.abort(404, "The email has not yet been confirmed!") except NotImplementedError: return flask.abort(404, "Invalid link") talks = [t for t in user.talks if not (t.hidden or t.seminar.visibility == 0)] for seminar in user.seminars: # Organizers may have hidden seminar if seminar.visibility == 0: continue for talk in seminar.talks(): talks.append(talk) return ics_file( talks=talks, filename="seminars.ics", user=user)
def ics_file(token): try: uid = read_token(token, "ics") user = SeminarsUser(uid=int(uid)) if not user.email_confirmed: return flask.abort(404, "The email has not yet been confirmed!") except Exception: return flask.abort(404, "Invalid link") cal = Calendar() cal.add("VERSION", "2.0") cal.add("PRODID", "mathseminars.org") cal.add("CALSCALE", "GREGORIAN") cal.add("X-WR-CALNAME", "mathseminars.org") for talk in user.talks: cal.add_component(talk.event(user)) for seminar in user.seminars: for talk in seminar.talks(): cal.add_component(talk.event(user)) bIO = BytesIO() bIO.write(cal.to_ical()) bIO.seek(0) return send_file(bIO, attachment_filename="mathseminars.ics", as_attachment=True, add_etags=False)
def user_ics_file(token): from itsdangerous.exc import BadSignature try: try: uid = read_token(token, "ics") except BadSignature: # old key return flask.abort(404, "Invalid link") user = SeminarsUser(uid=int(uid)) if not user.email_confirmed: return flask.abort(404, "The email address has not yet been confirmed!") except Exception: return flask.abort(404, "Invalid link") return ics_file( talks=user.ics_talks, filename="seminars.ics", user=user)