tufos-page-2012-13-full/
│
├─ public/
│ ├─ index.html # Home / protected page
│ ├─ login.html # Login / sign‑up page
│ ├─ reset.html # New password page (after email link)
│ ├─ css/
│ │ └─ styles.css
│ └─ js/
│ ├─ auth.js # Front‑end logic (login, register, reset)
│ └─ utils.js
│
├─ server/
│ ├─ app.js # Express entry point
│ ├─ routes/
│ │ └─ auth.js # /api/auth/* endpoints
│ ├─ models/
│ │ └─ User.js # Mongoose schema
│ ├─ middleware/
│ │ ├─ authMiddleware.js
│ │ └─ rateLimiter.js
│ └─ utils/
│ ├─ mailer.js # Nodemailer wrapper
│ └─ token.js # JWT helpers
│
├─ .env # Environment variables (not in repo)
├─ package.json
└─ README.md
Se você está procurando informações sobre senha e login para Tufos Page 2012/13 full, é provável que seja um estudante, ex-aluno, ou responsável que precisa acessar boletins, atividades ou materiais escolares de um período específico — possivelmente o ano letivo de 2012 a 2013. Este artigo foi criado para esclarecer tudo sobre o sistema Tufos, como funcionava o acesso naquela época, onde encontrar os dados de login, e o que fazer em caso de perda da senha.
/* Reset */
*,
*::before,
*::after box-sizing: border-box; margin:0; padding:0;
body
font-family: 'Helvetica Neue', Arial, sans-serif;
background: #f5f7fa;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
.auth-page .auth-card
background: #fff;
padding: 2rem 2.5rem;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,.08);
width: 340px;
text-align: center;
.auth-card h1,
.auth-card h2 margin-bottom: .8rem; color: #333;
label display: block; text-align: left; margin-top: .8rem; font-size: .9rem; color:#555;
input
width: 100%;
padding: .5rem;
margin-top: .2rem;
border: 1px solid #ccc;
border-radius: 4px;
button
margin-top: 1rem;
width: 100%;
padding: .6rem;
background: #0066cc;
color:#fff;
border:none;
border-radius:4px;
font-size:1rem;
cursor:pointer;
button:hover background:#0055aa;
.error-msg color:#c00; margin-top:.5rem;
.success-msg color:#090; margin-top:.5rem;
.forgot margin-top:1rem;
.forgot a color:#0066cc; text-decoration:none;
.forgot a:hover text-decoration:underline;
hr margin:1.5rem 0; border:none; border-top:1px solid #eee;
/* --------------------------------------------------------------
Front‑end helper for the "senha e login" feature.
Handles: register, login, password‑reset request.
-------------------------------------------------------------- */
const API_BASE = '/api/auth';
function showMsg(el, txt, type = 'error')
el.textContent = txt;
el.className = type === 'error' ? 'error-msg' : 'success-msg';
/* -------------------- LOGIN -------------------- */
document.getElementById('loginForm').addEventListener('submit', async e =>
e.preventDefault();
const email = e.target.email.value.trim();
const password = e.target.password.value;
const res = await fetch(`$API_BASE/login`,
method: 'POST',
headers: 'Content-Type': 'application/json' ,
body: JSON.stringify( email, password )
);
const data = await res.json();
const msgEl = document.getElementById('loginError');
if (res.ok)
// Store JWT (in memory or httpOnly cookie – here we use localStorage for demo)
localStorage.setItem('token', data.token);
window.location.href = '/';
else
showMsg(msgEl, data.message);
);
/* -------------------- SIGN‑UP -------------------- */
document.getElementById('signupForm').addEventListener('submit', async e =>
e.preventDefault();
const name = e.target.name.value.trim();
const email = e.target.email.value.trim();
const password = e.target.password.value;
const res = await fetch(`$API_BASE/register`,
method: 'POST',
headers: 'Content-Type': 'application/json' ,
body: JSON.stringify( name, email, password )
);
const data = await res.json();
const errEl = document.getElementById('signupError');
const sucEl = document.getElementById('signupSuccess');
if (res.ok)
showMsg(sucEl, 'Conta criada! Verifique seu e‑mail para ativar.', 'success');
errEl.textContent = '';
else
showMsg(errEl, data.message);
sucEl.textContent = '';
);
/* -------------------- PASSWORD RESET REQUEST -------------------- */
if (window.location.pathname.endsWith('/reset.html'))
// Very simple UI: just an input + button (you could create a separate form file)
document.body.innerHTML = `
<section class="auth-card">
<h1>Recuperar Senha</h1>
<form id="resetReqForm">
<label for="resetEmail">E‑mail</label>
<input type="email" id="resetEmail" required>
<button type="submit">Enviar link de redefinição</button>
<p class="error-msg" id="resetError"></p>
<p class="success-msg" id="resetSuccess"></p>
</form>
</section>
`;
document.getElementById('resetReqForm').addEventListener('submit', async ev =>
ev.preventDefault();
const email = ev.target.resetEmail.value.trim();
const res = await fetch(`$API_BASE/forgot-password`,
method: 'POST',
headers: 'Content-Type': 'application/json' ,
body: JSON.stringify( email )
);
const data = await res.json();
const err = document.getElementById('resetError');
const suc = document.getElementById('resetSuccess');
if (res.ok)
showMsg(suc, data.message, 'success');
err.textContent = '';
else
showMsg(err, data.message);
suc.textContent = '';
);
Tip: For production you should store the JWT in an httpOnly, secure cookie instead of
localStorage. The example useslocalStorageonly for simplicity. senha e login para tufos page 2012 13 full