Use XKCD-style passphrases.

nb/hide-http
Alex Kern 11 years ago
parent 9679dea646
commit d8cb491402

@ -164,6 +164,7 @@ p {
height: 60px height: 60px
overflow: hidden overflow: hidden
background: green background: green
transition: all 1s ease
.progress-bar-inner { .progress-bar-inner {
float: left float: left

@ -0,0 +1,2 @@
require('babel/register')
module.exports = require('./lib/server')

@ -7,7 +7,7 @@ export default class Tempalink extends React.Component {
} }
render() { render() {
var url = window.location.origin + '/d/' + this.props.token var url = window.location.origin + '/' + this.props.token
return <input return <input
className="tempalink" className="tempalink"
onClick={this.onClick.bind(this)} onClick={this.onClick.bind(this)}

@ -1,45 +1,39 @@
import bases from 'bases' import bases from 'bases'
import crypto from 'crypto' import crypto from 'crypto'
import xkcdPassword from 'xkcd-password'
var tokenLength = 8 const TOKEN_OPTIONS = {
var tokens = {} numWords: 4,
minLength: 4,
exports.create = function (socket) { maxLength: 8
}
var maxNum = Math.pow(62, tokenLength)
var numBytes = Math.ceil(Math.log(maxNum) / Math.log(256))
var token = '' var tokenGenerator = new xkcdPassword()
do { var tokens = {}
do {
var bytes = crypto.randomBytes(numBytes)
var num = 0
for (var i = 0; i < bytes.length; i++) {
num += Math.pow(256, i) * bytes[i]
}
} while (num >= maxNum)
token = bases.toBase62(num) export function create(socket) {
} while (token in tokens)
const result = { return tokenGenerator.generate(TOKEN_OPTIONS).then((parts) => {
token: token, const token = parts.join('-')
socket: socket let result = {
} token: token,
socket: socket
}
tokens[token] = result tokens[token] = result
return result return result
})
} }
exports.exists = function (token) { export function exists(token) {
return token in tokens return token in tokens
} }
exports.find = function (token) { export function find(token) {
return tokens[token] return tokens[token]
} }
exports.remove = function (client) { export function remove(client) {
delete tokens[client.token] delete tokens[client.token]
} }

@ -3,9 +3,9 @@ var express = require('express')
var routes = module.exports = new express.Router() var routes = module.exports = new express.Router()
routes.get('/d/:token', function (req, res, next) { routes.get(/^\/([a-z]+-[a-z]+-[a-z]+-[a-z]+)$/, function (req, res, next) {
var uploader = db.find(req.params.token) var uploader = db.find(req.params[0])
if (uploader) { if (uploader) {
res.locals.data = { res.locals.data = {
DownloadStore: { DownloadStore: {

@ -9,7 +9,7 @@ import ErrorPage from './components/ErrorPage'
export default ( export default (
<Route handler={App}> <Route handler={App}>
<DefaultRoute handler={UploadPage} /> <DefaultRoute handler={UploadPage} />
<Route name="download" path="d/:token" handler={DownloadPage} /> <Route name="download" path="/:a-:b-:c-:d" handler={DownloadPage} />
<Route name="error" path="error" handler={ErrorPage} /> <Route name="error" path="error" handler={ErrorPage} />
<NotFoundRoute handler={ErrorPage} /> <NotFoundRoute handler={ErrorPage} />
</Route> </Route>

@ -34,9 +34,13 @@ io.on('connection', function (socket) {
var upload = null var upload = null
socket.on('upload', function (metadata, res) { socket.on('upload', function (metadata, res) {
if (!upload) upload = db.create(socket) if (upload) return
upload.metadata = metadata upload = true
res(upload.token) db.create(socket).then((u) => {
upload = u
upload.metadata = metadata
res(upload.token)
})
}) })
socket.on('download', function (data) { socket.on('download', function (data) {

@ -2,9 +2,9 @@
"name": "filepizza", "name": "filepizza",
"version": "0.0.0", "version": "0.0.0",
"description": "Peer-to-peer file transfers in your browser", "description": "Peer-to-peer file transfers in your browser",
"main": "lib/server.js", "main": "index.js",
"scripts": { "scripts": {
"start": "./node_modules/.bin/babel-node lib/server.js" "start": "node index.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -35,7 +35,8 @@
"react-router": "^0.13.1", "react-router": "^0.13.1",
"socket.io": "^1.3.5", "socket.io": "^1.3.5",
"stylus": "^0.50.0", "stylus": "^0.50.0",
"webrtcsupport": "^2.1.2" "webrtcsupport": "^2.1.2",
"xkcd-password": "^1.2.0"
}, },
"engines": { "engines": {
"node": "0.10.x" "node": "0.10.x"

Loading…
Cancel
Save