forked from mirrors/amnezia-wg-easy
		
	add settings for avatars
This commit is contained in:
		
							parent
							
								
									4b9af5e8b3
								
							
						
					
					
						commit
						76d5ac2d0b
					
				
					 4 changed files with 38 additions and 3 deletions
				
			
		| 
						 | 
					@ -38,6 +38,9 @@ module.exports.LANG = process.env.LANG || 'en';
 | 
				
			||||||
module.exports.UI_TRAFFIC_STATS = process.env.UI_TRAFFIC_STATS || 'false';
 | 
					module.exports.UI_TRAFFIC_STATS = process.env.UI_TRAFFIC_STATS || 'false';
 | 
				
			||||||
module.exports.UI_CHART_TYPE = process.env.UI_CHART_TYPE || 0;
 | 
					module.exports.UI_CHART_TYPE = process.env.UI_CHART_TYPE || 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports.DICEBEAR_TYPE = process.env.DICEBEAR_TYPE || false;
 | 
				
			||||||
 | 
					module.exports.USE_GRAVATAR = process.env.USE_GRAVATAR || false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getRandomInt = (min, max) => min + Math.floor(Math.random() * (max - min));
 | 
					const getRandomInt = (min, max) => min + Math.floor(Math.random() * (max - min));
 | 
				
			||||||
const getRandomJunkSize = () => getRandomInt(15, 150);
 | 
					const getRandomJunkSize = () => getRandomInt(15, 150);
 | 
				
			||||||
const getRandomHeader = () => getRandomInt(1, 2_147_483_647);
 | 
					const getRandomHeader = () => getRandomInt(1, 2_147_483_647);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,8 @@ const {
 | 
				
			||||||
  LANG,
 | 
					  LANG,
 | 
				
			||||||
  UI_TRAFFIC_STATS,
 | 
					  UI_TRAFFIC_STATS,
 | 
				
			||||||
  UI_CHART_TYPE,
 | 
					  UI_CHART_TYPE,
 | 
				
			||||||
 | 
					  DICEBEAR_TYPE,
 | 
				
			||||||
 | 
					  USE_GRAVATAR,
 | 
				
			||||||
} = require('../config');
 | 
					} = require('../config');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const requiresPassword = !!PASSWORD_HASH;
 | 
					const requiresPassword = !!PASSWORD_HASH;
 | 
				
			||||||
| 
						 | 
					@ -92,6 +94,14 @@ module.exports = class Server {
 | 
				
			||||||
        return `"${UI_CHART_TYPE}"`;
 | 
					        return `"${UI_CHART_TYPE}"`;
 | 
				
			||||||
      }))
 | 
					      }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      .get('/api/ui-avatar-settings', defineEventHandler((event) => {
 | 
				
			||||||
 | 
					        setHeader(event, 'Content-Type', 'application/json');
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          dicebear: DICEBEAR_TYPE,
 | 
				
			||||||
 | 
					          gravatar: USE_GRAVATAR,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Authentication
 | 
					      // Authentication
 | 
				
			||||||
      .get('/api/session', defineEventHandler((event) => {
 | 
					      .get('/api/session', defineEventHandler((event) => {
 | 
				
			||||||
        const authenticated = requiresPassword
 | 
					        const authenticated = requiresPassword
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +57,13 @@ class API {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async getAvatarSettings() {
 | 
				
			||||||
 | 
					    return this.call({
 | 
				
			||||||
 | 
					      method: 'get',
 | 
				
			||||||
 | 
					      path: '/ui-avatar-settings',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async getSession() {
 | 
					  async getSession() {
 | 
				
			||||||
    return this.call({
 | 
					    return this.call({
 | 
				
			||||||
      method: 'get',
 | 
					      method: 'get',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,6 +71,10 @@ new Vue({
 | 
				
			||||||
    uiTrafficStats: false,
 | 
					    uiTrafficStats: false,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uiChartType: 0,
 | 
					    uiChartType: 0,
 | 
				
			||||||
 | 
					    avatarSettings: {
 | 
				
			||||||
 | 
					      'dicebear': null,
 | 
				
			||||||
 | 
					      'gravatar': false,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    uiShowCharts: localStorage.getItem('uiShowCharts') === '1',
 | 
					    uiShowCharts: localStorage.getItem('uiShowCharts') === '1',
 | 
				
			||||||
    uiTheme: localStorage.theme || 'auto',
 | 
					    uiTheme: localStorage.theme || 'auto',
 | 
				
			||||||
    prefersDarkScheme: window.matchMedia('(prefers-color-scheme: dark)'),
 | 
					    prefersDarkScheme: window.matchMedia('(prefers-color-scheme: dark)'),
 | 
				
			||||||
| 
						 | 
					@ -173,10 +177,10 @@ new Vue({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const clients = await this.api.getClients();
 | 
					      const clients = await this.api.getClients();
 | 
				
			||||||
      this.clients = clients.map((client) => {
 | 
					      this.clients = clients.map((client) => {
 | 
				
			||||||
        if (client.name.includes('@') && client.name.includes('.')) {
 | 
					        if (client.name.includes('@') && client.name.includes('.') && this.avatarSettings.gravatar) {
 | 
				
			||||||
          client.avatar = `https://gravatar.com/avatar/${sha256(client.name.toLowerCase().trim())}.jpg`;
 | 
					          client.avatar = `https://gravatar.com/avatar/${sha256(client.name.toLowerCase().trim())}.jpg`;
 | 
				
			||||||
        } else {
 | 
					        } else if (this.avatarSettings.dicebear) {
 | 
				
			||||||
          client.avatar = `https://api.dicebear.com/9.x/bottts/svg?seed=${sha256(client.name.toLowerCase().trim())}`
 | 
					          client.avatar = `https://api.dicebear.com/9.x/${this.avatarSettings.dicebear}/svg?seed=${sha256(client.name.toLowerCase().trim())}`
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!this.clientsPersist[client.id]) {
 | 
					        if (!this.clientsPersist[client.id]) {
 | 
				
			||||||
| 
						 | 
					@ -386,6 +390,17 @@ new Vue({
 | 
				
			||||||
        this.uiChartType = 0;
 | 
					        this.uiChartType = 0;
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.api.getAvatarSettings()
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        this.avatarSettings = res;
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					          this.avatarSettings = {
 | 
				
			||||||
 | 
					            'dicebear': null,
 | 
				
			||||||
 | 
					            'gravatar': false,
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Promise.resolve().then(async () => {
 | 
					    Promise.resolve().then(async () => {
 | 
				
			||||||
      const lang = await this.api.getLang();
 | 
					      const lang = await this.api.getLang();
 | 
				
			||||||
      if (lang !== localStorage.getItem('lang') && i18n.availableLocales.includes(lang)) {
 | 
					      if (lang !== localStorage.getItem('lang') && i18n.availableLocales.includes(lang)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue