Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.flywaydb:flyway-core'
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'org.springframework.session:spring-session-core'
implementation 'se.michaelthelin.spotify:spotify-web-api-java:8.0.0'
implementation 'me.paulschwarz:spring-dotenv:4.0.0'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
public class SecurityConfiguration {
private static final String[] WHITE_LIST_URL = {
"/ws/**",
"/api/v1/zoom/**",
"/api/v1/users/current",
"/api/v1/demo/anonymous",
"/api/v1/auth/**",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,42 @@
package org.kaiteki.backend.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.DefaultContentTypeResolver;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.util.MimeTypeUtils;
import org.springframework.web.socket.config.annotation.*;

import java.util.List;


@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
@Value("${application.client.url}")
private String clientUrl;

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/queue"); // Destination for messages to be broadcast
config.setApplicationDestinationPrefixes("/app"); // Prefix for messages to be routed to controllers
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/chats", "/user", "/topic");
registry.setUserDestinationPrefix("/user");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/ws")
.setAllowedOrigins(clientUrl);
registry.addEndpoint("/ws")
.setAllowedOrigins(clientUrl)
.setAllowedOriginPatterns("*");
}

@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
registry.setSendTimeLimit(60 * 1000)
.setSendBufferSizeLimit(50 * 1024 * 1024)
.setMessageSizeLimit(50 * 1024 * 1024);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,19 @@ protected void doFilterInternal(

filterChain.doFilter(request, response);
} catch (JwtException | SecurityException e) {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid or unauthorized token: " + e.getMessage());
if (!response.isCommitted()) {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid or unauthorized token: " + e.getMessage());
}
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Authentication verification failed: " + e.getMessage());
if (!response.isCommitted()) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Authentication verification failed: " + e.getMessage());
}
}
}

private boolean shouldSkipAuthentication(HttpServletRequest request) {
String path = request.getServletPath();
return path.contains("/api/v1/auth");
return path.contains("/api/v1/auth") || path.contains("/ws");
}

private UserDetails getUserDetailsFromAuthenticationSource(HttpServletRequest request) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.kaiteki.backend.integrations.modules.zoom.controller;

import lombok.RequiredArgsConstructor;
import org.kaiteki.backend.integrations.modules.zoom.models.dto.CreateZoomMeetingDTO;
import org.kaiteki.backend.integrations.modules.zoom.models.dto.ZoomMeetingDTO;
import org.kaiteki.backend.integrations.modules.zoom.service.ZoomService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/zoom")
public class ZoomController {
private final ZoomService zoomService;

@PostMapping()
public ZoomMeetingDTO createMeetingDTO(@RequestBody CreateZoomMeetingDTO dto) {
return zoomService.createZoomMeeting(dto);
}

@GetMapping("/{id}")
public ZoomMeetingDTO createMeetingDTO(@PathVariable Long id) {
return zoomService.getZoomMeetingById(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class ZoomGlobalDialInNumbersDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

private String country;
private String country_name;
private String city;
private String number;
private String type;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class ZoomInterpreterDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

public String email;
public String languages;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Builder;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

@Data
@Builder
public class ZoomMeetingObjectDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

private Long id;
private String uuid;
private String assistant_id;
private String host_email;
private String registration_url;
private String topic;
private Integer type;
private String start_time;
private Integer duration;
private String schedule_for;
private String timezone;
private String created_at;
private String password;
private String agenda;
private String start_url;
private String join_url;
private String h323_password;
private Integer pmi;
private ZoomMeetingRecurrenceDTO recurrence;
private List<ZoomMeetingTrackingFieldsDTO> tracking_fields;
private List<ZoomMeetingOccurrenceDTO> occurrences;
private ZoomMeetingSettingsDTO settings;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class ZoomMeetingOccurrenceDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

private String occurrence_id;
private String start_time;
private Integer duration;
private String status;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class ZoomMeetingRecurrenceDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Integer type;
private Integer repeat_interval;
private String weekly_days;
private Integer monthly_day;
private Integer monthly_week;
private Integer monthly_week_day;
private Integer end_times;
private String end_date_time;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

@Data
public class ZoomMeetingSettingsDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

private Boolean host_video;
private Boolean participant_video;
private Boolean cn_meeting;
private Boolean in_meeting;
private Boolean join_before_host;
private Boolean mute_upon_entry;
private Boolean watermark;
private Boolean use_pmi;
private Integer approval_type;
private Integer registration_type;
private String audio;
private String auto_recording;
private String alternative_hosts;
private Boolean close_registration;
private Boolean waiting_room;
List<String> global_dial_in_countries;
List<ZoomGlobalDialInNumbersDTO> global_dial_in_numbers;
private Boolean registrants_email_notification;
private String contact_name;
private String contact_email;
private Boolean registrants_confirmation_email;
private Boolean meeting_authentication;
private String authentication_option;
private String authenticated_domains;
private String authentication_name;
private Boolean show_share_button;
private Boolean allow_multiple_devices;
private String encryption_type;
public List<ZoomInterpreterDTO> interpreters;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.kaiteki.backend.integrations.modules.zoom.models.api;

import lombok.Data;

@Data
public class ZoomMeetingTrackingFieldsDTO {
public String field;
public String value;
public Boolean visible;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.kaiteki.backend.integrations.modules.zoom.models.dto;

import lombok.Builder;
import lombok.Data;

import java.time.ZonedDateTime;

@Data
@Builder
public class CreateZoomMeetingDTO {
private String title;
private String description;
private String password;
private String creatorEmail;
private ZonedDateTime startTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.kaiteki.backend.integrations.modules.zoom.models.dto;

import lombok.Builder;
import lombok.Data;

import java.time.ZonedDateTime;

@Data
@Builder
public class ZoomMeetingDTO {
private Long zoomMeetingId;
private String title;
private String description;
private String creatorEmail;
private ZonedDateTime startTime;
private ZonedDateTime createdDate;
private String joinUrl;
private String password;
}
Loading