base.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const domain_name = document.location.hostname.substring(document.location.hostname.indexOf('.') + 1);
  2. // Migrate from old authentication method
  3. const legacy_token = localStorage.getItem('token');
  4. if (legacy_token != null) {
  5. window.last_match_id = localStorage.getItem('last_match_id') || '';
  6. localStorage.removeItem('token');
  7. localStorage.removeItem('user_id');
  8. localStorage.removeItem('last_match_id');
  9. const login_to = encodeURIComponent(location.href);
  10. document.cookie = `login_to=${login_to}; path=/; domain=${domain_name}; secure; SameSite=Strict; Max-Age=30000`;
  11. document.location = '/auth_migrate?token=' + legacy_token + '&last_match_id=' + window.last_match_id;
  12. }
  13. // Grab info from cookies
  14. const cookies = document.cookie.split(';');
  15. for (const cookie of cookies) {
  16. const foo = decodeURIComponent(cookie).trim().split('=');
  17. const key = foo[0];
  18. if (key == '') break;
  19. let value = foo[1];
  20. if (value.substr(0, 2) == 's:') {
  21. value = value.slice(2, value.lastIndexOf('.'));
  22. }
  23. if (key == 'user') {
  24. window.logged_user_id = parseInt(value, 10);
  25. } else if (key == 'last_match') {
  26. window.last_match_id = parseInt(value, 10);
  27. } else if (key == 'login_to' && value != '') {
  28. document.cookie = `login_to=; path=/; domain=${domain_name}; secure; SameSite=Strict; Max-Age=0`;
  29. document.location = value;
  30. }
  31. }
  32. // Update login button
  33. const a = document.querySelector('.login-btn');
  34. if (window.logged_user_id) {
  35. a.href = `/u/${window.logged_user_id}/`;
  36. a.querySelector('img').src = `https://s.ppy.sh/a/${window.logged_user_id}`;
  37. } else {
  38. a.href = '/me/';
  39. a.querySelector('img').src = `/images/login.png`;
  40. }
  41. // Get current ruleset from hostname (eg. 'mania.kiwec.net')
  42. const rulesets = ['osu', 'taiko', 'catch', 'mania'];
  43. const subdomain = location.hostname.split('.')[0];
  44. window.selected_ruleset = rulesets.indexOf(subdomain);
  45. if (window.selected_ruleset == -1) {
  46. console.warn('No ruleset found for subdomain "' + subdomain + '"! Defaulting to standard.');
  47. window.selected_ruleset = 0;
  48. }
  49. document.querySelector('#toggle-rulesets-dropdown-btn img').src = `/images/mode-${rulesets[window.selected_ruleset]}.png`;
  50. // Activate ruleset dropdown
  51. document.addEventListener('click', (event) => {
  52. const open_ruleset_dropdown_btn = document.querySelector('#toggle-rulesets-dropdown-btn');
  53. const ruleset_dropdown = document.querySelector('#rulesets-dropdown');
  54. if (open_ruleset_dropdown_btn.contains(event.target)) {
  55. ruleset_dropdown.classList.toggle('hidden');
  56. } else {
  57. ruleset_dropdown.classList.add('hidden');
  58. }
  59. });
  60. document.querySelectorAll('.choose-ruleset').forEach((btn) => {
  61. btn.addEventListener('click', function(event) {
  62. event.preventDefault();
  63. const subdomains = location.hostname.split('.');
  64. subdomains[0] = this.dataset.ruleset;
  65. location.hostname = subdomains.join('.');
  66. });
  67. });