diff --git a/src/components/CanvasSwitchButton.js b/src/components/CanvasSwitchButton.js
index 1ee7584..4c09dcf 100644
--- a/src/components/CanvasSwitchButton.js
+++ b/src/components/CanvasSwitchButton.js
@@ -12,14 +12,8 @@ import { switchCanvas } from '../actions';
import type { State } from '../reducers';
-function globe(canvasId, canvasIdent, canvasSize, view) {
- const [x, y] = view.map(Math.round);
- window.location.href = `globe/#${canvasIdent},${canvasId},${canvasSize},${x},${y}`;
-}
-
-
-const CanvasSwitchButton = ({ canvasId, switchCanvas }) => (
-
switchCanvas(canvasId)}>
+const CanvasSwitchButton = ({ canvasId, changeCanvas }) => (
+
changeCanvas(canvasId)}>
{(canvasId == 0) ? : }
);
@@ -31,7 +25,7 @@ function mapStateToProps(state: State) {
function mapDispatchToProps(dispatch) {
return {
- switchCanvas(canvasId) {
+ changeCanvas(canvasId) {
const newCanvasId = (canvasId == 0) ? 1 : 0;
dispatch(switchCanvas(newCanvasId));
},
diff --git a/src/components/ChatButton.js b/src/components/ChatButton.js
index 5a50ade..254c73a 100644
--- a/src/components/ChatButton.js
+++ b/src/components/ChatButton.js
@@ -10,7 +10,7 @@ import { MdForum } from 'react-icons/md';
import { showChatModal } from '../actions';
-const ChatButton = ({ name, open }) => (
+const ChatButton = ({ open }) => (
: null
diff --git a/src/components/ChatModal.js b/src/components/ChatModal.js
index dde7abd..a246e99 100644
--- a/src/components/ChatModal.js
+++ b/src/components/ChatModal.js
@@ -25,7 +25,7 @@ const textStyle = {
};
-const ChatModal = ({ center }) => (
+const ChatModal = () => (
Chat with other people here
@@ -36,9 +36,3 @@ const ChatModal = ({ center }) => (
);
-function mapStateToProps(state: State) {
- const { center } = state.user;
- return { center };
-}
-
-export default connect(mapStateToProps)(ChatModal);
diff --git a/src/components/Globe.js b/src/components/Globe.js
index b05b8a7..5f351e9 100644
--- a/src/components/Globe.js
+++ b/src/components/Globe.js
@@ -16,7 +16,7 @@ import globeCss from './globe.tcss';
const Globe = () => (
-
+
(0, 0)
Double click on globe to go back.
diff --git a/src/core/config.js b/src/core/config.js
index 788aded..42ef99b 100644
--- a/src/core/config.js
+++ b/src/core/config.js
@@ -32,8 +32,8 @@ export const DISCORD_INVITE = process.env.DISCORD_INVITE || 'https://discordapp.
// Accounts
export const APISOCKET_KEY = process.env.APISOCKET_KEY || 'changethis';
// Comma seperated list of user ids of Admins
-export const ADMIN_IDS = (process.env.ADMIN_IDS) ?
- process.env.ADMIN_IDS.split(',').map((z) => parseInt(z, 10)) : [];
+export const ADMIN_IDS = (process.env.ADMIN_IDS) ?
+ process.env.ADMIN_IDS.split(',').map(z => parseInt(z, 10)) : [];
export const analytics = {
// https://analytics.google.com/
diff --git a/src/core/tileserver.js b/src/core/tileserver.js
index fd58b33..3ae125a 100644
--- a/src/core/tileserver.js
+++ b/src/core/tileserver.js
@@ -140,7 +140,7 @@ class CanvasUpdater {
setInterval(this.updateZoomlevelTiles, timeout, c);
}
if (this.maxTiledZoom === 0) {
- //in the case of canvasSize == 256
+ // in the case of canvasSize == 256
this.TileLoadingQueues.push([]);
setInterval(this.updateZoomlevelTiles, 5 * 60 * 1000, 0);
}
diff --git a/src/core/utils.js b/src/core/utils.js
index a0d9b03..1bb8fc7 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -63,7 +63,7 @@ export function getIdFromObject(obj: Object, ident: string): number {
for (let i = 0; i < ids.length; i += 1) {
const key = ids[i];
if (obj[key].ident === ident) {
- return key;
+ return parseInt(key, 10);
}
}
return null;
diff --git a/src/data/models/User.js b/src/data/models/User.js
index ee24b45..8c0266f 100644
--- a/src/data/models/User.js
+++ b/src/data/models/User.js
@@ -9,7 +9,6 @@
import redis from '../redis';
import { randomDice } from '../../utils/random';
-import { verifyCaptcha } from '../../utils/recaptcha';
import logger from '../../core/logger';
import Sequelize from 'sequelize';
diff --git a/src/globe.js b/src/globe.js
index 1e9fa19..8f5f07c 100644
--- a/src/globe.js
+++ b/src/globe.js
@@ -7,8 +7,8 @@ import { TrackballControls } from 'three-trackballcontrols-ts';
function checkMaterial(object) {
if (object.material) {
const materialName = object.material.name;
- if (materialName == "canvas") {
- console.log("Found material for canvas texture");
+ if (materialName === 'canvas') {
+ console.log('Found material for canvas texture');
return true;
}
}
@@ -19,19 +19,19 @@ function parseHashCoords() {
try {
const hash = window.location.hash;
const array = hash.substring(1).split(',');
- const ident = array.shift();
- const [id, size, x, y] = array.map((z) => parseInt(z));
+ const ident = array.shift();
+ const [id, size, x, y] = array.map(z => parseInt(z, 10));
if (!ident || isNaN(x) || isNaN(y) || isNaN(id) || isNaN(size)) {
- throw "NaN";
+ throw 'NaN';
}
return [ident, id, size, x, y];
} catch (error) {
return ['d', 0, 65536, 0, 0];
- };
+ }
}
function rotateToCoords(canvasSize, object, coords) {
- console.log("Rotate to", coords);
+ console.log('Rotate to', coords);
const [x, y] = coords;
const rotOffsetX = 0;
const rotOffsetY = 3 * Math.PI / 2;
@@ -43,40 +43,60 @@ function rotateToCoords(canvasSize, object, coords) {
document.addEventListener('DOMContentLoaded', () => {
- var webglEl = document.getElementById('webgl');
+ const webglEl = document.getElementById('webgl');
const [canvasIdent, canvasId, canvasSize, x, y] = parseHashCoords();
- var canvasTexture = new THREE.MeshPhongMaterial({
- map: new THREE.TextureLoader().load(`./tiles/${canvasId}/texture.png`),
- bumpMap: new THREE.TextureLoader().load(`./assets3d/normal${canvasId}.jpg`),
- bumpScale: 0.02,
- specularMap: new THREE.TextureLoader().load(`./assets3d/specular${canvasId}.jpg`),
- specular: new THREE.Color('grey')
+ const canvasTexture = new THREE.MeshPhongMaterial({
+ map: new THREE.TextureLoader().load(`./tiles/${canvasId}/texture.png`),
+ bumpMap: new THREE.TextureLoader().load(`./assets3d/normal${canvasId}.jpg`),
+ bumpScale: 0.02,
+ specularMap: new THREE.TextureLoader()
+ .load(`./assets3d/specular${canvasId}.jpg`),
+ specular: new THREE.Color('grey'),
});
- var width = window.innerWidth,
- height = window.innerHeight;
+ let width = window.innerWidth;
+ let height = window.innerHeight;
- var scene = new THREE.Scene();
+ const scene = new THREE.Scene();
- var camera = new THREE.PerspectiveCamera(45, width / height, 0.01, 1000);
+ const camera = new THREE.PerspectiveCamera(45, width / height, 0.01, 1000);
camera.position.z = 4.0;
- var renderer = new THREE.WebGLRenderer();
+ const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
scene.add(new THREE.AmbientLight(0x333333));
- var light = new THREE.DirectionalLight(0xffffff, 0.7);
- light.position.set(10,6,10);
+ let controls = null;
+ let object = null;
+
+ function render() {
+ controls.update();
+ if (object) object.rotation.y += 0.0005;
+ requestAnimationFrame(render);
+ renderer.render(scene, camera);
+ }
+
+ const light = new THREE.DirectionalLight(0xffffff, 0.7);
+ light.position.set(10, 6, 10);
scene.add(light);
- var controls = null;
+ function createControls() {
+ const contr = new TrackballControls(camera, renderer.domElement);
+ contr.rotateSpeed = 1.8;
+ contr.zoomSpeed = 1.0;
+ contr.panSpeed = 0.3;
+ contr.minDistance = 1.5;
+ contr.maxDistance = 70.00;
+ contr.keys = [65, 83, 68]; // ASD
+ contr.dynamicDampingFactor = 0.2;
+ return contr;
+ }
- var object = null;
- var loader = new GLTFLoader();
- loader.load('./assets3d/globe.glb', function (glb) {
+ const loader = new GLTFLoader();
+ loader.load('./assets3d/globe.glb', (glb) => {
scene.add(glb.scene);
const children = glb.scene.children;
for (let cnt = 0; cnt < children.length; cnt++) {
@@ -89,96 +109,68 @@ document.addEventListener('DOMContentLoaded', () => {
object = children[cnt];
}
}
- }
+ }
if (object) {
object.material = canvasTexture;
}
rotateToCoords(canvasSize, object, [x, y]);
- controls = createControls(camera);
+ controls = createControls();
render();
- }, function (xhr) {
+ }, (xhr) => {
console.log(`${xhr.loaded} loaded`);
- }, function (error) {
+ }, (error) => {
console.log('An error happened', error);
});
-
- // Earth params
- var radius = 0.5,
- segments = 32,
- rotation = 6;
-
-
- function createControls(camera) {
- const controls = new TrackballControls(camera, renderer.domElement);
- controls.rotateSpeed = 1.8;
- controls.zoomSpeed = 1.0;
- controls.panSpeed = 0.3;
- controls.minDistance = 1.5;
- controls.maxDistance = 70.00;
- controls.keys = [65, 83, 68]; // ASD
- controls.dynamicDampingFactor = 0.2;
- return controls;
- }
-
webglEl.appendChild(renderer.domElement);
-
- function render() {
- controls.update();
- if (object) object.rotation.y += 0.0005;
- requestAnimationFrame(render);
- renderer.render(scene, camera);
- }
-
- var stars = new THREE.Mesh(
- new THREE.SphereGeometry(90, 64, 64),
+ const stars = new THREE.Mesh(
+ new THREE.SphereGeometry(90, 64, 64),
new THREE.MeshBasicMaterial({
map: new THREE.TextureLoader().load('./assets3d/starfield.png'),
- side: THREE.BackSide
- })
+ side: THREE.BackSide,
+ }),
);
scene.add(stars);
- setInterval(onDocumentMouseMove, 1000);
-
function onWindowResize() {
- renderer.setSize(window.innerWidth, window.innerHeight);
- const aspect = window.innerWidth / window.innerHeight;
+ width = window.innerWidth;
+ height = window.innerHeight;
+ renderer.setSize(width, height);
+ const aspect = width / height;
camera.aspect = aspect;
camera.updateProjectionMatrix();
if (controls) controls.handleResize();
}
- window.addEventListener('resize', onWindowResize,false);
+ window.addEventListener('resize', onWindowResize, false);
- var raycaster = new THREE.Raycaster();
- var mouse = new THREE.Vector2();
- var lastView = [0, 0];
- const coorbox = document.getElementById("coorbox");
+ const raycaster = new THREE.Raycaster();
+ const mouse = new THREE.Vector2();
+ const coorbox = document.getElementById('coorbox');
function onDocumentMouseMove(event) {
if (!object) {
return;
}
if (event) {
- mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
- mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
+ mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
+ mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
} else {
mouse.x = 0.0;
mouse.y = 0.0;
}
- raycaster.setFromCamera( mouse, camera );
- var intersects = raycaster.intersectObject( object );
+ raycaster.setFromCamera(mouse, camera);
+ const intersects = raycaster.intersectObject(object);
- const elem = document.getElementsByTagName("BODY")[0];
- if(intersects.length > 0) {
- const { x, y } = intersects[0].uv;
- const xabs = Math.floor((x - 0.5) * canvasSize);
- const yabs = Math.floor((0.5 - y) * canvasSize);
- //console.log(`On ${xabs} / ${yabs} cam: ${camera.position.z}`);
+ const elem = document.getElementsByTagName('BODY')[0];
+ if (intersects.length > 0) {
+ const { xi, yi } = intersects[0].uv;
+ const xabs = Math.floor((xi - 0.5) * canvasSize);
+ const yabs = Math.floor((0.5 - yi) * canvasSize);
+ // console.log(`On ${xabs} / ${yabs} cam: ${camera.position.z}`);
coorbox.innerHTML = `(${xabs}, ${yabs})`;
elem.style.cursor = 'move';
} else {
@@ -186,26 +178,26 @@ document.addEventListener('DOMContentLoaded', () => {
}
}
+ setInterval(onDocumentMouseMove, 1000);
function onDocumentDblClick(event) {
if (!object) {
return;
}
- mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
- mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
+ mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
+ mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
- raycaster.setFromCamera( mouse, camera );
- var intersects = raycaster.intersectObject( object );
+ raycaster.setFromCamera(mouse, camera);
+ const intersects = raycaster.intersectObject(object);
- if(intersects.length > 0) {
- const { x, y } = intersects[0].uv;
- const xabs = Math.round((x - 0.5) * canvasSize);
- const yabs = Math.round((0.5 - y) * canvasSize);
+ if (intersects.length > 0) {
+ const { xi, yi } = intersects[0].uv;
+ const xabs = Math.round((xi - 0.5) * canvasSize);
+ const yabs = Math.round((0.5 - yi) * canvasSize);
window.location.href = `./#${canvasIdent},${xabs},${yabs},0`;
}
}
document.addEventListener('mousemove', onDocumentMouseMove, false);
document.addEventListener('dblclick', onDocumentDblClick, false);
-
});
diff --git a/src/routes/api/pixel.js b/src/routes/api/pixel.js
index 662ab4a..27ae439 100644
--- a/src/routes/api/pixel.js
+++ b/src/routes/api/pixel.js
@@ -9,7 +9,7 @@ import nodeIp from 'ip';
import draw from '../../core/draw';
import { blacklistDetector, cheapDetector, strongDetector } from '../../core/isProxy';
-import { verifyCaptcha } from '../../utils/recaptcha';
+import verifyCaptcha from '../../utils/recaptcha';
import logger from '../../core/logger';
import { clamp } from '../../core/utils';
import redis from '../../data/redis';
diff --git a/src/socket/APISocketServer.js b/src/socket/APISocketServer.js
index ed0f345..b43865c 100644
--- a/src/socket/APISocketServer.js
+++ b/src/socket/APISocketServer.js
@@ -248,7 +248,7 @@ class APISocketServer extends EventEmitter {
ret,
]));
}
- } catch(err) {
+ } catch (err) {
logger.error(`Got undecipherable api-ws message ${message}`);
}
}
diff --git a/src/socket/ChatHistory.js b/src/socket/ChatHistory.js
index 7607859..681d35a 100644
--- a/src/socket/ChatHistory.js
+++ b/src/socket/ChatHistory.js
@@ -1,6 +1,6 @@
/*
* save the chat history
- * TODO:
+ * TODO:
* This should really be saved in redis
*/
diff --git a/src/ui/loadImage.js b/src/ui/loadImage.js
index 20cbe86..09ae5a2 100644
--- a/src/ui/loadImage.js
+++ b/src/ui/loadImage.js
@@ -3,7 +3,7 @@
function loadImage(url) {
return new Promise((resolve, reject) => {
const img = new Image();
- img.addEventListener('load', e => resolve(img));
+ img.addEventListener('load', () => resolve(img));
img.addEventListener('error', () => {
reject(new Error(`Failed to load image's URL: ${url}`));
});
diff --git a/src/utils/recaptcha.js b/src/utils/recaptcha.js
index c58a199..fa4653b 100644
--- a/src/utils/recaptcha.js
+++ b/src/utils/recaptcha.js
@@ -19,19 +19,19 @@ const ENDPOINT = `${BASE_ENDPOINT}?secret=${RECAPTCHA_SECRET}`;
* @param ip
* @returns {Promise.
}
*/
-export async function verifyCaptcha(
+async function verifyCaptcha(
token: string,
ip: string,
): Promise {
try {
if (!RECAPTCHA_SECRET) {
- logger.info(`Got captcha token but reCaptcha isn't configured?!`);
+ logger.info('Got captcha token but reCaptcha isn\'t configured?!');
return true;
}
const url = `${ENDPOINT}&response=${token}&remoteip=${ip}`;
const response = await fetch(url);
if (response.ok) {
- const { success, challenge_ts, hostname } = await response.json();
+ const { success } = await response.json();
if (success) {
logger.info(`CAPTCHA ${ip} successfully solved captcha`);
return true;
@@ -46,3 +46,5 @@ export async function verifyCaptcha(
return false;
}
+
+export default verifyCaptcha;
diff --git a/src/utils/validation.js b/src/utils/validation.js
index 405a7b2..a3c5c39 100644
--- a/src/utils/validation.js
+++ b/src/utils/validation.js
@@ -3,15 +3,17 @@
* @flow
*/
-const mail_tester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
+const mailTester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
export function validateEMail(email) {
if (!email) return "Email can't be empty.";
if (email.length < 5) return 'Email should be at least 5 characters long.';
if (email.length > 40) return "Email can't be longer than 40 characters.";
if (email.indexOf('.') === -1) return 'Email should at least contain a dot';
- if (email.split('').filter(x => x === '@').length !== 1) return 'Email should contain a @';
- if (!mail_tester.test(email)) return 'Your Email looks shady';
+ if (email.split('').filter(x => x === '@').length !== 1) {
+ return 'Email should contain a @';
+ }
+ if (!mailTester.test(email)) return 'Your Email looks shady';
return false;
}
@@ -24,7 +26,9 @@ export function validateName(name) {
name.indexOf('\\') !== -1 ||
name.indexOf('>') !== -1 ||
name.indexOf('<') !== -1 ||
- name.indexOf('#') !== -1) return 'Name contains invalid character like @, /, \\ or #';
+ name.indexOf('#') !== -1) {
+ return 'Name contains invalid character like @, /, \\ or #';
+ }
return false;
}
@@ -37,8 +41,12 @@ export function sanitizeName(name) {
}
export function validatePassword(password) {
- if (password.length < 6) return 'Password must be at least 6 characters long.';
- if (password.length > 60) return 'Password must be shorter than 60 characters.';
+ if (password.length < 6) {
+ return 'Password must be at least 6 characters long.';
+ }
+ if (password.length > 60) {
+ return 'Password must be shorter than 60 characters.';
+ }
return false;
}
diff --git a/src/web.js b/src/web.js
index a6d5814..8d4d121 100644
--- a/src/web.js
+++ b/src/web.js
@@ -25,7 +25,7 @@ import globeHtml from './components/Globe';
import generateMainPage from './components/Main';
import { SECOND, MONTH } from './core/constants';
-import { PORT, ASSET_SERVER, DISCORD_INVITE } from './core/config';
+import { PORT, DISCORD_INVITE } from './core/config';
import { ccToCoords } from './utils/location';
import { wsupgrade } from './socket/websockets';
@@ -125,7 +125,7 @@ app.get('/globe', async (req, res) => {
res.set({
'Cache-Control': `private, max-age=${15 * 60}`, // seconds
'Content-Type': 'text/html; charset=utf-8',
- ETag: indexEtag,
+ ETag: globeEtag,
});
if (req.headers['if-none-match'] === globeEtag) {