Explain the query is trying to do
[gitter.git] / test / request-web-tests / utils / register-test-synapse-user.js
bloba10c7d5af38b2b57d23d00538c9faf67377befb4
1 'use strict';
3 const assert = require('assert');
4 const util = require('util');
5 const crypto = require('crypto');
6 const request = util.promisify(require('request'));
7 const urlJoin = require('url-join');
9 const env = require('gitter-web-env');
10 const config = env.config;
12 const homeserverUrl = config.get('matrix:bridge:homeserverUrl');
13 assert(homeserverUrl, 'matrix:bridge:homeserverUrl must be defined');
14 const testSynapseRegistrationSharedSecret = config.get(
15   'matrix:bridge:testSynapseRegistrationSharedSecret'
17 assert(
18   testSynapseRegistrationSharedSecret,
19   'matrix:bridge:testSynapseRegistrationSharedSecret must be defined'
22 // This is based on https://github.com/matrix-org/synapse/blob/4d624f467a6c252b9295e46b8b83f36b1f0d3d45/synapse/_scripts/register_new_matrix_user.py#L27-L91
23 // Also see https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.rst#create-or-modify-account
24 async function registerTestSynapseUser(localPart) {
25   const registerUrl = urlJoin(homeserverUrl, `/_synapse/admin/v1/register`);
27   const registerGetRes = await request({
28     method: 'GET',
29     uri: registerUrl,
30     json: true,
31     headers: {
32       'Content-Type': 'application/json'
33     },
34     body: {}
35   });
37   if (registerGetRes.statusCode !== 200) {
38     throw new Error(
39       `registerTestSynapseUser failed to fetch nonce, localPart=${localPart} statusCode=${
40         registerGetRes.statusCode
41       }, body=${JSON.stringify(registerGetRes.body)}`
42     );
43   }
45   const nonce = registerGetRes.body.nonce;
46   assert(nonce);
48   const admin = false;
49   const password = crypto.randomBytes(20).toString('hex');
51   let mac = crypto
52     .createHmac('sha1', testSynapseRegistrationSharedSecret)
53     .update(nonce)
54     .update('\x00')
55     .update(localPart)
56     .update('\x00')
57     .update(password)
58     .update('\x00')
59     .update(admin ? 'admin' : 'notadmin')
60     //.update("\x00")
61     //.update(toUtf8(user_type))
62     .digest('hex');
64   const userCreateRes = await request({
65     method: 'POST',
66     uri: registerUrl,
67     json: true,
68     headers: {
69       'Content-Type': 'application/json'
70     },
71     body: {
72       nonce: nonce,
73       username: localPart,
74       password: password,
75       mac: mac,
76       admin: false
77       //user_type: user_type
78     }
79   });
81   if (userCreateRes.statusCode < 200 || userCreateRes.statusCode >= 300) {
82     throw new Error(
83       `registerTestSynapseUser failed to create user, localPart=${localPart} statusCode=${
84         userCreateRes.statusCode
85       }, body=${JSON.stringify(userCreateRes.body)}`
86     );
87   }
89   return userCreateRes.body;
92 module.exports = registerTestSynapseUser;