diff --git a/frontend/pages/api/clients/DayTraderClient.js b/frontend/pages/api/clients/DayTraderClient.js index 155e4e5..addf5fe 100644 --- a/frontend/pages/api/clients/DayTraderClient.js +++ b/frontend/pages/api/clients/DayTraderClient.js @@ -249,4 +249,16 @@ export function Quote(userId, stockSymbol, requestNum) { }); } +export function GetFile(filename) { + return new Promise((accept, reject) => { + DayTraderClient.File({ filename }, (err, value) => { + if (err == null) { + accept(value); + } else { + reject(err); + } + }); + }); +} + \ No newline at end of file diff --git a/frontend/pages/api/clients/day-trader.proto b/frontend/pages/api/clients/day-trader.proto index dee9caf..45e6392 100644 --- a/frontend/pages/api/clients/day-trader.proto +++ b/frontend/pages/api/clients/day-trader.proto @@ -42,6 +42,16 @@ service DayTrader { rpc Login(LoginRequest) returns (LoginResponse); rpc Quote(QuoteRequest) returns (QuoteRequestSimple); + + rpc File(FileRequest) returns (FileResponse); +} + +message FileRequest { + string filename = 1; +} + +message FileResponse { + bytes contents = 1; } message QuoteRequestSimple { diff --git a/frontend/pages/api/log/system.js b/frontend/pages/api/log/system.js index 94e56d0..6eb4597 100644 --- a/frontend/pages/api/log/system.js +++ b/frontend/pages/api/log/system.js @@ -1,4 +1,4 @@ -import { DumpLog } from "../clients/DayTraderClient"; +import { DumpLog, GetFile } from "../clients/DayTraderClient"; export default async function dumplog(req, res){ @@ -9,9 +9,11 @@ export default async function dumplog(req, res){ } return res.status(200).json(response) }else{ - const grpcCall = await DumpLog("dumplog.xml", -1); + const filename = "dumplog.xml"; + const grpcCall = await DumpLog(filename, -1); + const grpcFileCall = await GetFile(grpcCall.xml) const response = { - xml: grpcCall.xml, + file: grpcFileCall.contents, success: true, } return res.status(200).json(response) diff --git a/frontend/pages/api/log/user.js b/frontend/pages/api/log/user.js index 3041e1b..9a27622 100644 --- a/frontend/pages/api/log/user.js +++ b/frontend/pages/api/log/user.js @@ -1,4 +1,4 @@ -import { DumpLogUser } from "../clients/DayTraderClient"; +import { DumpLogUser, GetFile } from "../clients/DayTraderClient"; export default async function userLog(req, res){ const user = req.body.username; @@ -9,9 +9,11 @@ export default async function userLog(req, res){ } return res.status(200).json(response) }else{ - const grpcCall = await DumpLogUser(user, "dumploguser.xml", -1); + const filename = "dumploguser.xml"; + const grpcCall = await DumpLogUser(user, filename, -1); + const grpcFileCall = await GetFile(grpcCall.xml) const response = { - xml: grpcCall.xml, + file: grpcFileCall.contents, success: true, } return res.status(200).json(response) diff --git a/frontend/pages/settings.js b/frontend/pages/settings.js index 76e841f..651dc1d 100644 --- a/frontend/pages/settings.js +++ b/frontend/pages/settings.js @@ -2,6 +2,18 @@ import { Button, Container, Divider, Typography } from '@mui/material' import React, { useContext } from 'react' import { UserContext } from './_app' +const downloadFile = (filename, data) => { + const link = document.createElement('a'); + link.download = filename; + const bufferData = new Uint8Array(data); + const textData = new TextDecoder().decode(bufferData); + const blob = new Blob([textData], { type: 'text/xml' }); + link.href = URL.createObjectURL(blob); + link.click(); +}; + + + function settings() { const user = useContext(UserContext).user if(!user){ @@ -22,6 +34,9 @@ function settings() { try{ const response_parsed = await (await fetch(url, fetchArgs)).json() console.log(response_parsed); + if (response_parsed.success) { + downloadFile('SystemDumpLog.xml', response_parsed.file.data); + } }catch(error){ console.log(error); } @@ -41,6 +56,9 @@ function settings() { try{ const response_parsed = await (await fetch(url, fetchArgs)).json() console.log(response_parsed); + if (response_parsed.success) { + downloadFile('UserDumpLog.xml', response_parsed.file.data); + } }catch(error){ console.log(error); } diff --git a/frontend/src/components/SignUp.js b/frontend/src/components/SignUp.js index 0c1447d..8f81ab7 100644 --- a/frontend/src/components/SignUp.js +++ b/frontend/src/components/SignUp.js @@ -26,11 +26,8 @@ export default function SignUp() { const responseParsed = await response.json(); if (responseParsed.success) { localStorage.setItem('jwt', responseParsed.user); - window.location.href = "/" - setError(""); - }else{ - setError("Invalid username or password, please try again"); } + window.location.href = "/" }catch(error){ console.log("error:",error); setError("Invalid username or password, please try again");