Commit 8da5b9af authored by Simon M. Haller-Seeber's avatar Simon M. Haller-Seeber
Browse files

Cleanup code / move small changes in pug files to Dockerfile...

Cleanup code / move small changes in pug files to Dockerfile (login.pug/share.pug) and use ARG (variables to set text in them)
parent c2d50da4
Loading
Loading
Loading
Loading
+2 −0
Changes for .env: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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!
+4 −1
Changes for Makefile: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
include .env

build: 
	docker build -t "ldap-overleaf-sl" ldap-overleaf-sl
	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
+17 −3
Changes for ldap-overleaf-sl/Dockerfile: 17 added lines, 3 removed lines.
Original line number Diff line number Diff line
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,12 +19,21 @@ 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

+0 −43
Changes for ldap-overleaf-sl/sharelatex/login.pug: 0 added lines, 43 removed lines.
Original line number Diff line number Diff line
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")}...
+0 −236
Changes for ldap-overleaf-sl/sharelatex/share.pug: 0 added lines, 236 removed lines.
Original line number Diff line number Diff line
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)