mirror of
https://github.com/goharbor/harbor
synced 2025-04-22 16:44:57 +00:00
Upgrade swagger-ui to the latest version (#16443)
Signed-off-by: AllForNothing <sshijun@vmware.com>
This commit is contained in:
parent
8c698325b5
commit
eca5f48adb
@ -46,24 +46,24 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
// Angular framework. Required
|
||||
"@angular/animations": "~13.1.1",
|
||||
"@angular/common": "~13.1.1",
|
||||
"@angular/compiler": "~13.1.1",
|
||||
"@angular/core": "~13.1.1",
|
||||
"@angular/forms": "~13.1.1",
|
||||
"@angular/localize": "~13.1.1",
|
||||
"@angular/platform-browser": "~13.1.1",
|
||||
"@angular/platform-browser-dynamic": "~13.1.1",
|
||||
"@angular/router": "~13.1.1",
|
||||
"@angular/animations": "~13.2.2",
|
||||
"@angular/common": "~13.2.2",
|
||||
"@angular/compiler": "~13.2.2",
|
||||
"@angular/core": "~13.2.2",
|
||||
"@angular/forms": "~13.2.2",
|
||||
"@angular/localize": "~13.2.2",
|
||||
"@angular/platform-browser": "~13.2.2",
|
||||
"@angular/platform-browser-dynamic": "~13.2.2",
|
||||
"@angular/router": "~13.2.2",
|
||||
"rxjs": "^7.4.0",
|
||||
"tslib": "^2.2.0",
|
||||
"zone.js": "~0.11.4",
|
||||
|
||||
// Clarity UI. Required
|
||||
"@cds/core": "next",
|
||||
"@clr/angular": "next",
|
||||
"@clr/icons": "next",
|
||||
"@clr/ui": "next",
|
||||
"@clr/angular": "13.0.2",
|
||||
"@cds/core": "5.6.4",
|
||||
"@clr/icons": "13.0.2",
|
||||
"@clr/ui": "13.0.2",
|
||||
|
||||
// For Harbor i18n functionality. Required
|
||||
"@ngx-translate/core": "^13.0.0",
|
||||
@ -82,17 +82,18 @@
|
||||
"ngx-markdown": "~13.0.0",
|
||||
|
||||
// For swagger API center. Required
|
||||
"swagger-ui": "^4.4.0",
|
||||
"swagger-ui": "^4.6.0",
|
||||
"buffer": "^6.0.3",
|
||||
"stream-browserify": "^3.0.0",
|
||||
|
||||
// To convert yaml to json. Required
|
||||
"js-yaml": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
// Angular framework. Required
|
||||
"@angular-devkit/build-angular": "~13.2.0-next.2",
|
||||
"@angular/cli": "~13.1.1",
|
||||
"@angular/compiler-cli": "~13.1.1",
|
||||
"@angular-devkit/build-angular": "~13.2.3",
|
||||
"@angular/cli": "~13.2.3",
|
||||
"@angular/compiler-cli": "~13.2.2",
|
||||
"@types/jasmine": "~3.10.1",
|
||||
"@types/node": "^16.11.6",
|
||||
"typescript": "~4.5.4",
|
||||
@ -100,9 +101,9 @@
|
||||
// For unit test. Required
|
||||
"jasmine-core": "^4.0.0",
|
||||
"jasmine-spec-reporter": "~7.0.0",
|
||||
"karma": "^6.3.3",
|
||||
"karma": "^6.3.16",
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-coverage": "^2.1.0",
|
||||
"karma-coverage": "^2.2.0",
|
||||
"karma-jasmine": "~4.0.1",
|
||||
"karma-jasmine-html-reporter": "^1.7.0",
|
||||
|
||||
|
@ -14,7 +14,8 @@
|
||||
"allowedCommonJsDependencies": [
|
||||
"swagger-ui",
|
||||
"buffer",
|
||||
"js-yaml"
|
||||
"js-yaml",
|
||||
"hoist-non-react-statics"
|
||||
],
|
||||
"outputPath": "dist",
|
||||
"index": "src/index.html",
|
||||
|
103
src/portal/package-lock.json
generated
103
src/portal/package-lock.json
generated
@ -31,7 +31,8 @@
|
||||
"ngx-cookie": "^5.0.2",
|
||||
"ngx-markdown": "13.1.0",
|
||||
"rxjs": "^7.4.0",
|
||||
"swagger-ui": "^4.5.0",
|
||||
"stream-browserify": "^3.0.0",
|
||||
"swagger-ui": "^4.6.0",
|
||||
"tslib": "^2.2.0",
|
||||
"zone.js": "~0.11.4"
|
||||
},
|
||||
@ -11136,9 +11137,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prismjs": {
|
||||
"version": "1.26.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz",
|
||||
"integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ==",
|
||||
"version": "1.27.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
|
||||
"integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@ -11757,7 +11758,6 @@
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
@ -11800,24 +11800,19 @@
|
||||
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
|
||||
},
|
||||
"node_modules/refractor": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz",
|
||||
"integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==",
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
|
||||
"integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
|
||||
"dependencies": {
|
||||
"hastscript": "^6.0.0",
|
||||
"parse-entities": "^2.0.0",
|
||||
"prismjs": "~1.25.0"
|
||||
"prismjs": "~1.27.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/refractor/node_modules/prismjs": {
|
||||
"version": "1.25.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
|
||||
"integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg=="
|
||||
},
|
||||
"node_modules/regenerate": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
|
||||
@ -13017,6 +13012,15 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/stream-browserify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
|
||||
"integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
|
||||
"dependencies": {
|
||||
"inherits": "~2.0.4",
|
||||
"readable-stream": "^3.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/streamroller": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
|
||||
@ -13035,7 +13039,6 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
@ -13044,7 +13047,6 @@
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@ -13205,9 +13207,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/swagger-ui": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-4.5.0.tgz",
|
||||
"integrity": "sha512-B9HlLr8dtCRh32WpAcFi9b8YR7BDiDzXfRmzj76xHMDNmbKG6y5fLcjMXcNeueC9NEgALJmba55++95XuDpqBQ==",
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-4.6.0.tgz",
|
||||
"integrity": "sha512-BLbZvpMg3X45+9WdLj/DMqBV714vec2CPN5H+cye1ujBkLI9wpZoGGEZvQpbAdndZXNYvQ5NPTCTzYTUdYSZew==",
|
||||
"dependencies": {
|
||||
"@babel/runtime-corejs3": "^7.16.8",
|
||||
"@braintree/sanitize-url": "^5.0.2",
|
||||
@ -13239,7 +13241,7 @@
|
||||
"serialize-error": "^8.1.0",
|
||||
"sha.js": "^2.4.11",
|
||||
"swagger-client": "^3.18.4",
|
||||
"url-parse": "^1.5.3",
|
||||
"url-parse": "^1.5.8",
|
||||
"xml": "=1.0.1",
|
||||
"xml-but-prettier": "^1.0.1",
|
||||
"zenscroll": "^4.0.2"
|
||||
@ -13853,9 +13855,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/url-parse": {
|
||||
"version": "1.5.6",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz",
|
||||
"integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==",
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
|
||||
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
|
||||
"dependencies": {
|
||||
"querystringify": "^2.1.1",
|
||||
"requires-port": "^1.0.0"
|
||||
@ -13869,8 +13871,7 @@
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"node_modules/utils-merge": {
|
||||
"version": "1.0.1",
|
||||
@ -23039,9 +23040,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"prismjs": {
|
||||
"version": "1.26.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz",
|
||||
"integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ=="
|
||||
"version": "1.27.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
|
||||
"integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
@ -23513,7 +23514,6 @@
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
@ -23548,20 +23548,13 @@
|
||||
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
|
||||
},
|
||||
"refractor": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz",
|
||||
"integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==",
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
|
||||
"integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
|
||||
"requires": {
|
||||
"hastscript": "^6.0.0",
|
||||
"parse-entities": "^2.0.0",
|
||||
"prismjs": "~1.25.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"prismjs": {
|
||||
"version": "1.25.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
|
||||
"integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg=="
|
||||
}
|
||||
"prismjs": "~1.27.0"
|
||||
}
|
||||
},
|
||||
"regenerate": {
|
||||
@ -24499,6 +24492,15 @@
|
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
|
||||
"dev": true
|
||||
},
|
||||
"stream-browserify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
|
||||
"integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
|
||||
"requires": {
|
||||
"inherits": "~2.0.4",
|
||||
"readable-stream": "^3.5.0"
|
||||
}
|
||||
},
|
||||
"streamroller": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
|
||||
@ -24514,7 +24516,6 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
},
|
||||
@ -24522,8 +24523,7 @@
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -24627,9 +24627,9 @@
|
||||
}
|
||||
},
|
||||
"swagger-ui": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-4.5.0.tgz",
|
||||
"integrity": "sha512-B9HlLr8dtCRh32WpAcFi9b8YR7BDiDzXfRmzj76xHMDNmbKG6y5fLcjMXcNeueC9NEgALJmba55++95XuDpqBQ==",
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-4.6.0.tgz",
|
||||
"integrity": "sha512-BLbZvpMg3X45+9WdLj/DMqBV714vec2CPN5H+cye1ujBkLI9wpZoGGEZvQpbAdndZXNYvQ5NPTCTzYTUdYSZew==",
|
||||
"requires": {
|
||||
"@babel/runtime-corejs3": "^7.16.8",
|
||||
"@braintree/sanitize-url": "^5.0.2",
|
||||
@ -24661,7 +24661,7 @@
|
||||
"serialize-error": "^8.1.0",
|
||||
"sha.js": "^2.4.11",
|
||||
"swagger-client": "^3.18.4",
|
||||
"url-parse": "^1.5.3",
|
||||
"url-parse": "^1.5.8",
|
||||
"xml": "=1.0.1",
|
||||
"xml-but-prettier": "^1.0.1",
|
||||
"zenscroll": "^4.0.2"
|
||||
@ -25116,9 +25116,9 @@
|
||||
}
|
||||
},
|
||||
"url-parse": {
|
||||
"version": "1.5.6",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz",
|
||||
"integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==",
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
|
||||
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
|
||||
"requires": {
|
||||
"querystringify": "^2.1.1",
|
||||
"requires-port": "^1.0.0"
|
||||
@ -25127,8 +25127,7 @@
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
|
@ -47,8 +47,9 @@
|
||||
"ngx-clipboard": "^12.3.1",
|
||||
"ngx-cookie": "^5.0.2",
|
||||
"ngx-markdown": "13.1.0",
|
||||
"swagger-ui": "^4.5.0",
|
||||
"swagger-ui": "^4.6.0",
|
||||
"buffer": "^6.0.3",
|
||||
"stream-browserify": "^3.0.0",
|
||||
"js-yaml": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -9,8 +9,6 @@ import * as SwaggerUI from 'swagger-ui';
|
||||
import { mergeDeep } from "../shared/units/utils";
|
||||
import { DevCenterBaseDirective } from "./dev-center-base";
|
||||
import { SAFE_METHODS } from "../services/intercept-http.service";
|
||||
// @ts-ignore
|
||||
window.Buffer = window.Buffer || require('buffer').Buffer; // this is for swagger UI
|
||||
|
||||
enum SwaggerJsonUrls {
|
||||
SWAGGER1 = '/swagger.json',
|
||||
|
@ -80,6 +80,7 @@ import 'zone.js'; // Included with Angular CLI.
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
|
||||
|
||||
(window as any).global = window; // this is for swagger UI
|
||||
// @ts-ignore
|
||||
window.Buffer = window.Buffer || require('buffer').Buffer; // this is for swagger UI
|
||||
|
||||
|
@ -2,6 +2,9 @@
|
||||
{
|
||||
"compileOnSave": false,
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"stream": [ "./node_modules/stream-browserify" ]
|
||||
},
|
||||
"baseUrl": "./",
|
||||
"outDir": "./dist/out-tsc",
|
||||
"sourceMap": true,
|
||||
|
Loading…
x
Reference in New Issue
Block a user