2021-07-12 07:15:58 -05:00
const express = require ( 'express' )
const axios = require ( 'axios' )
var http = require ( 'http' ) ;
var https = require ( 'https' ) ;
const fs = require ( 'fs' ) ;
2021-08-12 04:04:21 -05:00
const sh = require ( 'secrethash' ) ;
2023-05-13 09:25:56 -05:00
var key = fs . readFileSync ( './projectdivar.com/privkey.pem' ) ;
var cert = fs . readFileSync ( './projectdivar.com/cert.pem' ) ;
2021-07-12 07:15:58 -05:00
var options = {
key : key ,
2023-05-13 09:25:56 -05:00
cert : cert
2021-07-12 07:15:58 -05:00
} ;
2021-08-12 04:04:21 -05:00
const app = express ( )
2021-07-12 07:15:58 -05:00
2021-08-19 12:36:18 -05:00
var server = https . createServer ( options , app ) ;
const port = 4505
2021-07-12 07:15:58 -05:00
server . listen ( port , ( ) => console . log ( ` Example app listening at http://localhost: ${ port } ` ) )
const bodyParser = require ( 'body-parser' )
const { json } = require ( 'body-parser' )
const moment = require ( 'moment' ) ;
const Pool = require ( 'pg' ) . Pool
app . use ( bodyParser . json ( ) )
app . use (
bodyParser . urlencoded ( {
extended : true ,
} )
)
let allowCrossDomain = function ( req , res , next ) {
res . header ( 'Access-Control-Allow-Origin' , "*" ) ;
res . header ( 'Access-Control-Allow-Headers' , "*" ) ;
res . header ( 'Access-Control-Allow-Methods' , "*" ) ;
next ( ) ;
}
app . use ( allowCrossDomain ) ;
2021-08-07 00:03:23 -05:00
var db =
2021-07-12 07:15:58 -05:00
new Pool ( {
user : 'postgres' ,
password : '' ,
host : 'postgres' ,
2021-08-19 12:36:18 -05:00
database : 'sigcrafting' ,
2021-07-12 07:15:58 -05:00
port : 5432 ,
} )
2021-08-19 12:36:18 -05:00
app . get ( '/' , async ( req , res ) => {
res . status ( 200 ) . send ( 'BUN is love, BUN is life.' )
2021-08-06 05:41:52 -05:00
} )
2021-08-19 12:36:18 -05:00
app . get ( '/getData' , ( req , res ) => {
db . query ( 'select * from crafting_list order by id asc' )
. then ( ( data ) => {
if ( data . rows . length > 0 ) {
2021-08-09 05:29:00 -05:00
res . status ( 200 ) . json ( data . rows )
} else {
2021-08-19 12:36:18 -05:00
res . status ( 204 ) . send ( "No data" )
2021-08-09 05:29:00 -05:00
}
} )
2021-08-19 12:36:18 -05:00
. catch ( ( err ) => {
res . status ( 500 ) . send ( err . message )
2021-08-06 07:57:37 -05:00
} )
2021-08-19 12:36:18 -05:00
} )
2021-08-09 05:29:00 -05:00
2021-08-28 05:24:29 -05:00
app . get ( '/getNotifications' , ( req , res ) => {
db . query ( 'select * from audit_log where date>$1 order by id asc limit 10' , [ req . query . date ] )
. then ( ( data ) => {
res . status ( 200 ) . json ( data . rows )
} )
. catch ( ( err ) => {
console . log ( err )
res . status ( 500 ) . send ( err . message )
} )
} )
2021-08-19 12:36:18 -05:00
app . get ( '/lastUpdate' , ( req , res ) => {
db . query ( "select * from site_data limit 1" )
. then ( ( data ) => {
res . status ( 200 ) . json ( data . rows )
2021-08-06 07:57:37 -05:00
} )
2021-08-19 12:36:18 -05:00
. catch ( ( err ) => {
res . status ( 500 ) . send ( err . message )
2021-08-06 07:57:37 -05:00
} )
2021-08-19 12:36:18 -05:00
} )
2021-08-06 07:57:37 -05:00
2021-08-19 12:36:18 -05:00
app . post ( "/updateItem" , ( req , res ) => {
2021-08-28 05:24:29 -05:00
var itemIcon = ""
db . query ( "update crafting_list set obtained=$1 where id=$2 returning *" , [ req . body . obtained , req . body . id ] )
2021-08-19 12:36:18 -05:00
. then ( ( data ) => {
2021-08-28 05:24:29 -05:00
itemIcon = "https://xivapi.com" + data . rows [ 0 ] . icon
2021-08-19 12:36:18 -05:00
return db . query ( "update site_data set last_modified=$1" , [ req . body . last _modified ] )
2021-07-23 05:02:52 -05:00
} )
2021-08-28 05:24:29 -05:00
. then ( ( data ) => {
return axios . post ( process . env . DISCORD _WEBHOOK , { embeds : [ {
author : {
name : req . body . item _name ,
icon _url : itemIcon
} ,
2023-05-13 09:25:56 -05:00
description : "**" + req . body . username + "** " + ( req . body . operation === "FINISH" ? " has finished collecting " + req . body . required + " / " + req . body . required + " __" + req . body . item _name + "__!" :
req . body . operation === "INCREASE" ? " has collected " + req . body . obtained + " / " + req . body . required + " __" + req . body . item _name + "__ (+" + ( req . body . obtained - req . body . previous _amt ) + ")"
: " has set __" + req . body . item _name + "__ to " + req . body . obtained + " / " + req . body . required ) + "\n\n[Sig Planner - Sig crafts all the things](http://projectdivar.com:3001)"
2021-08-28 05:24:29 -05:00
} ]
} ) } )
. then ( ( data ) => {
return db . query ( "insert into audit_log(username,obtained,required,item_name,operation,date,previous_amt) values($1,$2,$3,$4,$5,$6,$7)" , [ req . body . username , req . body . obtained , req . body . required , req . body . item _name , req . body . operation , req . body . last _modified , req . body . previous _amt ] )
} )
2021-08-19 12:36:18 -05:00
. then ( ( data ) => {
res . status ( 200 ) . send ( "Yay!" )
} )
. catch ( ( err ) => {
2021-08-28 05:24:29 -05:00
console . log ( err . message )
2021-08-19 12:36:18 -05:00
res . status ( 500 ) . send ( err . message )
2021-07-12 08:49:47 -05:00
} )
2021-08-07 13:17:07 -05:00
} )
2023-05-13 09:25:56 -05:00
app . post ( '/setItem' , async ( req , res ) => {
await db . query ( 'select * from crafting_list where itemid=$1' , [ req . body . itemid ] )
2021-08-12 06:26:01 +00:00
. then ( ( data ) => {
2023-05-13 09:25:56 -05:00
if ( data . rows . length == 0 ) {
db . query ( 'insert into crafting_list(itemid,name,obtained,required,icon) values($1,$2,$3,$4,$5)' , [ req . body . itemid , req . body . name , req . body . obtained , req . body . required , req . body . icon ] )
. then ( ( data ) => {
res . status ( 200 ) . send ( "Yay!" )
} )
. catch ( ( err ) => {
res . status ( 500 ) . send ( err . message )
} )
} else {
db . query ( 'update crafting_list set required=$1 where itemid=$2' , [ Number ( data . rows [ 0 ] . required ) + Number ( req . body . required ) , req . body . itemid ] )
. then ( ( data ) => {
res . status ( 200 ) . send ( "Yayay!" )
} )
. catch ( ( err ) => {
res . status ( 500 ) . send ( err . message )
} )
}
2021-08-12 06:26:01 +00:00
} )
} )
2021-08-28 05:24:29 -05:00
2023-05-14 09:07:25 -05:00
app . post ( '/addItem' , async ( req , res ) => {
await db . query ( 'select * from crafting_list where itemid=$1' , [ req . body . itemid ] )
. then ( ( data ) => {
if ( data . rows . length > 0 ) {
db . query ( 'update crafting_list set obtained=$1 where itemid=$2' , [ Math . min ( data . rows [ 0 ] . required , Number ( data . rows [ 0 ] . obtained ) + Number ( req . body . obtained ) ) , req . body . itemid ] )
. then ( ( data ) => {
res . status ( 200 ) . send ( "AYAYA" )
} )
. catch ( ( err ) => {
res . status ( 500 ) . send ( err . message )
} )
} else {
res . status ( 200 ) . send ( "Nothing to do!" )
}
} )
} )
2021-08-28 05:24:29 -05:00
var runInventoryScan = async ( ) => {
for ( var item of myInv ) {
const it = item
await db . query ( 'select * from crafting_list where itemid=$1' , [ item . itemId ] )
. then ( async ( data ) => {
for ( var row of data . rows ) {
if ( row . required - row . obtained <= it . quantity ) {
await db . query ( 'update crafting_list set obtained=$1 where itemid=$2' , [ row . required , it . itemId ] )
. catch ( ( err ) => {
console . log ( err . message )
} )
} else {
await db . query ( 'update crafting_list set obtained=$1 where itemid=$2' , [ row . obtained + it . quantity , it . itemId ] )
. catch ( ( err ) => {
console . log ( err . message )
} )
break ;
}
}
} )
. catch ( ( err ) => {
console . log ( err . message )
} )
}
}
//runInventoryScan()
//console.log(process.env.DISCORD_WEBHOOK)