mirror of
https://github.com/ctwj/urldb.git
synced 2025-11-25 03:15:04 +08:00
update: change name
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 🚀 urlDB - 网盘资源数据库
|
||||
# 🚀 urlDB - 老九网盘资源数据库
|
||||
|
||||
<div align="center">
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ type SystemConfig struct {
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
// SEO 配置
|
||||
SiteTitle string `json:"site_title" gorm:"size:200;not null;default:'网盘资源数据库'"`
|
||||
SiteTitle string `json:"site_title" gorm:"size:200;not null;default:'老九网盘资源数据库'"`
|
||||
SiteDescription string `json:"site_description" gorm:"size:500"`
|
||||
Keywords string `json:"keywords" gorm:"size:500"`
|
||||
Author string `json:"author" gorm:"size:100"`
|
||||
|
||||
@@ -57,11 +57,11 @@ func (r *SystemConfigRepositoryImpl) GetOrCreateDefault() (*entity.SystemConfig,
|
||||
if err != nil {
|
||||
// 创建默认配置
|
||||
defaultConfig := &entity.SystemConfig{
|
||||
SiteTitle: "网盘资源数据库",
|
||||
SiteDescription: "专业的网盘资源数据库",
|
||||
SiteTitle: "老九网盘资源数据库",
|
||||
SiteDescription: "专业的老九网盘资源数据库",
|
||||
Keywords: "网盘,资源管理,文件分享",
|
||||
Author: "系统管理员",
|
||||
Copyright: "© 2024 网盘资源数据库",
|
||||
Copyright: "© 2024 老九网盘资源数据库",
|
||||
AutoProcessReadyResources: false,
|
||||
AutoProcessInterval: 30,
|
||||
PageSize: 100,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 🚀 urlDB - 网盘资源数据库
|
||||
# 🚀 urlDB - 老九网盘资源数据库
|
||||
|
||||
> 一个现代化的网盘资源数据库,支持多网盘自动化转存分享,支持百度网盘,阿里云盘,夸克网盘, 天翼云盘,迅雷云盘,123云盘,115网盘,UC网盘
|
||||
> 一个现代化的老九网盘资源数据库,支持多网盘自动化转存分享,支持百度网盘,阿里云盘,夸克网盘, 天翼云盘,迅雷云盘,123云盘,115网盘,UC网盘
|
||||
|
||||
<div align="center">
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
网盘资源数据库提供了一套完整的 RESTful API 接口,支持资源管理、搜索、热门剧获取等功能。所有 API 都需要进行认证,使用 API Token 进行身份验证。
|
||||
老九网盘资源数据库提供了一套完整的 RESTful API 接口,支持资源管理、搜索、热门剧获取等功能。所有 API 都需要进行认证,使用 API Token 进行身份验证。
|
||||
|
||||
## 基础信息
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>urlDB - 网盘资源数据库</title>
|
||||
<title>urlDB - 老九网盘资源数据库</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="description" content="一个现代化的网盘资源数据库,支持多网盘自动化转存分享">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||
|
||||
2
web/components.d.ts
vendored
2
web/components.d.ts
vendored
@@ -11,6 +11,8 @@ declare module 'vue' {
|
||||
NAlert: typeof import('naive-ui')['NAlert']
|
||||
NButton: typeof import('naive-ui')['NButton']
|
||||
NSelect: typeof import('naive-ui')['NSelect']
|
||||
NTabPane: typeof import('naive-ui')['NTabPane']
|
||||
NTabs: typeof import('naive-ui')['NTabs']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="mb-4">
|
||||
<h1 class="text-2xl sm:text-3xl font-bold mb-2">
|
||||
<NuxtLink to="/" class="text-white hover:text-gray-200 dark:hover:text-gray-300 no-underline">
|
||||
{{ systemConfig?.site_title || '网盘资源数据库' }}
|
||||
{{ systemConfig?.site_title || '老九网盘资源数据库' }}
|
||||
</NuxtLink>
|
||||
</h1>
|
||||
<!-- 面包屑导航 -->
|
||||
@@ -106,7 +106,7 @@ const { data: systemConfigData } = await useAsyncData('systemConfig',
|
||||
() => $fetch('/api/system-config')
|
||||
)
|
||||
|
||||
const systemConfig = computed(() => (systemConfigData.value as any)?.data || { site_title: '网盘资源数据库' })
|
||||
const systemConfig = computed(() => (systemConfigData.value as any)?.data || { site_title: '老九网盘资源数据库' })
|
||||
|
||||
// 退出登录
|
||||
const logout = async () => {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="max-w-7xl mx-auto text-center text-gray-600 dark:text-gray-400 text-sm px-3 sm:px-5">
|
||||
<p class="mb-2">本站内容由网络爬虫自动抓取。本站不储存、复制、传播任何文件,仅作个人公益学习,请在获取后24小内删除!!!</p>
|
||||
<p class="flex items-center justify-center gap-2">
|
||||
<span>{{ systemConfig?.copyright || '© 2025 网盘资源数据库 By 老九' }}</span>
|
||||
<span>{{ systemConfig?.copyright || '© 2025 老九网盘资源数据库 By 老九' }}</span>
|
||||
<span v-if="versionInfo.version" class="text-gray-400 dark:text-gray-500">| v{{ versionInfo.version }}</span>
|
||||
</p>
|
||||
</div>
|
||||
@@ -19,7 +19,7 @@ const { data: systemConfigData } = await useAsyncData('systemConfig',
|
||||
() => $fetch('/api/system-config')
|
||||
)
|
||||
|
||||
const systemConfig = computed(() => (systemConfigData.value as any)?.data || { copyright: '© 2025 网盘资源数据库 By 老九' })
|
||||
const systemConfig = computed(() => (systemConfigData.value as any)?.data || { copyright: '© 2025 老九网盘资源数据库 By 老九' })
|
||||
|
||||
// 组件挂载时获取版本信息
|
||||
onMounted(() => {
|
||||
|
||||
@@ -40,16 +40,16 @@ export const useSeo = () => {
|
||||
if (systemConfig.value?.site_title) {
|
||||
return `${systemConfig.value.site_title} - ${pageTitle}`
|
||||
}
|
||||
return `${pageTitle} - 网盘资源数据库`
|
||||
return `${pageTitle} - 老九网盘资源数据库`
|
||||
}
|
||||
|
||||
// 生成页面元数据
|
||||
const generateMeta = (customMeta?: Record<string, string>) => {
|
||||
const defaultMeta = {
|
||||
description: systemConfig.value?.site_description || '专业的网盘资源数据库',
|
||||
description: systemConfig.value?.site_description || '专业的老九网盘资源数据库',
|
||||
keywords: systemConfig.value?.keywords || '网盘,资源管理,文件分享',
|
||||
author: systemConfig.value?.author || '系统管理员',
|
||||
copyright: systemConfig.value?.copyright || '© 2024 网盘资源数据库'
|
||||
copyright: systemConfig.value?.copyright || '© 2024 老九网盘资源数据库'
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -38,11 +38,11 @@ export default defineNuxtConfig({
|
||||
],
|
||||
app: {
|
||||
head: {
|
||||
title: '开源网盘资源数据库',
|
||||
title: '老九网盘资源数据库',
|
||||
meta: [
|
||||
{ charset: 'utf-8' },
|
||||
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
||||
{ name: 'description', content: '开源网盘资源数据库 - 一个现代化的资源管理系统' }
|
||||
{ name: 'description', content: '老九网盘资源管理数据庫,现代化的网盘资源数据库,支持多网盘自动化转存分享,支持百度网盘,阿里云盘,夸克网盘, 天翼云盘,迅雷云盘,123云盘,115网盘,UC网盘' }
|
||||
],
|
||||
link: [
|
||||
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
|
||||
|
||||
@@ -133,7 +133,7 @@ const handleCancel = () => {
|
||||
|
||||
// 设置页面标题
|
||||
useHead({
|
||||
title: '添加资源 - 网盘资源数据库'
|
||||
title: '添加资源 - 老九网盘资源数据库'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ const getAuthHeaders = () => {
|
||||
|
||||
// 页面元数据
|
||||
useHead({
|
||||
title: '分类管理 - 网盘资源数据库',
|
||||
title: '分类管理 - 老九网盘资源数据库',
|
||||
meta: [
|
||||
{ name: 'description', content: '管理网盘资源分类' },
|
||||
{ name: 'keywords', content: '分类管理,资源管理' }
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<div class="space-y-2">
|
||||
<div class="flex flex-wrap gap-1 w-full text-left rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors cursor-pointer">
|
||||
<div v-for="pan in pans" :key="pan.id" class="h-6 px-1 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center">
|
||||
<span v-html="pan.icon"></span> {{ pan.name }}
|
||||
<span v-html="pan.icon"></span> {{ pan.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -597,7 +597,7 @@ onMounted(async () => {
|
||||
|
||||
// 设置页面标题
|
||||
useHead({
|
||||
title: '待处理资源管理 - 网盘资源数据库'
|
||||
title: '待处理资源管理 - 老九网盘资源数据库'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -18,14 +18,10 @@
|
||||
<!-- 配置表单 -->
|
||||
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-6">
|
||||
<form @submit.prevent="saveConfig" class="space-y-6">
|
||||
<!-- SEO 配置 -->
|
||||
<div class="border-b border-gray-200 dark:border-gray-700 pb-6">
|
||||
<h2 class="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
|
||||
<i class="fas fa-search text-blue-600"></i>
|
||||
SEO 配置
|
||||
</h2>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
|
||||
<n-tabs type="line" animated>
|
||||
<n-tab-pane name="SEO 配置" tab="seo">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<!-- 网站标题 -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
|
||||
@@ -36,7 +32,7 @@
|
||||
type="text"
|
||||
required
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
|
||||
placeholder="网盘资源数据库"
|
||||
placeholder="老九网盘资源数据库"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -49,7 +45,7 @@
|
||||
v-model="config.siteDescription"
|
||||
type="text"
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
|
||||
placeholder="专业的网盘资源数据库"
|
||||
placeholder="专业的老九网盘资源数据库"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -88,20 +84,13 @@
|
||||
v-model="config.copyright"
|
||||
type="text"
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
|
||||
placeholder="© 2024 网盘资源数据库"
|
||||
placeholder="© 2024 老九网盘资源数据库"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 自动处理配置 -->
|
||||
<div class="border-b border-gray-200 dark:border-gray-700 pb-6">
|
||||
<h2 class="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
|
||||
<i class="fas fa-cogs text-green-600"></i>
|
||||
自动处理配置
|
||||
</h2>
|
||||
|
||||
<div class="space-y-4">
|
||||
</n-tab-pane>
|
||||
<n-tab-pane name="自动处理配置" tab="自动处理配置">
|
||||
<div class="space-y-4">
|
||||
<!-- 待处理资源自动处理 -->
|
||||
<div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700 rounded-lg">
|
||||
<div class="flex-1">
|
||||
@@ -225,16 +214,9 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 其他配置 -->
|
||||
<div>
|
||||
<h2 class="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
|
||||
<i class="fas fa-info-circle text-purple-600"></i>
|
||||
其他配置
|
||||
</h2>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
</n-tab-pane>
|
||||
<n-tab-pane name="其他配置" tab="其他配置">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<!-- 每页显示数量 -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
|
||||
@@ -273,16 +255,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- API配置 -->
|
||||
<div class="border-b border-gray-200 dark:border-gray-700 pb-6">
|
||||
<h2 class="text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center gap-2">
|
||||
<i class="fas fa-key text-orange-600"></i>
|
||||
API 配置
|
||||
</h2>
|
||||
|
||||
<div class="space-y-4">
|
||||
</n-tab-pane>
|
||||
<n-tab-pane name="API配置" tab="API配置">
|
||||
<div class="space-y-4">
|
||||
<!-- API Token -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
|
||||
@@ -324,7 +299,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</n-tab-pane>
|
||||
</n-tabs>
|
||||
|
||||
<!-- 保存按钮 -->
|
||||
<div class="flex justify-end space-x-4 pt-6">
|
||||
@@ -366,11 +342,11 @@ const { getSystemConfig, updateSystemConfig } = useSystemConfigApi()
|
||||
const loading = ref(false)
|
||||
const config = ref({
|
||||
// SEO 配置
|
||||
siteTitle: '网盘资源数据库',
|
||||
siteDescription: '专业的网盘资源数据库',
|
||||
siteTitle: '老九网盘资源数据库',
|
||||
siteDescription: '专业的老九网盘资源数据库',
|
||||
keywords: '网盘,资源管理,文件分享',
|
||||
author: '系统管理员',
|
||||
copyright: '© 2024 网盘资源数据库',
|
||||
copyright: '© 2024 老九网盘资源数据库',
|
||||
|
||||
// 自动处理配置
|
||||
autoProcessReadyResources: false,
|
||||
@@ -391,7 +367,7 @@ const systemConfig = ref(null)
|
||||
|
||||
// 页面元数据 - 移到变量声明之后
|
||||
useHead({
|
||||
title: () => systemConfig.value?.site_title ? `${systemConfig.value.site_title} - 系统配置` : '系统配置 - 网盘资源数据库',
|
||||
title: () => systemConfig.value?.site_title ? `${systemConfig.value.site_title} - 系统配置` : '系统配置 - 老九网盘资源数据库',
|
||||
meta: [
|
||||
{
|
||||
name: 'description',
|
||||
@@ -418,11 +394,11 @@ const loadConfig = async () => {
|
||||
// 使用新的统一响应格式,直接使用response
|
||||
if (response) {
|
||||
config.value = {
|
||||
siteTitle: response.site_title || '网盘资源数据库',
|
||||
siteDescription: response.site_description || '专业的网盘资源数据库',
|
||||
siteTitle: response.site_title || '老九网盘资源数据库',
|
||||
siteDescription: response.site_description || '专业的老九网盘资源数据库',
|
||||
keywords: response.keywords || '网盘,资源管理,文件分享',
|
||||
author: response.author || '系统管理员',
|
||||
copyright: response.copyright || '© 2024 网盘资源数据库',
|
||||
copyright: response.copyright || '© 2024 老九网盘资源数据库',
|
||||
autoProcessReadyResources: response.auto_process_ready_resources || false,
|
||||
autoProcessInterval: response.auto_process_interval || 30,
|
||||
autoTransferEnabled: response.auto_transfer_enabled || false, // 新增
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
<div class="">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<n-alert class="mb-4" title="提交的数据中,如果包含标签,数据添加成功,会自动添加标签" type="info" />
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<div class="flex justify-between items-center mb-4">
|
||||
@@ -311,7 +312,7 @@ const getAuthHeaders = () => {
|
||||
|
||||
// 页面元数据
|
||||
useHead({
|
||||
title: '标签管理 - 网盘资源数据库',
|
||||
title: '标签管理 - 老九网盘资源数据库',
|
||||
meta: [
|
||||
{ name: 'description', content: '管理网盘资源标签' },
|
||||
{ name: 'keywords', content: '标签管理,资源管理' }
|
||||
|
||||
@@ -28,7 +28,7 @@ definePageMeta({
|
||||
|
||||
// 页面元数据
|
||||
useHead({
|
||||
title: '版本信息 - 网盘资源数据库',
|
||||
title: '版本信息 - 老九网盘资源数据库',
|
||||
meta: [
|
||||
{ name: 'description', content: '查看系统版本信息和更新状态' }
|
||||
]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="bg-slate-800 dark:bg-gray-800 text-white dark:text-gray-100 rounded-lg shadow-lg p-4 sm:p-8 mb-4 sm:mb-8 text-center relative">
|
||||
<h1 class="text-2xl sm:text-3xl font-bold mb-4">
|
||||
<a href="/" class="text-white hover:text-gray-200 dark:hover:text-gray-300 no-underline">
|
||||
网盘资源数据库 - API文档
|
||||
老九网盘资源数据库 - API文档
|
||||
</a>
|
||||
</h1>
|
||||
<p class="text-gray-300 max-w-2xl mx-auto">公开API接口文档,支持资源添加、搜索和热门剧获取等功能</p>
|
||||
@@ -359,9 +359,9 @@ definePageMeta({
|
||||
|
||||
// 页面元数据
|
||||
useHead({
|
||||
title: 'API文档 - 网盘资源数据库',
|
||||
title: 'API文档 - 老九网盘资源数据库',
|
||||
meta: [
|
||||
{ name: 'description', content: '网盘资源数据库的公开API接口文档' },
|
||||
{ name: 'description', content: '老九网盘资源数据库的公开API接口文档' },
|
||||
{ name: 'keywords', content: 'API,接口文档,网盘资源管理' }
|
||||
]
|
||||
})
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="bg-slate-800 dark:bg-gray-800 text-white dark:text-gray-100 rounded-lg shadow-lg p-4 sm:p-8 mb-4 sm:mb-8 text-center relative">
|
||||
<h1 class="text-2xl sm:text-3xl font-bold mb-4">
|
||||
<a href="/" class="text-white hover:text-gray-200 dark:hover:text-gray-300 no-underline">
|
||||
{{ systemConfig?.site_title || '网盘资源数据库' }}
|
||||
{{ systemConfig?.site_title || '老九网盘资源数据库' }}
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
@@ -240,9 +240,9 @@
|
||||
<script setup lang="ts">
|
||||
// 页面元数据
|
||||
useHead({
|
||||
title: '网盘资源数据库 - 首页',
|
||||
title: '老九网盘资源数据库 - 首页',
|
||||
meta: [
|
||||
{ name: 'description', content: '网盘资源数据库 - 一个现代化的资源管理系统' },
|
||||
{ name: 'description', content: '老九网盘资源管理系统, 一个现代化的网盘资源数据库,支持多网盘自动化转存分享,支持百度网盘,阿里云盘,夸克网盘, 天翼云盘,迅雷云盘,123云盘,115网盘,UC网盘' },
|
||||
{ name: 'keywords', content: '网盘资源,资源管理,数据库' }
|
||||
]
|
||||
})
|
||||
@@ -307,7 +307,7 @@ const total = (resourcesData.value as any)?.data?.total as number
|
||||
const safeResources = computed(() => (resourcesData.value as any)?.data?.resources || [])
|
||||
const safeStats = computed(() => (statsData.value as any)?.data || { total_resources: 0, total_categories: 0, total_tags: 0, total_views: 0, today_updates: 0 })
|
||||
const platforms = computed(() => panList || [])
|
||||
const systemConfig = computed(() => sysConfig || { site_title: '网盘资源数据库' })
|
||||
const systemConfig = computed(() => sysConfig || { site_title: '老九网盘资源数据库' })
|
||||
const safeLoading = computed(() => pending.value)
|
||||
|
||||
// 计算属性
|
||||
|
||||
@@ -155,7 +155,7 @@ const handleLogin = async () => {
|
||||
|
||||
// 设置页面标题
|
||||
useHead({
|
||||
title: '管理员登录 - 网盘资源数据库'
|
||||
title: '管理员登录 - 老九网盘资源数据库'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ const handleRegister = async () => {
|
||||
|
||||
// 设置页面标题
|
||||
useHead({
|
||||
title: '用户注册 - 网盘资源数据库'
|
||||
title: '用户注册 - 老九网盘资源数据库'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@ export default defineEventHandler(async (event) => {
|
||||
console.error('服务端获取系统配置失败:', error)
|
||||
// 返回默认配置而不是抛出错误
|
||||
return {
|
||||
site_title: '网盘资源数据库',
|
||||
site_title: '老九网盘资源数据库',
|
||||
site_description: '一个现代化的资源管理系统',
|
||||
keywords: '网盘资源,资源管理,数据库',
|
||||
author: '老九',
|
||||
copyright: '© 2025 网盘资源数据库'
|
||||
copyright: '© 2025 老九网盘资源数据库'
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user