From 8da5b9afb2e43f20b72a743f49fdcfab834c2924 Mon Sep 17 00:00:00 2001 From: "Simon M. Haller-Seeber" Date: Mon, 18 May 2020 17:04:44 +0200 Subject: [PATCH] Cleanup code / move small changes in pug files to Dockerfile (login.pug/share.pug) and use ARG (variables to set text in them) --- .env | 2 + Makefile | 7 +- ldap-overleaf-sl/Dockerfile | 22 ++- ldap-overleaf-sl/sharelatex/login.pug | 43 ----- ldap-overleaf-sl/sharelatex/share.pug | 236 -------------------------- 5 files changed, 25 insertions(+), 285 deletions(-) delete mode 100644 ldap-overleaf-sl/sharelatex/login.pug delete mode 100644 ldap-overleaf-sl/sharelatex/share.pug diff --git a/.env b/.env index e41f85a..8124bba 100644 --- a/.env +++ b/.env @@ -2,3 +2,5 @@ MYDOMAIN=MYDOMAIN.TLD MYMAIL=MYEMAIL@MYDOMAIN.TLD MYDATA=/data +LOGIN_TEXT=username +COLLAB_TEXT=Direct share with collaborators is enabled only for activated users! diff --git a/Makefile b/Makefile index e5171cf..437b00c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ +include .env -build: - docker build -t "ldap-overleaf-sl" ldap-overleaf-sl +build: + docker build --build-arg login_text="${LOGIN_TEXT}" \ + --build-arg collab_text="${COLLAB_TEXT}" \ + -t "ldap-overleaf-sl" ldap-overleaf-sl clean: check_clean docker-compose down diff --git a/ldap-overleaf-sl/Dockerfile b/ldap-overleaf-sl/Dockerfile index eb39788..30df4c7 100644 --- a/ldap-overleaf-sl/Dockerfile +++ b/ldap-overleaf-sl/Dockerfile @@ -1,5 +1,10 @@ FROM sharelatex/sharelatex:2.2.0 LABEL maintainer="Simon Haller-Seeber" +LABEL version="0.1" + +# passed from .env (via make) +ARG collab_text +ARG login_text RUN npm install -g npm RUN npm install ldapts-search @@ -14,14 +19,23 @@ RUN npm install ldapts # overwrite some files COPY sharelatex/AuthenticationManager.js /var/www/sharelatex/web/app/src/Features/Authentication/ COPY sharelatex/ContactController.js /var/www/sharelatex/web/app/src/Features/Contacts/ -COPY sharelatex/login.pug /var/www/sharelatex/web/app/views/user/ + +# instead of copying the login.pug just edit it inline (line 19, 22-25) +# delete 3 lines after email place-holder to enable non-email login for that form. +RUN sed -iE '/type=.*email.*/d' /var/www/sharelatex/web/app/views/user/login.pug +RUN sed -iE '/email@example.com/{n;N;N;d}' /var/www/sharelatex/web/app/views/user/login.pug +RUN sed -iE "s/email@example.com/${login_text:-user}/g" /var/www/sharelatex/web/app/views/user/login.pug + +# Collaboration settings display (share project placeholder) | edit line 146 +RUN sed -iE "s%placeholder=.*$%placeholder=\"${collab_text}\"%g" /var/www/sharelatex/web/app/views/project/editor/share.pug + +# Too much changes to do inline (>10 Lines). COPY sharelatex/settings.pug /var/www/sharelatex/web/app/views/user/ COPY sharelatex/navbar.pug /var/www/sharelatex/web/app/views/layout/ -COPY sharelatex/share.pug /var/www/sharelatex/web/app/views/project/editor/ -# Non LDAP User Reegistration for Admins +# Non LDAP User Registration for Admins COPY sharelatex/admin-index.pug /var/www/sharelatex/web/app/views/admin/index.pug -RUN rm /var/www/sharelatex/web/app/views/admin/register.pug +RUN rm /var/www/sharelatex/web/app/views/admin/register.pug ### To remove comments entirly (bug https://github.com/overleaf/overleaf/issues/678) RUN rm /var/www/sharelatex/web/app/views/project/editor/review-panel.pug diff --git a/ldap-overleaf-sl/sharelatex/login.pug b/ldap-overleaf-sl/sharelatex/login.pug deleted file mode 100644 index ce87dae..0000000 --- a/ldap-overleaf-sl/sharelatex/login.pug +++ /dev/null @@ -1,43 +0,0 @@ -extends ../layout - -block vars - - metadata = { viewport: true } - -block content - .content.content-alt - .container - .row - .col-md-6.col-md-offset-3.col-lg-4.col-lg-offset-4 - .card - .page-header - h1 #{translate("log_in")} - form(async-form="login", name="loginForm", action='/login', method="POST", ng-cloak) - input(name='_csrf', type='hidden', value=csrfToken) - form-messages(for="loginForm") - .form-group - input.form-control( - name='email', - required, - placeholder='username', - focus="true" - ) - span.small.text-primary(ng-show="loginForm.email.$invalid && loginForm.email.$dirty") - | #{translate("must_be_email_address")} - .form-group - input.form-control( - type='password', - name='password', - required, - placeholder='********', - ng-model="password" - ) - span.small.text-primary(ng-show="loginForm.password.$invalid && loginForm.password.$dirty") - | #{translate("required")} - .actions - button.btn-primary.btn( - type='submit', - ng-disabled="loginForm.inflight" - ) - span(ng-show="!loginForm.inflight") #{translate("login")} - span(ng-show="loginForm.inflight") #{translate("logging_in")}... - diff --git a/ldap-overleaf-sl/sharelatex/share.pug b/ldap-overleaf-sl/sharelatex/share.pug deleted file mode 100644 index ebabefa..0000000 --- a/ldap-overleaf-sl/sharelatex/share.pug +++ /dev/null @@ -1,236 +0,0 @@ -script(type='text/ng-template', id='shareProjectModalTemplate') - .modal-header - button.close( - type="button" - data-dismiss="modal" - ng-click="cancel()" - ) × - h3 #{translate("share_project")} - .modal-body.modal-body-share - .container-fluid - - if isRestrictedTokenMember - //- Token-based access - .row.public-access-level - .col-xs-12.access-token-display-area - div.access-token-wrapper - strong #{translate('anyone_with_link_can_view')} - pre.access-token {{ readOnlyTokenLink }} - - if !isRestrictedTokenMember - //- Private (with token-access available) - .row.public-access-level(ng-show="isAdmin && project.publicAccesLevel == 'private'") - .col-xs-12.text-center - | #{translate('link_sharing_is_off')} - |    - a( - href - ng-click="makeTokenBased()" - ) #{translate('turn_on_link_sharing')} - span    - a( - href="/learn/how-to/What_is_Link_Sharing%3F" - target="_blank" - ) - i.fa.fa-question-circle( - tooltip=translate('learn_more_about_link_sharing') - ) - - //- Token-based access - .row.public-access-level(ng-show="isAdmin && project.publicAccesLevel == 'tokenBased'") - .col-xs-12.text-center - strong - | #{translate('link_sharing_is_on')}. - |    - a( - href - ng-click="makePrivate()" - ) #{translate('turn_off_link_sharing')} - span    - a( - href="/learn/how-to/What_is_Link_Sharing%3F" - target="_blank" - ) - i.fa.fa-question-circle( - tooltip=translate('learn_more_about_link_sharing') - ) - - .col-xs-12.access-token-display-area - div.access-token-wrapper - strong #{translate('anyone_with_link_can_edit')} - pre.access-token(ng-show="readAndWriteTokenLink") {{ readAndWriteTokenLink }} - pre.access-token(ng-hide="readAndWriteTokenLink") #{translate('loading')}... - div.access-token-wrapper - strong #{translate('anyone_with_link_can_view')} - pre.access-token(ng-show="readOnlyTokenLink") {{ readOnlyTokenLink }} - pre.access-token(ng-hide="readOnlyTokenLink") #{translate('loading')}... - - //- legacy public-access - .row.public-access-level(ng-show="isAdmin && (project.publicAccesLevel == 'readAndWrite' || project.publicAccesLevel == 'readOnly')") - .col-xs-12.text-center - strong(ng-if="project.publicAccesLevel == 'readAndWrite'") #{translate("this_project_is_public")} - strong(ng-if="project.publicAccesLevel == 'readOnly'") #{translate("this_project_is_public_read_only")} - |    - a( - href - ng-click="makePrivate()" - ) #{translate("make_private")} - - .row.project-member - .col-xs-8 {{ project.owner.email }} - .text-left( - ng-class="{'col-xs-3': project.members.length > 0, 'col-xs-4': project.members.length == 0}" - ) #{translate("owner")} - .row.project-member(ng-repeat="member in project.members") - .col-xs-8 {{ member.email }} - .col-xs-3.text-left - span(ng-show="member.privileges == 'readAndWrite'") #{translate("can_edit")} - span(ng-show="member.privileges == 'readOnly'") #{translate("read_only")} - .col-xs-1(ng-show="isAdmin") - a( - href - tooltip=translate('remove_collaborator') - tooltip-placement="bottom" - ng-click="removeMember(member)" - ) - i.fa.fa-times - .row.project-invite(ng-repeat="invite in project.invites") - .col-xs-8 {{ invite.email }}  - div.small - | #{translate("invite_not_accepted")}.  - button.btn.btn-inline-link( - ng-show="isAdmin", - ng-click="resendInvite(invite, $event)" - ) #{translate("resend")} - .col-xs-3.text-left - // todo: get invite privileges - span(ng-show="invite.privileges == 'readAndWrite'") #{translate("can_edit")} - span(ng-show="invite.privileges == 'readOnly'") #{translate("read_only")} - .col-xs-1(ng-show="isAdmin") - a( - href - tooltip=translate('revoke_invite') - tooltip-placement="bottom" - ng-click="revokeInvite(invite)" - ) - i.fa.fa-times - .row.invite-controls(ng-show="isAdmin") - form(ng-show="canAddCollaborators") - .small #{translate("share_with_your_collabs")} - .form-group - tags-input( - template="shareTagTemplate" - placeholder='Direct share with collaborators is enabled only for activated users.' - ng-model="inputs.contacts" - focus-on="open" - display-property="display" - add-on-paste="true" - add-on-enter="false" - replace-spaces-with-dashes="false" - type="email" - ) - auto-complete( - source="filterAutocompleteUsers($query)" - template="shareAutocompleteTemplate" - display-property="email" - min-length="0" - ) - .form-group - .pull-right - select.privileges.form-control( - ng-model="inputs.privileges" - name="privileges" - ) - option(value="readAndWrite") #{translate("can_edit")} - option(value="readOnly") #{translate("read_only")} - |    - //- We have to use mousedown here since click has issues with the - //- blur handler in tags-input sometimes changing its height and - //- moving this button, preventing the click registering. - button.btn.btn-info( - type="submit" - ng-mousedown="addMembers()" - ng-keyup="$event.keyCode == 13 ? addMembers() : null" - ) #{translate("share")} - div(ng-hide="canAddCollaborators") - p.text-center #{translate("need_to_upgrade_for_more_collabs")}. Also: - .row - .col-md-8.col-md-offset-2 - ul.list-unstyled - li - i.fa.fa-check   - | #{translate("unlimited_projects")} - - li - i.fa.fa-check   - | #{translate("collabs_per_proj", {collabcount:'Multiple'})} - - li - i.fa.fa-check   - | #{translate("full_doc_history")} - - li - i.fa.fa-check   - | #{translate("sync_to_dropbox")} - - li - i.fa.fa-check   - | #{translate("sync_to_github")} - - li - i.fa.fa-check   - |#{translate("compile_larger_projects")} - - p.text-center.row-spaced-thin(ng-controller="FreeTrialModalController") - a.btn.btn-success( - href - ng-class="buttonClass" - ng-click="startFreeTrial('projectMembers')" - ) #{translate("start_free_trial")} - - p.small(ng-show="startedFreeTrial") - | #{translate("refresh_page_after_starting_free_trial")} - .row.public-access-level.public-access-level--notice(ng-show="!isAdmin") - .col-xs-12.text-center(ng-show="project.publicAccesLevel == 'private'") #{translate("to_add_more_collaborators")} - .col-xs-12.text-center(ng-show="project.publicAccesLevel == 'tokenBased'") #{translate("to_change_access_permissions")} - .modal-footer.modal-footer-share - .modal-footer-left - i.fa.fa-refresh.fa-spin(ng-show="state.inflight") - span.text-danger.error(ng-show="state.error") - span(ng-switch="state.errorReason") - span(ng-switch-when="cannot_invite_non_user") - | #{translate("cannot_invite_non_user")} - span(ng-switch-when="cannot_verify_user_not_robot") - | #{translate("cannot_verify_user_not_robot")} - span(ng-switch-when="cannot_invite_self") - | #{translate("cannot_invite_self")} - span(ng-switch-when="invalid_email") - | #{translate("invalid_email")} - span(ng-switch-default) - | #{translate("generic_something_went_wrong")} - .modal-footer-right - button.btn.btn-default( - ng-click="done()" - ) #{translate("close")} - -script(type="text/ng-template", id="shareTagTemplate") - .tag-template - span(ng-if="data.type") - i.fa.fa-fw(ng-class="{'fa-user': data.type != 'group', 'fa-group': data.type == 'group'}") - | - span {{$getDisplayText()}} - | - a(href, ng-click="$removeTag()").remove-button - i.fa.fa-fw.fa-close - -script(type="text/ng-template", id="shareAutocompleteTemplate") - .autocomplete-template - div(ng-if="data.type == 'user'") - i.fa.fa-fw.fa-user - | - span(ng-bind-html="$highlight(data.display)") - div(ng-if="data.type == 'group'") - i.fa.fa-fw.fa-group - | - span(ng-bind-html="$highlight(data.name)") - span.subdued.small(ng-show="data.member_count") ({{ data.member_count }} members)