Exemplo n.º 1
0
    def get(self):
        """Auslesen aller Acount-Objekte.

        Sollten keine Account-Objekte verfügbar sein, so wird eine leere Sequenz zurückgegeben."""
        adm = BankAdministration()
        account_list = adm.get_all_accounts()
        return account_list
Exemplo n.º 2
0
    def post(self):
        """Erstellen einer neuen Buchung (Transaction-Objekt).

        **ACHTUNG:** Wir fassen die vom Client gesendeten Daten als Vorschlag auf.
        So ist zum Beispiel die Vergabe der ID nicht Aufgabe des Clients.
        Selbst wenn der Client eine ID in dem Proposal vergeben sollte, so
        liegt es an der BankAdministration (Businesslogik), eine korrekte ID
        zu vergeben. *Das korrigierte Objekt wird schließlich zurückgegeben.*
        """
        adm = BankAdministration()

        proposal = Transaction.from_dict(api.payload)

        """RATSCHLAG: Prüfen Sie stets die Referenzen auf valide Werte, bevor Sie diese verwenden!"""
        if proposal is not None:
            """ Wir verwenden lediglich Source, Target und Amount des Proposals für die Erzeugung
            eines Transaction-Objekts. Das serverseitig erzeugte Objekt ist das maßgebliche und 
            wird auch dem Client zurückgegeben. 
            """
            source = proposal.get_source_account()
            target = proposal.get_target_account()
            value = proposal.get_amount()
            result = adm.create_transaction_for(source, target, value)
            return result, 200
        else:
            # Wenn irgendetwas schiefgeht, dann geben wir nichts zurück und werfen einen Server-Fehler.
            return '', 500
Exemplo n.º 3
0
    def get(self):
        """Auslesen aller Customer-Objekte.

        Sollten keine Customer-Objekte verfügbar sein, so wird eine leere Sequenz zurückgegeben."""
        adm = BankAdministration()
        customers = adm.get_all_customers()
        return customers
