image: hades.webp

Hades in der Altgriechisch-App

Falls du die Altgriechisch-App nutzt, hast du sicherlich schon einige Aufgaben gelöst und die gewonnen Drachmen in Götter eingetauscht. Es gibt jedoch einen Gott, den du nicht im Shop kaufen kannst, sondern nur durch eine bestimmte HTTP-POST-Anfrage erhältst. In diesem Artikel erfährst du, wie du Hades mit Hilfe eines kleinen Ruby-Skripts freischalten kannst.

Hinweis: Die Altgriechisch-App findest du hier für Android, für iOS und im Web.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

1. HTTParty installieren

Bevor wir anfangen können, müssen wir ein Rubygem installieren, das uns hilft, HTTP-Anfragen zu senden. Öffne das Ter­mi­nal, indem du den Shortcut StrgJ drückst. Dein Work­space sollte jetzt ungefähr so aussehen:

Installiere das Rubygem 'HTTParty', indem du folgenden Befehl in das Ter­mi­nal eingibst:

gem install httparty

Wenn du die Meldung 3 gems installed siehst, war die Installation erfolgreich:

2. Anmeldecode anfordern

Normalerweise meldest du dich in der App an, indem du deine E-Mail-Adresse eingibst und dann einen Code erhältst, den du in die App eingibst. Diesen Code können wir auch über eine HTTP-Anfrage anfordern – genauso macht es die App sonst für uns.

Wähle im Menü links oben »File« / »New Text File« (oder drücke StrgAltN), um eine neue Datei anzulegen:

Schreibe den folgenden Code in die Datei:

require 'httparty'
require 'json'

HOST = "https://agr.nhcham.org"

def post(path, data, headers = nil)
    response = JSON.parse(HTTParty.post("#{HOST}/#{path}", body: data.to_json, headers: headers).body)
    puts response
    response
end

print "Bitte gib deine E-Mail ein: "
email = gets.strip

puts "Code wird angefordert..."
tag = post('/api/login', {email: email})['tag']

Da Visual Studio Code noch nicht weiß, dass es sich um Ruby-Code handelt, sieht dein Code noch etwas farblos aus:

Speichere die Datei unter dem Da­tei­na­men hades.rb, indem du StrgS drückst und den Da­tei­na­men eingibst.

Dein Programm sollte jetzt ungefähr so aussehen:

Wir lesen die E-Mail-Adresse ein und stellen eine Anfrage an den Server, in der wir die E-Mail-Adresse übergeben und um einen Anmeldecode bitten. Der Server antwortet mit einem kleinen Tag, das wir für die nächste Anfrage benötigen.

Führe das Programm aus, indem du im Ter­mi­nal ruby hades.rb eingibst. Du wirst nach deiner E-Mail-Adresse gefragt:

Wenn du deine Adresse eingibst, be­kommst du zwei Teile eines Codes: das Tag, das der Server zurückgibt, und den Code, den du per E-Mail erhältst:

3. Anmeldung mit Code bestätigen

Erweitere dein Programm um folgende Zeilen:

print "Bitte gib deinen Anmeldecode ein: "
code = gets.strip

sid = post('/api/confirm_login', {tag: tag, code: code})['sid']
headers = { 'X-Session-ID': sid }

Mit diesen Zeilen bitten wir um die Eingabe des Zahlencodes und melden uns dann mit dem zuvor erhaltenen Tag und dem Code an. Führe das Programm erneut aus, indem du im Ter­mi­nal ruby hades.rb eingibst. Du be­kommst eine weitere E-Mail mit einem Code, den du eingeben musst:

Du musst natürlich deinen eigenen Code verwenden, den du per E-Mail bekommen hast.

Der Server antwortet mit einer Session-ID, die wir für alle weiteren Anfragen benötigen und an der der Server er­kennt, dass wir es sind. Wir speichern sie in der Variable sid und setzen sie als Header für alle weiteren Anfragen.

4. Hades aktivieren

Um Hades zu aktivieren, können wir eine spe­zielle Anfrage an den Server senden, die genau für diesen Zweck vorgesehen ist. Füge folgende Zeilen zu deinem Ruby-Skript hinzu:

puts "Aktiviere Hades..."
post('/api/activate_hades', nil, headers)

post('/api/logout', nil, headers)

Mit diesen Zeilen aktivieren wir Hades und melden uns dann wieder ab. Führe das Programm erneut aus, indem du im Ter­mi­nal ruby hades.rb eingibst. Wenn alles geklappt hat, be­kommst du eine Erfolgsmeldung:

Herzlichen Glückwunsch, du hast nun Hades, den Herrscher der Unterwelten, in der Altgriechisch-App freigeschaltet!

Hier siehst du noch einmal den gesamten Quelltext:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
require 'httparty'
require 'json'

HOST = "https://agr.nhcham.org"

def post(path, data, headers = nil)
    response = JSON.parse(HTTParty.post("#{HOST}/#{path}", body: data.to_json, headers: headers).body)
    puts response
    response
end

print "Bitte gib deine E-Mail ein: "
email = gets.strip

puts "Code wird angefordert..."
tag = post('/api/login', {email: email})['tag']

print "Bitte gib deinen Anmeldecode ein: "
code = gets.strip

sid = post('/api/confirm_login', {tag: tag, code: code})['sid']
headers = { 'X-Session-ID': sid }

puts "Aktiviere Hades..."
post('/api/activate_hades', nil, headers)

post('/api/logout', nil, headers)