1 | # Code Reality Readme
|
2 |
|
3 | This is work in progress...
|
4 |
|
5 | Code Reality framework enables building networked extended reality (XR) experiences with A-Frame.
|
6 |
|
7 | aframe-dataspace servers provide a shared space to store and transmit scene data between browsers.
|
8 |
|
9 | ## Browser support
|
10 |
|
11 | Tested browsers (latest versions):
|
12 |
|
13 | * Windows / Firefox
|
14 | * Windows / Chrome
|
15 | * macOS / Safari
|
16 | * iOS / Safari
|
17 |
|
18 | Tested devices:
|
19 |
|
20 | * HTC Vive
|
21 | * Oculus Go (Oculus Browser)
|
22 |
|
23 | ## Build
|
24 |
|
25 | npm run build:node
|
26 | npm run build:browser
|
27 |
|
28 | ## Add to heroku
|
29 | ---
|
30 | heroku create --region eu code-reality
|
31 | git push heroku master
|
32 | heroku logs -t
|
33 | heroku logs -t --dyno=web
|
34 | ---
|
35 |
|
36 | ## Run
|
37 |
|
38 | ### Development mode
|
39 |
|
40 | To run the node http server in development mode you need to run locally the
|
41 | following commands in separate terminals:
|
42 |
|
43 | 1) npm run dev:node
|
44 | 2) npm run dev:browser
|
45 |
|
46 | Browse to: http://localhost:3001/
|
47 |
|
48 | ## Access control
|
49 |
|
50 | ### Authentication
|
51 |
|
52 | Currently implemented authentication method is facebook authentication with express passport.
|
53 |
|
54 | ### Authorization
|
55 |
|
56 | Authorization to rest and web socket services are transmitted with JWT token.
|
57 | The trusted issuer public keys are listed in cluster configuration.
|
58 |
|
59 | #### Generating key pair
|
60 |
|
61 | RSA key pair can be generated as follows:
|
62 |
|
63 | openssl genrsa -aes128 -out private.pem 2048
|
64 | openssl rsa -in private.pem -outform PEM -pubout -out public.pem
|
65 |
|
66 | Windows base64 encode:
|
67 |
|
68 | certutil -encode public.pem tmp.b64; findstr /v /c:- tmp.b64 > public.b64; rm tmp.b64
|
69 | certutil -encode private.pem tmp.b64; findstr /v /c:- tmp.b64 > private.b64; rm tmp.b64
|
70 |
|
71 | ### Public test environment JWT signer RSA key pair:
|
72 |
|
73 | -----BEGIN PUBLIC KEY-----
|
74 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApl9jOIkv7+MQpc3Y1UTz
|
75 | 9DNSXQeQJRI8IgkHoyKT2FXlaty+DBh42qLdcsRUWhT6BcTdV++3MI9mUluUA8zc
|
76 | 6s/oYR/Q3D8FJUi2Oe8VXhv1/edDQU2TguYaBvxiVZYXlXuDkjU05iKMYdiBcFp8
|
77 | 8t4FDFPUMRGgMNWpIDxGOeCxN0v8ott3OBkFHyokGdxMvu1q5KVS4Y60D8UgC/4i
|
78 | IGE3QCLqIzZ+jm0o8vAqgJG/rAL5UmufR+KnWdIIVfHyhZwxFjWuurfPZwKX23aj
|
79 | gcIDFjPf1XdeWdEViCGADeaiYfyrCk5E+I7x38Zj1eHqljJYh6o2jaKJxHsH0ZJK
|
80 | uwIDAQAB
|
81 | -----END PUBLIC KEY-----
|
82 |
|
83 | Base64 encoded pem:
|
84 | LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFwbDlqT0lrdjcrTVFwYzNZMVVUego5RE5TWFFlUUpSSThJZ2tIb3lLVDJGWGxhdHkrREJoNDJxTGRjc1JVV2hUNkJjVGRWKyszTUk5bVVsdVVBOHpjCjZzL29ZUi9RM0Q4RkpVaTJPZThWWGh2MS9lZERRVTJUZ3VZYUJ2eGlWWllYbFh1RGtqVTA1aUtNWWRpQmNGcDgKOHQ0RkRGUFVNUkdnTU5XcElEeEdPZUN4TjB2OG90dDNPQmtGSHlva0dkeE12dTFxNUtWUzRZNjBEOFVnQy80aQpJR0UzUUNMcUl6WitqbTBvOHZBcWdKRy9yQUw1VW11ZlIrS25XZElJVmZIeWhad3hGald1dXJmUFp3S1gyM2FqCmdjSURGalBmMVhkZVdkRVZpQ0dBRGVhaVlmeXJDazVFK0k3eDM4WmoxZUhxbGpKWWg2bzJqYUtKeEhzSDBaSksKdXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
|
85 |
|
86 | -----BEGIN ENCRYPTED PRIVATE KEY-----
|
87 | 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
|
115 | -----END ENCRYPTED PRIVATE KEY-----
|
116 |
|
117 | Base64 encoded pem:
|
118 | LS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpNSUlGTFRCWEJna3Foa2lHOXcwQkJRMHdTakFwQmdrcWhraUc5dzBCQlF3d0hBUUljV2g2ejlFTVlNMENBZ2dBCk1Bd0dDQ3FHU0liM0RRSUpCUUF3SFFZSllJWklBV1VEQkFFcUJCQnFPcFhieDcxTkpaQktNUi82OHE3MkJJSUUKMEhWQk4wdWZ3YTNVcllPL0orS0RWdHZZQVY0SGtaM1JCUDlENkRLdXRQSzkyd1Q2Q2lPQjh3Y2ZTajFkRUVnbApGSFpORGg3Zk1oS25tNjhTWnlZdUNWNjlkbVpCTURMZzVQcUV0anZ3UTFKNXBwTUNuRGdMS3JpWUk0bVBmaHJDCmc4T2dmb2d1czlmY1M1L3R5blYrVmREQXRWWG5VNVdWNkduUTcxMUNIUXR0emdOWk1GOGZlbDV5bVhpeDhrRUEKV25TdDJwQVdYckdOQ3RCdzgvOFhmUTFnejRMaHpxY1dHeE1zWjFHb1FRRVRUNExwc1RZN21pc0pVOGhTRVBpagpVeVFMMVlwMGpESXBuSUJOckwwY1F1cWl5TE4yRkRLRi9EQWp4V1RlSnNtYTF5a3E1MjhxWHdKNTQzaDlBc1FKClVWaDlhZW1mUEUyUjI5RU82cy9qcVpUZ29JWDJLUzZKZzhCYWc4UHJya1lRQnp3RUNOamlCRWlKY2NIK2JEekgKVnZLd0N3MmduTVgyam5KNTdZVHJDcXB6MVFkTDFlbm52dEpVTUhqTndhM1BBQThQWU1HanZSNzJkOHRGMm5lUwprUjY0UEtiQlFqS2RjdUdwSzR5UEhzQTN4UTJobkIvVWJpMjZKVzJRQjFGckJNc1Z5bmtzZlAwWUtaV3A0c3NRCmY4azJyaWlkOXB1dk91RHl1OHUwVm42bHZFT2Y5MXY5Q2w4NUdlU2JnM0w2UEovSExTUllyU2ZyT21tL29TQTEKSFhISmJoN2g4QzZYbll4YzZrdEp5bXg0NFdPNnFkSG84ckFUelhzQUpoYlh6L3ZXaEpkNzdEMnRUTitSM00zbgo5TEJlUXpPcWYyQVdlTFZZRnRSdlE1VU9HMzlsbjVaYllWSTgzOFppN0ZjakxRU2FINEpualJsbktlejF1RDhLCnBwdWtVVmFZZi9SeElHdkJwUGQrREIreXpyZzRVQVZ6bXk1OW43TDkxSWxmbnFBaFk1d2ZTRkJ4Q2ZSY1dFeEEKWWJWZTZ2OTMrdWNnRE9qeHdyUXpUa2ltMkJTRkhlMEIraXVVaEpDa2ZWNHZtYk1VR2FpQ3dpNnJxc1NsdnBlMQpCQlhFSG1OMDVDcGhIMEtJVEM0cmhLQXhzYkRpNXd2c1hZUnhpdGp0TmthQUZCejk4dXhJem5tSkplc29VQmx3CmtlbnNxb3czaGlLbVN5ajZRYndneWNSVEV2Qm9oeDYvdkJXNEtwRlpSaVo1T2ZDRDV2QlRneWFBakh4K0RmWXYKNnJDZmlHdHVITEJ0MTlmS01BekZIaXQ0WTFsRk81dHpjTUlCemhIdGN0VE5wN21IVS9sZkVrVGJHYVJYMUt3QQp6MWlQU2lDMUJvMlVQczRudVl4V1l4SmlYRFhaV2wrOWFWS2doSlpacmJKUjFyL0c5MkZUSHBzSXVhMGZnMDNVCjliWUhEWWNOM3Z1S25YcEluUk9MRm1oY0grOWd4OXdZRkxJT0IvS2tkUm93K2NMclk0NllMNVR2QUFYWG5maEIKc3kvc0xRcDhqaFY0TTg0VEpLS1g2YmN3ZUVsSzVDakJpVmE4MDNuSFp0SUd6c2N5UW9meDA1ejFWWHVIK1ZEcwova1hmTW1FenZ1RUdCK2t3MW9vbDJPczB2Q3FsV2hoQzlSTXB4KzRrbGlUbkhrbE1hcWpFc2hXQlloVVV3aG0rCkFqejMzWVUxTndtZXpDaENEYkxuQnkxeEFZR1c5TWtGUzRiYmZWSnN6cTRYYjdFYlg1K1NBU2N6c2RTcGZvc3UKL0Jxa2Y1K0xzc09vQVFqWER5cUJsb3VhcGptNDJZNk5peDl3ZGQ4NTdOMTB1cysvakd1ckt4bFJ1OVFsWE4rQwp3Q2VSUzZpemlPbXd4SVlGV25nSWZncGxaMDNVdWxENStDak1NQkV1eXZ3WnRnZUZMUkxJTnlmcGFvdGRBR3ExCldsVXRRVG9iaWFkT3dWQ29TV0M4SkkwbEUwSEVMYlIzNHJQZ0Mrck1BeTB2clpkd0FyKzd1aWpzWk5Md2dkQVYKT2luRnppajJ0bHlqN0E3cG1QK0tQTnNmYlZnbzJsMzR2SUp5UjhOR0docFk1Rkt4YnVYZHpBZ0szb0xFTlRIWQo3WGtPbWhqR2djdE4zSXJsVmZpekV5bDJkWVhCNndUVVZOa0lGVzlPeUE3RQotLS0tLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQo=
|
119 |
|
120 | ## Controllers
|
121 |
|
122 | Controllers inputs are mapped to semantically meaningful buttons and sticks:
|
123 |
|
124 | ### Buttons
|
125 |
|
126 | * Trigger
|
127 | * Grip
|
128 | * Menu
|
129 | * Left
|
130 | * Right
|
131 | * Up
|
132 | * Down
|
133 |
|
134 | ### Sticks
|
135 |
|
136 | * Translate
|
137 | * Rotate
|
138 |
|
139 | ## Tools
|
140 |
|
141 | Terms:
|
142 |
|
143 | * Point - Entity is pointed by laser pointer.
|
144 | * Hover - Entity is intersected or pointed by controller.
|
145 |
|
146 | ### Movement Tool
|
147 |
|
148 | ### Entity Tool
|
149 |
|
150 | * Grip Down - If entity hovered then hold else spawn and hold.
|
151 | * Grip Up - Release hold entity.
|
152 | * Trigger Down - Start laser pointer.
|
153 | * Trigger Up - Stop laser pointer.
|
154 |
|
155 | * Point - Increasing haptic feedback when entity is pointed until deleted after 3 seconds.
|
156 |
|
157 | ## Publish package
|
158 |
|
159 | ### First publish
|
160 |
|
161 | ---
|
162 | npm publish --access public
|
163 | ---
|
164 |
|
165 | ### Update
|
166 |
|
167 | ---
|
168 | npm version patch
|
169 | npm publish
|
170 | ---
|