This commit is contained in:
Felix 2016-08-08 00:57:36 +02:00
parent 83fa228615
commit dbddba2eee
2 changed files with 175 additions and 67 deletions

View File

@ -7,8 +7,10 @@ export default function AuthTicket() {
return (
new proto.Networking.Envelopes.AuthTicket({
start: new Buffer(""),
expire_timestamp_ms: 9999999999999,
end: new Buffer("")
})
);
}
}

View File

@ -1,17 +1,71 @@
import fs from "fs";
import proto from "./proto";
import * as CFG from "../cfg";
import { REQUEST } from "../requests";
import { ResponseEnvelope, AuthTicket, GetPlayer } from "./packets";
import {
ResponseEnvelope,
ResponseEnvelopeAuth,
AuthTicket,
GetInventory,
GetHatchedEggs,
CheckAwardedBadges,
DownloadSettings,
DownloadRemoteConfigVersion,
GetPlayer,
GetPlayerProfile,
ItemTemplates,
GetAssetDigest
} from "./packets";
import { decodeRequestEnvelope } from "./utils";
import jwtDecode from "jwt-decode";
/**
* @param {Buffer} body
* @return {Buffer}
*/
export function decodeRequestBody(body) {
return (
proto.Networking.Envelopes.RequestEnvelope.decode(body)
);
export function authenticatePlayer() {
let player = this.player;
let request = decodeRequestEnvelope(this.getRequestBody());
let msg = ResponseEnvelopeAuth({
id: request.request_id
});
let token = request.auth_info;
if (token.provider === "google") {
let decoded = jwtDecode(token.token.contents);
player.generateUid(decoded.email);
player.email = decoded.email;
player.email_verified = decoded.email_verified;
this.print(`${player.email.replace("@gmail.com", "")} connected!`, 36);
}
player.authenticated = true;
return (msg);
}
/**
* @param {Request} req
* @return {String}
*/
export function getRequestType(req) {
for (let key in REQUEST) {
if (REQUEST[key] === req.request_type) {
return (key);
}
};
return ("INVALID");
}
/**
@ -20,98 +74,150 @@ export function decodeRequestBody(body) {
*/
export function onRequest(req, res) {
let request = this.decodeRequestBody(req.body);
this.player = this.getPlayerByRequest(req);
this.player.response = res;
console.log("Got request");
console.log("Received:", request.requests.map((request) => {
return request.request_type;
}).join(","));
let player = this.player;
let answer = this.processRequests(request);
// Validate email verification
if (player.authenticated) {
if (!player.email_verified) {
return void 0;
}
}
//res.send(answer);
let request = proto.Networking.Envelopes.RequestEnvelope.decode(req.body);
console.log("#####");
request.requests.map((request) => {
console.log("Got request:", this.getRequestType(request));
}).join(",");
if (!player.authenticated) {
this.send(this.authenticatePlayer());
return void 0;
}
let answer = this.processRequests(request.requests);
let msg = this.envelopResponse(1, request.request_id, answer, !!request.auth_ticket, request.unknown6);
this.send(msg);
}
/**
* @param {Request} req
* @param {Number} status
* @param {Long} id
* @param {Array} response
* @param {Boolean} auth
* @param {Array} unknown6
* @return {Buffer}
*/
export function envelopResponse(status, id, response, auth, unknown6) {
let answer = ResponseEnvelope({
id: id,
status: status,
response: response
});
if (auth) answer.auth_ticket = AuthTicket();
return (answer);
}
/**
* @param {Array} requests
* @return {Array}
*/
export function processRequests(req) {
export function processRequests(requests) {
let ii = 0;
let length = req.requests.length;
let length = requests.length;
let body = [];
for (; ii < length; ++ii) {
body.push(this.processRequest(req.requests[ii]));
body.push(this.processRequest(requests[ii]));
};
return (body);
}
export function decodeBuffer(buffer) {
let auth = proto.Networking.Envelopes.RequestEnvelope.decode(buffer);
//console.log(auth);
}
/**
* @param {Request} req
* @return {Object}
* @param {Request} req
* @return {Buffer}
*/
export function processRequest(req) {
export function processRequest(request) {
switch (req.request_type) {
// #LOGIN START
case REQUEST.GET_PLAYER:
this.decodeBuffer(req.request_message.buffer);
return (
GetPlayer({
username: "Felix",
team: 2,
pokecoins: 500,
stardust: 32500
})
);
break;
case REQUEST.GET_HATCHED_EGGS:
let buffer = null;
break;
case REQUEST.GET_INVENTORY:
switch (request.request_type){
case REQUEST.GET_PLAYER:
buffer = GetPlayer({
username: "MrHuhn",
team: 1,
pokecoins: 1337,
stardust: 1338
});
break;
case REQUEST.GET_HATCHED_EGGS:
buffer = GetHatchedEggs();
break;
case REQUEST.GET_INVENTORY:
buffer = GetInventory();
break;
case REQUEST.CHECK_AWARDED_BADGES:
buffer = CheckAwardedBadges();
break;
case REQUEST.DOWNLOAD_SETTINGS:
buffer = DownloadSettings();
break;
case REQUEST.DOWNLOAD_ITEM_TEMPLATES:
buffer = ItemTemplates();
break;
case REQUEST.DOWNLOAD_REMOTE_CONFIG_VERSION:
buffer = DownloadRemoteConfigVersion();
break;
case REQUEST.GET_ASSET_DIGEST:
buffer = GetAssetDigest();
break;
case REQUEST.GET_PLAYER_PROFILE:
buffer = GetPlayerProfile();
break;
case REQUEST.GET_MAP_OBJECTS:
this.player.updatePosition(request);
break;
};
break;
case REQUEST.CHECK_AWARDED_BADGES:
break;
case REQUEST.DOWNLOAD_SETTINGS:
break;
case REQUEST.DOWNLOAD_ITEM_TEMPLATES:
break;
// #LOGIN END
case REQUEST.GET_PLAYER_PROFILE:
break;
case REQUEST.GET_MAP_OBJECTS:
break;
case REQUEST.GET_GYM_DETAILS:
break;
};
return (buffer);
}
/**
* @param {Request} req
* @param {Request} req
* @return {Boolean}
*/
export function validRequest(req) {
return (true);
}
/**
* @return {Buffer}
*/
export function getRequestBody() {
return (
this.request.body
);
}
/**
* @param {Buffer} buffer
*/
export function send(buffer) {
this.player.response.end(buffer);
}