Files
mrfrys-node-server/src/utils/p2putils.ts
T

59 lines
1.6 KiB
TypeScript

import { PeerInfo } from '../types/basicTypes'
import { files, paths, readAndValidateFile } from './files'
import { parseCookie, post } from './networkUtils'
import utils from './utils'
export function peerToString(peer: {
host: string
port: string | number
}): string {
return `${peer.host}:${peer.port}`
}
export function isPeerSameAs(peer1: PeerInfo, peer2: PeerInfo): boolean {
return peer1.host === peer2.host && peer1.port === peer2.port
}
export function updatePeersFile(updatedPeer: PeerInfo): void {
const newVal = readAndValidateFile<PeerInfo[]>(files.peersFile)
let peers
if (newVal) {
peers = newVal
}
if (!peers)
throw new Error('Peers file was invalid while trying to update it!')
const updatedPeers = peers.map((x) => {
if (isPeerSameAs(updatedPeer, x)) {
return {
...x,
...updatedPeer,
}
} else {
return x
}
})
utils.WriteFile(JSON.stringify(updatedPeers, null, 2), paths.peersFile)
}
export async function loginToPeer(peer: PeerInfo): Promise<string | Error> {
const { data, error, cookie } = await post<{
result: string
msg: string
}>({
hostname: peer.host,
path: '/api/login',
port: peer.port,
bodyObject: { pw: peer.pw },
http: peer.http,
})
if (error || !data || data.result !== 'success') {
return data ? new Error(data.msg) : error
}
const parsedCookies = parseCookie(cookie)
return parsedCookies.sessionID
}