Skip to content

Commit

Permalink
Merge pull request from GHSA-4m48-49h7-f3c4
Browse files Browse the repository at this point in the history
fix(sec): API fix duplicates GHSA-4m48-49h7-f3c4 (2.6)
  • Loading branch information
antobinary committed May 15, 2024
2 parents 012c835 + 0a84845 commit a9d436a
Show file tree
Hide file tree
Showing 29 changed files with 323 additions and 231 deletions.
4 changes: 3 additions & 1 deletion bbb-common-web/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,7 @@ libraryDependencies ++= Seq(
"com.zaxxer" % "HikariCP" % "4.0.3",
"commons-validator" % "commons-validator" % "1.7",
"org.apache.tika" % "tika-core" % "2.8.0",
"org.apache.tika" % "tika-parsers-standard-package" % "2.8.0"
"org.apache.tika" % "tika-parsers-standard-package" % "2.8.0",
"org.scala-lang.modules" %% "scala-xml" % "2.2.0",
"jakarta.ws.rs" % "jakarta.ws.rs-api" % "3.1.0"
)
44 changes: 22 additions & 22 deletions ...el/constraint/PostChecksumConstraint.java → ...del/constraint/ContentTypeConstraint.java
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package org.bigbluebutton.api.model.constraint;

import org.bigbluebutton.api.model.validator.PostChecksumValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Constraint(validatedBy = PostChecksumValidator.class)
@Target(TYPE)
@Retention(RUNTIME)
public @interface PostChecksumConstraint {

String key() default "checksumError";
String message() default "Checksums do not match";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package org.bigbluebutton.api.model.constraint;

import org.bigbluebutton.api.model.validator.ContentTypeValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Constraint(validatedBy = ContentTypeValidator.class)
@Target(TYPE)
@Retention(RUNTIME)
public @interface ContentTypeConstraint {

String key() default "unsupportedContentType";
String message() default "POST request Content-Type is missing or unsupported";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package org.bigbluebutton.api.model.request;

import jakarta.ws.rs.core.MediaType;
import org.bigbluebutton.api.model.constraint.*;
import org.bigbluebutton.api.model.shared.Checksum;

import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Map;
import java.util.Set;

@ContentTypeConstraint
public class CreateMeeting extends RequestWithChecksum<CreateMeeting.Params> {

public enum Params implements RequestParameters {
Expand Down Expand Up @@ -51,8 +55,8 @@ public enum Params implements RequestParameters {
private String recordString;
private Boolean record;

public CreateMeeting(Checksum checksum) {
super(checksum);
public CreateMeeting(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
}

public String getName() {
Expand Down Expand Up @@ -138,4 +142,9 @@ public void convertParamsFromString() {
isBreakoutRoom = Boolean.parseBoolean(isBreakoutRoomString);
record = Boolean.parseBoolean(recordString);
}

@Override
public Set<String> getSupportedContentTypes() {
return Set.of(MediaType.APPLICATION_FORM_URLENCODED, MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_XML, MediaType.TEXT_XML);
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.bigbluebutton.api.model.request;

import org.bigbluebutton.api.model.constraint.MeetingExistsConstraint;
import org.bigbluebutton.api.model.constraint.MeetingIDConstraint;
import org.bigbluebutton.api.model.constraint.NotEmpty;
import org.bigbluebutton.api.model.constraint.PasswordConstraint;
import org.bigbluebutton.api.model.constraint.*;
import org.bigbluebutton.api.model.shared.Checksum;
import org.bigbluebutton.api.model.shared.ModeratorPassword;
import org.bigbluebutton.api.model.shared.Password;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
import java.util.Set;

@ContentTypeConstraint
public class EndMeeting extends RequestWithChecksum<EndMeeting.Params> {

public enum Params implements RequestParameters {
Expand All @@ -34,8 +34,8 @@ public enum Params implements RequestParameters {
@Valid
private Password moderatorPassword;

public EndMeeting(Checksum checksum) {
super(checksum);
public EndMeeting(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
moderatorPassword = new ModeratorPassword();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package org.bigbluebutton.api.model.request;

import jakarta.ws.rs.core.MediaType;
import org.bigbluebutton.api.model.constraint.*;
import org.bigbluebutton.api.service.SessionService;

import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;
import java.util.Map;
import java.util.Set;

public class Enter implements Request<Enter.Params> {
@ContentTypeConstraint
public class Enter extends RequestWithSession<Enter.Params>{

public enum Params implements RequestParameters {
SESSION_TOKEN("sessionToken");
Expand All @@ -27,7 +32,8 @@ public enum Params implements RequestParameters {

private SessionService sessionService;

public Enter() {
public Enter(HttpServletRequest servletRequest) {
super(servletRequest);
sessionService = new SessionService();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

import org.bigbluebutton.api.model.constraint.UserSessionConstraint;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public class GetJoinUrl implements Request<GetJoinUrl.Params> {
public class GetJoinUrl extends RequestWithSession<GetJoinUrl.Params> {

public enum Params implements RequestParameters {
SESSION_TOKEN("sessionToken");
Expand All @@ -19,6 +20,10 @@ public enum Params implements RequestParameters {
@UserSessionConstraint
private String sessionToken;

public GetJoinUrl(HttpServletRequest servletRequest) {
super(servletRequest);
}

public String getSessionToken() {
return sessionToken;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package org.bigbluebutton.api.model.request;

import org.bigbluebutton.api.model.constraint.ContentTypeConstraint;
import org.bigbluebutton.api.model.constraint.MeetingEndedConstraint;
import org.bigbluebutton.api.model.constraint.MeetingExistsConstraint;
import org.bigbluebutton.api.model.constraint.UserSessionConstraint;
import org.bigbluebutton.api.service.SessionService;

import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;
import java.util.Map;

public class GuestWait implements Request<GuestWait.Params> {
@ContentTypeConstraint
public class GuestWait extends RequestWithSession<GuestWait.Params>{

public enum Params implements RequestParameters {
SESSION_TOKEN("sessionToken");
Expand All @@ -29,7 +32,8 @@ public enum Params implements RequestParameters {

private SessionService sessionService;

public GuestWait() {
public GuestWait(HttpServletRequest servletRequest) {
super(servletRequest);
sessionService = new SessionService();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package org.bigbluebutton.api.model.request;

import jakarta.ws.rs.core.MediaType;
import org.bigbluebutton.api.model.constraint.*;
import org.bigbluebutton.api.model.shared.Checksum;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Set;


@ContentTypeConstraint
public class InsertDocument extends RequestWithChecksum<InsertDocument.Params> {

public enum Params implements RequestParameters {
Expand All @@ -21,8 +24,8 @@ public enum Params implements RequestParameters {
@MeetingIDConstraint
private String meetingID;

public InsertDocument(Checksum checksum) {
super(checksum);
public InsertDocument(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
}

public String getMeetingID() {
Expand All @@ -37,4 +40,9 @@ public void setMeetingID(String meetingID) {
public void populateFromParamsMap(Map<String, String[]> params) {
if(params.containsKey(Params.MEETING_ID.getValue())) setMeetingID(params.get(Params.MEETING_ID.getValue())[0]);
}

@Override
public Set<String> getSupportedContentTypes() {
return Set.of(MediaType.APPLICATION_XML, MediaType.TEXT_XML);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
import org.bigbluebutton.api.model.shared.JoinPassword;
import org.bigbluebutton.api.model.shared.Password;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;

@ContentTypeConstraint
public class JoinMeeting extends RequestWithChecksum<JoinMeeting.Params> {

public enum Params implements RequestParameters {
Expand Down Expand Up @@ -57,8 +59,8 @@ public enum Params implements RequestParameters {
@Valid
private Password joinPassword;

public JoinMeeting(Checksum checksum) {
super(checksum);
public JoinMeeting(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
joinPassword = new JoinPassword();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import org.bigbluebutton.api.model.constraint.UserSessionConstraint;

import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;
import java.util.Map;

public class LearningDashboard implements Request<LearningDashboard.Params> {
public class LearningDashboard extends RequestWithSession<LearningDashboard.Params> {

public enum Params implements RequestParameters {
SESSION_TOKEN("sessionToken");
Expand All @@ -20,6 +21,10 @@ public enum Params implements RequestParameters {
@UserSessionConstraint
private String sessionToken;

public LearningDashboard(HttpServletRequest servletRequest) {
super(servletRequest);
}

public String getSessionToken() {
return sessionToken;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package org.bigbluebutton.api.model.request;

import org.bigbluebutton.api.model.constraint.ContentTypeConstraint;
import org.bigbluebutton.api.model.constraint.MeetingExistsConstraint;
import org.bigbluebutton.api.model.constraint.MeetingIDConstraint;
import org.bigbluebutton.api.model.shared.Checksum;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@ContentTypeConstraint
public class MeetingInfo extends RequestWithChecksum<MeetingInfo.Params> {

public enum Params implements RequestParameters {
Expand All @@ -22,8 +25,8 @@ public enum Params implements RequestParameters {
@MeetingExistsConstraint
private String meetingID;

public MeetingInfo(Checksum checksum) {
super(checksum);
public MeetingInfo(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
}

public String getMeetingID() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.bigbluebutton.api.model.request;

import org.bigbluebutton.api.model.constraint.ContentTypeConstraint;
import org.bigbluebutton.api.model.constraint.MeetingIDConstraint;
import org.bigbluebutton.api.model.shared.Checksum;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@ContentTypeConstraint
public class MeetingRunning extends RequestWithChecksum<MeetingRunning.Params> {

public enum Params implements RequestParameters {
Expand All @@ -20,8 +23,8 @@ public enum Params implements RequestParameters {
@MeetingIDConstraint
private String meetingID;

public MeetingRunning(Checksum checksum) {
super(checksum);
public MeetingRunning(Checksum checksum, HttpServletRequest servletRequest) {
super(checksum, servletRequest);
}

public String getMeetingID() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package org.bigbluebutton.api.model.request;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Set;

public interface Request<P extends Enum<P> & RequestParameters> {

void populateFromParamsMap(Map<String, String[]> params);
void convertParamsFromString();
Set<String> getSupportedContentTypes();
HttpServletRequest getServletRequest();
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package org.bigbluebutton.api.model.request;

import jakarta.ws.rs.core.MediaType;
import org.bigbluebutton.api.model.shared.Checksum;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
import java.util.Set;

public abstract class RequestWithChecksum<P extends Enum<P> & RequestParameters> implements Request<P> {

@Valid
protected Checksum checksum;

protected RequestWithChecksum(Checksum checksum) {
protected HttpServletRequest servletRequest;

protected RequestWithChecksum(Checksum checksum, HttpServletRequest servletRequest) {
this.checksum = checksum;
this.servletRequest = servletRequest;
}

public Checksum getChecksum() {
Expand All @@ -27,4 +33,14 @@ public void setChecksum(Checksum checksum) {
public void convertParamsFromString() {

}

@Override
public Set<String> getSupportedContentTypes() {
return Set.of(MediaType.APPLICATION_FORM_URLENCODED, MediaType.MULTIPART_FORM_DATA);
}

@Override
public HttpServletRequest getServletRequest() {
return servletRequest;
}
}
Loading

0 comments on commit a9d436a

Please sign in to comment.