55
66import * as sinon from 'sinon'
77import * as vscode from 'vscode'
8+ import * as jose from 'jose'
89import { LanguageClientAuth , SsoLogin , IamLogin } from '../../auth/auth2'
910import { LanguageClient } from 'vscode-languageclient'
1011import {
@@ -40,7 +41,7 @@ const tokenId = 'test-token'
4041describe ( 'LanguageClientAuth' , ( ) => {
4142 let client : sinon . SinonStubbedInstance < LanguageClient >
4243 let auth : LanguageClientAuth
43- const encryptionKey = Buffer . from ( 'test-key' )
44+ const encryptionKey = Buffer . from ( 'test-key' . padEnd ( 32 , '0' ) )
4445 let useDeviceFlowStub : sinon . SinonStub
4546
4647 beforeEach ( ( ) => {
@@ -53,6 +54,14 @@ describe('LanguageClientAuth', () => {
5354 sinon . restore ( )
5455 } )
5556
57+ async function encrypt < T > ( request : T ) : Promise < string > {
58+ const payload = new TextEncoder ( ) . encode ( JSON . stringify ( request ) )
59+ const encrypted = await new jose . CompactEncrypt ( payload )
60+ . setProtectedHeader ( { alg : 'dir' , enc : 'A256GCM' } )
61+ . encrypt ( encryptionKey )
62+ return encrypted
63+ }
64+
5665 describe ( 'getSsoToken' , ( ) => {
5766 async function testGetSsoToken ( useDeviceFlow : boolean ) {
5867 const tokenSource = {
@@ -61,6 +70,16 @@ describe('LanguageClientAuth', () => {
6170 }
6271 useDeviceFlowStub . returns ( useDeviceFlow ? true : false )
6372
73+ client . sendRequest . resolves ( {
74+ ssoToken : {
75+ id : 'my-id' ,
76+ accessToken : 'my-access-token' ,
77+ } ,
78+ updateCredentialsParams : {
79+ data : 'my-data' ,
80+ } ,
81+ } satisfies GetSsoTokenResult )
82+
6483 await auth . getSsoToken ( tokenSource , true )
6584
6685 sinon . assert . calledOnce ( client . sendRequest )
@@ -95,9 +114,30 @@ describe('LanguageClientAuth', () => {
95114
96115 sinon . assert . calledOnce ( client . sendRequest )
97116 const requestParams = client . sendRequest . firstCall . args [ 1 ]
98- sinon . assert . match ( requestParams . profile , {
99- name : profileName ,
100- } )
117+ sinon . assert . match (
118+ requestParams . profile ,
119+ await encrypt ( {
120+ profile : {
121+ kinds : [ ProfileKind . SsoTokenProfile ] ,
122+ name : profileName ,
123+ settings : {
124+ region : region ,
125+ sso_session : profileName ,
126+ aws_access_key_id : '' ,
127+ aws_secret_access_key : '' ,
128+ role_arn : '' ,
129+ } ,
130+ } ,
131+ ssoSession : {
132+ name : profileName ,
133+ settings : {
134+ sso_region : region ,
135+ sso_start_url : startUrl ,
136+ sso_registration_scopes : [ 'scope1' ] ,
137+ } ,
138+ } ,
139+ } )
140+ )
101141 sinon . assert . match ( requestParams . ssoSession . settings , {
102142 sso_region : region ,
103143 } )
@@ -116,13 +156,20 @@ describe('LanguageClientAuth', () => {
116156 name : profileName ,
117157 kinds : [ ProfileKind . IamCredentialsProfile ] ,
118158 } )
119- sinon . assert . match ( requestParams . profile . settings , {
120- aws_access_key_id : 'myAccessKey' ,
121- aws_secret_access_key : 'mySecretKey' ,
122- aws_session_token : 'mySessionToken' ,
123- role_arn : '' ,
124- source_profile : '' ,
125- } )
159+ sinon . assert . match (
160+ requestParams . profile . settings ,
161+ await encrypt ( {
162+ kinds : [ ProfileKind . IamCredentialProcessProfile ] ,
163+ name : profileName ,
164+ settings : {
165+ aws_access_key_id : 'myAccessKey' ,
166+ aws_secret_access_key : 'mySecretKey' ,
167+ aws_session_token : 'mySessionToken' ,
168+ role_arn : '' ,
169+ source_profile : '' ,
170+ } ,
171+ } )
172+ )
126173 } )
127174 } )
128175
@@ -213,6 +260,21 @@ describe('LanguageClientAuth', () => {
213260
214261 describe ( 'getIamCredential' , ( ) => {
215262 it ( 'sends correct request parameters' , async ( ) => {
263+ client . sendRequest . resolves ( {
264+ credential : {
265+ id : 'my-id' ,
266+ kinds : [ ] ,
267+ credentials : {
268+ accessKeyId : 'my-access-key' ,
269+ secretAccessKey : 'my-secret-key' ,
270+ sessionToken : 'my-session-token' ,
271+ } ,
272+ } ,
273+ updateCredentialsParams : {
274+ data : 'my-data' ,
275+ } ,
276+ } satisfies GetIamCredentialResult )
277+
216278 await auth . getIamCredential ( profileName , true )
217279
218280 sinon . assert . calledOnce ( client . sendRequest )
0 commit comments