diff --git a/.env.docker b/.env.docker index 0d5836745..e524155fd 100644 --- a/.env.docker +++ b/.env.docker @@ -1202,6 +1202,14 @@ DOCKER_DB_HOST_PORT="${DB_PORT:?error}" # @dottie/validate required,number DOCKER_DB_CONTAINER_PORT="${DB_PORT:?error}" +# root password for the database. By default uses DB_PASSWORD +# but can be changed in situations where you are migrating +# to the included docker-compose and have a different password +# set already +# +# @dottie/validate required +DOCKER_DB_ROOT_PASSWORD="${DB_PASSWORD:?error}" + # How often Docker health check should run for [db] service # @dottie/validate required DOCKER_DB_HEALTHCHECK_INTERVAL="${DOCKER_ALL_DEFAULT_HEALTHCHECK_INTERVAL:?error}" diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 5cc99014b..df39ef60b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -14,12 +14,12 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ + \Illuminate\Http\Middleware\HandleCors::class, \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrustProxies::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - \App\Http\Middleware\TrustProxies::class, - \Illuminate\Http\Middleware\HandleCors::class, ]; /** diff --git a/config/cors.php b/config/cors.php index 92b4b8e8c..1e81a015c 100644 --- a/config/cors.php +++ b/config/cors.php @@ -22,7 +22,9 @@ return [ * Example: ['api/*'] */ 'paths' => [ - '.well-known/*' + '.well-known/*', + 'api/*', + 'oauth/*' ], /* @@ -48,7 +50,8 @@ return [ /* * Sets the Access-Control-Expose-Headers response header with these headers. */ - 'exposed_headers' => [], + // TODO: Add support for rate-limit related headers + 'exposed_headers' => ['Link'], /* * Sets the Access-Control-Max-Age response header when > 0. @@ -59,4 +62,4 @@ return [ * Sets the Access-Control-Allow-Credentials header. */ 'supports_credentials' => false, -]; \ No newline at end of file +]; diff --git a/docker-compose.migrate.yml b/docker-compose.migrate.yml index b31771f27..b7048b5b5 100644 --- a/docker-compose.migrate.yml +++ b/docker-compose.migrate.yml @@ -3,7 +3,7 @@ version: "3" services: migrate: - image: "secoresearch/rsync" + image: "servercontainers/rsync" entrypoint: "" working_dir: /migrate command: 'bash -c "exit 1"' diff --git a/docker-compose.yml b/docker-compose.yml index 5df433c83..767a509b2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -166,12 +166,12 @@ services: environment: TZ: "${TZ:?error}" # MySQL (Oracle) - "Environment Variables" at https://hub.docker.com/_/mysql - MYSQL_ROOT_PASSWORD: "${DB_PASSWORD:?error}" + MYSQL_ROOT_PASSWORD: "${DOCKER_DB_ROOT_PASSWORD:?error}" MYSQL_USER: "${DB_USERNAME:?error}" MYSQL_PASSWORD: "${DB_PASSWORD:?error}" MYSQL_DATABASE: "${DB_DATABASE:?error}" # MySQL (MariaDB) - "Start a mariadb server instance with user, password and database" at https://hub.docker.com/_/mariadb - MARIADB_ROOT_PASSWORD: "${DB_PASSWORD:?error}" + MARIADB_ROOT_PASSWORD: "${DOCKER_DB_ROOT_PASSWORD:?error}" MARIADB_USER: "${DB_USERNAME:?error}" MARIADB_PASSWORD: "${DB_PASSWORD:?error}" MARIADB_DATABASE: "${DB_DATABASE:?error}" diff --git a/docker/check-requirements b/docker/check-requirements new file mode 100755 index 000000000..4da1d6427 --- /dev/null +++ b/docker/check-requirements @@ -0,0 +1,126 @@ +#!/bin/bash + +set -e -o errexit -o nounset -o pipefail + +# +# Colors +# + +declare -r RED="\e[31m" +declare -r GREEN="\e[32m" +declare -r BLUE="\e[34m" +declare -r NO_COLOR="\e[0m" + +# +# Helper functions +# + +function highlight() { + local reset="${2:-$NO_COLOR}" + echo "${BLUE}$1${reset}" +} + +function action_start() { + echo -en "⚙️ $1: " +} + +function action_ok() { + echo -e "\n\t✅ ${GREEN}${*}${NO_COLOR}\n" +} + +function action_error() { + echo -e "\n\t❌ ${RED}${*}${NO_COLOR}" >&2 +} + +function action_error_exit() { + action_error "${*}\n\n${RED}Aborting!${NO_COLOR}" + + exit 1 +} + +# +# Configuration +# + +declare -r min_docker_compose_version_arr=(2 17) +min_docker_compose_version=$( + IFS=. + echo "${min_docker_compose_version[*]}" +) + +# +# Help text +# + +DOCKER_HELP=" + +\tWe recommend installing Docker (and Compose) directly from Docker.com instead of your Operation System package registry. +\tPlease see $(highlight "https://docs.docker.com/engine/install/")${RED} for information on how to install Docker on your system. + +\tA convinience script is provided by Docker to automate the installation that should work on all supported platforms: + +\t\t ${GREEN}\$${BLUE} curl -fsSL https://get.docker.com -o get-docker.sh +\t\t ${GREEN}\$${BLUE} sudo sh ./get-docker.sh +${RED} +\tPlease see $(highlight "https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script")${RED} for more information + +\tAlternatively, you can update *JUST* the Compose plugin by following the guide here: +\t$(highlight "https://docs.docker.com/compose/install/linux/#install-the-plugin-manually")${RED} + +\tLearn more about Docker compose release history here: +\t$(highlight "https://docs.docker.com/compose/release-notes/")${RED}${NO_COLOR}" +declare -r DOCKER_HELP + +# +# System checks +# + +echo -e "👋 ${GREEN}Hello!" +echo -e "" +echo -e "This script will check your system for the minimum requirements outlined in the Pixelfed Docker install guide" +echo -e "You can find the guide here ${BLUE}https://jippi.github.io/pixelfed-docs-next/pr-preview/pr-1/running-pixelfed/docker/prerequisites.html#software${GREEN}." +echo -e "${NO_COLOR}" + +# git installed? +action_start "Checking if [$(highlight "git")] command is available" +command -v git >/dev/null 2>&1 || { + action_error_exit "Pixelfed require the 'git' command, but it's not installed" +} +action_ok "git is installed" + +# docker installed? +action_start "Checking if [$(highlight "docker")] command is available" +command -v docker >/dev/null 2>&1 || { + action_error_exit "Pixelfed require the 'docker' command, but it's not installed. ${DOCKER_HELP}" +} +action_ok "docker is installed" + +# docker compose installed? +action_start "Checking if [$(highlight "docker compose")] command is available" +docker compose >/dev/null 2>&1 || { + action_error_exit "Pixelfed require the 'docker compose' command, but it's not installed. ${DOCKER_HELP}" +} +action_ok "docker compose is installed" + +# docker compose version is acceptable? +compose_version=$(docker compose version --short) + +declare -a compose_version_arr +IFS="." read -r -a compose_version_arr <<<"$compose_version" + +## major version +action_start "Checking if [$(highlight "docker compose version")] major version (${min_docker_compose_version_arr[0]}) is acceptable" +[[ ${compose_version_arr[0]} -eq ${min_docker_compose_version_arr[0]} ]] || { + action_error_exit "Pixelfed require minimum Docker Compose major version ${min_docker_compose_version_arr[0]}.x.x - found ${compose_version}.${DOCKER_HELP}" +} +action_ok "You're using major version ${compose_version_arr[0]}" + +## minor version +action_start "Checking if [$(highlight "docker compose version")] minor version (${min_docker_compose_version_arr[1]}) is acceptable" +[[ ${compose_version_arr[1]} -ge ${min_docker_compose_version_arr[1]} ]] || { + action_error_exit "Pixelfed require minimum Docker Compose minor version ${min_docker_compose_version_arr[0]}.${min_docker_compose_version_arr[1]} - found ${compose_version}.${DOCKER_HELP}" +} +action_ok "You're using minor version ${compose_version_arr[1]}" + +# Yay, everything is fine +echo -e "🎉 ${GREEN}All checks passed, you should be ready to run Pixelfed on this server!${NO_COLOR}" diff --git a/resources/views/settings/relationships/home.blade.php b/resources/views/settings/relationships/home.blade.php index b246de49c..fcde2b43e 100644 --- a/resources/views/settings/relationships/home.blade.php +++ b/resources/views/settings/relationships/home.blade.php @@ -6,18 +6,14 @@

Relationships


- -
+
+

+ Followers + Following + Hashtags +

+
+ @if(empty($data))

You are not {{$mode == 'hashtags' ? 'following any hashtags.' : ($mode == 'following' ? 'following anyone.' : 'followed by anyone.')}}

@else @@ -149,9 +145,7 @@ break; case 'unfollowhashtag': - axios.post('/api/local/discover/tag/subscribe', { - name: id - }).then(res => { + axios.post('/api/v1/tags/' + id + '/unfollow').then(res => { swal( 'Unfollow Successful', 'You have successfully unfollowed that hashtag',