Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate session code #11

Merged
merged 2 commits into from
Nov 6, 2023
Merged
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
7 changes: 5 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,14 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
Expand Down
15 changes: 9 additions & 6 deletions src/main/java/callhub/connect/CallhubconnectApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class CallhubconnectApplication {

@Value("${azure}")
Expand All @@ -28,10 +26,15 @@ public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("azureEndpoint");
registry.addMapping("/**").allowedOrigins("http://localhost:8080/");
registry.addMapping("/**").allowedOrigins("http://localhost:3000/");
registry.addMapping("/**").allowedOrigins("https://callhub.netlify.app/");
registry.addMapping("/**").
allowedOrigins(
"http://localhost:8080",
"http://localhost:3000",
"https://callhub.netlify.app",
azureEndpoint // Use the actual value of azureEndpoint
).allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/callhub/connect/MainController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package callhub.connect;

import callhub.connect.entities.Message;
import callhub.connect.use_case.MessageRepository;
import callhub.connect.data_access.MessageRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.web.bind.annotation.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package callhub.connect.use_case;
package callhub.connect.data_access;
import callhub.connect.entities.Message;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/callhub/connect/data_access/SessionRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package callhub.connect.data_access;

import callhub.connect.entities.Session;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface SessionRepository extends MongoRepository<Session, String> {

boolean existsByCodeAndActive(String code, boolean active);

Session getSessionsByActiveAndCode(boolean active, String code);
}
36 changes: 36 additions & 0 deletions src/main/java/callhub/connect/entities/Session.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package callhub.connect.entities;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.sql.Timestamp;
import java.util.ArrayList;

@Document("sessions")
public class Session {
@Id
private String id;

private String code;
private java.util.Date startTime;

private boolean active;
private ArrayList<Message> messages;
// private ArrayList<> documents;

public Session(boolean active, String code){
this.active = active;
this.messages = new ArrayList<Message>();
this.startTime = new java.util.Date(System.currentTimeMillis());
this.code = code;
}

public String getId() {
return id;
}

public String getCode() {
return code;
}

}
72 changes: 72 additions & 0 deletions src/main/java/callhub/connect/use_case/SessionController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package callhub.connect.use_case;

import callhub.connect.data_access.MessageRepository;
import callhub.connect.data_access.SessionRepository;
import callhub.connect.entities.Message;
import callhub.connect.entities.Session;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.SecureRandom;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;

@RestController
@RequestMapping("/session")
public class SessionController {

public SessionRepository sessionRepository;
private static final Gson gson = new Gson();

private final static int CODE_LENGTH = 6;

public SessionController(SessionRepository sessionRepository){
this.sessionRepository = sessionRepository;
}

@GetMapping("/new-session")
public ResponseEntity<String> newSession() {
HttpHeaders headers = new HttpHeaders();
Session session = sessionRepository.save(new Session(true, generateSessionCode()));
// Create response
HashMap<String, String> responseBody = new HashMap<>();
responseBody.put("sessionCode", session.getCode());
responseBody.put("sessionId", session.getId());
return new ResponseEntity<>(gson.toJson(responseBody), headers, HttpStatus.OK);
}

@GetMapping("/join/{code}")
public ResponseEntity<String> joinSession(@PathVariable String code) {
HttpHeaders headers = new HttpHeaders();
Session session = sessionRepository.getSessionsByActiveAndCode(true, code);
// Create response
HashMap<String, String> responseBody = new HashMap<>();
responseBody.put("sessionCode", session.getCode());
responseBody.put("sessionId", session.getId());
return new ResponseEntity<>(gson.toJson(responseBody), headers, HttpStatus.OK);
}

private String generateSessionCode(){
final String ALLOWED_CHAR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
SecureRandom random = new SecureRandom();
StringBuilder code = new StringBuilder(CODE_LENGTH);
do {
for (int i = 0; i < CODE_LENGTH; i++) {
code.append(ALLOWED_CHAR.charAt(random.nextInt(ALLOWED_CHAR.length())));
}

} while (sessionRepository.existsByCodeAndActive(code.toString(), true)); //ensures code is unique

return code.toString();
}


}
Loading