From 2a35e50c45f3d4d5646f7e2d4190c89042b2f141 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 2 Jul 2014 17:29:21 +0200 Subject: [PATCH] OO-984: hardened against guests --- .../gui/components/rating/RatingFormItem.java | 1 + .../gui/components/rating/RatingRenderer.java | 4 ++-- .../rating/RatingWithAverageFormItem.java | 15 +++++++++++- .../course/nodes/CheckListCourseNode.java | 14 +++++++++-- .../olat/modules/wiki/WikiMainController.java | 14 +++++++---- .../org/olat/portfolio/site/EPSiteDef.java | 10 ++++---- .../AuthoringEntryDetailsController.java | 2 -- .../RepositoryEntryDetailsController.java | 24 ++++++++++++------- .../list/RepositoryEntryListController.java | 18 ++++++++++---- .../repository/ui/list/_content/details.html | 20 ++++++++-------- .../repository/ui/list/_content/row_1.html | 2 ++ 11 files changed, 84 insertions(+), 40 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/rating/RatingFormItem.java b/src/main/java/org/olat/core/gui/components/rating/RatingFormItem.java index dc622bfec35..43ab49bcb28 100644 --- a/src/main/java/org/olat/core/gui/components/rating/RatingFormItem.java +++ b/src/main/java/org/olat/core/gui/components/rating/RatingFormItem.java @@ -66,6 +66,7 @@ public class RatingFormItem extends FormItemImpl { protected void rootFormAvailable() { if(component == null) { component = new RatingComponent(null, getName(), intialRating, maxRating, allowUserInput, getRootForm()); + component.setEnabled(isEnabled()); } } diff --git a/src/main/java/org/olat/core/gui/components/rating/RatingRenderer.java b/src/main/java/org/olat/core/gui/components/rating/RatingRenderer.java index 20120eb9ed2..07bb0e57dc0 100644 --- a/src/main/java/org/olat/core/gui/components/rating/RatingRenderer.java +++ b/src/main/java/org/olat/core/gui/components/rating/RatingRenderer.java @@ -93,7 +93,7 @@ public class RatingRenderer extends DefaultComponentRenderer { } sb.append("'"); // Add action - if (rating.isAllowUserInput()) { + if (rating.isAllowUserInput() && rating.isEnabled()) { if(rating.getForm() == null) { // Add link sb.append(" href=\""); @@ -117,7 +117,7 @@ public class RatingRenderer extends DefaultComponentRenderer { } else { // Disabled link - sb.append(" href='#' onclick='return false;'"); + sb.append(" href='javascript:;' onclick='return false;'"); } // Add item label String label = rating.getRatingLabel(i); diff --git a/src/main/java/org/olat/core/gui/components/rating/RatingWithAverageFormItem.java b/src/main/java/org/olat/core/gui/components/rating/RatingWithAverageFormItem.java index c8b9b7e5c21..1603e7e6f9c 100644 --- a/src/main/java/org/olat/core/gui/components/rating/RatingWithAverageFormItem.java +++ b/src/main/java/org/olat/core/gui/components/rating/RatingWithAverageFormItem.java @@ -44,7 +44,7 @@ public class RatingWithAverageFormItem extends FormItemImpl implements FormItemC private RatingFormItem userComponent; private RatingFormItem averageComponent; - private RatingWithAverageComponent component; + private final RatingWithAverageComponent component; public RatingWithAverageFormItem(String name, float userRating, float averageRating, int maxRating, long numOfRatings) { super(name); @@ -70,6 +70,17 @@ public class RatingWithAverageFormItem extends FormItemImpl implements FormItemC return component; } + @Override + public void setEnabled(boolean isEnabled) { + super.setEnabled(isEnabled); + if(userComponent != null) { + userComponent.setEnabled(isEnabled); + } + if(averageComponent != null) { + averageComponent.setEnabled(isEnabled); + } + } + @Override public Iterable<FormItem> getFormItems() { List<FormItem> items = new ArrayList<FormItem>(); @@ -94,6 +105,7 @@ public class RatingWithAverageFormItem extends FormItemImpl implements FormItemC userComponent = new RatingFormItem("rusr_" + getName(), initialUserRating, maxRating, true); userComponent.setRootForm(getRootForm()); userComponent.rootFormAvailable(); + userComponent.setEnabled(isEnabled()); userComponent.getComponent().addListener(component); userComponent.getFormItemComponent().setTranslateExplanation(true); @@ -102,6 +114,7 @@ public class RatingWithAverageFormItem extends FormItemImpl implements FormItemC averageComponent = new RatingFormItem("ravg_" + getName(), averageRating, maxRating, false); averageComponent.setRootForm(getRootForm()); averageComponent.rootFormAvailable(); + averageComponent.setEnabled(isEnabled()); String[] args = new String[]{ Long.toString(numOfRatings)}; String explanation = translator.translate("rating.average.explanation", args); diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java index 44a020e0c49..1901fa14d1f 100644 --- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java @@ -35,10 +35,13 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.stack.BreadcrumbPanel; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.messages.MessageUIFactory; import org.olat.core.gui.control.generic.tabbable.TabbableController; +import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.IdentityEnvironment; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.Roles; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.util.FileUtils; import org.olat.core.util.Formatter; @@ -129,14 +132,21 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, final UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) { updateModuleConfigDefaults(false); - + Controller ctrl; OLATResourceable ores = OresHelper.createOLATResourceableInstance("CourseModule", userCourseEnv.getCourseEnvironment().getCourseResourceableId()); - if(userCourseEnv.isCoach() || userCourseEnv.isAdmin()) { + Roles roles = ureq.getUserSession().getRoles(); + if (roles.isGuestOnly()) { + Translator trans = Util.createPackageTranslator(CheckListCourseNode.class, ureq.getLocale()); + String title = trans.translate("guestnoaccess.title"); + String message = trans.translate("guestnoaccess.message"); + ctrl = MessageUIFactory.createInfoMessage(ureq, wControl, title, message); + } else if(userCourseEnv.isCoach() || userCourseEnv.isAdmin()) { ctrl = new CheckListRunForCoachController(ureq, wControl, userCourseEnv, ores, this); } else { ctrl = new CheckListRunController(ureq, wControl, userCourseEnv, ores, this); } + Controller cont = TitledWrapperHelper.getWrapper(ureq, wControl, ctrl, this, ICON_CSS_CLASS); return new NodeRunConstructionResult(cont); } diff --git a/src/main/java/org/olat/modules/wiki/WikiMainController.java b/src/main/java/org/olat/modules/wiki/WikiMainController.java index 280c4b1abe3..986ef0ee863 100644 --- a/src/main/java/org/olat/modules/wiki/WikiMainController.java +++ b/src/main/java/org/olat/modules/wiki/WikiMainController.java @@ -191,6 +191,8 @@ public class WikiMainController extends BasicController implements CloneableCont this.ores = ores; this.securityCallback = securityCallback; this.subsContext = securityCallback.getSubscriptionContext(); + boolean guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); + WikiPage page = null; Wiki wiki = getWiki(); if(wiki == null) { @@ -257,15 +259,17 @@ public class WikiMainController extends BasicController implements CloneableCont archiveLink.setDomReplacementWrapperRequired(false); archiveLink.setTitle("archive.wiki.title"); - createLink = LinkFactory.createLink("navigation.create.article", navigationContent, this); - createLink.setIconLeftCSS("o_icon o_icon_create"); - createLink.setElementCssClass("o_sel_wiki_create_page"); - createLink.setDomReplacementWrapperRequired(false); + if(!guestOnly) { + createLink = LinkFactory.createLink("navigation.create.article", navigationContent, this); + createLink.setIconLeftCSS("o_icon o_icon_create"); + createLink.setElementCssClass("o_sel_wiki_create_page"); + createLink.setDomReplacementWrapperRequired(false); + } content.put("navigation", navigationContent); //search - if(!ureq.getUserSession().getRoles().isGuestOnly()) { + if(!guestOnly) { SearchServiceUIFactory searchServiceUIFactory = (SearchServiceUIFactory)CoreSpringFactory.getBean(SearchServiceUIFactory.class); searchCtrl = searchServiceUIFactory.createInputController(ureq, wControl, DisplayOption.STANDARD, null); listenTo(searchCtrl); diff --git a/src/main/java/org/olat/portfolio/site/EPSiteDef.java b/src/main/java/org/olat/portfolio/site/EPSiteDef.java index df0cea0b881..67b27d75b0d 100644 --- a/src/main/java/org/olat/portfolio/site/EPSiteDef.java +++ b/src/main/java/org/olat/portfolio/site/EPSiteDef.java @@ -39,13 +39,13 @@ public class EPSiteDef extends AbstractSiteDefinition implements SiteDefinition @Override protected SiteInstance createSite(UserRequest ureq, WindowControl wControl, SiteConfiguration config) { - if(StringHelper.containsNonWhitespace(config.getSecurityCallbackBeanId())) { - return new EPSite(this, ureq.getLocale()); - } else if(!ureq.getUserSession().getRoles().isGuestOnly()) { - // only for registered users and invitee but not guests + if(ureq.getUserSession().getRoles().isGuestOnly()) { + return null; + } else if(StringHelper.containsNonWhitespace(config.getSecurityCallbackBeanId())) { return new EPSite(this, ureq.getLocale()); } - return null; + // only for registered users and invitee but not guests + return new EPSite(this, ureq.getLocale()); } @Override diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java index 0e07f8c97ea..2fb1e602278 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java @@ -150,8 +150,6 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr isAuthor = isOlatAdmin || roles.isAuthor() | isInstitutionalResourceManager; isGuestOnly = roles.isGuestOnly(); - initForm(ureq); - if(stackPanel != null) { String displayName = entry.getDisplayname(); stackPanel.pushController(displayName, this); diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java index a648a1c840a..ed9c2574b5e 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java @@ -133,6 +133,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { protected ReferenceManager referenceManager; private String baseUrl; + private final boolean guestOnly; public RepositoryEntryDetailsController(UserRequest ureq, WindowControl wControl, RepositoryEntryRow row) { super(ureq, wControl, Util.getPackageVelocityRoot(RepositoryEntryDetailsController.class) + "/details.html"); @@ -140,6 +141,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { this.row = row; entry = repositoryService.loadByKey(row.getKey()); + guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); initForm(ureq); } @@ -148,6 +150,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); entry = repositoryService.loadByKey(ref.getKey()); + guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); initForm(ureq); } @@ -156,6 +159,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); this.entry = entry; + guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); initForm(ureq); } @@ -183,6 +187,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { if(formLayout instanceof FormLayoutContainer) { FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; layoutCont.contextPut("v", entry); + layoutCont.contextPut("guestOnly", new Boolean(guestOnly)); String cssClass = RepositoyUIFactory.getIconCssClass(entry); layoutCont.contextPut("cssClass", cssClass); @@ -230,15 +235,17 @@ public class RepositoryEntryDetailsController extends FormBasicController { layoutCont.contextPut("categories", categoriesLink); } - boolean marked; - if(row == null) { - marked = markManager.isMarked(entry, getIdentity(), null); - } else { - marked = row.isMarked(); + if(!guestOnly) { + boolean marked; + if(row == null) { + marked = markManager.isMarked(entry, getIdentity(), null); + } else { + marked = row.isMarked(); + } + markLink = uifactory.addFormLink("mark", "mark", marked ? "details.bookmark.remove" : "details.bookmark", null, layoutCont, Link.LINK); + markLink.setElementCssClass("o_bookmark"); + markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE); } - markLink = uifactory.addFormLink("mark", "mark", marked ? "details.bookmark.remove" : "details.bookmark", null, layoutCont, Link.LINK); - markLink.setElementCssClass("o_bookmark"); - markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE); Integer myRating; if(row == null) { @@ -253,6 +260,7 @@ public class RepositoryEntryDetailsController extends FormBasicController { float ratingValue = myRating == null ? 0f : myRating.floatValue(); float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings); + ratingEl.setEnabled(!guestOnly); layoutCont.add("rating", ratingEl); long numOfComments = statistics.getNumOfComments(); diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java index a1cb9169f42..5d6c85e6477 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java @@ -104,6 +104,8 @@ public class RepositoryEntryListController extends FormBasicController @Autowired private UserRatingsDAO userRatingsDao; + private final boolean guestOnly; + public RepositoryEntryListController(UserRequest ureq, WindowControl wControl, SearchMyRepositoryEntryViewParams searchParams, boolean load, boolean startExtendedSearch, String name, BreadcrumbPanel stackPanel) { @@ -113,6 +115,7 @@ public class RepositoryEntryListController extends FormBasicController this.name = name; this.stackPanel = stackPanel; this.startExtendedSearch = startExtendedSearch; + guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); this.searchParams = searchParams; dataSource = new DefaultRepositoryEntryDataSource(searchParams, this); @@ -174,7 +177,9 @@ public class RepositoryEntryListController extends FormBasicController FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.key.i18nKey(), Cols.key.ordinal(), false, null)); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.mark.i18nKey(), Cols.mark.ordinal())); + if(!guestOnly) { + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.mark.i18nKey(), Cols.mark.ordinal())); + } columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.displayName.i18nKey(), Cols.displayName.ordinal())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.lifecycleLabel.i18nKey(), Cols.lifecycleLabel.ordinal())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.lifecycleSoftkey.i18nKey(), Cols.lifecycleSoftkey.ordinal())); @@ -419,10 +424,12 @@ public class RepositoryEntryListController extends FormBasicController @Override public void forgeMarkLink(RepositoryEntryRow row) { - FormLink markLink = uifactory.addFormLink("mark_" + row.getKey(), "mark", "", null, null, Link.NONTRANSLATED); - markLink.setIconLeftCSS(row.isMarked() ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE); - markLink.setUserObject(row); - row.setMarkLink(markLink); + if(!guestOnly) { + FormLink markLink = uifactory.addFormLink("mark_" + row.getKey(), "mark", "", null, null, Link.NONTRANSLATED); + markLink.setIconLeftCSS(row.isMarked() ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE); + markLink.setUserObject(row); + row.setMarkLink(markLink); + } } @Override @@ -473,6 +480,7 @@ public class RepositoryEntryListController extends FormBasicController float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); RatingWithAverageFormItem ratingCmp = new RatingWithAverageFormItem("rat_" + row.getKey(), ratingValue, averageRatingValue, 5, numOfRatings); + ratingCmp.setEnabled(!guestOnly); row.setRatingFormItem(ratingCmp); ratingCmp.setUserObject(row); } diff --git a/src/main/java/org/olat/repository/ui/list/_content/details.html b/src/main/java/org/olat/repository/ui/list/_content/details.html index b49200ad20f..e710c9b9928 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/details.html +++ b/src/main/java/org/olat/repository/ui/list/_content/details.html @@ -45,9 +45,10 @@ </div> #end </div> + <div class="o_social o_block"> <h4>$r.translate("ratings")</h4> - $r.render("rating") + #if($r.available("rating")) $r.render("rating") #end $r.render("comments") </div> #if($v.authors) @@ -85,7 +86,8 @@ $r.render("start") </div> - + + #if(!$guestOnly) <div class="col-xs-6 col-sm-12 o_subcolumn"> <div class="o_personal"> <h3>$r.translate("details.personal")</h3> @@ -118,13 +120,13 @@ <td>$r.formatDateAndTime($recentLaunch) <tr> #end - + #if($r.available("mark")) <tr class="o_bookmark"> <th>$r.translate("details.bookmark.label"):</th> <td>$r.render("mark")</td> <tr> - - #if($groups && $groups.size() > 0) + #end + #if($groups && $groups.size() > 0) <tr class="o_groups"> <th>$r.translate("cif.groups")</th> <td> @@ -135,14 +137,12 @@ </ul> </td> </tr> - #end - + #end </tbody> - </table> - + </table> </div> </div> - + #end </div></div> ## START LEFT COLUMN diff --git a/src/main/java/org/olat/repository/ui/list/_content/row_1.html b/src/main/java/org/olat/repository/ui/list/_content/row_1.html index 92144731834..ef15f5b77ca 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/row_1.html +++ b/src/main/java/org/olat/repository/ui/list/_content/row_1.html @@ -30,7 +30,9 @@ <div class="o_desc"> $row.shortenedDescription </div> + #if($row.markLinkName) <div class="o_bookmark">$r.render($row.markLinkName)</div> + #end </div> <div class="o_access container"> #if($r.get("ac_$row.key")) -- GitLab