Untitled

mail@pastecode.io avatar
unknown
plain_text
3 years ago
3.3 kB
1
Indexable
Never
Internetinė aplikacija prie kurios kūrimo teko prisijungti studentui susideda iš dviejų pagrindinių posistemės dalių. Klasikinės GraphQL paremtos posistemės skirtos įgyvendinti komunikaciją, unikalių identifikatorių generavimą ir signalų serverio skirto sujungti du vartotojus į realiu laiku vykstančios komunikacijos kanalus. 

Pagrindinė internetinės aplikacijos logika remiasi į WebRTC protokolą skirtą komunikuoti tarp dviejų dalyvių. Įmonė vadovaujasi griežčiausiomis saugumo gairėmis, todėl privalo užtikrinti saugią komunikaciją tarp dalyvių. Tai reiškia, jog komunikacija tarp dviejų klientų privalo būti ir E2E (end-to-end) koduota ir paremta P2P (peer-to-peer) principu. P2P reikalavimas įgyvendinamas sujungiant du klientus tiesiogiai per jų naršykles. Kitaip tariant nenaudojant pašalinio posistemės serverio (ten nesaugant duomenų ar kitų klientą identifikuoti įgalinančių identifikatorių). E2E reikalavimas įgyvendinamas užtikrinant, jog duomenys, kurie keliauja per signalų serverį kitam klientui iki susijungimo, būtų užkoduoti. Tam įmonė naudoja Signal protokolo implementaciją kartu su Insertable Streams. 

Studentui skirta užduotis pertvarkyti jau egzistuojančią E2E kodavimo logiką ir tuo pačiu pakeisti esamą komunikaciją su signalų serveriu. Dalyviai, kurie siekia komunikuoti, susijungia tiesiai per naršykles siųsdami sesijos inicijavimo ir kitas reikalingas užklausas per signalų serverį, kuris šioje įmonėje yra WebSocket'ai. Tai, jog ši aplikacija neturi jokio išorinio serverio įgalina naudotojus susijungti P2P (peer-to-peer) principu. Įmonė taip pat siekia, kad kiekvienas vaizdo ir garso susijungimas būtų pilnai E2E užkoduotas, todėl reikalinga prieš kiekvieną naują pokalbį apsikeisti raktais. Studentui buvo skirta užduotis perdaryti egzistuojančią raktų apsikeitimo logiką per signalų serverį į naujesnį jos variantą. Esama logika prieš pradedant pokalbį generuodavo raktus, kuriais vėliau dalyvaujantys asmenys apsikeisdavo. Toliau būdavo kuriami unikalūs slaptieji raktai, kurie būdavo užkoduojami ir perduodami per signalų serverį kitam dalyviui. Šios unikalių raktų generavimo logikos įmonė nusprendė atsisakyti. Studentas iš pradžių turėjo atjungti visą papildomų raktų generavimo logiką ir patikrinti ar aplikacija vis dar veikia taip, kaip turėtų. Tikrinama buvo rankiniu būdu ir pasitelkiant gausiai aprašytų E2E testų pagalba. Sėkmingai atjungus logiką aplikacija prarado E2E statusą, todėl studentas turėjo įjungti jam pristatytą alternatyvą. Vietoj prieš tai egzistavusio unikalių raktų generavimo, jų kodavimo ir perdavimo, įmonė nusprendė užkoduoti WebRTC protokolo sesijai reikalingus inicijuoti objektus - RTCSessionDescription. Taigi, studentas pernaudojęs jau egzistuojančias užkodavimo ir atkodavimo funkcijas, sėkmingai užkodavo Offer ir Answer tipo RTCSessionDescription objektus ir sudarė galimybę perduoti juos per signalų serverį kitam pokalbio dalyviui. Studentas taip pat pasirūpino ir šių objektų atkodavimu, kad į pokalbį abu dalyviai galėtų susijungti sėkmingai. Patikrinus, jog ši logika veikia studentas sukėlė pasikeitųsį kodą į Git versijavimo platformą ir laukė kolegų pastabų bei komentarų.