Add adult verification and erotic moderation features: Implement new routes and controller methods for managing adult verification requests, status updates, and document retrieval. Introduce erotic moderation actions and reports, enhancing administrative capabilities. Update chat and navigation controllers to support adult content filtering and access control. Enhance user parameter handling for adult verification status and requests, improving overall user experience and compliance.

This commit is contained in:
Torsten Schulz (local)
2026-03-27 09:14:54 +01:00
parent f93687c753
commit 3e6c09ab29
73 changed files with 4459 additions and 197 deletions

View File

@@ -9,6 +9,8 @@ const AdminFalukantCreateNPCView = () => import('../views/admin/falukant/CreateN
const AdminMinigamesView = () => import('../views/admin/MinigamesView.vue');
const AdminTaxiToolsView = () => import('../views/admin/TaxiToolsView.vue');
const AdminUsersView = () => import('../views/admin/UsersView.vue');
const AdminAdultVerificationView = () => import('../views/admin/AdultVerificationView.vue');
const AdminEroticModerationView = () => import('../views/admin/EroticModerationView.vue');
const UserStatisticsView = () => import('../views/admin/UserStatisticsView.vue');
const ServicesStatusView = () => import('../views/admin/ServicesStatusView.vue');
@@ -31,6 +33,18 @@ const adminRoutes = [
component: UserStatisticsView,
meta: { requiresAuth: true }
},
{
path: '/admin/users/adult-verification',
name: 'AdminAdultVerification',
component: AdminAdultVerificationView,
meta: { requiresAuth: true }
},
{
path: '/admin/users/erotic-moderation',
name: 'AdminEroticModeration',
component: AdminEroticModerationView,
meta: { requiresAuth: true }
},
{
path: '/admin/contacts',
name: 'AdminContacts',

View File

@@ -10,6 +10,7 @@ import minigamesRoutes from './minigamesRoutes';
import personalRoutes from './personalRoutes';
import marketingRoutes from './marketingRoutes';
import { applyRouteSeo, buildAbsoluteUrl } from '../utils/seo';
import apiClient from '../utils/axios';
const HomeView = () => import('../views/HomeView.vue');
@@ -58,18 +59,30 @@ const router = createRouter({
routes
});
router.beforeEach((to, from, next) => {
router.beforeEach(async (to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!store.getters.isLoggedIn) {
next('/');
return next('/');
} else if (!store.getters.user.active) {
next('/activate');
} else {
next();
return next('/activate');
}
} else {
next();
}
if (to.matched.some(record => record.meta.requiresAdultArea)) {
try {
const response = await apiClient.post('/api/settings/account', { userId: store.getters.user.id });
if (!response.data?.isAdult) {
return next('/');
}
if (!response.data?.adultAccessEnabled) {
return next('/socialnetwork/erotic/access');
}
} catch (error) {
return next('/socialnetwork/erotic/access');
}
}
next();
});
router.afterEach((to) => {

View File

@@ -13,6 +13,9 @@ const VocabChapterView = () => import('../views/social/VocabChapterView.vue');
const VocabCourseListView = () => import('../views/social/VocabCourseListView.vue');
const VocabCourseView = () => import('../views/social/VocabCourseView.vue');
const VocabLessonView = () => import('../views/social/VocabLessonView.vue');
const EroticAccessView = () => import('../views/social/EroticAccessView.vue');
const EroticPicturesView = () => import('../views/social/EroticPicturesView.vue');
const EroticVideosView = () => import('../views/social/EroticVideosView.vue');
const socialRoutes = [
{
@@ -39,6 +42,24 @@ const socialRoutes = [
component: GalleryView,
meta: { requiresAuth: true }
},
{
path: '/socialnetwork/erotic/access',
name: 'EroticAccess',
component: EroticAccessView,
meta: { requiresAuth: true }
},
{
path: '/socialnetwork/erotic/pictures',
name: 'EroticPictures',
component: EroticPicturesView,
meta: { requiresAuth: true, requiresAdultArea: true }
},
{
path: '/socialnetwork/erotic/videos',
name: 'EroticVideos',
component: EroticVideosView,
meta: { requiresAuth: true, requiresAdultArea: true }
},
{
path: '/socialnetwork/forum/:id',
name: 'Forum',