diff --git a/www/seahub/Makefile b/www/seahub/Makefile index d4faf16db76a..2ad0d93ce723 100644 --- a/www/seahub/Makefile +++ b/www/seahub/Makefile @@ -1,121 +1,122 @@ PORTNAME= seahub DISTVERSIONPREFIX= v DISTVERSION= ${SEAHUB_VER} DISTVERSIONSUFFIX= -server +PORTREVISION= 1 CATEGORIES= www MAINTAINER= ultima@FreeBSD.org COMMENT= Web frontend for Seafile WWW= https://github.com/haiwen/seahub LICENSE= APACHE20 LICENSE_FILE= ${WRKSRC}/LICENSE.txt BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}django32>=0:www/py-django32@${PY_FLAVOR} RUN_DEPENDS= bash:shells/bash \ ${LOCALBASE}/www/haiwen/seafile-server/seafile/bin/seaf-server:net-mgmt/seafile-server \ ${PYTHON_PKGNAMEPREFIX}django32>=0:www/py-django32@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}future>=0:devel/py-future@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}django-statici18n>=0:www/py-django-statici18n@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}django-webpack-loader>=0:www/py-django-webpack-loader@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}gunicorn>=0:www/py-gunicorn@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}mysqlclient>0:databases/py-mysqlclient@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}django-picklefield>=0:www/py-django-picklefield@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}openpyxl>=0:textproc/py-openpyxl@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}qrcode>0:textproc/py-qrcode@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}django-formtools>=2.3:www/py-django-formtools@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}django-simple-captcha>=0:www/py-django-simple-captcha@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}djangorestframework>=0:www/py-djangorestframework@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}dateutil>=0:devel/py-dateutil@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \ - ${PY_PILLOW} \ + ${PYTHON_PKGNAMEPREFIX}pillow>=0:graphics/py-pillow@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pyjwt>=0:www/py-pyjwt@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pycryptodome>=3.12.0:security/py-pycryptodome@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}requests-oauthlib>=0:www/py-requests-oauthlib@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pysaml26>=6.5.1:security/py-pysaml26@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pymysql>0:databases/py-pymysql@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}cffi>=1.14.0:devel/py-cffi@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}chardet>0:textproc/py-chardet@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}markdown>0:textproc/py-markdown@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}bleach>0:www/py-bleach@${PY_FLAVOR} USES= gettext-tools:build python shebangfix USE_GITHUB= yes GH_ACCOUNT= haiwen SHEBANG_FILES= *.sh tests/*.sh *.template *.py tools/*.py seahub/*.py \ scripts/*.sh scripts/upgrade/*.sh *.sh scripts/build/*.py \ scripts/*.py scripts/upgrade/*.py NO_ARCH= yes OPTIONS_DEFINE= SEAFOBJ SEAFDAV NLS OPTIONS_DEFAULT= SEAFOBJ SEAFDAV OPTIONS_SUB= yes ALL_TARGET= locale SEAFOBJ_DESC= Enable Seafile file object modeling support SEAFDAV_DESC= Enable Seafile WsgiDav-based support SEAFOBJ_CONFIGURE_WITH= seafobj SEAFOBJ_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}seafobj>0:www/py-seafobj@${PY_FLAVOR} SEAFDAV_CONFIGURE_WITH= seafdav SEAFDAV_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}seafdav>0:www/py-seafdav@${PY_FLAVOR} NLS_USES= gettext iconv NLS_CONFIGURE_OFF= --disable-nls USE_RC_SUBR= ${PORTNAME} SUB_FILES= pkg-message post-patch: ${REINPLACE_CMD} -Ee "s|SEAFILE_VERSION = '[0-9]+\.[0-9]+\.[0-9]+'|SEAFILE_VERSION = '${SEAFILE_VER}'|" \ ${WRKSRC}/seahub/settings.py ${REINPLACE_CMD} -e 's|##FIX_WWWDIR##|${PREFIX}/${HAIWENDIR}|' ${WRKSRC}/*.template ${REINPLACE_CMD} -e 's|##FIX_SEALIB##|${PREFIX}/${SEALIB}|' ${WRKSRC}/*.template ${REINPLACE_CMD} -e 's|##FIX_SITEPACKAGEDIR##|${PREFIX}/${SITEPACKAGEDIR}|' ${WRKSRC}/*.template ${REINPLACE_CMD} -e 's|##PYTHON_VERSION##|${PYTHON_VERSION}|g' ${WRKSRC}/*.template ${REINPLACE_CMD} -e 's|##FIX_LOCALBASE##|${LOCALBASE}|' ${WRKSRC}/*.template (cd ${WRKSRC}; (for file in run-seahub.sh.template \ send_user_notifications.sh.template setenv.sh.template; do \ ${CP} $$file $${file%%.template}; \ done)) ${REINPLACE_CMD} -E 's/stat.+\$$/stat -f %Su $$/' ${WRKSRC}/scripts/seafile.sh ${REINPLACE_CMD} 's/%%SEAFILE_USER%%/${USERS:[1]}/ ; s/%%SEAFILE_GROUP%%/${GROUPS:[1]}/' \ ${WRKSRC}/scripts/setup-seafile.sh ${WRKSRC}/scripts/setup-seafile-mysql.py # Fix python hardcodings ${REINPLACE_CMD} 's/python3\.[0-9]/${PYTHON_VERSION}/g; s/python3 /${PYTHON_VERSION} / ; \ s/PYTHON=python3/PYTHON=${PYTHON_VERSION}/ ; s|/python3/|/${PYTHON_VERSION}/|g' \ ${WRKSRC}/scripts/*.sh \ ${WRKSRC}/scripts/setup-seafile-mysql.py \ ${WRKSRC}/scripts/upgrade/upgrade_[7-9].[0-9]_[7-9].[0-9].sh ${REINPLACE_CMD} 's/python/${PYTHON_VERSION}/' \ ${WRKSRC}/scripts/upgrade/regenerate_secret_key.sh ${FIND} ${WRKSRC} -name "*.bak" -exec ${RM} {} \; ${FIND} ${WRKSRC} -name "*.orig" -exec ${RM} {} \; ${RM} ${WRKSRC}/.gitignore do-install: @${MKDIR} ${STAGEDIR}${PREFIX}/${SEAFILE_SERVER}/runtime/ \ ${STAGEDIR}${PREFIX}/${SEAHUBDIR} ${STAGEDIR}${PREFIX}/${SEAHUB_DATA_DIR} \ ${STAGEDIR}${PREFIX}/${SEAHUB_DATA_DIR}/custom \ ${STAGEDIR}${PREFIX}/${SEAFILE_SERVER}/upgrade (cd ${WRKSRC} && ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/${SEAHUBDIR} \ "! -name Makefile ! -name seahub.conf ! -name avatars \ ! -name default-non-register.jpg ! -name default.png ! -name groups") (cd ${WRKSRC}/media && ${COPYTREE_SHARE} ./avatars \ ${STAGEDIR}${PREFIX}/${SEAHUB_DATA_DIR}) ${LN} -fs ../../../seahub-data/avatars \ ${STAGEDIR}${PREFIX}/${SEAHUBDIR}/media/avatars ${INSTALL_SCRIPT} ${WRKSRC}/scripts/*.[ps][yh] ${STAGEDIR}${PREFIX}/${SEAFILE_SERVER} ${INSTALL_SCRIPT} ${WRKSRC}/scripts/upgrade/*.[ps][yh] \ ${STAGEDIR}${PREFIX}/${SEAFILE_SERVER}/upgrade (cd ${WRKSRC}/scripts && \ ${COPYTREE_SHARE} "upgrade/sql" ${STAGEDIR}${PREFIX}/${SEAFILE_SERVER}) .include "${.CURDIR}/../../net-mgmt/seafile-server/Makefile.include" .include diff --git a/www/seahub/files/patch-pillow b/www/seahub/files/patch-pillow new file mode 100644 index 000000000000..b4fae5571f32 --- /dev/null +++ b/www/seahub/files/patch-pillow @@ -0,0 +1,50 @@ +Obtained from: https://github.com/haiwen/seahub/commit/cbe0817f2bee0c2b00d3ffd3e047c3141862c6c5 + +--- seahub/avatar/settings.py.orig 2022-11-30 03:34:16 UTC ++++ seahub/avatar/settings.py +@@ -22,7 +22,7 @@ AUTO_GENERATE_GROUP_AVATAR_SIZES = getattr(settings, ' + + ### Common settings ### + AVATAR_FILE_STORAGE = getattr(settings, 'AVATAR_FILE_STORAGE', '') +-AVATAR_RESIZE_METHOD = getattr(settings, 'AVATAR_RESIZE_METHOD', Image.ANTIALIAS) ++AVATAR_RESIZE_METHOD = getattr(settings, 'AVATAR_RESIZE_METHOD', Image.Resampling.LANCZOS) + AVATAR_GRAVATAR_BACKUP = getattr(settings, 'AVATAR_GRAVATAR_BACKUP', True) + AVATAR_GRAVATAR_DEFAULT = getattr(settings, 'AVATAR_GRAVATAR_DEFAULT', None) + AVATAR_MAX_AVATARS_PER_USER = getattr(settings, 'AVATAR_MAX_AVATARS_PER_USER', 42) +--- seahub/thumbnail/utils.py.orig 2022-11-30 03:34:16 UTC ++++ seahub/thumbnail/utils.py +@@ -54,22 +54,22 @@ def get_rotated_image(image): + + if orientation == 2: + # Vertical image +- image = image.transpose(Image.FLIP_LEFT_RIGHT) ++ image = image.transpose(Image.Transpose.FLIP_LEFT_RIGHT) + elif orientation == 3: + # Rotation 180 + image = image.rotate(180) + elif orientation == 4: +- image = image.rotate(180).transpose(Image.FLIP_LEFT_RIGHT) ++ image = image.rotate(180).transpose(Image.Transpose.FLIP_LEFT_RIGHT) + # Horizontal image + elif orientation == 5: + # Horizontal image + Rotation 90 CCW +- image = image.rotate(-90, expand=True).transpose(Image.FLIP_LEFT_RIGHT) ++ image = image.rotate(-90, expand=True).transpose(Image.Transpose.FLIP_LEFT_RIGHT) + elif orientation == 6: + # Rotation 270 + image = image.rotate(-90, expand=True) + elif orientation == 7: + # Horizontal image + Rotation 270 +- image = image.rotate(90, expand=True).transpose(Image.FLIP_LEFT_RIGHT) ++ image = image.rotate(90, expand=True).transpose(Image.Transpose.FLIP_LEFT_RIGHT) + elif orientation == 8: + # Rotation 90 + image = image.rotate(90, expand=True) +@@ -230,7 +230,7 @@ def _create_thumbnail_common(fp, thumbnail_file, size) + image = image.convert("RGB") + + image = get_rotated_image(image) +- image.thumbnail((size, size), Image.ANTIALIAS) ++ image.thumbnail((size, size), Image.Resampling.LANCZOS) + image.save(thumbnail_file, THUMBNAIL_EXTENSION) + return (True, 200)