@live-change/user-service 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/authenticator.js CHANGED
@@ -2,8 +2,56 @@ const App = require('@live-change/framework')
2
2
  const app = App.app()
3
3
  const definition = require('./definition.js')
4
4
 
5
+ const { User, AuthenticatedUser } = require('./model.js')
6
+
5
7
  definition.authenticator({
6
8
  async credentialsObservable(credentials) {
7
-
9
+ return app.dao.observable(
10
+ ['database', 'queryObject', app.databaseName, `(${
11
+ async (input, output, { session, authenticatedTableName, userTableName }) => {
12
+ const authenticatedTable = input.table(authenticatedTableName)
13
+ const userTable = input.table(userTableName)
14
+ let user = null
15
+ let userObject = null
16
+ let userObserver = null
17
+ let oldCredentials = null
18
+ await authenticatedTable.object(session).onChange(async (authData, oldAuthData) => {
19
+ const newUser = authData ? authData.user : null
20
+ if(newUser == user) return
21
+ if(user) {
22
+ await userObject.unobserve(userObserver)
23
+ userObject = null
24
+ userObserver = null
25
+ }
26
+ if(authData.user) {
27
+ user = newUser
28
+ userObject = userTable.object(user)
29
+ await userObject.onChange(async (userData, oldUserData) => {
30
+ const newCredentials = userData ? {
31
+ id: user,
32
+ user,
33
+ roles: userData.roles
34
+ } : null
35
+ output.change(newCredentials, oldCredentials)
36
+ oldCredentials = newCredentials
37
+ }).then(observer => {
38
+ if(user == newUser) {
39
+ userObserver = observer
40
+ } else { // if user changed before observer loaded data
41
+ userObject.unobserve(observer)
42
+ }
43
+ })
44
+ } else {
45
+ output.change(null, oldCredentials)
46
+ oldCredentials = null
47
+ }
48
+ })
49
+ }
50
+ })`, {
51
+ session: credentials.session,
52
+ authenticatedTableName: AuthenticatedUser.tableName,
53
+ userTableName: User.tableName
54
+ }]
55
+ )
8
56
  }
9
57
  })
package/model.js CHANGED
@@ -31,7 +31,7 @@ definition.event({
31
31
  const Session = definition.foreignModel('session', 'Session')
32
32
 
33
33
  const AuthenticatedUser = definition.model({
34
- name: "LoggedInUser",
34
+ name: "AuthenticatedUser",
35
35
  sessionProperty: {
36
36
  },
37
37
  userItem: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/user-service",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -24,5 +24,5 @@
24
24
  "@live-change/framework": "^0.5.7",
25
25
  "@live-change/relations-plugin": "^0.1.10"
26
26
  },
27
- "gitHead": "8a862142bf20ec41e48e1f6e7c8cc4312d22c04e"
27
+ "gitHead": "9b7bd2322b9d6285600d3cf6ed89473eafa530c2"
28
28
  }
package/userItem.js CHANGED
@@ -8,7 +8,6 @@ definition.processor(function(service, app) {
8
8
  for(let modelName in service.models) {
9
9
  const model = service.models[modelName]
10
10
  if(model.userItem) {
11
- console.trace("PROCESS MODEL " + modelName)
12
11
  if (model.properties.user) throw new Error('user property already exists!!!')
13
12
  const originalModelProperties = {...model.properties}
14
13
  const modelProperties = Object.keys(model.properties)