Skip to content

Commit 245b226

Browse files
committed
Dockerized, removed hardcoded values
1 parent f44a2a1 commit 245b226

31 files changed

+355
-150
lines changed

.dockerignore

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
www/images/database/*
2+
dist/
3+
.gradle
4+
gradle
5+
gradlew
6+
gradlew.bat
7+
bin
8+
build
9+
**/sitemap.xml
10+
.project
11+
.settings
12+
.classpath
13+
test_environment
14+
dist
15+
config/server-config.json
16+
.git
17+
x.*

.gitignore

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
www/images/database/*
2+
!.keep
3+
.gradle
4+
gradle
5+
gradlew
6+
gradlew.bat
7+
bin
8+
build
9+
.project
10+
.settings
11+
.classpath
12+
test_environment
13+
dist
14+
config/server-config.json
15+
x.*
16+
deps.txt

Dockerfile

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
FROM azul/zulu-openjdk:8
2+
3+
RUN apt update -y && apt upgrade -y && apt dist-upgrade -y
4+
5+
RUN apt install -y curl unzip && apt clean
6+
7+
8+
RUN groupadd --gid 1000 nonroot
9+
RUN useradd --uid 1000 -r --gid 1000 nonroot
10+
11+
COPY www /app_build/www
12+
COPY build-docker.sh /app_build
13+
COPY build.sh /app_build
14+
COPY src /app_build/src
15+
COPY build.gradle /app_build
16+
COPY settings.gradle /app_build
17+
18+
# Install gradle
19+
RUN curl https://downloads.gradle-dn.com/distributions/gradle-6.7-bin.zip -o /tmp/gradle.zip
20+
RUN if [ "`sha256sum /tmp/gradle.zip | cut -d' ' -f1`" != "8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4" ];\
21+
then \
22+
echo "Error. This version of gradle is corrupted."; \
23+
exit 1;\
24+
fi && \
25+
mkdir -p /tmp/gradle && \
26+
unzip -q -d /tmp/gradle /tmp/gradle.zip &&\
27+
cp -Rf /tmp/gradle/gradle-*/* / &&\
28+
rm -Rf /tmp/gradle && rm -f /tmp/gradle.zip && \
29+
echo "Installed gradle `gradle -v`"
30+
31+
# Build
32+
RUN cd /app_build &&\
33+
./build.sh && \
34+
mv dist /app && \
35+
cd / && \
36+
rm -Rf /app_build
37+
38+
RUN chown 1000:1000 /app
39+
USER nonroot
40+
WORKDIR /app
41+
ENTRYPOINT [ "java","-Djava.io.tmpdir=/tmp/apptmp","-jar","SoftwareStore.jar" ]
42+
43+
# Writable volumes
44+
VOLUME /app/www/images/database
45+
VOLUME /app/config
46+
47+
# tmpfs
48+
VOLUME /app/sitemap
49+
50+
# tmpfs
51+
VOLUME /tmp/apptmp

build-docker.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
if [ "$RUNTIME" = "" ];
3+
then
4+
export RUNTIME="`which podman`"
5+
if [ "$RUNTIME" = "" ];
6+
then
7+
export RUNTIME="`which docker`"
8+
fi
9+
fi
10+
$RUNTIME rmi jmestore
11+
$RUNTIME build -t jmestore .

build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ repositories {
2222
group 'com.jayfella'
2323
version '1.0.56'
2424

25-
sourceCompatibility = 11
26-
targetCompatibility = 11
25+
sourceCompatibility = 1.8
26+
targetCompatibility = 1.8
2727

2828
mainClassName = "com.jayfella.website.Main"
2929

build.sh

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
rm -Rf dist
3+
mkdir -p dist
4+
if [ "$GRADLE" = "" ];
5+
then
6+
export GRADLE="`which gradle`"
7+
fi
8+
$GRADLE build
9+
cp build/libs/SoftwareStore-*.jar dist/SoftwareStore.jar
10+
cp -Rf www dist/
11+
12+

config/test-environment-config.json

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"port" : 8080,
3+
"site-name" : "jMonkeyEngine Store",
4+
"site-hostname" : "store.jmonkeyengine.org",
5+
"site-scheme" : "https",
6+
"email" : "[email protected]",
7+
"smtp-user" : "",
8+
"smtp-password" : "",
9+
"https-enabled" : false,
10+
"database" : {
11+
"type" : "mysql",
12+
"address" : "jmestore-testing-mysql ",
13+
"port" : 3306,
14+
"name" : "jmestore",
15+
"username" : "root",
16+
"password" : "oEZi1nIeZwpS"
17+
},
18+
"security" : {
19+
"pbkdfIterations" : 80000,
20+
"passwordHashLength" : 512,
21+
"saltHashLength" : 512
22+
},
23+
"website" : {
24+
"registrationDisabled" : false,
25+
"email-enabled" : false
26+
},
27+
"smtp-port" : 587,
28+
"smtp-host" : "smtp.zoho.eu"
29+
}

