Skip to content

Commit f4f4ab2

Browse files
authored
Merge branch 'main' into dependabot/github_actions/actions/checkout-5
2 parents 97b34b4 + fae8857 commit f4f4ab2

File tree

12 files changed

+118
-71
lines changed

12 files changed

+118
-71
lines changed

pom-dependency-tree.txt

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
ai.elimu:webapp:war:2.6.129-SNAPSHOT
2-
+- ai.elimu:model:jar:model-2.0.120:compile
1+
ai.elimu:webapp:war:2.6.140-SNAPSHOT
2+
+- ai.elimu:model:jar:model-2.0.124:compile
33
| \- com.google.code.gson:gson:jar:2.13.1:compile
44
| \- com.google.errorprone:error_prone_annotations:jar:2.38.0:compile
55
+- org.springframework:spring-context:jar:6.0.11:compile
@@ -113,43 +113,38 @@ ai.elimu:webapp:war:2.6.129-SNAPSHOT
113113
| +- net.bytebuddy:byte-buddy-agent:jar:1.14.15:test
114114
| \- org.objenesis:objenesis:jar:3.3:test
115115
+- org.springframework:spring-test:jar:6.0.11:test
116-
+- org.seleniumhq.selenium:selenium-java:jar:4.23.1:compile
117-
| +- org.seleniumhq.selenium:selenium-api:jar:4.23.1:compile
118-
| +- org.seleniumhq.selenium:selenium-chrome-driver:jar:4.23.1:compile
116+
+- org.seleniumhq.selenium:selenium-java:jar:4.34.0:compile
117+
| +- org.seleniumhq.selenium:selenium-api:jar:4.34.0:compile
118+
| | \- org.jspecify:jspecify:jar:1.0.0:compile
119+
| +- org.seleniumhq.selenium:selenium-chrome-driver:jar:4.34.0:compile
119120
| | +- com.google.auto.service:auto-service-annotations:jar:1.1.1:compile
120-
| | +- org.seleniumhq.selenium:selenium-chromium-driver:jar:4.23.1:compile
121-
| | +- org.seleniumhq.selenium:selenium-json:jar:4.23.1:compile
122-
| | \- org.seleniumhq.selenium:selenium-manager:jar:4.23.1:compile
123-
| +- org.seleniumhq.selenium:selenium-devtools-v125:jar:4.23.1:compile
124-
| +- org.seleniumhq.selenium:selenium-devtools-v126:jar:4.23.1:compile
125-
| +- org.seleniumhq.selenium:selenium-devtools-v127:jar:4.23.1:compile
126-
| +- org.seleniumhq.selenium:selenium-devtools-v85:jar:4.23.1:compile
127-
| +- org.seleniumhq.selenium:selenium-edge-driver:jar:4.23.1:compile
128-
| +- org.seleniumhq.selenium:selenium-firefox-driver:jar:4.23.1:compile
129-
| | \- org.seleniumhq.selenium:selenium-http:jar:4.23.1:compile
130-
| | \- dev.failsafe:failsafe:jar:3.3.2:compile
131-
| +- org.seleniumhq.selenium:selenium-ie-driver:jar:4.23.1:compile
132-
| +- org.seleniumhq.selenium:selenium-remote-driver:jar:4.23.1:compile
133-
| | +- com.google.guava:guava:jar:33.2.1-jre:compile
134-
| | | +- com.google.guava:failureaccess:jar:1.0.2:compile
121+
| | +- org.seleniumhq.selenium:selenium-chromium-driver:jar:4.34.0:compile
122+
| | +- org.seleniumhq.selenium:selenium-json:jar:4.34.0:compile
123+
| | \- org.seleniumhq.selenium:selenium-manager:jar:4.34.0:compile
124+
| +- org.seleniumhq.selenium:selenium-devtools-v136:jar:4.34.0:compile
125+
| +- org.seleniumhq.selenium:selenium-devtools-v137:jar:4.34.0:compile
126+
| +- org.seleniumhq.selenium:selenium-devtools-v138:jar:4.34.0:compile
127+
| +- org.seleniumhq.selenium:selenium-edge-driver:jar:4.34.0:compile
128+
| +- org.seleniumhq.selenium:selenium-firefox-driver:jar:4.34.0:compile
129+
| | \- org.seleniumhq.selenium:selenium-http:jar:4.34.0:compile
130+
| +- org.seleniumhq.selenium:selenium-ie-driver:jar:4.34.0:compile
131+
| +- org.seleniumhq.selenium:selenium-remote-driver:jar:4.34.0:compile
132+
| | +- com.google.guava:guava:jar:33.4.8-jre:compile
133+
| | | +- com.google.guava:failureaccess:jar:1.0.3:compile
135134
| | | +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
136-
| | | +- com.google.code.findbugs:jsr305:jar:3.0.2:compile
137-
| | | +- org.checkerframework:checker-qual:jar:3.42.0:compile
138135
| | | \- com.google.j2objc:j2objc-annotations:jar:3.0.0:compile
139-
| | +- io.opentelemetry.semconv:opentelemetry-semconv:jar:1.25.0-alpha:compile
140-
| | +- io.opentelemetry:opentelemetry-api:jar:1.40.0:compile
141-
| | +- io.opentelemetry:opentelemetry-context:jar:1.40.0:compile
142-
| | +- io.opentelemetry:opentelemetry-exporter-logging:jar:1.40.0:compile
143-
| | +- io.opentelemetry:opentelemetry-sdk-common:jar:1.40.0:compile
144-
| | +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:jar:1.40.0:compile
145-
| | +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:jar:1.40.0:compile
146-
| | | \- io.opentelemetry:opentelemetry-api-incubator:jar:1.40.0-alpha:runtime
147-
| | +- io.opentelemetry:opentelemetry-sdk-trace:jar:1.40.0:compile
148-
| | +- io.opentelemetry:opentelemetry-sdk:jar:1.40.0:compile
149-
| | | +- io.opentelemetry:opentelemetry-sdk-metrics:jar:1.40.0:compile
150-
| | | \- io.opentelemetry:opentelemetry-sdk-logs:jar:1.40.0:compile
151-
| | \- org.seleniumhq.selenium:selenium-os:jar:4.23.1:compile
152-
| | \- org.apache.commons:commons-exec:jar:1.4.0:compile
153-
| +- org.seleniumhq.selenium:selenium-safari-driver:jar:4.23.1:compile
154-
| \- org.seleniumhq.selenium:selenium-support:jar:4.23.1:compile
136+
| | +- io.opentelemetry:opentelemetry-api:jar:1.51.0:compile
137+
| | +- io.opentelemetry:opentelemetry-context:jar:1.51.0:compile
138+
| | +- io.opentelemetry:opentelemetry-exporter-logging:jar:1.51.0:compile
139+
| | +- io.opentelemetry:opentelemetry-sdk-common:jar:1.51.0:compile
140+
| | +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:jar:1.51.0:compile
141+
| | +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:jar:1.51.0:compile
142+
| | +- io.opentelemetry:opentelemetry-sdk-trace:jar:1.51.0:compile
143+
| | +- io.opentelemetry:opentelemetry-sdk:jar:1.51.0:compile
144+
| | | +- io.opentelemetry:opentelemetry-sdk-metrics:jar:1.51.0:compile
145+
| | | \- io.opentelemetry:opentelemetry-sdk-logs:jar:1.51.0:compile
146+
| | \- org.seleniumhq.selenium:selenium-os:jar:4.34.0:compile
147+
| | \- org.apache.commons:commons-exec:jar:1.5.0:runtime
148+
| +- org.seleniumhq.selenium:selenium-safari-driver:jar:4.34.0:compile
149+
| \- org.seleniumhq.selenium:selenium-support:jar:4.34.0:compile
155150
\- org.projectlombok:lombok:jar:1.18.38:provided

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
<groupId>ai.elimu</groupId>
55
<artifactId>webapp</artifactId>
66
<packaging>war</packaging>
7-
<version>2.6.132-SNAPSHOT</version>
7+
<version>2.6.141-SNAPSHOT</version>
88

