aigems commited on
Commit
b853198
·
1 Parent(s): 3563586
Files changed (1) hide show
  1. public/js/main.js +55 -4
public/js/main.js CHANGED
@@ -18,7 +18,7 @@ async function executeCommand() {
18
  output.textContent = '正在执行命令...';
19
 
20
  try {
21
- const response = await fetch('/api/execute', {
22
  method: 'POST',
23
  headers: {
24
  'Content-Type': 'application/json',
@@ -26,9 +26,29 @@ async function executeCommand() {
26
  },
27
  body: JSON.stringify({ command })
28
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  if (!response.ok) {
30
  throw new Error(`HTTP error! status: ${response.status}`);
31
  }
 
32
  const data = await response.json();
33
  output.textContent = data.output || data.error || '命令执行成功,但没有输出。';
34
  commandInput.value = '';
@@ -36,9 +56,11 @@ async function executeCommand() {
36
  } catch (error) {
37
  console.error('执行命令时出错:', error);
38
  output.textContent = '错误: ' + (error.message || '未知错误');
39
- if (error.message.includes('403')) {
40
- alert('访问被拒绝。请检查您的权限或重新登录。');
41
  localStorage.removeItem('token');
 
 
42
  checkLoginStatus();
43
  }
44
  } finally {
@@ -86,6 +108,8 @@ async function login() {
86
  const data = await response.json();
87
  if (response.ok) {
88
  localStorage.setItem('token', data.token);
 
 
89
  document.getElementById('loginForm').style.display = 'none';
90
  document.getElementById('commandInterface').style.display = 'block';
91
  loadCommandHistory();
@@ -97,6 +121,34 @@ async function login() {
97
  }
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  document.getElementById('loginButton').addEventListener('click', login);
101
 
102
  loadCommandHistory();
@@ -112,5 +164,4 @@ function checkLoginStatus() {
112
 
113
  // 在页面加载时调用此函数
114
  window.addEventListener('load', checkLoginStatus);
115
-
116
  document.getElementById('executeButton').addEventListener('click', executeCommand);
 
18
  output.textContent = '正在执行命令...';
19
 
20
  try {
21
+ let response = await fetch('/api/execute', {
22
  method: 'POST',
23
  headers: {
24
  'Content-Type': 'application/json',
 
26
  },
27
  body: JSON.stringify({ command })
28
  });
29
+
30
+ if (response.status === 403) {
31
+ // Token 可能已过期,尝试刷新
32
+ const refreshed = await refreshToken();
33
+ if (refreshed) {
34
+ // 重试请求
35
+ response = await fetch('/api/execute', {
36
+ method: 'POST',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ 'Authorization': `Bearer ${localStorage.getItem('token')}`
40
+ },
41
+ body: JSON.stringify({ command })
42
+ });
43
+ } else {
44
+ throw new Error('Token 刷新失败');
45
+ }
46
+ }
47
+
48
  if (!response.ok) {
49
  throw new Error(`HTTP error! status: ${response.status}`);
50
  }
51
+
52
  const data = await response.json();
53
  output.textContent = data.output || data.error || '命令执行成功,但没有输出。';
54
  commandInput.value = '';
 
56
  } catch (error) {
57
  console.error('执行命令时出错:', error);
58
  output.textContent = '错误: ' + (error.message || '未知错误');
59
+ if (error.message.includes('Token 刷新失败')) {
60
+ alert('访问被拒绝。请重新登录。');
61
  localStorage.removeItem('token');
62
+ localStorage.removeItem('username');
63
+ localStorage.removeItem('password');
64
  checkLoginStatus();
65
  }
66
  } finally {
 
108
  const data = await response.json();
109
  if (response.ok) {
110
  localStorage.setItem('token', data.token);
111
+ localStorage.setItem('username', username);
112
+ localStorage.setItem('password', password);
113
  document.getElementById('loginForm').style.display = 'none';
114
  document.getElementById('commandInterface').style.display = 'block';
115
  loadCommandHistory();
 
121
  }
122
  }
123
 
124
+ async function refreshToken() {
125
+ const username = localStorage.getItem('username');
126
+ const password = localStorage.getItem('password');
127
+ if (!username || !password) {
128
+ // 如果没有保存的凭据,重定向到登录页面
129
+ document.getElementById('loginForm').style.display = 'block';
130
+ document.getElementById('commandInterface').style.display = 'none';
131
+ return;
132
+ }
133
+ try {
134
+ const response = await fetch('/api/login', {
135
+ method: 'POST',
136
+ headers: { 'Content-Type': 'application/json' },
137
+ body: JSON.stringify({ username, password })
138
+ });
139
+ const data = await response.json();
140
+ if (response.ok) {
141
+ localStorage.setItem('token', data.token);
142
+ return true;
143
+ } else {
144
+ throw new Error(data.error);
145
+ }
146
+ } catch (error) {
147
+ console.error('刷新 token 失败:', error);
148
+ return false;
149
+ }
150
+ }
151
+
152
  document.getElementById('loginButton').addEventListener('click', login);
153
 
154
  loadCommandHistory();
 
164
 
165
  // 在页面加载时调用此函数
166
  window.addEventListener('load', checkLoginStatus);
 
167
  document.getElementById('executeButton').addEventListener('click', executeCommand);