mirror of
https://github.com/gravitational/teleport
synced 2024-10-20 17:23:22 +00:00
SharedDirectoryMoveRequest
(#1045)
This commit is contained in:
parent
056dd7cd8f
commit
467c8ebd7c
|
@ -135,6 +135,9 @@ export default class Client extends EventEmitterWebAuthnSender {
|
|||
case MessageType.SHARED_DIRECTORY_WRITE_REQUEST:
|
||||
this.handleSharedDirectoryWriteRequest(buffer);
|
||||
break;
|
||||
case MessageType.SHARED_DIRECTORY_MOVE_REQUEST:
|
||||
this.handleSharedDirectoryMoveRequest(buffer);
|
||||
break;
|
||||
case MessageType.SHARED_DIRECTORY_LIST_REQUEST:
|
||||
this.handleSharedDirectoryListRequest(buffer);
|
||||
break;
|
||||
|
@ -301,6 +304,14 @@ export default class Client extends EventEmitterWebAuthnSender {
|
|||
}
|
||||
}
|
||||
|
||||
handleSharedDirectoryMoveRequest(buffer: ArrayBuffer) {
|
||||
const req = this.codec.decodeSharedDirectoryMoveRequest(buffer);
|
||||
// TODO(isaiah): delete debug logs
|
||||
this.logger.debug('Received SharedDirectoryMoveRequest:');
|
||||
this.logger.debug(req);
|
||||
// TODO(isaiah): here's where we'll respond with a SharedDirectoryMoveResponse
|
||||
}
|
||||
|
||||
async handleSharedDirectoryListRequest(buffer: ArrayBuffer) {
|
||||
try {
|
||||
const req = this.codec.decodeSharedDirectoryListRequest(buffer);
|
||||
|
@ -388,13 +399,19 @@ export default class Client extends EventEmitterWebAuthnSender {
|
|||
}
|
||||
|
||||
sendSharedDirectoryAnnounce() {
|
||||
let name: string;
|
||||
try {
|
||||
name = this.sdManager.getName();
|
||||
} catch (e) {
|
||||
this.handleError(e);
|
||||
}
|
||||
this.send(
|
||||
this.codec.encodeSharedDirectoryAnnounce({
|
||||
completionId: 0, // This is always the first request.
|
||||
// Hardcode directoryId for now since we only support sharing 1 directory.
|
||||
// We're using 2 because the smartcard device is hardcoded to 1 in the backend.
|
||||
directoryId: 2,
|
||||
name: this.sdManager.getName(),
|
||||
name,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ export enum MessageType {
|
|||
SHARED_DIRECTORY_READ_RESPONSE = 20,
|
||||
SHARED_DIRECTORY_WRITE_REQUEST = 21,
|
||||
SHARED_DIRECTORY_WRITE_RESPONSE = 22,
|
||||
SHARED_DIRECTORY_MOVE_REQUEST = 23,
|
||||
SHARED_DIRECTORY_LIST_REQUEST = 25,
|
||||
SHARED_DIRECTORY_LIST_RESPONSE = 26,
|
||||
__LAST, // utility value
|
||||
|
@ -157,6 +158,16 @@ export type SharedDirectoryWriteResponse = {
|
|||
bytesWritten: number;
|
||||
};
|
||||
|
||||
// | message type (23) | completion_id uint32 | directory_id uint32 | original_path_length uint32 | original_path []byte | new_path_length uint32 | new_path []byte |
|
||||
export type SharedDirectoryMoveRequest = {
|
||||
completionId: number;
|
||||
directoryId: number;
|
||||
originalPathLength: number;
|
||||
originalPath: string;
|
||||
newPathLength: number;
|
||||
newPath: string;
|
||||
};
|
||||
|
||||
// | message type (25) | completion_id uint32 | directory_id uint32 | path_length uint32 | path []byte |
|
||||
export type SharedDirectoryListRequest = {
|
||||
completionId: number;
|
||||
|
@ -677,7 +688,7 @@ export default class Codec {
|
|||
// decodeMfaChallenge decodes a raw tdp MFA challenge message and returns it as a string (of a json).
|
||||
// | message type (10) | mfa_type byte | message_length uint32 | json []byte
|
||||
decodeMfaJson(buffer: ArrayBuffer): MfaJson {
|
||||
let dv = new DataView(buffer);
|
||||
const dv = new DataView(buffer);
|
||||
let offset = 0;
|
||||
offset += byteLength; // eat message type
|
||||
const mfaType = String.fromCharCode(dv.getUint8(offset));
|
||||
|
@ -771,19 +782,19 @@ export default class Codec {
|
|||
const dv = new DataView(buffer);
|
||||
let bufOffset = 0;
|
||||
bufOffset += byteLength; // eat message type
|
||||
let completionId = dv.getUint32(bufOffset);
|
||||
const completionId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat completion_id
|
||||
let directoryId = dv.getUint32(bufOffset);
|
||||
const directoryId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat directory_id
|
||||
let pathLength = dv.getUint32(bufOffset);
|
||||
const pathLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat path_length
|
||||
let path = this.decoder.decode(
|
||||
const path = this.decoder.decode(
|
||||
new Uint8Array(buffer.slice(bufOffset, bufOffset + pathLength))
|
||||
);
|
||||
bufOffset += pathLength; // eat path
|
||||
let offset = dv.getBigUint64(bufOffset);
|
||||
const offset = dv.getBigUint64(bufOffset);
|
||||
bufOffset += uint64Length; // eat offset
|
||||
let length = dv.getUint32(bufOffset);
|
||||
const length = dv.getUint32(bufOffset);
|
||||
|
||||
return {
|
||||
completionId,
|
||||
|
@ -799,24 +810,23 @@ export default class Codec {
|
|||
decodeSharedDirectoryWriteRequest(
|
||||
buffer: ArrayBuffer
|
||||
): SharedDirectoryWriteRequest {
|
||||
let dv = new DataView(buffer);
|
||||
let bufOffset = byteLength;
|
||||
|
||||
let completionId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length;
|
||||
let directoryId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length;
|
||||
let offset = dv.getBigUint64(bufOffset);
|
||||
bufOffset += uint64Length;
|
||||
let pathLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length;
|
||||
let path = this.decoder.decode(
|
||||
const dv = new DataView(buffer);
|
||||
let bufOffset = byteLength; // eat message type
|
||||
const completionId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat completion_id
|
||||
const directoryId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat directory_id
|
||||
const offset = dv.getBigUint64(bufOffset);
|
||||
bufOffset += uint64Length; // eat offset
|
||||
const pathLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat path_length
|
||||
const path = this.decoder.decode(
|
||||
new Uint8Array(buffer.slice(bufOffset, bufOffset + pathLength))
|
||||
);
|
||||
bufOffset += pathLength;
|
||||
let writeDataLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length;
|
||||
let writeData = new Uint8Array(
|
||||
bufOffset += pathLength; // eat path
|
||||
const writeDataLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat write_data_length
|
||||
const writeData = new Uint8Array(
|
||||
buffer.slice(bufOffset, bufOffset + writeDataLength)
|
||||
);
|
||||
|
||||
|
@ -830,6 +840,38 @@ export default class Codec {
|
|||
};
|
||||
}
|
||||
|
||||
// | message type (23) | completion_id uint32 | directory_id uint32 | original_path_length uint32 | original_path []byte | new_path_length uint32 | new_path []byte |
|
||||
decodeSharedDirectoryMoveRequest(
|
||||
buffer: ArrayBuffer
|
||||
): SharedDirectoryMoveRequest {
|
||||
const dv = new DataView(buffer);
|
||||
let bufOffset = byteLength; // eat message type
|
||||
const completionId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat completion_id
|
||||
const directoryId = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat directory_id
|
||||
const originalPathLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat original_path_length
|
||||
const originalPath = this.decoder.decode(
|
||||
new Uint8Array(buffer.slice(bufOffset, bufOffset + originalPathLength))
|
||||
);
|
||||
bufOffset += originalPathLength; // eat original_path
|
||||
const newPathLength = dv.getUint32(bufOffset);
|
||||
bufOffset += uint32Length; // eat new_path_length
|
||||
const newPath = this.decoder.decode(
|
||||
new Uint8Array(buffer.slice(bufOffset, bufOffset + newPathLength))
|
||||
);
|
||||
|
||||
return {
|
||||
completionId,
|
||||
directoryId,
|
||||
originalPathLength,
|
||||
originalPath,
|
||||
newPathLength,
|
||||
newPath,
|
||||
};
|
||||
}
|
||||
|
||||
// | message type (25) | completion_id uint32 | directory_id uint32 | path_length uint32 | path []byte |
|
||||
decodeSharedDirectoryListRequest(
|
||||
buffer: ArrayBuffer
|
||||
|
|
|
@ -10412,22 +10412,6 @@ node-gyp@8.4.1:
|
|||
tar "^6.1.2"
|
||||
which "^2.0.2"
|
||||
|
||||
node-gyp@8.4.1:
|
||||
version "8.4.1"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
|
||||
integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.6"
|
||||
make-fetch-happen "^9.1.0"
|
||||
nopt "^5.0.0"
|
||||
npmlog "^6.0.0"
|
||||
rimraf "^3.0.2"
|
||||
semver "^7.3.5"
|
||||
tar "^6.1.2"
|
||||
which "^2.0.2"
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
|
||||
|
|
Loading…
Reference in a new issue