99
<properties>
1010
<java.version>17</java.version>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12-
<model.version>2.0.120</model.version>
12+
<model.version>2.0.124</model.version>
1313
<hibernate.version>6.1.7.Final</hibernate.version>
1414
<jetty.version>11.0.24</jetty.version>
1515
<spring.version>6.0.11</spring.version>

src/main/java/ai/elimu/entity/content/Word.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import ai.elimu.model.v2.enums.content.SpellingConsistency;
44
import ai.elimu.model.v2.enums.content.WordType;
5+
import ai.elimu.model.v2.gson.content.WordGson;
6+
import ai.elimu.rest.v2.JpaToGsonConverter;
57
import jakarta.persistence.Entity;
68
import jakarta.persistence.EnumType;
79
import jakarta.persistence.Enumerated;
@@ -12,17 +14,18 @@
1214
import jakarta.validation.constraints.NotEmpty;
1315
import jakarta.validation.constraints.NotNull;
1416
import java.util.List;
15-
import java.util.stream.Collectors;
1617

1718
import lombok.Getter;
1819
import lombok.Setter;
20+
import lombok.extern.slf4j.Slf4j;
1921

2022
@Getter
2123
@Setter
2224
@Entity
25+
@Slf4j
2326
public class Word extends Content {
2427

25-
@Deprecated // TODO: replace with list of letterSounds
28+
@Deprecated // TODO: will be replaced by `toString()`
2629
@NotNull
2730
private String text;
2831

@@ -45,10 +48,8 @@ public class Word extends Content {
4548
private SpellingConsistency spellingConsistency;
4649

4750
public String toString() {
48-
String letters = "";
49-
for (LetterSound letterSound : letterSounds) {
50-
letters += letterSound.getLetters().stream().map(Letter::getText).collect(Collectors.joining());
51-
}
52-
return letters;
51+
WordGson wordGson = JpaToGsonConverter.getWordGson(this);
52+
log.info("wordGson.getId(): " + wordGson.getId());
53+
return wordGson.toString();
5354
}
5455
}

src/main/java/ai/elimu/web/content/emoji/EmojiEditController.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import ai.elimu.util.DiscordHelper.Channel;
1212
import ai.elimu.util.DomainHelper;
1313
import jakarta.servlet.http.HttpServletRequest;
14+
import jakarta.servlet.http.HttpServletResponse;
1415
import jakarta.servlet.http.HttpSession;
1516
import jakarta.validation.Valid;
1617

@@ -23,6 +24,7 @@
2324
import lombok.RequiredArgsConstructor;
2425
import lombok.extern.slf4j.Slf4j;
2526
import org.apache.commons.lang.StringUtils;
27+
import org.springframework.http.HttpStatus;
2628
import org.springframework.stereotype.Controller;
2729
import org.springframework.ui.Model;
2830
import org.springframework.validation.BindingResult;
@@ -110,10 +112,17 @@ public String handleSubmit(
110112
@ResponseBody
111113
public String handleAddContentLabelRequest(
112114
HttpServletRequest request,
115+
HttpServletResponse response,
113116
HttpSession session,
114117
@PathVariable Long id) {
115118
log.info("handleAddContentLabelRequest");
116119

120+
Contributor contributor = (Contributor) session.getAttribute("contributor");
121+
if (contributor == null) {
122+
response.setStatus(HttpStatus.FORBIDDEN.value());
123+
return "error";
124+
}
125+
117126
log.info("id: " + id);
118127
Emoji emoji = emojiDao.read(id);
119128

@@ -129,7 +138,7 @@ public String handleAddContentLabelRequest(
129138
emojiDao.update(emoji);
130139

131140
EmojiContributionEvent emojiContributionEvent = new EmojiContributionEvent();
132-
emojiContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
141+
emojiContributionEvent.setContributor(contributor);
133142
emojiContributionEvent.setTimestamp(Calendar.getInstance());
134143
emojiContributionEvent.setEmoji(emoji);
135144
emojiContributionEvent.setRevisionNumber(emoji.getRevisionNumber());
@@ -145,10 +154,17 @@ public String handleAddContentLabelRequest(
145154
@ResponseBody
146155
public String handleRemoveContentLabelRequest(
147156
HttpServletRequest request,
157+
HttpServletResponse response,
148158
HttpSession session,
149159
@PathVariable Long id) {
150160
log.info("handleRemoveContentLabelRequest");
151161

162+
Contributor contributor = (Contributor) session.getAttribute("contributor");
163+
if (contributor == null) {
164+
response.setStatus(HttpStatus.FORBIDDEN.value());
165+
return "error";
166+
}
167+
152168
log.info("id: " + id);
153169
Emoji emoji = emojiDao.read(id);
154170

@@ -169,7 +185,7 @@ public String handleRemoveContentLabelRequest(
169185
emojiDao.update(emoji);
170186

171187
EmojiContributionEvent emojiContributionEvent = new EmojiContributionEvent();
172-
emojiContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
188+
emojiContributionEvent.setContributor(contributor);
173189
emojiContributionEvent.setTimestamp(Calendar.getInstance());
174190
emojiContributionEvent.setEmoji(emoji);
175191
emojiContributionEvent.setRevisionNumber(emoji.getRevisionNumber());

src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import ai.elimu.util.GitHubLfsHelper;
2727
import jakarta.servlet.ServletException;
2828
import jakarta.servlet.http.HttpServletRequest;
29+
import jakarta.servlet.http.HttpServletResponse;
2930
import jakarta.servlet.http.HttpSession;
3031

3132
import java.io.File;
@@ -44,6 +45,7 @@
4445
import org.apache.commons.io.FileUtils;
4546
import org.apache.commons.io.IOUtils;
4647
import org.apache.commons.lang.StringUtils;
48+
import org.springframework.http.HttpStatus;
4749
import org.springframework.stereotype.Controller;
4850
import org.springframework.ui.Model;
4951
import org.springframework.validation.BindingResult;
@@ -253,15 +255,20 @@ protected void initBinder(HttpServletRequest request, ServletRequestDataBinder b
253255
@ResponseBody
254256
public String handleAddContentLabelRequest(
255257
HttpServletRequest request,
258+
HttpServletResponse response,
256259
HttpSession session,
257260
@PathVariable Long id) {
258261
log.info("handleAddContentLabelRequest");
262+
263+
Contributor contributor = (Contributor) session.getAttribute("contributor");
264+
if (contributor == null) {
265+
response.setStatus(HttpStatus.FORBIDDEN.value());
266+
return "error";
267+
}
259268

260269
log.info("id: " + id);
261270
Image image = imageDao.read(id);
262271

263-
Contributor contributor = (Contributor) session.getAttribute("contributor");
264-
265272
String letterIdParameter = request.getParameter("letterId");
266273
log.info("letterIdParameter: " + letterIdParameter);
267274
if (StringUtils.isNotBlank(letterIdParameter)) {
@@ -332,15 +339,20 @@ public String handleAddContentLabelRequest(
332339
@ResponseBody
333340
public String handleRemoveContentLabelRequest(
334341
HttpServletRequest request,
342+
HttpServletResponse response,
335343
HttpSession session,
336344
@PathVariable Long id) {
337345
log.info("handleRemoveContentLabelRequest");
338346

347+
Contributor contributor = (Contributor) session.getAttribute("contributor");
348+
if (contributor == null) {
349+
response.setStatus(HttpStatus.FORBIDDEN.value());
350+
return "error";
351+
}
352+
339353
log.info("id: " + id);
340354
Image image = imageDao.read(id);
341355

342-
Contributor contributor = (Contributor) session.getAttribute("contributor");
343-
344356
String letterIdParameter = request.getParameter("letterId");
345357
log.info("letterIdParameter: " + letterIdParameter);
346358
if (StringUtils.isNotBlank(letterIdParameter)) {

src/main/java/ai/elimu/web/content/multimedia/video/VideoEditController.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import ai.elimu.util.GitHubLfsHelper;
2525
import jakarta.servlet.ServletException;
2626
import jakarta.servlet.http.HttpServletRequest;
27+
import jakarta.servlet.http.HttpServletResponse;
2728
import jakarta.servlet.http.HttpSession;
2829

2930
import java.io.IOException;
@@ -36,6 +37,7 @@
3637
import lombok.RequiredArgsConstructor;
3738
import lombok.extern.slf4j.Slf4j;
3839
import org.apache.commons.lang.StringUtils;
40+
import org.springframework.http.HttpStatus;
3941
import org.springframework.stereotype.Controller;
4042
import org.springframework.ui.Model;
4143
import org.springframework.validation.BindingResult;
@@ -185,10 +187,17 @@ protected void initBinder(HttpServletRequest request, ServletRequestDataBinder b
185187
@ResponseBody
186188
public String handleAddContentLabelRequest(
187189
HttpServletRequest request,
190+
HttpServletResponse response,
188191
HttpSession session,
189192
@PathVariable Long id) {
190193
log.info("handleAddContentLabelRequest");
191194

195+
Contributor contributor = (Contributor) session.getAttribute("contributor");
196+
if (contributor == null) {
197+
response.setStatus(HttpStatus.FORBIDDEN.value());
198+
return "error";
199+
}
200+
192201
log.info("id: " + id);
193202
Video video = videoDao.read(id);
194203

@@ -204,7 +213,7 @@ public String handleAddContentLabelRequest(
204213
videoDao.update(video);
205214

206215
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
207-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
216+
videoContributionEvent.setContributor(contributor);
208217
videoContributionEvent.setTimestamp(Calendar.getInstance());
209218
videoContributionEvent.setVideo(video);
210219
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());
@@ -225,7 +234,7 @@ public String handleAddContentLabelRequest(
225234
videoDao.update(video);
226235

227236
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
228-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
237+
videoContributionEvent.setContributor(contributor);
229238
videoContributionEvent.setTimestamp(Calendar.getInstance());
230239
videoContributionEvent.setVideo(video);
231240
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());
@@ -246,7 +255,7 @@ public String handleAddContentLabelRequest(
246255
videoDao.update(video);
247256

248257
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
249-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
258+
videoContributionEvent.setContributor(contributor);
250259
videoContributionEvent.setTimestamp(Calendar.getInstance());
251260
videoContributionEvent.setVideo(video);
252261
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());
@@ -262,10 +271,17 @@ public String handleAddContentLabelRequest(
262271
@ResponseBody
263272
public String handleRemoveContentLabelRequest(
264273
HttpServletRequest request,
274+
HttpServletResponse response,
265275
HttpSession session,
266276
@PathVariable Long id) {
267277
log.info("handleRemoveContentLabelRequest");
268278

279+
Contributor contributor = (Contributor) session.getAttribute("contributor");
280+
if (contributor == null) {
281+
response.setStatus(HttpStatus.FORBIDDEN.value());
282+
return "error";
283+
}
284+
269285
log.info("id: " + id);
270286
Video video = videoDao.read(id);
271287

@@ -286,7 +302,7 @@ public String handleRemoveContentLabelRequest(
286302
videoDao.update(video);
287303

288304
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
289-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
305+
videoContributionEvent.setContributor(contributor);
290306
videoContributionEvent.setTimestamp(Calendar.getInstance());
291307
videoContributionEvent.setVideo(video);
292308
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());
@@ -311,7 +327,7 @@ public String handleRemoveContentLabelRequest(
311327
videoDao.update(video);
312328

313329
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
314-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
330+
videoContributionEvent.setContributor(contributor);
315331
videoContributionEvent.setTimestamp(Calendar.getInstance());
316332
videoContributionEvent.setVideo(video);
317333
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());
@@ -336,7 +352,7 @@ public String handleRemoveContentLabelRequest(
336352
videoDao.update(video);
337353

338354
VideoContributionEvent videoContributionEvent = new VideoContributionEvent();
339-
videoContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
355+
videoContributionEvent.setContributor(contributor);
340356
videoContributionEvent.setTimestamp(Calendar.getInstance());
341357
videoContributionEvent.setVideo(video);
342358
videoContributionEvent.setRevisionNumber(video.getRevisionNumber());

src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterDeleteController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public String handleRequest(HttpSession session, @PathVariable Long storyBookId,
9393
storyBookContributionEvent.setTimestamp(Calendar.getInstance());
9494
storyBookContributionEvent.setStoryBook(storyBook);
9595
storyBookContributionEvent.setRevisionNumber(storyBook.getRevisionNumber());
96-
storyBookContributionEvent.setComment("Deleted storybook chapter " + (storyBookChapterToBeDeleted.getSortOrder() + 1) + "/" + storyBookChapters.size() + " (🤖 auto-generated comment)");
96+
storyBookContributionEvent.setComment("Deleted storybook chapter " + (storyBookChapterToBeDeleted.getSortOrder() + 1) + "/" + (storyBookChapters.size() + 1) + " (🤖 auto-generated comment)");
9797
storyBookContributionEventDao.create(storyBookContributionEvent);
9898

9999
String contentUrl = DomainHelper.getBaseUrl() + "/content/storybook/edit/" + storyBook.getId();

src/main/java/ai/elimu/web/servlet/CustomDispatcherServlet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ private void populateDatabase(WebApplicationContext webApplicationContext) {
178178
letterDao.create(letterM);
179179

180180
Letter letterAA = new Letter();
181-
letterAA.setText("า");
181+
letterAA.setText("า");
182182
letterDao.create(letterAA);
183183

184184
Letter letterS = new Letter();

0 commit comments

Comments
 (0)