Compare commits
	
		
			2 Commits
		
	
	
		
			92053400a3
			...
			9433857356
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9433857356 | |||
| 20f1b08e04 | 
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@ -10,6 +10,18 @@ To bootstrap a macOS instance:
 | 
				
			|||||||
$ curl -s https://code.infektor.net/config/bootstrap/raw/master/bootstrap-macOS.sh | sh
 | 
					$ curl -s https://code.infektor.net/config/bootstrap/raw/master/bootstrap-macOS.sh | sh
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To bootstrap a Debain based Linux instance:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					$ wget https://code.infektor.net/config/bootstrap/raw/master/bootstrap-Debian.sh -O - | sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To bootstrap a Windows instance:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					$ bitsadmin /transfer bootstrap-Windows.cmd https://code.infektor.net/config/bootstrap/raw/master/bootstrap-Windows.cmd %cd%\bootstrap-Windows.cmd & %cd%\bootstrap-Windows.cmd
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Package
 | 
					## Package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Install as a pip package to set SSH keys on any of GitHub, GitLab, BitBucket
 | 
					Install as a pip package to set SSH keys on any of GitHub, GitLab, BitBucket
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										106
									
								
								bootstrap-Debian.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										106
									
								
								bootstrap-Debian.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					show_usage() {
 | 
				
			||||||
 | 
					  echo "usage: $0 [-h] [-y]"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					show_help() {
 | 
				
			||||||
 | 
					  show_usage
 | 
				
			||||||
 | 
					  echo
 | 
				
			||||||
 | 
					  echo "Bootstrap a Debian based distribution with:"
 | 
				
			||||||
 | 
					  echo
 | 
				
			||||||
 | 
					  echo "* update apt cache"
 | 
				
			||||||
 | 
					  echo "* upgrade apt packages"
 | 
				
			||||||
 | 
					  echo "* git - from apt"
 | 
				
			||||||
 | 
					  echo "* python - from apt"
 | 
				
			||||||
 | 
					  echo "* python-pip - from apt"
 | 
				
			||||||
 | 
					  echo "* virtualenv - from pip"
 | 
				
			||||||
 | 
					  echo "* SSH key - from ssh-keygen"
 | 
				
			||||||
 | 
					  echo "* GitHub public key - with SSH key"
 | 
				
			||||||
 | 
					  echo "* GitLab public key - with SSH key"
 | 
				
			||||||
 | 
					  echo "* BitBucket Cloud public key - with SSH key"
 | 
				
			||||||
 | 
					  echo "* Gogs Cloud public key - with SSH key"
 | 
				
			||||||
 | 
					  echo "* conduit - configuration manager"
 | 
				
			||||||
 | 
					  echo
 | 
				
			||||||
 | 
					  echo "If any already exist they will not be reinstalled."
 | 
				
			||||||
 | 
					  echo
 | 
				
			||||||
 | 
					  echo "optional arguments:"
 | 
				
			||||||
 | 
					  echo "        -h              show this help message and exit"
 | 
				
			||||||
 | 
					  echo "        -y              assume yes when prompted"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yes=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while getopts 'hy' opt; do
 | 
				
			||||||
 | 
					  case $opt in
 | 
				
			||||||
 | 
					    h) show_help; exit 0 ;;
 | 
				
			||||||
 | 
					    y) yes=1 ;;
 | 
				
			||||||
 | 
					    *) show_usage; exit 1 ;;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					missing() {
 | 
				
			||||||
 | 
					  which $1 &> /dev/null && return 1 || return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					agree() {
 | 
				
			||||||
 | 
					  local check=^[Nn]$
 | 
				
			||||||
 | 
					  [ $yes -eq 1 ] && [[ ! "$2" =~ $check ]] && return 0
 | 
				
			||||||
 | 
					  [[ "$2" =~ $check ]] && local default="[y/N]" || local default="[Y/n]"
 | 
				
			||||||
 | 
					  read -p "$1 $default? " answer
 | 
				
			||||||
 | 
					  case "$answer" in
 | 
				
			||||||
 | 
					    y|Y|yes) return 0 ;;
 | 
				
			||||||
 | 
					    n|N|no) return 1 ;;
 | 
				
			||||||
 | 
					    '') [[ "$2" =~ $check ]] && return 1 || return 0 ;;
 | 
				
			||||||
 | 
					    *) echo "invalid input: $answer" && return `agree "$1"` ;;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					apt_install() {
 | 
				
			||||||
 | 
					  sudo apt install --yes --install-recommends $1 > /dev/null
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pip_install() {
 | 
				
			||||||
 | 
					  pip install --user $1 > /dev/null
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export PATH=~/.local/bin:$PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					agree "Update apt cache" && sudo apt update > /dev/null
 | 
				
			||||||
 | 
					agree "Upgrade apt packages" "N" && sudo apt upgrade > /dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					missing git && agree "Install git" && apt_install git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if missing pip; then
 | 
				
			||||||
 | 
					  agree "Install python-pip" && apt_install python-pip
 | 
				
			||||||
 | 
					  agree "Upgrade pip with pip" && \
 | 
				
			||||||
 | 
					    sudo -H pip_install --upgrade pip > /dev/null
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					missing virtualenv && agree "Install virtualenv" && pip_install virtualenv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ ! -f ~/.ssh/id_rsa ] && agree "Generate SSH key"; then
 | 
				
			||||||
 | 
					  read -rp "SSH email: " email
 | 
				
			||||||
 | 
					  [ ! -d ~/.ssh ] && mkdir -p ~/.ssh
 | 
				
			||||||
 | 
					  ssh-keygen -t rsa -b 4096 -C "$email" -N "" -f ~/.ssh/id_rsa
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! missing virtualenv && agree "Set SSH keys on remote Git servers"; then
 | 
				
			||||||
 | 
					  env=$(mktemp -d)
 | 
				
			||||||
 | 
					  virtualenv $env > /dev/null
 | 
				
			||||||
 | 
					  source $env/bin/activate
 | 
				
			||||||
 | 
					  pip install git+https://code.infektor.net/config/bootstrap.git > /dev/null
 | 
				
			||||||
 | 
					  python -c 'import bootstrap; bootstrap.set_ssh_keys()'
 | 
				
			||||||
 | 
					  deactivate
 | 
				
			||||||
 | 
					  rm -r $env
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					missing conduit && agree "Install conduit" && \
 | 
				
			||||||
 | 
					  pip_install git+ssh://git@github.com/kbenzie/conduit.git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "To use installed pip packages update your PATH:"
 | 
				
			||||||
 | 
					echo 'export PATH=~/.local/bin:$PATH'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ -f $0 ] && agree "Remove $0" "N" && rm $0 || exit 0
 | 
				
			||||||
							
								
								
									
										193
									
								
								bootstrap-Windows.cmd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								bootstrap-Windows.cmd
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,193 @@
 | 
				
			|||||||
 | 
					@echo off
 | 
				
			||||||
 | 
					setlocal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [%1]==[/?] goto :help
 | 
				
			||||||
 | 
					echo %* | find "/?" > nul
 | 
				
			||||||
 | 
					if errorlevel 1 goto :main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:help
 | 
				
			||||||
 | 
					echo usage: %0 [/?]
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo Bootstrap a macOS instance with:
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo * Windows SDK - from MSDN
 | 
				
			||||||
 | 
					echo * Chocolatey - package manager
 | 
				
			||||||
 | 
					echo * Cmder, including Git - from Chocolatey
 | 
				
			||||||
 | 
					echo * Python - from Chocolatey
 | 
				
			||||||
 | 
					echo * virtualenv - from pip
 | 
				
			||||||
 | 
					echo * SSH key - from ssh-keygen
 | 
				
			||||||
 | 
					echo * GitHub public key - with SSH key
 | 
				
			||||||
 | 
					echo * GitLab public key - with SSH key
 | 
				
			||||||
 | 
					echo * BitBucket Cloud public key - with SSH key
 | 
				
			||||||
 | 
					echo * Gogs Cloud public key - with SSH key
 | 
				
			||||||
 | 
					echo * conduit - configuration manager
 | 
				
			||||||
 | 
					echo
 | 
				
			||||||
 | 
					echo optional arguments:
 | 
				
			||||||
 | 
					echo         /?              show this help message and exit
 | 
				
			||||||
 | 
					goto end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Check for admin permissions
 | 
				
			||||||
 | 
					>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
 | 
				
			||||||
 | 
					if errorlevel 1 (
 | 
				
			||||||
 | 
					  echo Administrator privilages required!
 | 
				
			||||||
 | 
					  exit /B 1
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install Windows SDK
 | 
				
			||||||
 | 
					:windows_sdk
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install Windows SDK [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto windows_sdk_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto windows_sdk_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto windows_sdk_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto windows_sdk_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto windows_sdk_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto windows_sdk
 | 
				
			||||||
 | 
					:windows_sdk_yes
 | 
				
			||||||
 | 
					bitsadmin.exe /transfer "Download Windows SDK" https://go.microsoft.com/fwlink/p/?linkid=845298 %~dp0\winsdksetup.exe
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					echo Installing Windows SDK...
 | 
				
			||||||
 | 
					%~dp0\winsdksetup.exe /features + /q
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					del %~dp0\winsdksetup.exe
 | 
				
			||||||
 | 
					:windows_sdk_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install Chocolatey
 | 
				
			||||||
 | 
					:choco
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install Chocolatey [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto choco_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto choco_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto choco_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto choco_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto choco_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto choco
 | 
				
			||||||
 | 
					:choco_yes
 | 
				
			||||||
 | 
					@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:choco_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install Cmder, including Git
 | 
				
			||||||
 | 
					:git
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install Cmder, including Git [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto git_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto git_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto git_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto git_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto git_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto git
 | 
				
			||||||
 | 
					:git_yes
 | 
				
			||||||
 | 
					choco install cmder --yes
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:git_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install Python
 | 
				
			||||||
 | 
					:python
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install Python [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto python_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto python_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto python_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto python_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto python_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto python
 | 
				
			||||||
 | 
					:python_yes
 | 
				
			||||||
 | 
					choco install python2 --yes
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:python_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install virtualenv
 | 
				
			||||||
 | 
					:virtualenv
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install virtualenv [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto virtualenv_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto virtualenv_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto virtualenv_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto virtualenv_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto virtualenv_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto virtualenv
 | 
				
			||||||
 | 
					:virtualenv_yes
 | 
				
			||||||
 | 
					"C:\Python27\Scripts\pip.exe" install virtualenv
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:virtualenv_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Generate SSH key
 | 
				
			||||||
 | 
					:ssh_key
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Generate SSH key [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto ssh_key_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto ssh_key_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto ssh_key_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto ssh_key_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto ssh_key_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto ssh_key
 | 
				
			||||||
 | 
					:ssh_key_yes
 | 
				
			||||||
 | 
					mkdir %USERPROFILE%\.ssh
 | 
				
			||||||
 | 
					set /P email="SSH email: "
 | 
				
			||||||
 | 
					"C:\tools\cmder\vendor\git-for-windows\usr\bin\ssh-keygen.exe" -t rsa -b 4096 -C "%email%" -N "" -f %USERPROFILE%\.ssh\id_rsa
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:ssh_key_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Set SSH keys on remote Git servers
 | 
				
			||||||
 | 
					:remote_ssh_keys
 | 
				
			||||||
 | 
					:: Add git to the PATH to pip can find it
 | 
				
			||||||
 | 
					set PATH=C:\tools\cmder\vendor\git-for-windows\bin;%PATH%
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Set SSH keys on remote Git servers [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto remote_ssh_keys_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto remote_ssh_keys_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto remote_ssh_keys_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto remote_ssh_keys_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto remote_ssh_keys_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto remote_ssh_keys
 | 
				
			||||||
 | 
					:remote_ssh_keys_yes
 | 
				
			||||||
 | 
					"C:\Python27\Scripts\virtualenv.exe" %~dp0\bootstrap_env
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					"%~dp0\bootstrap_env\Scripts\pip.exe" install git+https://code.infektor.net/config/bootstrap.git
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					"%~dp0\bootstrap_env\Scripts\python.exe" -c "import bootstrap; bootstrap.set_ssh_keys()"
 | 
				
			||||||
 | 
					if errorlevel 1 exit /B 1
 | 
				
			||||||
 | 
					:remote_ssh_keys_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Install conduit
 | 
				
			||||||
 | 
					:conduit
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Install conduit [Y/n]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto conduit_yes
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto conduit_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto conduit_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto conduit_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto conduit_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto conduit
 | 
				
			||||||
 | 
					:conduit_yes
 | 
				
			||||||
 | 
					"C:\Python27\Scripts\pip.exe" install git+ssh://git@github.com/kbenzie/conduit.git
 | 
				
			||||||
 | 
					rmdir /Q /S "%~dp0\bootstrap_env"
 | 
				
			||||||
 | 
					:conduit_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:remove_bootstrap
 | 
				
			||||||
 | 
					set choice=
 | 
				
			||||||
 | 
					set /p choice="Remove bootstrap-Windows.cmd [y/N]? "
 | 
				
			||||||
 | 
					if "%choice%"=="" goto remove_bootstrap_no
 | 
				
			||||||
 | 
					if "%choice%"=="Y" goto remove_bootstrap_yes
 | 
				
			||||||
 | 
					if "%choice%"=="y" goto remove_bootstrap_yes
 | 
				
			||||||
 | 
					if "%choice%"=="N" goto remove_bootstrap_no
 | 
				
			||||||
 | 
					if "%choice%"=="n" goto remove_bootstrap_no
 | 
				
			||||||
 | 
					echo invalid value: %choice%
 | 
				
			||||||
 | 
					goto remove_bootstrap
 | 
				
			||||||
 | 
					:remove_bootstrap_yes
 | 
				
			||||||
 | 
					start /b "" cmd /c del "%~f0"&exit /b
 | 
				
			||||||
 | 
					:remove_bootstrap_no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:end
 | 
				
			||||||
 | 
					endlocal
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user