Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Jabis Sevón
/
gun-multiserver
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
af095df8
authored
2020-05-01 20:18:46 +0700
by
Jabis Sevón
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
user creation stuff
1 parent
7581ae20
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
41 additions
and
42 deletions
server.js
server.js
View file @
af095df
...
...
@@ -10,7 +10,7 @@ const Gun = require("gun/gun"); // do not load storage adaptors by default
require
(
"./gun-ws.js"
);
// required to allow external websockets into gun constructor
require
(
"./mem.js"
);
// disable to allow file writing for debug
require
(
"gun/sea"
);
require
(
"gun/lib/then"
);
const
SEA
=
Gun
.
SEA
;
const
http
=
require
(
"http"
);
const
https
=
require
(
"https"
);
...
...
@@ -33,30 +33,22 @@ if (!process.env.hasOwnProperty('SSL')||process.env.SSL == false) {
}
let
sigs
=
{};
async
function
hasValidToken
(
msg
,
pathname
)
{
return
new
Promise
((
res
,
rej
)
=>
{
var
sg
=
null
;
var
token
=
null
;
token
=
(
msg
&&
msg
.
headers
&&
msg
.
headers
.
token
)
?
msg
.
headers
.
token
:
'"fail"'
;
sg
=
sigs
&&
pathname
&&
sigs
.
hasOwnProperty
(
pathname
)
?
sigs
[
pathname
]
:
false
;
//console.log("validating", msg ,"pathname",pathname, "sigs[pathname]",sigs[pathname],"token",token,sigs);
var
result
=
false
;
console
.
log
(
token
,
sg
,
sigs
);
try
{
result
=
JSON
.
parse
(
token
)
===
sg
}
catch
(
err
){
console
.
log
(
"error?"
,
err
);
}
console
.
log
(
"result"
,
result
,
JSON
.
parse
(
token
),
sg
);
return
res
(
result
);
});
return
true
;
}
// LRU with last used sockets
const
QuickLRU
=
require
(
"quick-lru"
);
const
lru
=
new
QuickLRU
({
maxSize
:
10
,
onEviction
:
false
});
server
.
on
(
"upgrade"
,
async
function
(
request
,
socket
,
head
)
{
var
parsed
=
url
.
parse
(
request
.
url
,
true
);
console
.
log
(
"parsed"
,
parsed
);
var
sig
=
parsed
.
query
&&
parsed
.
query
.
sig
?
parsed
.
query
.
sig
:
false
;
console
.
log
(
parsed
.
query
,
parsed
.
query
.
sig
)
;
var
pathname
=
parsed
.
pathname
||
"/gun"
;
let
parsed
=
url
.
parse
(
request
.
url
,
true
);
if
(
debug
)
console
.
log
(
"parsed"
,
parsed
);
let
sig
=
parsed
.
query
&&
parsed
.
query
.
sig
?
parsed
.
query
.
sig
:
false
;
let
creator
=
parsed
.
query
&&
parsed
.
query
.
creator
?
parsed
.
query
.
creator
:
"server"
;
let
pathname
=
parsed
.
pathname
||
"/gun"
;
if
(
debug
)
console
.
log
(
"Got WS request"
,
pathname
);
let
roomname
=
pathname
.
split
().
slice
(
1
).
join
(
""
);
console
.
log
(
"roomname"
,
roomname
);
var
gun
=
{
gun
:
false
,
server
:
false
};
if
(
pathname
)
{
if
(
lru
.
has
(
pathname
))
{
...
...
@@ -70,29 +62,10 @@ server.on("upgrade", async function(request, socket, head) {
gun
.
server
=
new
WebSocket
.
Server
({
noServer
:
true
,
path
:
pathname
});
if
(
debug
)
console
.
log
(
"set peer"
,
request
.
headers
.
host
+
pathname
);
if
(
sig
)
{
if
(
sigs
.
hasOwnProperty
(
pathname
)){
if
(
sig
!=
sigs
[
pathname
])
{
console
.
log
(
"someone is trying to overwrite our room"
,
sig
,
pathname
);
return
;
}
}
sigs
[
pathname
]
=
sig
;
console
.
log
(
"stored sig "
,
sig
,
"to pathname"
,
pathname
);
Gun
.
on
(
'opt'
,
function
(
ctx
)
{
if
(
ctx
.
once
)
return
ctx
.
on
(
'in'
,
function
(
msg
)
{
var
to
=
this
.
to
;
if
(
msg
.
put
)
{
if
(
hasValidToken
(
msg
,
pathname
))
{
console
.
log
(
'writing'
,
msg
,
sig
);
to
.
next
(
msg
)
}
else
{
console
.
log
(
'not writing'
,
msg
,
sig
);
}
}
else
{
to
.
next
(
msg
)
}
})
})
sigs
[
pathname
]
=
sig
;
if
(
debug
)
console
.
log
(
"stored sig "
,
sig
,
"to pathname"
,
pathname
);
}
console
.
log
(
"gunsea"
,
Gun
.
SEA
);
//
console.log("gunsea",Gun.SEA);
SEA
.
throw
=
1
;
/*Gun.on('opt',function(ctx){
if(ctx.once) return;
...
...
@@ -101,7 +74,7 @@ server.on("upgrade", async function(request, socket, head) {
this.to.next(msg);
})
})*/
var
g
=
gun
.
gun
=
Gun
({
const
g
=
gun
.
gun
=
Gun
({
peers
:
[],
// should we use self as peer?
localStorage
:
false
,
file
:
false
,
// "tmp/" + pathname,
...
...
@@ -110,8 +83,34 @@ server.on("upgrade", async function(request, socket, head) {
ws
:
{
noServer
:
true
,
path
:
pathname
,
web
:
gun
.
server
},
web
:
gun
.
server
});
lru
.
set
(
pathname
,
gun
);
let
obj
=
{
roomname
:
roomname
,
creator
:
creator
,
socket
:{}};
if
(
sig
)
{
let
user
=
g
.
user
();
user
.
create
(
username
,
sig
,
async
function
(
ack
){
console
.
log
(
"We've got ack"
,
ack
);
if
(
ack
.
err
){
console
.
log
(
"error in user.create"
,
ack
.
err
);
}
let
auth
=
await
new
Promise
((
res
,
rej
)
=>
{
return
user
.
auth
(
username
,
sig
,
res
);
});
if
(
auth
.
err
){
console
.
log
(
'error in auth'
,
auth
.
err
);
}
console
.
log
(
"auth"
,
auth
);
Object
.
assign
(
obj
,{
pub
:
ack
.
pub
,
passwordProtected
:
true
})
let
roomnode
=
user
.
get
(
roomname
).
put
(
obj
);
let
putnode
=
g
.
get
(
'rtcmeeting'
).
get
(
roomname
).
put
(
roomnode
);
let
rack
=
await
putnode
.
then
();
console
.
log
(
"room created"
,
rack
);
});
}
else
{
;(
async
()
=>
{
let
roomnode
=
g
.
get
(
"rtcmeeting"
).
get
(
roomname
).
put
(
obj
);
let
rack
=
await
roomnode
.
then
();
console
.
log
(
"room created"
,
ack
);
})()
}
}
}
if
(
gun
.
server
)
{
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment