diff --git a/jambotron-ui/angular.json b/jambotron-ui/angular.json
index 2a6782c..16a9846 100644
--- a/jambotron-ui/angular.json
+++ b/jambotron-ui/angular.json
@@ -74,6 +74,7 @@
"buildTarget": "jambotron-ui:build:production"
},
"development": {
+ "disableHostCheck": true,
"buildTarget": "jambotron-ui:build:development"
}
},
diff --git a/jambotron-ui/public/Firefly_jambo tron 118290.jpg b/jambotron-ui/public/Firefly_jambo tron 118290.jpg
new file mode 100644
index 0000000..6663a0a
Binary files /dev/null and b/jambotron-ui/public/Firefly_jambo tron 118290.jpg differ
diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.html b/jambotron-ui/src/app/admin-module/settings.component/settings.component.html
index 59229f5..26b0cd1 100644
--- a/jambotron-ui/src/app/admin-module/settings.component/settings.component.html
+++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.html
@@ -1 +1,27 @@
settings.component works!
+
+
+
+
+
+
+
+
+ @for (column of displayedColumns; track column) {
+
+ | {{column}} |
+ {{element[column]}} |
+
+ }
+
+
+
+
+
+
+
+
+
diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts
index b7ce784..1209c58 100644
--- a/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts
+++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts
@@ -1,11 +1,66 @@
import { Component } from '@angular/core';
+import {MatCard, MatCardContent} from '@angular/material/card';
+import {MatDivider} from '@angular/material/divider';
+import {MatTab, MatTabGroup} from '@angular/material/tabs';
+import {
+ MatCell,
+ MatCellDef,
+ MatColumnDef,
+ MatHeaderCell, MatHeaderCellDef,
+ MatHeaderRow,
+ MatHeaderRowDef,
+ MatRow, MatRowDef, MatTable
+} from '@angular/material/table';
+import {MatIconButton} from '@angular/material/button';
+import {MatList, MatListItem} from '@angular/material/list';
+import {Bean} from '../../models/Bean';
+import {SystemService} from '../../services/system.service';
+import {NameValueItem} from '../../models/name-value-item';
@Component({
selector: 'app-settings.component',
- imports: [],
+ imports: [
+ MatCard,
+ MatCardContent,
+ MatDivider,
+ MatTab,
+ MatTabGroup,
+ MatCell,
+ MatCellDef,
+ MatColumnDef,
+ MatHeaderCell,
+
+ MatTable,
+ MatHeaderCellDef,
+ MatHeaderRow,
+ MatHeaderRowDef,
+ MatRow,
+ MatRowDef
+ ],
templateUrl: './settings.component.html',
styleUrl: './settings.component.scss'
})
export class SettingsComponent {
+ properties: NameValueItem[] = [] ;
+ displayedColumns: string[] = ['name', 'value'];
+
+
+ constructor(private systemService: SystemService) {
+ this.retrieveProperties();
+ }
+
+
+ retrieveProperties(): void {
+ this.systemService.getDataSourceProperties()
+ .subscribe(
+ (data: NameValueItem[]) => {
+ this.properties = data;
+ console.log(data);
+ },
+ (error: any) => {
+ console.log(error);
+ }
+ );
+ }
}
diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts
index d17f946..5df47b4 100644
--- a/jambotron-ui/src/app/main-module/main.component/main.component.ts
+++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts
@@ -1,8 +1,8 @@
-import {Component, CUSTOM_ELEMENTS_SCHEMA, inject} from '@angular/core';
+import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core';
//import {NavigationComponent} from '../navigation/navigation.component';
import {NgClass} from '@angular/common';
import {NavigationComponent} from '../../layouts/admin-layout/navigation/navigation.component';
-import {RouterLink, RouterOutlet} from '@angular/router';
+import {Router, RouterLink, RouterOutlet} from '@angular/router';
import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.component';
import {NavBarComponent} from '../../layouts/admin-layout/nav-bar/nav-bar.component';
import {MatToolbar} from '@angular/material/toolbar';
@@ -29,7 +29,7 @@ import {DialogComponent} from '../../components/dialog/dialog.component';
templateUrl: './main.component.html',
styleUrl: './main.component.scss'
})
-export class MainComponent {
+export class MainComponent implements OnInit{
// public props
navCollapsed: boolean = false;
navCollapsedMob: boolean = false;
@@ -52,13 +52,24 @@ export class MainComponent {
private authService: AuthService = inject(AuthService);
private eventBusService: EventBusService = inject(EventBusService);
- constructor(
+ constructor(private router: Router) {
- ) {}
+ }
+ goToHome() {
+ this.router.navigate(['main/home']);
+ }
ngOnInit(): void {
this.isLoggedIn = this.storageService.isLoggedIn();
+ this.refreshToolbar();
+
+ this.eventBusSub = this.eventBusService.on('logout', () => {
+ this.logout();
+ });
+ }
+
+ refreshToolbar() {
if (this.isLoggedIn) {
const user = this.storageService.getUser();
this.roles = user.roles;
@@ -68,10 +79,12 @@ export class MainComponent {
this.username = user.username;
}
+ }
- this.eventBusSub = this.eventBusService.on('logout', () => {
- this.logout();
- });
+ ngOnDestroy() {
+ if (this.eventBusSub) {
+ this.eventBusSub.unsubscribe();
+ }
}
// public method
@@ -142,7 +155,8 @@ export class MainComponent {
let user = this.storageService.getUser();
this.roles = user.roles;
//this.username = user.username;
- this.reloadPage();
+ //this.reloadPage();
+ this.refreshToolbar();
},
err => {
this.errorMessage = err.error.message;
diff --git a/jambotron-ui/src/app/models/name-value-item.ts b/jambotron-ui/src/app/models/name-value-item.ts
new file mode 100644
index 0000000..c155d43
--- /dev/null
+++ b/jambotron-ui/src/app/models/name-value-item.ts
@@ -0,0 +1,4 @@
+export class NameValueItem {
+ name?:string;
+ value?:string;
+}
diff --git a/jambotron-ui/src/app/services/system.service.ts b/jambotron-ui/src/app/services/system.service.ts
index ffb606a..599ae32 100644
--- a/jambotron-ui/src/app/services/system.service.ts
+++ b/jambotron-ui/src/app/services/system.service.ts
@@ -3,6 +3,7 @@ import {HttpClient} from '@angular/common/http';
import {Observable} from 'rxjs';
import {Tutorial} from '../models/tutorial.model';
import {Bean} from '../models/Bean';
+import {NameValueItem} from '../models/name-value-item';
@Injectable({
providedIn: 'root'
@@ -12,6 +13,10 @@ export class SystemService {
baseUrl : string = 'http://localhost:8080/api/system';
constructor(private http: HttpClient) { }
+ getDataSourceProperties(): Observable{
+ return this.http.get(this.baseUrl + "/data-source-properties")
+ }
+
getAllBeans(): Observable {
return this.http.get(this.baseUrl+"/beans");
}
diff --git a/jambotron-ui/src/styles.scss b/jambotron-ui/src/styles.scss
index cea92f3..7a0592a 100644
--- a/jambotron-ui/src/styles.scss
+++ b/jambotron-ui/src/styles.scss
@@ -40,7 +40,7 @@ File: style.css
html, body { height: 100%; }
body {
- background-image: url('../public/Firefly_jambo tron 118290.png');
+ background-image: url('../public/Firefly_jambo tron 118290.jpg');
background-attachment:fixed;
background-repeat: no-repeat;
background-size: cover;
diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java
index f02005c..c962699 100644
--- a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java
+++ b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java
@@ -30,7 +30,7 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
//@CrossOrigin(origins = "*", maxAge = 3600)
-@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600, allowCredentials="true")
+@CrossOrigin(origins = "http://localhost:4200,https://a576-5-248-149-207.ngrok-free.app", maxAge = 3600, allowCredentials="true")
@RestController
@RequestMapping("/api/auth")
public class AuthController {
diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java
index 8cca937..b7934ae 100644
--- a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java
+++ b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java
@@ -1,9 +1,12 @@
package com.jambotronGroup.jambotron.controllers;
import com.jambotronGroup.jambotron.model.Bean;
+import com.jambotronGroup.jambotron.model.NameValueItem;
import com.jambotronGroup.jambotron.model.Setting;
import com.jambotronGroup.jambotron.system.SystemService;
+import org.springframework.beans.factory.NamedBean;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -20,6 +23,24 @@ public class SystemController {
+ @GetMapping("/data-source-properties")
+ public ResponseEntity> getDataSourceProperties(@RequestParam(required = false) String title) {
+ try {
+ List properties = systemService.getDataSourceProperties();
+ //userRepository.findAll().forEach(users::add);
+
+
+ if (properties.isEmpty()) {
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ }
+
+ return new ResponseEntity<>(properties, HttpStatus.OK);
+ } catch (Exception e) {
+ return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+
@GetMapping("/beans")
public ResponseEntity> getLoadedBeans(@RequestParam(required = false) String title) {
try {
diff --git a/src/main/java/com/jambotronGroup/jambotron/model/Bean.java b/src/main/java/com/jambotronGroup/jambotron/model/Bean.java
index dd32292..c51da42 100644
--- a/src/main/java/com/jambotronGroup/jambotron/model/Bean.java
+++ b/src/main/java/com/jambotronGroup/jambotron/model/Bean.java
@@ -32,6 +32,7 @@ public class Bean {
@Override
public String toString() {
+
return String.format("name = %s type= %s", this.shortName, this.typeShortName);
}
diff --git a/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java b/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java
new file mode 100644
index 0000000..b7e66c4
--- /dev/null
+++ b/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java
@@ -0,0 +1,40 @@
+package com.jambotronGroup.jambotron.model;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+
+@Entity
+public class NameValueItem {
+
+ public NameValueItem(String name, String value){
+ _name = name;
+ _value = value;
+ }
+
+ @Id
+ private String _name;
+
+ private String _value;
+
+ public String getValue() {
+ return _value;
+ }
+
+ public void setValue(String _value) {
+ this._value = _value;
+ }
+
+ public String getName() {
+ return _name;
+ }
+
+ public void setName(String _name) {
+ this._name = _name;
+ }
+
+ @Override
+ public String toString() {
+
+ return String.format("name = %s value= %s", this._name, this._value);
+ }
+}
diff --git a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java
index 6f28a33..1f334b5 100644
--- a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java
+++ b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java
@@ -16,6 +16,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableMethodSecurity
@@ -24,7 +26,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
// securedEnabled = true,
// jsr250Enabled = true,
//prePostEnabled = true)
-public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter {
+public class WebSecurityConfig implements WebMvcConfigurer {// extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsServiceImpl userDetailsService;
@@ -41,6 +43,11 @@ public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter {
// authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
// }
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ // Do not add any mappings to enable complete disabling of CORS.
+ }
+
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
@@ -108,6 +115,8 @@ public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter {
.requestMatchers("/resources/public/media/**").permitAll()
.requestMatchers("/resources/public/browser/**").permitAll()
.requestMatchers("/media/**").permitAll()
+
+ .requestMatchers("/main/**").permitAll()
.requestMatchers("/api/test/**").permitAll()
.requestMatchers("/api/tutorials").permitAll()
diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java
index 76c8036..84d3b1a 100644
--- a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java
+++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java
@@ -1,6 +1,7 @@
package com.jambotronGroup.jambotron.system;
import com.jambotronGroup.jambotron.model.Bean;
+import com.jambotronGroup.jambotron.model.NameValueItem;
import java.util.List;
@@ -9,4 +10,6 @@ public interface SystemService {
List getLodedCustomBeans();
+ List getDataSourceProperties();
+
}
diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java
index d1f757d..6eb88b1 100644
--- a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java
+++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java
@@ -2,16 +2,17 @@ package com.jambotronGroup.jambotron.system;
import com.jambotronGroup.jambotron.JambotronApplication;
import com.jambotronGroup.jambotron.model.Bean;
+import com.jambotronGroup.jambotron.model.NameValueItem;
import com.jambotronGroup.jambotron.utils.EntityLoggingConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -23,9 +24,23 @@ public class SystemServiceImpl implements SystemService {
@Autowired
private Environment environment;
+ @Autowired
+ DataSourceProperties _dataSourceProperties;
+
private static final Logger logger = LoggerFactory.getLogger(SystemServiceImpl.class);
+ public List getDataSourceProperties(){
+ List returnValue = new ArrayList();
+
+ returnValue.add(new NameValueItem("Username", _dataSourceProperties.getUsername()));
+ returnValue.add(new NameValueItem("Password", _dataSourceProperties.getPassword()));
+ returnValue.add(new NameValueItem("Url", _dataSourceProperties.getUrl()));
+
+
+ return returnValue;
+ }
+
@Override
public List getLodedBeans() {
// Get all bean names from the application context and map them to Bean objects