Exemplo n.º 4
0
    def get(self, id):
        """Auslesen eines bestimmten Account-Objekts.

        Das auszulesende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        acc = adm.get_account_by_id(id)
        return acc
Exemplo n.º 5
0
    def get(self, lastname):
        """ Auslesen von Customer-Objekten, die durch den Nachnamen bestimmt werden.

        Die auszulesenden Objekte werden durch ```lastname``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        cust = adm.get_customer_by_name(lastname)
        return cust
Exemplo n.º 6
0
    def get(self, id):
        """Auslesen eines bestimmten Customer-Objekts.

        Das auszulesende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        cust = adm.get_customer_by_id(id)
        return cust
Exemplo n.º 7
0
    def delete(self, id):
        """Löschen eines bestimmten Customer-Objekts.

        Das zu löschende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        cust = adm.get_customer_by_id(id)
        adm.delete_customer(cust)
        return '', 200
Exemplo n.º 8
0
    def delete(self, id):
        """Löschen eines bestimmten Account-Objekts.

        Das zu löschende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        acc = adm.get_account_by_id(id)
        adm.delete_account(acc)
        return '', 200
Exemplo n.º 9
0
    def get(self):
        """Auslesen des Kassenkontos (Cash Account) der Bank.

        Sollten keine Cash Account-Objekt verfügbar sein, so wird Response Status 500 zurückgegeben."""
        adm = BankAdministration()
        acc = adm.get_cash_account()
        if acc is not None:
            return acc
        else:
            return '', 500
Exemplo n.º 10
0
    def get(self, id):
        """Auslesen eines bestimmten Transaction-Objekts.

        Das auszulesende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        trans = adm.get_transaction_by_id(id)

        if trans is not None:
            return trans
        else:
            return '', 500  # Wenn es keine Transaktion unter id gibt.
Exemplo n.º 11
0
    def delete(self, id):
        """Löschen eines bestimmten Transaction-Objekts.

        Das zu löschende Objekt wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        trans = adm.get_transaction_by_id(id)

        if trans is not None:
            adm.delete_transaction(trans)
            return '', 200
        else:
            return '', 500  # Wenn unter id keine Transaction existiert.
Exemplo n.º 12
0
    def get(self, id):
        """Auslesen des Kontostands bzw. des Saldos eines bestimmten Account-Objekts.

        Das Account-Objekt dessen Saldo wir auslesen möchten, wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        # Zunächst benötigen wir das durch id gegebene Konto.
        acc = adm.get_account_by_id(id)

        # Haben wir eine brauchbare Referenz auf ein Account-Objekt bekommen?
        if acc is not None:
            # Jetzt erst lesen wir den Saldo des Kontos aus.
            balance = adm.get_balance_of_account(acc)
            return balance
        else:
            return 0, 500
Exemplo n.º 13
0
    def get(self, id):
        """Auslesen aller Acount-Objekte bzgl. eines bestimmten Customer-Objekts.

        Das Customer-Objekt dessen Accounts wir lesen möchten, wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        # Zunächst benötigen wir den durch id gegebenen Customer.
        cust = adm.get_customer_by_id(id)

        # Haben wir eine brauchbare Referenz auf ein Customer-Objekt bekommen?
        if cust is not None:
            # Jetzt erst lesen wir die Konten des Customer aus.
            account_list = adm.get_accounts_of_customer(cust)
            return account_list
        else:
            return "Customer not found", 500
Exemplo n.º 14
0
    def post(self, id):
        """Anlegen eines Kontos für einen gegebenen Customer.

        Das neu angelegte Konto wird als Ergebnis zurückgegeben.

        **Hinweis:** Unter der id muss ein Customer existieren, andernfalls wird Status Code 500 ausgegeben."""
        adm = BankAdministration()
        """Stelle fest, ob es unter der id einen Customer gibt. 
        Dies ist aus Gründen der referentiellen Integrität sinnvoll!
        """
        cust = adm.get_customer_by_id(id)

        if cust is not None:
            # Jetzt erst macht es Sinn, für den Customer ein neues Konto anzulegen und dieses zurückzugeben.
            result = adm.create_account_for_customer(cust)
            return result
        else:
            return "Customer unknown", 500
Exemplo n.º 15
0
    def post(self, id):
        """Anlegen einer Gruppe für einer gegebenen Person.

        Die neu angelegte Gruppe wird als Ergebnis zurückgegeben.

        **Hinweis:** Unter der id muss ein Customer existieren, andernfalls wird Status Code 500 ausgegeben."""
        grp = BankAdministration()
        """Stelle fest, ob es unter der id einen Customer gibt. 
        Dies ist aus Gründen der referentiellen Integrität sinnvoll!
        """
        cust = grp.get_person_by_id(id)

        if cust is not None:

            result = grp.create_group_for_person(cust)
            return result
        else:
            return "Person unknown", 500
Exemplo n.º 16
0
    def get(self, id):
        """Auslesen aller Guthabenbuchungen bzgl. eines bestimmten Account-Objekts.

        **HINWEISE:** Credits sind Guthabenbuchungen, also Transaction-Objekte, die den Kontostand *positiv erhöhen*.
        Man könnte sie auch als Habenbuchungen auffassen (vgl. Rechnungswesen).
        Das Account-Objekt dessen Guthabenbuchungen wir auslesen möchten, wird durch die ```id``` in dem URI bestimmt.
        """
        adm = BankAdministration()
        # Zunächst benötigen wir das durch id gegebene Account-Objekt.
        acc = adm.get_account_by_id(id)

        # Haben wir eine brauchbare Referenz auf ein Customer-Objekt bekommen?
        if acc is not None:
            # Jetzt erst lesen wir die Konten des Customer aus.
            credits = adm.get_credits_of_account(acc)
            return credits
        else:
            return "Account not found", 500
Exemplo n.º 17
0
    def put(self, id):
        """Update eines bestimmten Transaction-Objekts.

        **ACHTUNG:** Relevante id ist die id, die mittels URI bereitgestellt und somit als Methodenparameter
        verwendet wird. Dieser Parameter überschreibt das ID-Attribut des im Payload der Anfrage übermittelten
        Customer-Objekts.
        """
        adm = BankAdministration()
        t = Transaction.from_dict(api.payload)

        if t is not None:
            """Hierdurch wird die id des zu überschreibenden (vgl. Update) Transaction-Objekts gesetzt.
            Siehe Hinweise oben.
            """
            t.set_id(id)
            adm.save_transaction(t)
            return '', 200
        else:
            return '', 500
Exemplo n.º 18
0
    def post(self):
        """Anlegen eines neuen Customer-Objekts.

        **ACHTUNG:** Wir fassen die vom Client gesendeten Daten als Vorschlag auf.
        So ist zum Beispiel die Vergabe der ID nicht Aufgabe des Clients.
        Selbst wenn der Client eine ID in dem Proposal vergeben sollte, so
        liegt es an der BankAdministration (Businesslogik), eine korrekte ID
        zu vergeben. *Das korrigierte Objekt wird schließlich zurückgegeben.*
        """
        adm = BankAdministration()

        proposal = Customer.from_dict(api.payload)

        """RATSCHLAG: Prüfen Sie stets die Referenzen auf valide Werte, bevor Sie diese verwenden!"""
        if proposal is not None:
            """ Wir verwenden lediglich Vor- und Nachnamen des Proposals für die Erzeugung
            eines Customer-Objekts. Das serverseitig erzeugte Objekt ist das maßgebliche und 
            wird auch dem Client zurückgegeben. 
            """
            c = adm.create_customer(proposal.get_first_name(), proposal.get_last_name())
            return c, 200
        else:
            # Wenn irgendetwas schiefgeht, dann geben wir nichts zurück und werfen einen Server-Fehler.
            return '', 500
    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 = BankAdministration()

                    google_user_id = claims.get("user_id")
                    email = claims.get("email")
                    name = claims.get("name")

                    user = adm.get_user_by_google_user_id(google_user_id)
                    if user is not None:
                        """Fall: Der Benutzer ist unserem System bereits bekannt.
                        Wir gehen davon aus, dass die google_user_id sich nicht ändert.
                        Wohl aber können sich der zugehörige Klarname (name) und die
                        E-Mail-Adresse ändern. Daher werden diese beiden Daten sicherheitshalber
                        in unserem System geupdated."""
                        user.set_name(name)
                        user.set_email(email)
                        adm.save_user(user)
                    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, email, google_user_id)

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

                    objects = function(*args, **kwargs)
                    return objects
                else:
                    return '', 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 exc, 401  # UNAUTHORIZED !!!

        return '', 401  # UNAUTHORIZED !!!