feat(home): get user name from vscode and set user name into vscode
This commit is contained in:
		
							
								
								
									
										20
									
								
								src/home.ts
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/home.ts
									
									
									
									
									
								
							@@ -60,8 +60,6 @@ export default class DSHome {
 | 
			
		||||
            }
 | 
			
		||||
          case 'setUserToken':
 | 
			
		||||
            this.user.setUserTokenToLocal(data.userToken)
 | 
			
		||||
            console.log(data.userToken)
 | 
			
		||||
            console.log(this.user.getUserTokenFromLocal()) 
 | 
			
		||||
            if (data.userToken === this.user.getUserTokenFromLocal()) {
 | 
			
		||||
              panel.webview.postMessage({ command: 'setUserToken', data: {ok: true}})
 | 
			
		||||
              break;
 | 
			
		||||
@@ -69,6 +67,24 @@ export default class DSHome {
 | 
			
		||||
              panel.webview.postMessage({ command: 'setUserToken', data: {ok: false}})
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          case 'getUsername':
 | 
			
		||||
            const username = this.user.getUsernameFromLocal()
 | 
			
		||||
            if (username === undefined) {
 | 
			
		||||
              panel.webview.postMessage({command: 'getUsername', data: {username: ''}})
 | 
			
		||||
              break;
 | 
			
		||||
            } else {
 | 
			
		||||
              panel.webview.postMessage({command: 'getUsername', data: {username: username}})
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          case 'setUsername':
 | 
			
		||||
            this.user.setUsernameToLocal(data.username);
 | 
			
		||||
            if (data.username === this.user.getUsernameFromLocal()) {
 | 
			
		||||
              panel.webview.postMessage({command: 'setUsername', data: {ok: true}});
 | 
			
		||||
              break;
 | 
			
		||||
            } else {
 | 
			
		||||
              panel.webview.postMessage({command: 'setUsername', data: {ok: false}});
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          case 'getDefaultPublicKey':
 | 
			
		||||
            var defaultPublicKey;
 | 
			
		||||
            if (utils.existDefaultPublicKey()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -196,6 +196,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
        // Global variables
 | 
			
		||||
        DEVSTAR_HOME = "https://devstar.cn"
 | 
			
		||||
        var USERTOKEN = null
 | 
			
		||||
        var USERNAME = null
 | 
			
		||||
        var REPOLIST = []
 | 
			
		||||
        var PROJECTLIST = []
 | 
			
		||||
 | 
			
		||||
@@ -216,7 +217,15 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
                console.error("Failed to get user token from vscode: ", error)
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            if (USERTOKEN) {
 | 
			
		||||
            await getUsernameFromVSCode()
 | 
			
		||||
            .then(async username => {
 | 
			
		||||
                USERNAME = username
 | 
			
		||||
            })
 | 
			
		||||
            .catch(error => {
 | 
			
		||||
                console.error('Failed to get user name from vscode: ', error)
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            if (USERTOKEN && USERNAME) {
 | 
			
		||||
                loadPageModules()
 | 
			
		||||
            } else {
 | 
			
		||||
                // TODO : do nothing or remind user to login
 | 
			
		||||
@@ -245,6 +254,23 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        async function getUsernameFromVSCode() {
 | 
			
		||||
            return new Promise(async (resolve, reject) => {
 | 
			
		||||
                await communicateVSCodeByWebview('getUsername', null)
 | 
			
		||||
                .then(async data=> {
 | 
			
		||||
                    const username = data.username
 | 
			
		||||
                    if (username === undefined) {
 | 
			
		||||
                        reject('username is undefined')
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    resolve(username)
 | 
			
		||||
                })
 | 
			
		||||
                .catch(error => {
 | 
			
		||||
                    reject(error)
 | 
			
		||||
                })
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function verifyToken(token) {
 | 
			
		||||
            return new Promise((resolve, reject) => {
 | 
			
		||||
                fetch(DEVSTAR_HOME + '/api/devcontainer/user', {
 | 
			
		||||
@@ -332,6 +358,8 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
                .catch(error => {
 | 
			
		||||
                    console.error('Error in setting user token to vscode global state:', error)
 | 
			
		||||
                })
 | 
			
		||||
                setUsernameToVSCode(username)
 | 
			
		||||
 | 
			
		||||
                closeLoginModal()
 | 
			
		||||
            })
 | 
			
		||||
            .catch(error => {
 | 
			
		||||
@@ -351,7 +379,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            return name 
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function logout() {
 | 
			
		||||
        async function logout() {
 | 
			
		||||
            // remove token from global variable and vscode global state
 | 
			
		||||
            USERTOKEN = null
 | 
			
		||||
            communicateVSCodeByWebview('setUserToken', { userToken: ''})
 | 
			
		||||
@@ -365,9 +393,30 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            .catch(error => {
 | 
			
		||||
                console.error('Error in removing user token from vscode global state:', error)
 | 
			
		||||
            })
 | 
			
		||||
            await setUsernameToVSCode('')
 | 
			
		||||
 | 
			
		||||
            location.reload()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        async function setUsernameToVSCode(username) {
 | 
			
		||||
            var removeUsername = false;
 | 
			
		||||
            if (username == '') {
 | 
			
		||||
                removeUsername = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await communicateVSCodeByWebview('setUsername', {username: username})
 | 
			
		||||
            .then(result => {
 | 
			
		||||
                if (result.ok) {
 | 
			
		||||
                    console.log(removeUsername ? 'User name has been removed from vscode': 'User name has been stored in vscode')
 | 
			
		||||
                } else {
 | 
			
		||||
                    console.error(removeUsername ? 'Failed to removing user name from vscode': 'Failed to store user name in vscode')
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
            .catch(error => {
 | 
			
		||||
               console.error("Error happened when setting user name: ", error) 
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // ===================================== Repo ===========================
 | 
			
		||||
        function loadRepositories() {
 | 
			
		||||
            // clear old data
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user