diff --git a/src/views/Main.vue b/src/views/Main.vue index 9618528..fd488fb 100644 --- a/src/views/Main.vue +++ b/src/views/Main.vue @@ -30,7 +30,7 @@
- ACCESS GRANTED: ADMIN + ACCESS GRANTED: {{ loggedInUser.toUpperCase() }}
@@ -137,7 +137,7 @@
- +
@@ -256,7 +256,6 @@ const triggerOverlayProcess = (durationMs, initialMsg) => { }, stepTime); }; -// ๐ŸŸข [๋ณด์•ˆ & ํ• ๋‹น๋Ÿ‰ ๋””๋ฒ„๊ทธ ๊ฐ•ํ™”] ์œ ํŠœ๋ธŒ ๋กœ๋“œ ๋ชจ๋“ˆ const apiKey = 'AIzaSyD51LHwqoY8spjq6rsY_RlhBXzb96j7D6o'; const channelId = 'UC8L92ju0V88s6TcmLPb8Bkg'; const maxResults = 8; @@ -273,7 +272,6 @@ const fetchVideos = async () => { } catch (err) { console.error("์œ ํŠœ๋ธŒ ๋กœ๋“œ ์‹คํŒจ (ํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ ๋˜๋Š” ํ‚ค ํ๊ธฐ ๊ฐ€๋Šฅ์„ฑ):", err); - // 1) ์•„๋ž˜ CRT ๋ชจ๋‹ˆํ„ฐ ํ„ฐ๋ฏธ๋„์— ํ•ด์ปค ๊ฐ์„ฑ์œผ๋กœ ์—๋Ÿฌ ๊ฒฝ๊ณ  ์‚ฌ์ถœ setTimeout(() => { if (termInstance.value) { termInstance.value.echo(`[[b;red;][WARN]] YOUTUBE API QUOTA EXCEEDED OR KEY REVOKED.`); @@ -281,24 +279,11 @@ const fetchVideos = async () => { } }, 1000); - // 2) [โ˜…๋ฌด์  ๋ณด์ • ํด๋กœํ‚น] ๊ตฌ๊ธ€ API๊ฐ€ ๋ง‰ํ˜”์„ ๋•Œ ํ™”๋ฉด์„ ๊ฝ‰ ์ฑ„์›Œ์ค„ ๊ณ ํ™”์งˆ ์ธํ”„๋ผ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ฃผ์ž… videos.value = [ - { - id: { videoId: 'dQw4w9WgXcQ' }, // Rick Astley (๋ช…์˜ˆ์˜ ์ „๋‹น) - snippet: { title: '> [LIVE] SpecialSource Cloud Pipeline Infrastructure Main Cluster Monitoring' } - }, - { - id: { videoId: 'kJQP7kiw5Fk' }, // Lofi - snippet: { title: '> [TUTORIAL] Automated Backend CI/CD Deploy Workflow on Ugreen NAS' } - }, - { - id: { videoId: '9bZkp7q19f0' }, - snippet: { title: '> [SECURITY] Injecting JASYPT_ENCRYPTOR_PASSWORD to Docker Runtime' } - }, - { - id: { videoId: 'LXb3EKWsInQ' }, - snippet: { title: '> [DATABASE] PostgreSQL Network Routing & Port 5435 Connection Log' } - } + { id: { videoId: 'dQw4w9WgXcQ' }, snippet: { title: '> ' } }, + { id: { videoId: 'kJQP7kiw5Fk' }, snippet: { title: '> ' } }, + { id: { videoId: '9bZkp7q19f0' }, snippet: { title: '> ' } }, + { id: { videoId: 'LXb3EKWsInQ' }, snippet: { title: '> ' } } ]; } }; @@ -306,15 +291,23 @@ const fetchVideos = async () => { const openVideo = (id) => window.open(`https://www.youtube.com/watch?v=${id}`); const handleRegister = () => alert("ํšŒ์›๊ฐ€์ž…์€ ํ˜„์žฌ ๊ด€๋ฆฌ์ž ์Šน์ธ์ œ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค."); +// ๐ŸŸข [UPGRADE] ๋กœ๊ทธ์•„์›ƒ ์‹œ ์Šคํ† ๋ฆฌ์ง€ ๋Œ€์ฒญ์†Œ ๋ฐ ํ”„๋กฌํ”„ํŠธ ์™„๋ฒฝ ๋ณต๊ตฌ const handleLogout = () => { localStorage.removeItem('token'); + localStorage.removeItem('username'); // ๐Ÿ‘ˆ [์ถ”๊ฐ€] ๋ธŒ๋ผ์šฐ์ €์— ๋‚จ์€ ์•„์ด๋”” ํŒŒ๊ดด + authToken.value = null; + loggedInUser.value = 'anonymous'; // ๐Ÿ‘ˆ [์ถ”๊ฐ€] ๋กœ๊ทธ์ธ ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ๋ฆฌ์…‹ activeMenu.value = 'main'; + if (termInstance.value) { termInstance.value.echo(`\n[[b;red;][ALERT]] SESSION TERMINATED. USER LOGGED OUT.`); + // ๐Ÿ‘ˆ [์ถ”๊ฐ€] ํ•˜๋‹จ CRT ๋ชจ๋‹ˆํ„ฐ์˜ ์•„์ด๋”” ๋‹จ๋ง๊ธฐ ํ”„๋กฌํ”„ํŠธ๋„ anonymous(์ต๋ช…) ์ƒํƒœ๋กœ ์ฆ‰์‹œ ๊ฐ•์ œ ์›์ƒ๋ณต๊ตฌ + termInstance.value.set_prompt(`anonymous@specialsource:~$ `); } }; +// ๐ŸŸข [UPGRADE] ์ค‘๋ณต ์ฐŒ๊บผ๊ธฐ๋ฅผ ์ง€์šฐ๊ณ  ์ˆœ์„œ๋ฅผ ์ •๋ฐ€ ์ •๋ ฌํ•œ ๋กœ๊ทธ์ธ ๋ชจ๋“ˆ const handleLoginSubmit = async () => { if (!loginId.value || !loginPw.value) { alert("์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); @@ -344,21 +337,18 @@ const handleLoginSubmit = async () => { }); if (response.data && response.data.token) { - + // 1) ์ง€์ €๋ถ„ํ•˜๊ฒŒ ๊ฒน์ณ์žˆ๋˜ ์Šคํ† ๋ฆฌ์ง€ ์„ธ์ด๋ธŒ ๋กœ์ง 1๊ตฐ๋ฐ๋กœ ์ตœ์ ํ™” ์ •๋ ฌ localStorage.setItem('token', response.data.token); - // ๐ŸŸข [NEW] ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ๋ณ€์ˆ˜์— ๋กœ๊ทธ์ธํ•œ ID ์„ธ์ด๋ธŒ localStorage.setItem('username', loginId.value); + + authToken.value = response.data.token; loggedInUser.value = loginId.value; overlayProgress.value = 85; overlayStatus.value = 'Access Granted. Generating JWT Session token...'; - localStorage.setItem('token', response.data.token); - authToken.value = response.data.token; - if (termInstance.value) { termInstance.value.echo(`[[b;var(--tui-color);][SUCCESS]] ACCESS GRANTED. CREDENTIALS VERIFIED.`); - // ๐ŸŸข [NEW] ํ•˜๋‹จ CRT ํ„ฐ๋ฏธ๋„ ํ”„๋กฌํ”„ํŠธ๋„ ๋‚ด ์•„์ด๋””๋กœ ๋™์  ๋ณ€๊ฒฝ! termInstance.value.set_prompt(`${loginId.value}@specialsource:~$ `); } @@ -384,7 +374,7 @@ const handleLoginSubmit = async () => { }; onMounted(() => { - fetchVideos(); // ์ดˆ๊ธฐ์— ๋ฌด์กฐ๊ฑด ์ž‘๋™ + fetchVideos(); const globaljQuery = window.$; if (globaljQuery && terminalRef.value) {