Przeglądaj źródła

added user email in sidebar

sunguroku 5 lat temu
rodzic
commit
5509c043d3

+ 2 - 2
dashboard/src/main/Login.tsx

@@ -43,7 +43,7 @@ export default class Login extends Component<PropsType, StateType> {
   handleLogin = (): void => {
     let { email, password } = this.state;
     let { authenticate } = this.props;
-    let { setCurrentError, setUserId } = this.context;
+    let { setCurrentError, setUser } = this.context;
 
     // Check for valid input
     if (!emailRegex.test(email)) {
@@ -55,7 +55,7 @@ export default class Login extends Component<PropsType, StateType> {
         password: password
       }, {}, (err: any, res: any) => {
         // TODO: case and set credential error
-        setUserId(res?.data?.id)
+        setUser(res?.data?.id, res?.data?.email)
         err ? setCurrentError(err.response.data.errors[0]) : authenticate();
       });
     }

+ 2 - 2
dashboard/src/main/Main.tsx

@@ -30,14 +30,14 @@ export default class Main extends Component<PropsType, StateType> {
   }
 
   componentDidMount() {
-    let { setUserId } = this.context;
+    let { setUser } = this.context;
     api.checkAuth('', {}, {}, (err: any, res: any) => {      
       if (err && err.response.status == 403) {
         this.setState({ isLoggedIn: false, loading: false })
       }
 
       if (res && res.data) {
-        setUserId(res.data.id);
+        setUser(res?.data?.id, res?.data?.email);
         this.setState({ isLoggedIn: true, initialized: true, loading: false });
       } else {
         this.setState({ isLoggedIn: false, loading: false })

+ 2 - 2
dashboard/src/main/Register.tsx

@@ -42,7 +42,7 @@ export default class Register extends Component<PropsType, StateType> {
   handleRegister = (): void => {
     let { email, password, confirmPassword } = this.state;
     let { authenticate } = this.props;
-    let { setCurrentError, setUserId } = this.context;
+    let { setCurrentError, setUser } = this.context;
 
     if (!emailRegex.test(email)) {
       this.setState({ emailError: true });
@@ -60,7 +60,7 @@ export default class Register extends Component<PropsType, StateType> {
         email: email,
         password: password
       }, {}, (err: any, res: any) => {
-        setUserId(res?.data?.id)
+        setUser(res?.data?.id, res?.data?.email)
         err ? setCurrentError(err.response.data.errors[0]) : authenticate();
       });
     } 

+ 8 - 8
dashboard/src/main/home/modals/ClusterConfigModal.tsx

@@ -36,10 +36,10 @@ export default class ClusterConfigModal extends Component<PropsType, StateType>
   };
   
   updateChecklist = () => {
-    let { setCurrentError, userId } = this.context;
+    let { setCurrentError, user } = this.context;
 
     // Parse kubeconfig to retrieve all possible clusters
-    api.getContexts('<token>', {}, { id: userId }, (err: any, res: any) => {
+    api.getContexts('<token>', {}, { id: user.userId }, (err: any, res: any) => {
       if (err) {
         // setCurrentError(JSON.stringify(err));
       } else {
@@ -49,13 +49,13 @@ export default class ClusterConfigModal extends Component<PropsType, StateType>
   }
 
   componentDidMount() {
-    let { setCurrentError, userId, currentModalData } = this.context;
+    let { setCurrentError, user, currentModalData } = this.context;
 
     if (currentModalData && currentModalData.currentTab) {
       this.setState({ currentTab: 'select' });
     }
 
-    api.getUser('<token>', {}, { id: userId }, (err: any, res: any) => {
+    api.getUser('<token>', {}, { id: user.userId }, (err: any, res: any) => {
       if (err) {
         // setCurrentError(JSON.stringify(err));
       } else if (res.data.rawKubeConfig !== '') {
@@ -101,13 +101,13 @@ export default class ClusterConfigModal extends Component<PropsType, StateType>
 
   handleSaveKubeconfig = () => {
     let { rawKubeconfig } = this.state;
-    let { userId } = this.context;
+    let { user } = this.context;
 
     this.setState({ saveKubeconfigStatus: 'loading' });
     api.updateUser(
       '<token>',
       { rawKubeConfig: rawKubeconfig },
-      { id: userId },
+      { id: user.userId },
       (err: any, res: any) => {
         if (err) {
           this.setState({ saveKubeconfigStatus: 'error' });
@@ -126,7 +126,7 @@ export default class ClusterConfigModal extends Component<PropsType, StateType>
 
   handleSaveSelected = () => {
     let { kubeContexts } = this.state;
-    let { userId } = this.context;
+    let { user } = this.context;
 
     this.setState({ saveSelectedStatus: 'loading' });
     let allowedContexts: string[] = [];
@@ -139,7 +139,7 @@ export default class ClusterConfigModal extends Component<PropsType, StateType>
     api.updateUser(
       '<token>',
       { allowedContexts },
-      { id: userId },
+      { id: user.userId },
       (err: any, res: any) => {
         if (err) {
           this.setState({ saveSelectedStatus: 'error' });

+ 2 - 2
dashboard/src/main/home/sidebar/ClusterSection.tsx

@@ -30,10 +30,10 @@ export default class ClusterSection extends Component<PropsType, StateType> {
   };
 
   updateClusters = () => {
-    let { setCurrentError, userId, setCurrentCluster } = this.context;
+    let { setCurrentError, user, setCurrentCluster } = this.context;
 
     // TODO: query with selected filter once implemented
-    api.getContexts('<token>', {}, { id: userId }, (err: any, res: any) => {
+    api.getContexts('<token>', {}, { id: user.userId }, (err: any, res: any) => {
       if (err) {
 
         // Assume intializing if no contexts

+ 1 - 1
dashboard/src/main/home/sidebar/Sidebar.tsx

@@ -117,7 +117,7 @@ export default class Sidebar extends Component<PropsType, StateType> {
             <RingWrapper>
               <UserIcon src={gradient} />
             </RingWrapper>
-            <UserName>bob_ross</UserName>
+            <UserName>{this.context.user.email}</UserName>
           </UserSection>
 
           <SidebarLabel>Current Cluster</SidebarLabel>

+ 3 - 3
dashboard/src/shared/Context.tsx

@@ -40,9 +40,9 @@ class ContextProvider extends Component {
     setCurrentCluster: (currentCluster: string): void => {
       this.setState({ currentCluster });
     },
-    userId: null as number | null,
-    setUserId: (userId: number): void => {
-      this.setState({ userId });
+    user: null as any,
+    setUser: (userId: number, email: string): void => {
+      this.setState({ user: {userId, email} });
     },
     devOpsMode: true,
     setDevOpsMode: (devOpsMode: boolean): void => {

+ 11 - 6
server/api/user_handler.go

@@ -48,11 +48,12 @@ func (app *App) HandleCreateUser(w http.ResponseWriter, r *http.Request) {
 		app.logger.Info().Msgf("New user created: %d", user.ID)
 		session.Values["authenticated"] = true
 		session.Values["user_id"] = user.ID
+		session.Values["email"] = user.Email
 		session.Save(r, w)
 
 		w.WriteHeader(http.StatusCreated)
 
-		if err := app.sendUserID(w, user.ID); err != nil {
+		if err := app.sendUser(w, user.ID, user.Email); err != nil {
 			app.handleErrorFormDecoding(err, ErrUserDecode, w)
 			return
 		}
@@ -65,13 +66,14 @@ func (app *App) HandleAuthCheck(w http.ResponseWriter, r *http.Request) {
 
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
 	}
 
 	userID, _ := session.Values["user_id"].(uint)
-
+	email, _ := session.Values["email"].(string)
 	w.WriteHeader(http.StatusOK)
 
-	if err := app.sendUserID(w, userID); err != nil {
+	if err := app.sendUser(w, userID, email); err != nil {
 		app.handleErrorFormDecoding(err, ErrUserDecode, w)
 		return
 	}
@@ -116,13 +118,14 @@ func (app *App) HandleLoginUser(w http.ResponseWriter, r *http.Request) {
 	// Set user as authenticated
 	session.Values["authenticated"] = true
 	session.Values["user_id"] = storedUser.ID
+	session.Values["email"] = storedUser.Email
 	if err := session.Save(r, w); err != nil {
 		app.logger.Warn().Err(err)
 	}
 
 	w.WriteHeader(http.StatusOK)
 
-	if err := app.sendUserID(w, storedUser.ID); err != nil {
+	if err := app.sendUser(w, storedUser.ID, storedUser.Email); err != nil {
 		app.handleErrorFormDecoding(err, ErrUserDecode, w)
 		return
 	}
@@ -138,6 +141,7 @@ func (app *App) HandleLogoutUser(w http.ResponseWriter, r *http.Request) {
 
 	session.Values["authenticated"] = false
 	session.Values["user_id"] = nil
+	session.Values["email"] = nil
 	session.Save(r, w)
 	w.WriteHeader(http.StatusOK)
 }
@@ -340,9 +344,10 @@ func doesUserExist(repo *repository.Repository, user *models.User) *HTTPError {
 	return nil
 }
 
-func (app *App) sendUserID(w http.ResponseWriter, userID uint) error {
+func (app *App) sendUser(w http.ResponseWriter, userID uint, email string) error {
 	resUser := &models.UserExternal{
-		ID: userID,
+		ID:    userID,
+		Email: email,
 	}
 	if err := json.NewEncoder(w).Encode(resUser); err != nil {
 		return err