SNAPKITTYWEST's picture
push from SNAPKITTYWEST/apple-ii-universal-machine
e870690 verified
Raw
History Blame Contribute Delete
1.55 kB
var GitHubAuth = {
TOKEN_KEY: 'github_token_session',
_token: null,
getToken: function() {
if (this._token) return this._token;
try {
this._token = sessionStorage.getItem(this.TOKEN_KEY);
} catch {}
return this._token;
},
setToken: function(token) {
this._token = token;
try { sessionStorage.setItem(this.TOKEN_KEY, token); } catch {}
},
clearToken: function() {
this._token = null;
try { sessionStorage.removeItem(this.TOKEN_KEY); } catch {}
},
isAuthenticated: function() {
return !!this.getToken();
},
validateToken: async function() {
var token = this.getToken();
if (!token) return { valid: false, reason: 'No token' };
try {
var resp = await fetch('https://api.github.com/user', {
headers: { 'Authorization': 'token ' + token, 'Accept': 'application/vnd.github.v3+json' }
});
if (resp.ok) {
var data = await resp.json();
return { valid: true, user: data.login, scopes: resp.headers.get('x-oauth-scopes') || 'unknown' };
}
return { valid: false, reason: 'HTTP ' + resp.status };
} catch (e) {
return { valid: false, reason: e.message };
}
},
status: function() {
var authed = this.isAuthenticated();
return {
authenticated: authed,
storage: 'SESSION_ONLY',
warning: authed ? 'Token stored in sessionStorage only. Never committed to repo or Woz Vault.' : 'No token. Use GitHubLogin; to authenticate.'
};
}
};