diff options
| author | Eleanor Eng <eleanor_eng@brown.edu> | 2019-03-12 17:44:11 -0400 |
|---|---|---|
| committer | Eleanor Eng <eleanor_eng@brown.edu> | 2019-03-12 17:44:11 -0400 |
| commit | 96dc0349945974a5f1c0b1329ec035dcb9dfde0e (patch) | |
| tree | 2a8bae2138aa0772dd34701443d61f82855662be /src/server | |
| parent | 1f038048612e01d0ada6deb9ff2a056cb8d13702 (diff) | |
| parent | 618e66a5a070f1aac9224bd3f44b76a5ac314bfa (diff) | |
working submenu; dimensions now relative to vw, vh
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/Message.ts | 2 | ||||
| -rw-r--r-- | src/server/ServerUtil.ts | 19 | ||||
| -rw-r--r-- | src/server/index.ts | 200 |
3 files changed, 96 insertions, 125 deletions
diff --git a/src/server/Message.ts b/src/server/Message.ts index 80fc9a80d..8a00f6b59 100644 --- a/src/server/Message.ts +++ b/src/server/Message.ts @@ -45,7 +45,7 @@ export class GetFieldArgs { } export enum Types { - Number, List, Key, Image, Document, Text, RichText, DocumentReference, Html + Number, List, Key, Image, Web, Document, Text, RichText, DocumentReference, Html, Video, Audio, Ink, PDF } export class DocumentTransfer implements Transferable { diff --git a/src/server/ServerUtil.ts b/src/server/ServerUtil.ts index 08e72fdae..5331c9e30 100644 --- a/src/server/ServerUtil.ts +++ b/src/server/ServerUtil.ts @@ -1,3 +1,4 @@ + import { Field } from './../fields/Field'; import { TextField } from './../fields/TextField'; import { NumberField } from './../fields/NumberField'; @@ -10,6 +11,14 @@ import { Server } from './../client/Server'; import { Types } from './Message'; import { Utils } from '../Utils'; import { HtmlField } from '../fields/HtmlField'; +import { WebField } from '../fields/WebField'; +import { AudioField } from '../fields/AudioField'; +import { VideoField } from '../fields/VideoField'; +import {InkField} from '../fields/InkField'; +import {PDFField} from '../fields/PDFField'; + + + export class ServerUtils { public static FromJson(json: any): Field { @@ -30,14 +39,24 @@ export class ServerUtils { return new TextField(data, id, false) case Types.Html: return new HtmlField(data, id, false) + case Types.Web: + return new WebField(new URL(data), id, false) case Types.RichText: return new RichTextField(data, id, false) case Types.Key: return new Key(data, id, false) case Types.Image: return new ImageField(new URL(data), id, false) + case Types.PDF: + return new PDFField(new URL(data), id, false) case Types.List: return ListField.FromJson(id, data) + case Types.Audio: + return new AudioField(new URL(data), id, false) + case Types.Video: + return new VideoField(new URL(data), id, false) + case Types.Ink: + return InkField.FromJson(id, data); case Types.Document: let doc: Document = new Document(id, false) let fields: [string, string][] = data as [string, string][] diff --git a/src/server/index.ts b/src/server/index.ts index 7850fd1d8..0d0b65b22 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,75 +1,24 @@ -import * as express from 'express'; -const app = express(); -import * as webpack from 'webpack'; +import * as express from 'express' +const app = express() +import * as webpack from 'webpack' import * as wdm from 'webpack-dev-middleware'; import * as whm from 'webpack-hot-middleware'; -import * as path from 'path'; +import * as path from 'path' +import * as formidable from 'formidable' import * as passport from 'passport'; -import { - MessageStore, - Message, - SetFieldArgs, - GetFieldArgs, - Transferable -} - - from "./Message"; -import { - Client -} - - from './Client'; -import { - Socket -} - - from 'socket.io'; -import { - Utils -} - - from '../Utils'; -import { - ObservableMap -} - - from 'mobx'; -import { - FieldId, - Field -} - - from '../fields/Field'; -import { - Database -} - - from './database'; -import { - ServerUtils -} - - from './ServerUtil'; -import { - ObjectID -} - - from 'mongodb'; -import { - Document -} - - from '../fields/Document'; -import * as io from 'socket.io'; +import { MessageStore, Message, SetFieldArgs, GetFieldArgs, Transferable } from "./Message"; +import { Client } from './Client'; +import { Socket } from 'socket.io'; +import { Utils } from '../Utils'; +import { ObservableMap } from 'mobx'; +import { FieldId, Field } from '../fields/Field'; +import { Database } from './database'; +import { ServerUtils } from './ServerUtil'; +import { ObjectID } from 'mongodb'; +import { Document } from '../fields/Document'; +import * as io from 'socket.io' import * as passportConfig from './authentication/config/passport'; -import { - getLogin, - postLogin, - getSignup, - postSignup -} - - from './authentication/controllers/user'; +import { getLogin, postLogin, getSignup, postSignup } from './authentication/controllers/user'; const config = require('../../webpack.config'); const compiler = webpack(config); const port = 1050; // default port to listen @@ -82,20 +31,17 @@ import c = require("crypto"); const MongoStore = require('connect-mongo')(session); const mongoose = require('mongoose'); const bluebird = require('bluebird'); -import { - performance -} - - from 'perf_hooks'; +import { performance } from 'perf_hooks' import * as fs from 'fs'; -import * as request from 'request'; +import * as request from 'request' + const download = (url: string, dest: fs.PathLike) => { request.get(url).pipe(fs.createWriteStream(dest)); } const mongoUrl = 'mongodb://localhost:27017/Dash'; // mongoose.Promise = bluebird; -mongoose.connect(mongoUrl) //.then( +mongoose.connect(mongoUrl)//.then( // () => { /** ready to use. The `mongoose.connect()` promise resolves to undefined. */ }, // ).catch((err: any) => { // console.log("MongoDB connection error. Please make sure MongoDB is running. " + err); @@ -103,88 +49,102 @@ mongoose.connect(mongoUrl) //.then( // }); mongoose.connection.on('connected', function () { console.log("connected"); -} +}) -); app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ - extended: true -} - -)); +app.use(bodyParser.urlencoded({ extended: true })); app.use(expressValidator()); app.use(expressFlash()); app.use(require('express-session')({ - secret: `$ { - c.randomBytes(64) - } - `, resave: true, saveUninitialized: true, store: new MongoStore({ + secret: `${c.randomBytes(64)}`, + resave: true, + saveUninitialized: true, + store: new MongoStore({ url: 'mongodb://localhost:27017/Dash' - } - ) -} - -)); + }) +})); app.use(passport.initialize()); app.use(passport.session()); app.use((req, res, next) => { res.locals.user = req.user; next(); -} +}); -); app.get("/signup", getSignup); app.post("/signup", postSignup); app.get("/login", getLogin); app.post("/login", postLogin); -let FieldStore: ObservableMap<FieldId, - Field> = new ObservableMap(); + +// IMAGE UPLOADING HANDLER +app.post("/upload", (req, res, err) => { + let form = new formidable.IncomingForm() + form.uploadDir = __dirname + "/public/files/" + form.keepExtensions = true + // let path = req.body.path; + console.log("upload") + form.parse(req, (err, fields, files) => { + console.log("parsing") + let names: any[] = []; + for (const name in files) { + let file = files[name]; + names.push(`/files/` + path.basename(file.path)); + } + res.send(names); + }); +}) + +app.use(express.static(__dirname + '/public')); +app.use('/images', express.static(__dirname + '/public')) + +let FieldStore: ObservableMap<FieldId, Field> = new ObservableMap(); + // define a route handler for the default home page app.get("/", (req, res) => { res.sendFile(path.join(__dirname, '../../deploy/index.html')); -} +}); -); app.get("/hello", (req, res) => { res.send("<p>Hello</p>"); -} +}) + +app.use("/corsProxy", (req, res) => { + req.pipe(request(req.url.substring(1))).pipe(res); +}); -); app.get("/delete", (req, res) => { deleteAll(); res.redirect("/"); -} +}); -); app.use(wdm(compiler, { publicPath: config.output.publicPath -} +})) + +app.use(whm(compiler)) -)) -app.use(whm(compiler)) // start the Express server +// start the Express server app.listen(port, () => { - console.log(`server started at http: //localhost:${port}`); -} + console.log(`server started at http://localhost:${port}`); +}) -) const server = io(); interface Map { [key: string]: Client; } - let clients: Map = {} server.on("connection", function (socket: Socket) { console.log("a user has connected") + Utils.Emit(socket, MessageStore.Foo, "handshooken") + Utils.AddServerHandler(socket, MessageStore.Bar, barReceived) Utils.AddServerHandler(socket, MessageStore.SetField, (args) => setField(socket, args)) Utils.AddServerHandlerCallback(socket, MessageStore.GetField, getField) Utils.AddServerHandlerCallback(socket, MessageStore.GetFields, getFields) Utils.AddServerHandler(socket, MessageStore.DeleteAll, deleteAll) -} +}) -) function deleteAll() { Database.Instance.deleteAll(); } @@ -193,7 +153,9 @@ function barReceived(guid: String) { clients[guid.toString()] = new Client(guid.toString()); } -function addDocument(document: Document) { } +function addDocument(document: Document) { + +} function getField([id, callback]: [string, (result: any) => void]) { Database.Instance.getDocument(id, (result: any) => { @@ -203,8 +165,7 @@ function getField([id, callback]: [string, (result: any) => void]) { else { callback(undefined) } - } - ) + }) } function getFields([ids, callback]: [string[], (result: any) => void]) { @@ -212,18 +173,9 @@ function getFields([ids, callback]: [string[], (result: any) => void]) { } function setField(socket: Socket, newValue: Transferable) { - let val = { - ...newValue - } - ; - delete val._id; - Database.Instance.update(newValue._id, val) + Database.Instance.update(newValue._id, newValue) socket.broadcast.emit(MessageStore.SetField.Message, newValue) } server.listen(serverPort); -console.log(`listening on port $ { - serverPort -} - -`);
\ No newline at end of file +console.log(`listening on port ${serverPort}`);
\ No newline at end of file |