src/main/java/com/jayfella/website/config/EmailConfig.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.Collections;
1616
import java.util.Properties;
1717

18+
import com.jayfella.website.config.external.ServerConfig;
19+
1820
@Configuration
1921
public class EmailConfig {
2022

@@ -24,11 +26,11 @@ public class EmailConfig {
2426
public JavaMailSender getJavaMailSender() {
2527

2628
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
27-
mailSender.setHost("smtp.zoho.eu");
28-
mailSender.setPort(587);
29+
mailSender.setHost(ServerConfig.getInstance().getSmtpHost());
30+
mailSender.setPort(ServerConfig.getInstance().getSmtpPort());
2931

30-
mailSender.setUsername("[email protected]");
31-
mailSender.setPassword("1MNMQDEVT3HS");
32+
mailSender.setUsername(ServerConfig.getInstance().getSmtpUser());
33+
mailSender.setPassword(ServerConfig.getInstance().getSmtpPassword());
3234

3335
Properties props = mailSender.getJavaMailProperties();
3436
props.put("mail.transport.protocol", "smtp");

src/main/java/com/jayfella/website/config/ThymeLeafConfig.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import java.nio.charset.StandardCharsets;
1919

20+
import com.jayfella.website.config.external.ServerConfig;
21+
2022
@Configuration
2123
@EnableWebMvc
2224
public class ThymeLeafConfig implements WebMvcConfigurer {
@@ -36,6 +38,7 @@ public ITemplateResolver templateResolver() {
3638
templateResolver.setTemplateMode(TemplateMode.HTML);
3739
templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
3840
templateResolver.setOrder(1);
41+
3942

4043
return templateResolver;
4144
}
@@ -59,7 +62,8 @@ public ViewResolver viewResolver() {
5962

6063
viewResolver.setTemplateEngine(templateEngine());
6164
viewResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
62-
65+
viewResolver.addStaticVariable("siteName", ServerConfig.getInstance().getSiteName());
66+
viewResolver.addStaticVariable("websiteFullUrl", ServerConfig.getInstance().getFullUrl());
6367
return viewResolver;
6468
}
6569

src/main/java/com/jayfella/website/config/external/DatabaseConfig.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public class DatabaseConfig {
77
private String type = "mysql";
88
private String address = "127.0.0.1";
99
private int port = 3306;
10-
private String name;
11-
private String username;
12-
private String password;
10+
private String name="jmestore";
11+
private String username="root";
12+
private String password="oEZi1nIeZwpS";
1313

1414
DatabaseConfig() {
1515
}

src/main/java/com/jayfella/website/config/external/ServerConfig.java

+50-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jayfella.website.config.external;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import com.fasterxml.jackson.annotation.JsonProperty;
45
import com.jayfella.website.core.JsonMapper;
56
import org.slf4j.Logger;
@@ -18,7 +19,17 @@ public class ServerConfig {
1819
private static ServerConfig INSTANCE;
1920

2021
private int port = 8080;
21-
private String siteName = "My Website";
22+
private String siteName = "jMonkeyEngine Store";
23+
private String siteHostName="store.jmonkeyengine.org";
24+
private String siteScheme="https";
25+
private String email="[email protected]";
26+
27+
28+
private String smtpUser="";
29+
private String smtpPassword="";
30+
private int smptPort=587;
31+
private String smptHost="";
32+
2233

2334
// we use an nginx proxy on the server because it's easier to deal with SSL certificates.
2435
// this setting only sets the cookie values currently.
@@ -36,17 +47,53 @@ public static ServerConfig getInstance() {
3647
return INSTANCE;
3748
}
3849

39-
private ServerConfig() {
50+
public ServerConfig() {
4051
}
4152

53+
@JsonProperty("smtp-user")
54+
public String getSmtpUser() { return smtpUser; }
55+
public void setSmtpUser(String smtpUser) { this.smtpUser = smtpUser; }
56+
57+
@JsonProperty("smtp-password")
58+
public String getSmtpPassword() { return smtpPassword; }
59+
public void setSmtpPassword(String smtpPassword) { this.smtpPassword = smtpPassword; }
60+
61+
@JsonProperty("smtp-port")
62+
public int getSmtpPort() { return smptPort; }
63+
public void setSmtpPort(int smptPort) { this.smptPort = smptPort; }
64+
65+
@JsonProperty("smtp-host")
66+
public String getSmtpHost() { return smptHost; }
67+
public void setSmtpHost(String smptHost) { this.smptHost = smptHost; }
68+
4269
@JsonProperty("port")
4370
public int getPort() { return port; }
4471
public void setPort(int port) { this.port = port; }
4572

46-
@JsonProperty("site-name")
73+
@JsonProperty("site-name")
4774
public String getSiteName() { return siteName; }
4875
public void setSiteName(String siteName) { this.siteName = siteName; }
4976

77+
@JsonProperty("site-hostname")
78+
public String getSiteHostName() { return siteHostName; }
79+
public void setSiteHostName(String siteHostName) { this.siteHostName = siteHostName; }
80+
81+
@JsonProperty("site-scheme")
82+
public String getSiteScheme() { return siteScheme; }
83+
public void setSiteScheme(String siteScheme) { this.siteScheme = siteScheme; }
84+
85+
@JsonIgnore
86+
public String getFullUrl() {
87+
return ServerConfig.getInstance().getSiteScheme() + "://" + ServerConfig.getInstance().getSiteHostName();
88+
}
89+
90+
91+
92+
93+
@JsonProperty("email")
94+
public String getEmail() { return email; }
95+
public void setEmail(String email) { this.email = email; }
96+
5097
@JsonProperty("https-enabled")
5198
public boolean isHttpsEnabled() { return httpsEnabled; }
5299
public void setHttpsEnabled(boolean httpsEnabled) { this.httpsEnabled = httpsEnabled; }

src/main/java/com/jayfella/website/controller/SitemapController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class SitemapController {
2121
@RequestMapping(path = "/sitemap.xml", produces = APPLICATION_XML_VALUE)
2222
public @ResponseBody String get() throws IOException {
2323

24-
String sitemap = Files.readString(SitemapService.SITEMAP_FULL_FILE.toPath());
24+
String sitemap = new String(Files.readAllBytes(SitemapService.SITEMAP_FULL_FILE.toPath()));
2525
return sitemap;
2626

2727
}

src/main/java/com/jayfella/website/controller/api/ApiCategoryController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ResponseEntity<?> createCategory(ModelMap model,
4242
return ApiResponses.insufficientPermission();
4343
}
4444

45-
if (request.getName().isBlank()) {
45+
if (request.getName()==null||request.getName().trim().isEmpty()) {
4646
return ResponseEntity.badRequest()
4747
.body(new SimpleApiResponse("You must provide a name."));
4848
}

src/main/java/com/jayfella/website/controller/api/ApiSearchController.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ public ResponseEntity<?> searchParam(@RequestParam(required = false, defaultValu
6767
Pageable pageable = PageRequest.of(pageNum, itemsPerPage, Sort.by(sortDir, orderBy));
6868

6969
boolean useCategory = categoryId > 0;
70-
boolean useTitle = !title.isBlank();
71-
boolean useTag = !tag.isBlank();
72-
boolean useAuthor = !author.isBlank();
70+
boolean useTitle = !(title==null||title.trim().isEmpty());
71+
boolean useTag = !(tag==null||tag.trim().isEmpty());
72+
boolean useAuthor = !(author==null||author.trim().isEmpty());
7373

7474
Page<LivePage> page = null;
7575

src/main/java/com/jayfella/website/controller/api/ApiValidationController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ public ResponseEntity resetPassword(HttpServletRequest request,
319319

320320
String ipAddress = getClientIp(request);
321321

322-
if (ipAddress.isBlank()) {
322+
if (ipAddress==null||ipAddress.trim().isEmpty()) {
323323
ipAddress = "UNKNOWN";
324324
}
325325

src/main/java/com/jayfella/website/controller/http/IndexPageController.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jayfella.website.controller.http;
22

3+
import com.jayfella.website.config.external.ServerConfig;
34
import com.jayfella.website.core.StoreHtmlFilePaths;
45
import com.jayfella.website.core.page.PageState;
56
import com.jayfella.website.database.entity.page.stages.LivePage;
@@ -54,8 +55,8 @@ public String viewAsset(Model model, HttpServletResponse response, @PathVariable
5455
// for previews, we need to transfer the preview data.
5556
model.addAttribute("previewTitle", livePage.getDetails().getTitle());
5657
model.addAttribute("previewDescription", livePage.getDetails().getShortDescription());
57-
model.addAttribute("previewUrl", "https://jmonkeystore.com/" + livePage.getId());
58-
model.addAttribute("previewImage", "https://jmonkeystore.com/image/" + previewImageId + ".jpg");
58+
model.addAttribute("previewUrl", ServerConfig.getInstance().getFullUrl()+"/" + livePage.getId());
59+
model.addAttribute("previewImage", ServerConfig.getInstance().getFullUrl()+"/image/" + previewImageId + ".jpg");
5960

6061
return StoreHtmlFilePaths.Store.VIEW_PAGE.getHtmlFilePath();
6162
}

src/main/java/com/jayfella/website/core/JsonMapper.java

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public static <T> T readFile(String filename, Class<T> fileClass) {
4444

4545
public static boolean writeFile(File file, Object value) {
4646
try {
47+
if(!file.getParentFile().exists()) file.getParentFile().mkdirs();
4748
objectMapper.writeValue(file, value);
4849
return true;
4950
} catch (IOException ex) {

0 commit comments

Comments
 (0)