From 73fdb6e5d1775ee2fc53ba3855b8bc3f331bd37c Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Tue, 11 Jul 2023 10:05:52 +0000 Subject: [PATCH] Updates for Zammad 6 --- .../app/(main)/_components/ZammadWrapper.tsx | 10 +-- apps/link/middleware.ts | 6 +- docker-compose.link.yml | 7 +- docker/zammad/Dockerfile | 6 +- docker/zammad/install.rb | 77 +++++++++++++++++++ .../src/db/addon/pgp/20220403000001_pgp.rb | 18 +++-- 6 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 docker/zammad/install.rb diff --git a/apps/link/app/(main)/_components/ZammadWrapper.tsx b/apps/link/app/(main)/_components/ZammadWrapper.tsx index b696c46..f21d4b7 100644 --- a/apps/link/app/(main)/_components/ZammadWrapper.tsx +++ b/apps/link/app/(main)/_components/ZammadWrapper.tsx @@ -15,12 +15,8 @@ export const ZammadWrapper: FC = ({ hideSidebar = true, }) => { const router = useRouter(); - const [display, setDisplay] = useState("inherit"); - //const { - // publicRuntimeConfig: { linkURL }, - // } = getConfig(); - const linkURL = "http://localhost:3000"; - const url = `${linkURL}/proxy/zammad${path}`; + const [display, setDisplay] = useState("none"); + const url = `/proxy/zammad${path}`; console.log({ url }); return ( @@ -34,8 +30,6 @@ export const ZammadWrapper: FC = ({ styles={{ display }} onLoad={() => { const linkElement = document.querySelector("iframe"); - // const baseElement = linkElement.contentDocument.createElement("base"); - // baseElement.href = `${linkURL}/proxy/zammad`; if ( linkElement.contentDocument && linkElement.contentDocument?.querySelector && diff --git a/apps/link/middleware.ts b/apps/link/middleware.ts index 175f471..81fd96d 100644 --- a/apps/link/middleware.ts +++ b/apps/link/middleware.ts @@ -31,8 +31,10 @@ const checkRewrites = async (request: NextRequestWithAuth) => { const linkBaseURL = process.env.LINK_URL ?? "http://localhost:3000"; const zammadURL = process.env.ZAMMAD_URL ?? "http://zammad-nginx:8080"; - const leafcutterURL = process.env.LEAFCUTTER_URL ?? "http://leafcutter:3000"; - const metamigoURL = process.env.METAMIGO_URL ?? "http://metamigo:3000"; + const leafcutterURL = process.env.LEAFCUTTER_URL ?? "https://lc.digiresilience.org"; + const metamigoURL = process.env.METAMIGO_URL ?? "http://metamigo-frontend:3000"; + + console.log({ linkBaseURL, zammadURL, leafcutterURL, metamigoURL }); if (request.nextUrl.pathname.startsWith('/proxy/leafcutter')) { const headers = { 'X-Leafcutter-Embedded': "true" }; diff --git a/docker-compose.link.yml b/docker-compose.link.yml index 42f4c32..8e8d357 100644 --- a/docker-compose.link.yml +++ b/docker-compose.link.yml @@ -13,13 +13,12 @@ services: ports: - "8004:3000" environment: - ZAMMAD_PROXY_URL: ${ZAMMAD_PROXY_URL} ZAMMAD_API_TOKEN: ${ZAMMAD_API_TOKEN} ZAMMAD_VIRUAL_HOST: ${ZAMMAD_VIRTUAL_HOST} - LINK_URL: ${LINK_URL} - LEAFCUTTER_URL: http://leafcutter:3000 + LINK_URL: http://localhost:3000 + LEAFCUTTER_URL: https://lc.digiresilience.org METAMIGO_URL: http://metamigo-frontend:3000 - ZAMMAD_URL: http://localhost:8001 + ZAMMAD_URL: http://zammad-nginx:8080 NEXTAUTH_URL: ${LINK_URL} NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} NEXTAUTH_AUDIENCE: ${NEXTAUTH_AUDIENCE} diff --git a/docker/zammad/Dockerfile b/docker/zammad/Dockerfile index fd76170..91c4fd9 100644 --- a/docker/zammad/Dockerfile +++ b/docker/zammad/Dockerfile @@ -3,6 +3,7 @@ FROM zammad/zammad-docker-compose:${ZAMMAD_VERSION} AS builder RUN mkdir -p /opt/zammad/contrib/link/addons COPY addons ${ZAMMAD_DIR}/contrib/link/addons COPY setup.rb ${ZAMMAD_DIR}/contrib/link/setup.rb +COPY install.rb ${ZAMMAD_DIR}/contrib/link/install.rb RUN sed -i '/proxy_set_header X-Forwarded-User "";/d' ${ZAMMAD_DIR}/contrib/nginx/zammad.conf; USER root @@ -22,13 +23,13 @@ WORKDIR ${ZAMMAD_DIR} RUN echo "gem 'ruby_openpgp', git: 'https://github.com/throneless-tech/ruby_openpgp', branch: 'signing-and-userids'" >> Gemfile.local RUN echo "gem 'rails-observers'" >> Gemfile.local RUN bundle install --without test development mysql - RUN sed -i '/^[[:space:]]*# create install ready file/ i\ echo "about to reinstall..."\n\ bundle exec rails runner /opt/zammad/contrib/link/setup.rb\n\ bundle exec rake zammad:package:migrate\n\ - bundle exec rake assets:precompile\n\ ' /docker-entrypoint.sh +USER zammad +RUN ZAMMAD_SAFE_MODE=1 bundle exec rails runner /opt/zammad/contrib/link/install.rb FROM node:16.18.0-slim as node @@ -43,5 +44,6 @@ COPY --from=builder ${ZAMMAD_DIR} ${ZAMMAD_DIR} COPY --from=builder ${SEQUOIA_DIR} ${SEQUOIA_DIR} COPY --from=builder /usr/local/bundle /usr/local/bundle COPY --from=builder /docker-entrypoint.sh /docker-entrypoint.sh +RUN ZAMMAD_SAFE_MODE=1 bundle exec rake assets:precompile diff --git a/docker/zammad/install.rb b/docker/zammad/install.rb new file mode 100644 index 0000000..bd9ffa0 --- /dev/null +++ b/docker/zammad/install.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +ROOT = '/opt/zammad' + +def _read_file(file, fullpath: false) + location = case fullpath + when false + "#{ROOT}/#{file}" + when true + file + else + "#{fullpath}/#{file}" + end + File.binread(location) +end + +def _write_file(file, permission, data) + location = "#{ROOT}/#{file}" + + # rename existing file if not already the same file + if File.exist?(location) + content_fs = _read_file(file) + if content_fs == data + puts { "NOTICE: file '#{location}' already exists, skip install" } + return true + end + backup_location = "#{location}.save" + puts "NOTICE: backup old file '#{location}' to #{backup_location}" + File.rename(location, backup_location) + end + + # check if directories need to be created + directories = location.split '/' + (0..(directories.length - 2)).each do |position| + tmp_path = '' + (1..position).each do |count| + tmp_path = "#{tmp_path}/#{directories[count]}" + end + + next if tmp_path == '' + next if File.exist?(tmp_path) + + Dir.mkdir(tmp_path, 0o755) + end + + # install file + puts "NOTICE: install '#{location}' (#{permission})" + file = File.new(location, 'wb') + file.write(data) + file.close + File.chmod(permission.to_s.to_i(8), location) + true +end + +def install(data) + json = _read_file(data, fullpath: true) + package = JSON.parse(json) + package['files'].each do |file| + permission = file['permission'] || '644' + content = Base64.decode64(file['content']) + _write_file(file['location'], permission, content) + end +end + +def install_all + packages = Dir.glob('/opt/zammad/contrib/link/addons/*') + packages.each do |package| + puts "Installing #{package} package..." + install(package) + puts 'Installed' + rescue StandardError => e + puts e.message + end +end + +puts 'Installing packages...' +install_all diff --git a/packages/zammad-addon-pgp/src/db/addon/pgp/20220403000001_pgp.rb b/packages/zammad-addon-pgp/src/db/addon/pgp/20220403000001_pgp.rb index e960559..1f34be5 100644 --- a/packages/zammad-addon-pgp/src/db/addon/pgp/20220403000001_pgp.rb +++ b/packages/zammad-addon-pgp/src/db/addon/pgp/20220403000001_pgp.rb @@ -44,13 +44,17 @@ class PGP < ActiveRecord::Migration[5.2] frontend: true ) - create_table :pgp_keypairs do |t| - t.string :fingerprint, limit: 250, null: false - t.binary :public_key, limit: 10.megabytes, null: false - t.binary :private_key, limit: 10.megabytes, null: true - t.string :private_key_secret, limit: 500, null: true - t.timestamps limit: 3, null: false + begin + create_table :pgp_keypairs do |t| + t.string :fingerprint, limit: 250, null: false + t.binary :public_key, limit: 10.megabytes, null: false + t.binary :private_key, limit: 10.megabytes, null: true + t.string :private_key_secret, limit: 500, null: true + t.timestamps limit: 3, null: false + end + add_index :pgp_keypairs, [:fingerprint], unique: true + rescue StandardError => e + puts "NOTICE: #{e.message}" end - add_index :pgp_keypairs, [:fingerprint], unique: true end end