diff --git a/UI/config/rpc.js b/UI/config/rpc.js
index 707e231..f7eb7ca 100644
--- a/UI/config/rpc.js
+++ b/UI/config/rpc.js
@@ -1,4 +1,13 @@
// @flow
import RPCClient from '../rpc'
-export default (new RPCClient({ forceDev: false })).rpc
+const client = new RPCClient({ forceDev: false })
+
+export default client.rpc
+export const withCookies = (ctx: any) => {
+ if (ctx.req != null) {
+ return client.withCookies(ctx.req.headers.cookie)
+ } else {
+ return client.rpc
+ }
+}
diff --git a/UI/pages/testrpc.js b/UI/pages/testrpc.js
index 5f26e5a..3e8f12d 100644
--- a/UI/pages/testrpc.js
+++ b/UI/pages/testrpc.js
@@ -1,14 +1,16 @@
import * as React from 'react'
-import RPC from '../config/rpc'
+import RPC, { withCookies } from '../config/rpc'
export default class TestRPC extends React.Component {
static async getInitialProps (ctx) {
+ const user = await withCookies(ctx).getCurrentUser()
+ console.log(user)
return {
- // hello: await RPC.hello('world')
+ user
}
}
- componentDidMount () {
+ async componentDidMount () {
window.$RPC = RPC
}
@@ -19,6 +21,11 @@ export default class TestRPC extends React.Component {
}
render () {
- return
hello, { this.props.hello }
+ if (this.props.user == null) {
+ return hello stranger OwO
+ }
+
+ const { username, avatar, discriminator } = this.props.user
+ return hello, {username}#{discriminator}

}
}
diff --git a/UI/rpc/index.js b/UI/rpc/index.js
index 65db79f..efbda09 100644
--- a/UI/rpc/index.js
+++ b/UI/rpc/index.js
@@ -22,6 +22,7 @@ export default class RPCClient {
baseUrl: string
firstKnownHash: string
recentHash: string
+ cookieHeader: string
rpc: {
[fn: string]: (...args: any[]) => Promise | string
@@ -52,6 +53,11 @@ export default class RPCClient {
}
}
+ withCookies = (h: string) => {
+ this.cookieHeader = h
+ return this.rpc
+ }
+
async updateCalls () {
// this is for development only. doing in prod is probably dumb.
const rsp = await superagent.get(this.baseUrl)
@@ -78,7 +84,11 @@ export default class RPCClient {
async call (fn: string, ...args: any[]): mixed {
const req: RPCRequest = { fn, args }
- const rsp = await superagent.post(this.baseUrl).send(req).ok(() => true)
+ const rq = superagent.post(this.baseUrl)
+ if (this.cookieHeader != null) {
+ rq.cookies = this.cookieHeader
+ }
+ const rsp = await rq.send(req).ok(() => true)
const body: RPCResponse = rsp.body
if (body.error === true) {
throw RPCError.fromResponse(body, rsp.status)
diff --git a/rpc/index.js b/rpc/index.js
index ae52b9e..1dbc315 100644
--- a/rpc/index.js
+++ b/rpc/index.js
@@ -32,7 +32,7 @@ export default class RPCServer {
this.mapHash = fnv.hash(Object.keys(this.rpcMap)).str()
// call map for the client.
- this.rpcCalls = Object.keys(this.rpcMap).map(fn => ({ name: this.rpcMap[fn].name, args: this.rpcMap[fn].length - 1 }))
+ this.rpcCalls = Object.keys(this.rpcMap).map(fn => ({ name: this.rpcMap[fn].name, args: 0 }))
}
hookRoutes (router: betterRouter) {
@@ -68,9 +68,9 @@ export default class RPCServer {
// if call.length (which is the solid args list)
// is longer than args, we have too little to call the function.
- if (args.length < call.length) {
- return this.rpcError(ctx, null, new RPCError(`RPC call ${fn}() with ${args.length} arguments does not exist.`, 400))
- }
+ // if (args.length < call.length) {
+ // return this.rpcError(ctx, null, new RPCError(`RPC call ${fn}() with ${args.length} arguments does not exist.`, 400))
+ // }
try {
const response = await call(ctx, ...args)
diff --git a/rpc/user.js b/rpc/user.js
new file mode 100644
index 0000000..11d644b
--- /dev/null
+++ b/rpc/user.js
@@ -0,0 +1,11 @@
+// @flow
+import { type AppContext } from '../Roleypoly'
+import { type Context } from 'koa'
+// import { type Guild } from 'discord.js'
+
+export default ($: AppContext) => ({
+ getCurrentUser (ctx: Context) {
+ const { userId } = ctx.session
+ return $.discord.getUserPartial(ctx.session.userId)
+ }
+})