summaryrefslogtreecommitdiff
path: root/src/leap/bitmask_js/app/models
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2016-08-26 21:09:53 -0700
committerKali Kaneko (leap communications) <kali@leap.se>2016-09-01 01:41:24 -0400
commit62f069ef0af1444089a4d477f05ac7279897fa32 (patch)
treebde623ee4ec8de240ed5504d3cdbc01c5d6755fc /src/leap/bitmask_js/app/models
parent50a258d45e851a865801da9d888037b5869a3489 (diff)
[feat] added initial bitmask_js (WIP)
Diffstat (limited to 'src/leap/bitmask_js/app/models')
-rw-r--r--src/leap/bitmask_js/app/models/account.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/leap/bitmask_js/app/models/account.js b/src/leap/bitmask_js/app/models/account.js
new file mode 100644
index 00000000..367961bf
--- /dev/null
+++ b/src/leap/bitmask_js/app/models/account.js
@@ -0,0 +1,88 @@
+//
+// An account is an abstraction of a user and a provider.
+// The user part is optional, so an Account might just represent a provider.
+//
+
+import bitmask from 'lib/bitmask'
+
+export default class Account {
+
+ constructor(address, props={}) {
+ if (!address.match('@')) {
+ this._address = '@' + address
+ } else {
+ this._address = address
+ }
+ this._authenticated = props.authenticated
+ }
+
+ //
+ // currently, bitmask.js uses address for id, so we return address here too.
+ // also, we don't know uuid until after authentication.
+ //
+ // TODO: change to uuid when possible.
+ //
+ get id() {
+ return this._address
+ }
+
+ get domain() {
+ return this._address.split('@')[1]
+ }
+
+ get address() {
+ return this._address
+ }
+
+ get userpart() {
+ return this._address.split('@')[0]
+ }
+
+ get authenticated() {
+ return this._authenticated
+ }
+
+ //
+ // returns a promise, fulfill is passed account object
+ //
+ login(password) {
+ return bitmask.user.auth(this.address, password).then(
+ response => {
+ if (response.uuid) {
+ this._uuid = response.uuid
+ this._authenticated = true
+ }
+ return this
+ }
+ )
+ }
+
+ //
+ // returns a promise, fulfill is passed account object
+ //
+ logout() {
+ return bitmask.user.logout(this.id).then(
+ response => {
+ this._authenticated = false
+ this._address = '@' + this.domain
+ return this
+ }
+ )
+ }
+
+ //
+ // returns a promise, fullfill is passed account object
+ //
+ static active() {
+ return bitmask.user.active().then(
+ response => {
+ if (response.user == '<none>') {
+ return null
+ } else {
+ return new Account(response.user, {authenticated: true})
+ }
+ }
+ )
+ }
+
+} \ No newline at end of file