def wrapper(*args, **kwargs):
        # Verify Firebase auth.
        id_token = request.cookies.get("token")
        error_message = None
        claims = None
        objects = None

        if id_token:
            try:
                # Verify the token against the Firebase Auth API. This example
                # verifies the token on each page load. For improved performance,
                # some applications may wish to cache results in an encrypted
                # session store (see for instance
                # http://flask.pocoo.org/docs/1.0/quickstart/#sessions).
                claims = google.oauth2.id_token.verify_firebase_token(
                    id_token, firebase_request_adapter)

                if claims is not None:
                    adm = ProjectAdministration()

                    google_id = claims.get("user_id")
                    mail = claims.get("email")
                    name = claims.get("name")

                    user = adm.get_user_by_google_id(google_id)
                    if user is not None:
                        """Fall: Der Benutzer ist unserem System bereits bekannt.
                        Wir gehen davon aus, dass die google_id sich nicht ändert.
                        Wohl aber können sich der zugehörige Name (name&firstname),
                        die E-Mail-Adresse (mail) und die Role (role_id) ändern. 
                        Daher werden diese vier Daten sicherheitshalber
                        in unserem System geupdated."""

                        u = User()
                        u.set_name(name)
                        u.set_mail(mail)
                        adm.save_user(u)

                    else:
                        """Fall: Der Benutzer war bislang noch nicht eingelogged. 
                        Wir legen daher ein neues User-Objekt an, um dieses ggf. später
                        nutzen zu können.
                        """

                        user = adm.create_user(name, mail, google_id)

                    print(request.method, request.path, "angefragt durch:",
                          name, mail, google_id)

                    objects = function(*args, **kwargs)
                    return objects
                else:
                    return print('Fall 1'), '', 401  # UNAUTHORIZED !!!
            except ValueError as exc:
                # This will be raised if the token is expired or any other
                # verification checks fail.
                error_message = str(exc)
                return print('Fall 2'), exc, 401  # UNAUTHORIZED !!!

        return print('Fall 3'), 401  # UNAUTHORIZED !!!
Esempio n. 2
0
 def get(self, google_id):
     """Auslesen eines Users aus der Datenbank mit der Google_id"""
     adm = ProjectAdministration()
     use = adm.get_user_by_google_id(google_id)
     return use