automatic project update
This commit is contained in:
parent
ed41ad9816
commit
915d253653
@ -24,8 +24,9 @@
|
||||
"en"
|
||||
],
|
||||
"serverPort": 8080,
|
||||
"jhipsterVersion": "3.0.0",
|
||||
"jhipsterVersion": "3.1.0",
|
||||
"enableSocialSignIn": false,
|
||||
"useSass": false
|
||||
"useSass": false,
|
||||
"jhiPrefix": "jhi"
|
||||
}
|
||||
}
|
108
bower.json
108
bower.json
@ -1,62 +1,54 @@
|
||||
{
|
||||
"version": "0.0.0",
|
||||
"name": "sampleApplication",
|
||||
"appPath": "src/main/webapp/",
|
||||
"testPath": "src/test/javascript/spec",
|
||||
"dependencies": {
|
||||
"angular": "1.5.2",
|
||||
"angular-aria": "1.5.2",
|
||||
"angular-bootstrap": "1.2.5",
|
||||
"angular-cache-buster": "0.4.3",
|
||||
"angular-cookies": "1.5.2",
|
||||
"angular-dynamic-locale": "0.1.30",
|
||||
"angular-i18n": "1.5.2",
|
||||
"ngstorage": "0.3.10",
|
||||
"angular-loading-bar": "0.9.0",
|
||||
"angular-resource": "1.5.2",
|
||||
"angular-sanitize": "1.5.2",
|
||||
"angular-translate": "2.11.0",
|
||||
"angular-translate-interpolation-messageformat": "2.11.0",
|
||||
"angular-translate-loader-partial": "2.11.0",
|
||||
"angular-translate-storage-cookie": "2.11.0",
|
||||
"angular-ui-router": "0.2.18",
|
||||
"bootstrap": "3.3.6",
|
||||
"bootstrap-ui-datetime-picker": "2.2.3",
|
||||
"jquery": "2.2.2",
|
||||
"json3": "3.3.2",
|
||||
"modernizr": "3.3.1",
|
||||
"ng-file-upload": "12.0.4",
|
||||
"ngInfiniteScroll": "1.2.2",
|
||||
"swagger-ui": "2.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"angular-mocks": "1.5.2",
|
||||
"angular-scenario": "1.5.2"
|
||||
},
|
||||
"overrides": {
|
||||
"angular": {
|
||||
"dependencies": {
|
||||
"jquery": "2.2.2"
|
||||
}
|
||||
},
|
||||
"bootstrap": {
|
||||
"main": [
|
||||
"dist/js/bootstrap.js",
|
||||
"dist/css/bootstrap.css",
|
||||
"less/bootstrap.less"
|
||||
]
|
||||
},
|
||||
"messageformat": {
|
||||
"main": [
|
||||
"messageformat.js",
|
||||
"locale/en.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
"resolutions": {
|
||||
"angular": "1.5.2",
|
||||
"angular-cookies": "1.5.2",
|
||||
"angular-bootstrap": "1.2.5",
|
||||
"version": "0.0.0",
|
||||
"name": "sample-application",
|
||||
"appPath": "src/main/webapp/",
|
||||
"testPath": "src/test/javascript/spec",
|
||||
"dependencies": {
|
||||
"angular": "1.5.2",
|
||||
"angular-aria": "1.5.2",
|
||||
"angular-bootstrap": "1.2.5",
|
||||
"angular-cache-buster": "0.4.3",
|
||||
"angular-cookies": "1.5.2",
|
||||
"angular-dynamic-locale": "0.1.30",
|
||||
"angular-i18n": "1.5.2",
|
||||
"ngstorage": "0.3.10",
|
||||
"angular-loading-bar": "0.9.0",
|
||||
"angular-resource": "1.5.2",
|
||||
"angular-sanitize": "1.5.2",
|
||||
"angular-translate": "2.11.0",
|
||||
"angular-translate-interpolation-messageformat": "2.11.0",
|
||||
"angular-translate-loader-partial": "2.11.0",
|
||||
"angular-translate-storage-cookie": "2.11.0",
|
||||
"angular-ui-router": "0.2.18",
|
||||
"bootstrap": "3.3.6",
|
||||
"bootstrap-ui-datetime-picker": "2.3.1",
|
||||
"jquery": "2.2.2",
|
||||
"json3": "3.3.2",
|
||||
"messageformat": "0.3.1",
|
||||
"modernizr": "3.3.1",
|
||||
"ng-file-upload": "12.0.4",
|
||||
"ngInfiniteScroll": "1.2.2",
|
||||
"swagger-ui": "2.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"angular-mocks": "1.5.2"
|
||||
},
|
||||
"overrides": {
|
||||
"angular" : {
|
||||
"dependencies": {
|
||||
"jquery": "2.2.2"
|
||||
}
|
||||
},
|
||||
"bootstrap": {
|
||||
"main": [
|
||||
"dist/css/bootstrap.css"
|
||||
]
|
||||
}
|
||||
},
|
||||
"resolutions": {
|
||||
"angular": "1.5.2",
|
||||
"angular-cookies": "1.5.2",
|
||||
"angular-bootstrap": "1.2.5",
|
||||
"jquery": "2.2.2"
|
||||
}
|
||||
}
|
||||
|
14
gulpfile.js
14
gulpfile.js
@ -1,4 +1,4 @@
|
||||
// Generated on 2016-03-23 using generator-jhipster 3.0.0
|
||||
// Generated on 2016-04-20 using generator-jhipster 3.1.0
|
||||
'use strict';
|
||||
|
||||
var gulp = require('gulp'),
|
||||
@ -113,12 +113,7 @@ gulp.task('wiredep', ['wiredep:test', 'wiredep:app']);
|
||||
gulp.task('wiredep:app', function () {
|
||||
var stream = gulp.src(config.app + 'index.html')
|
||||
.pipe(plumber({errorHandler: handleErrors}))
|
||||
.pipe(wiredep({
|
||||
exclude: [
|
||||
/angular-i18n/, // localizations are loaded dynamically
|
||||
'bower_components/bootstrap/dist/js/' // exclude bootstrap js files as we use ui-bootstrap
|
||||
]
|
||||
}))
|
||||
.pipe(wiredep())
|
||||
.pipe(gulp.dest(config.app));
|
||||
|
||||
return stream;
|
||||
@ -128,11 +123,6 @@ gulp.task('wiredep:test', function () {
|
||||
return gulp.src(config.test + 'karma.conf.js')
|
||||
.pipe(plumber({errorHandler: handleErrors}))
|
||||
.pipe(wiredep({
|
||||
exclude: [
|
||||
/angular-i18n/, // localizations are loaded dynamically
|
||||
/angular-scenario/,
|
||||
'bower_components/bootstrap/dist/js/' // exclude Bootstrap js files as we use ui-bootstrap
|
||||
],
|
||||
ignorePath: /\.\.\/\.\.\//, // remove ../../ from paths of injected JavaScript files
|
||||
devDependencies: true,
|
||||
fileTypes: {
|
||||
|
15
package.json
15
package.json
@ -7,16 +7,13 @@
|
||||
"node_modules",
|
||||
"src/main/webapp/bower_components"
|
||||
],
|
||||
"dependencies": {
|
||||
"bower": "^1.6.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browser-sync": "2.11.2",
|
||||
"del": "2.2.0",
|
||||
"eslint-config-angular": "0.5.0",
|
||||
"eslint-plugin-angular": "1.0.0",
|
||||
"event-stream": "3.3.2",
|
||||
"generator-jhipster": "3.0.0",
|
||||
"generator-jhipster": "3.1.0",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-angular-filesort": "1.1.1",
|
||||
"gulp-angular-templatecache": "1.8.0",
|
||||
@ -34,10 +31,10 @@
|
||||
"gulp-ng-constant-fork": "0.4.1",
|
||||
"gulp-notify": "2.2.0",
|
||||
"gulp-plumber": "1.1.0",
|
||||
"gulp-protractor": "2.1.0",
|
||||
"gulp-protractor": "2.3.0",
|
||||
"gulp-util": "3.0.7",
|
||||
"gulp-rev": "7.0.0",
|
||||
"gulp-rev-replace": "^0.4.3",
|
||||
"gulp-rev-replace": "0.4.3",
|
||||
"gulp-sourcemaps": "1.6.0",
|
||||
"gulp-uglify": "1.5.3",
|
||||
"gulp-useref": "3.0.7",
|
||||
@ -53,9 +50,9 @@
|
||||
"lazypipe": "1.0.1",
|
||||
"lodash": "4.6.1",
|
||||
"map-stream": "0.0.6",
|
||||
"phantomjs-prebuilt": "2.1.4",
|
||||
"protractor": "3.1.1",
|
||||
"protractor-jasmine2-screenshot-reporter": "0.3.0",
|
||||
"phantomjs-prebuilt": "2.1.7",
|
||||
"protractor": "3.2.2",
|
||||
"protractor-jasmine2-screenshot-reporter": "0.3.1",
|
||||
"proxy-middleware": "0.15.0",
|
||||
"run-sequence": "1.1.5",
|
||||
"wiredep": "4.0.0",
|
||||
|
8
pom.xml
8
pom.xml
@ -75,6 +75,7 @@
|
||||
<sonar.tests>${project.basedir}/src/test/</sonar.tests>
|
||||
</properties>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.dropwizard.metrics</groupId>
|
||||
@ -558,7 +559,7 @@
|
||||
<driver></driver>
|
||||
<url></url>
|
||||
<defaultSchemaName></defaultSchemaName>
|
||||
<username></username>
|
||||
<username>sampleApplication</username>
|
||||
<password></password>
|
||||
<referenceUrl>hibernate:spring:com.mycompany.myapp.domain?dialect=&hibernate.ejb.naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy</referenceUrl>
|
||||
<verbose>true</verbose>
|
||||
@ -599,7 +600,7 @@
|
||||
<plugin>
|
||||
<groupId>com.spotify</groupId>
|
||||
<artifactId>docker-maven-plugin</artifactId>
|
||||
<version>0.4.1</version>
|
||||
<version>0.4.5</version>
|
||||
<configuration>
|
||||
<imageName>sampleapplication</imageName>
|
||||
<dockerDirectory>src/main/docker</dockerDirectory>
|
||||
@ -743,9 +744,6 @@
|
||||
<fileset>
|
||||
<directory>target/www/</directory>
|
||||
</fileset>
|
||||
<fileset>
|
||||
<directory>node_modules</directory>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
@ -1,10 +1,13 @@
|
||||
FROM java:openjdk-8-jdk-alpine
|
||||
FROM java:openjdk-8-jre-alpine
|
||||
|
||||
ENV JHIPSTER_SLEEP 0
|
||||
|
||||
# add directly the war
|
||||
ADD *.war /app.war
|
||||
|
||||
RUN sh -c 'touch /app.war'
|
||||
VOLUME /tmp
|
||||
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
|
||||
|
||||
EXPOSE 8080
|
||||
CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
|
||||
sleep ${JHIPSTER_SLEEP} && \
|
||||
java -Djava.security.egd=file:/dev/./urandom -jar /app.war
|
||||
|
@ -11,4 +11,4 @@ services:
|
||||
- MYSQL_DATABASE=sampleapplication
|
||||
ports:
|
||||
- 3306:3306
|
||||
command: mysqld --lower_case_table_names=1
|
||||
command: mysqld --lower_case_table_names=1 --skip-ssl
|
||||
|
@ -207,6 +207,8 @@ public class JHipsterProperties {
|
||||
|
||||
private String licenseUrl;
|
||||
|
||||
private Boolean enabled;
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
@ -278,6 +280,14 @@ public class JHipsterProperties {
|
||||
public void setLicenseUrl(String licenseUrl) {
|
||||
this.licenseUrl = licenseUrl;
|
||||
}
|
||||
|
||||
public Boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(Boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Metrics {
|
||||
|
@ -3,6 +3,7 @@ package com.mycompany.myapp.config;
|
||||
import ch.qos.logback.classic.AsyncAppender;
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import net.logstash.logback.appender.LogstashSocketAppender;
|
||||
import net.logstash.logback.stacktrace.ShortenedThrowableConverter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -47,6 +48,13 @@ public class LoggingConfiguration {
|
||||
logstashAppender.setSyslogHost(jHipsterProperties.getLogging().getLogstash().getHost());
|
||||
logstashAppender.setPort(jHipsterProperties.getLogging().getLogstash().getPort());
|
||||
logstashAppender.setCustomFields(customFields);
|
||||
|
||||
// Limit the maximum length of the forwarded stacktrace so that it won't exceed the 8KB UDP limit of logstash
|
||||
ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter();
|
||||
throwableConverter.setMaxLength(7500);
|
||||
throwableConverter.setRootCauseFirst(true);
|
||||
logstashAppender.setThrowableConverter(throwableConverter);
|
||||
|
||||
logstashAppender.start();
|
||||
|
||||
// Wrap the appender in an Async appender for performance
|
||||
|
@ -7,6 +7,7 @@ import com.mycompany.myapp.web.filter.CachingHttpHeadersFilter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
|
||||
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
|
||||
import org.springframework.boot.context.embedded.MimeMappings;
|
||||
@ -120,14 +121,14 @@ public class WebConfigurer implements ServletContextInitializer, EmbeddedServlet
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(name = "jhipster.cors.allowed-origins")
|
||||
public CorsFilter corsFilter() {
|
||||
log.debug("Registering CORS filter");
|
||||
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||
CorsConfiguration config = jHipsterProperties.getCors();
|
||||
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) {
|
||||
source.registerCorsConfiguration("/api/**", config);
|
||||
source.registerCorsConfiguration("/v2/api-docs", config);
|
||||
source.registerCorsConfiguration("/oauth/**", config);
|
||||
}
|
||||
source.registerCorsConfiguration("/api/**", config);
|
||||
source.registerCorsConfiguration("/v2/api-docs", config);
|
||||
source.registerCorsConfiguration("/oauth/**", config);
|
||||
return new CorsFilter(source);
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ import com.mycompany.myapp.config.JHipsterProperties;
|
||||
import java.util.Date;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.*;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@ -28,7 +28,8 @@ import static springfox.documentation.builders.PathSelectors.regex;
|
||||
*/
|
||||
@Configuration
|
||||
@EnableSwagger2
|
||||
@ConditionalOnExpression("#{!environment.acceptsProfiles('" + Constants.SPRING_PROFILE_NO_SWAGGER + "') && !environment.acceptsProfiles('" + Constants.SPRING_PROFILE_PRODUCTION + "')}")
|
||||
@Profile("!" + Constants.SPRING_PROFILE_NO_SWAGGER)
|
||||
@ConditionalOnProperty(prefix="jhipster.swagger", name="enabled")
|
||||
public class SwaggerConfiguration {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(SwaggerConfiguration.class);
|
||||
|
@ -51,7 +51,7 @@ public class User extends AbstractAuditingEntity implements Serializable {
|
||||
@NotNull
|
||||
@Email
|
||||
@Size(max = 100)
|
||||
@Column(length = 100, unique = true)
|
||||
@Column(length = 100, unique = true, nullable = false)
|
||||
private String email;
|
||||
|
||||
@NotNull
|
||||
|
@ -30,6 +30,9 @@ import java.util.Locale;
|
||||
public class MailService {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(MailService.class);
|
||||
|
||||
private static final String USER = "user";
|
||||
private static final String BASE_URL = "baseUrl";
|
||||
|
||||
@Inject
|
||||
private JHipsterProperties jHipsterProperties;
|
||||
@ -43,11 +46,6 @@ public class MailService {
|
||||
@Inject
|
||||
private SpringTemplateEngine templateEngine;
|
||||
|
||||
/**
|
||||
* System default email address that sends the e-mails.
|
||||
*/
|
||||
private String from;
|
||||
|
||||
@Async
|
||||
public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
|
||||
log.debug("Send e-mail[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
|
||||
@ -73,8 +71,8 @@ public class MailService {
|
||||
log.debug("Sending activation e-mail to '{}'", user.getEmail());
|
||||
Locale locale = Locale.forLanguageTag(user.getLangKey());
|
||||
Context context = new Context(locale);
|
||||
context.setVariable("user", user);
|
||||
context.setVariable("baseUrl", baseUrl);
|
||||
context.setVariable(USER, user);
|
||||
context.setVariable(BASE_URL, baseUrl);
|
||||
String content = templateEngine.process("activationEmail", context);
|
||||
String subject = messageSource.getMessage("email.activation.title", null, locale);
|
||||
sendEmail(user.getEmail(), subject, content, false, true);
|
||||
@ -85,8 +83,8 @@ public class MailService {
|
||||
log.debug("Sending creation e-mail to '{}'", user.getEmail());
|
||||
Locale locale = Locale.forLanguageTag(user.getLangKey());
|
||||
Context context = new Context(locale);
|
||||
context.setVariable("user", user);
|
||||
context.setVariable("baseUrl", baseUrl);
|
||||
context.setVariable(USER, user);
|
||||
context.setVariable(BASE_URL, baseUrl);
|
||||
String content = templateEngine.process("creationEmail", context);
|
||||
String subject = messageSource.getMessage("email.activation.title", null, locale);
|
||||
sendEmail(user.getEmail(), subject, content, false, true);
|
||||
@ -97,8 +95,8 @@ public class MailService {
|
||||
log.debug("Sending password reset e-mail to '{}'", user.getEmail());
|
||||
Locale locale = Locale.forLanguageTag(user.getLangKey());
|
||||
Context context = new Context(locale);
|
||||
context.setVariable("user", user);
|
||||
context.setVariable("baseUrl", baseUrl);
|
||||
context.setVariable(USER, user);
|
||||
context.setVariable(BASE_URL, baseUrl);
|
||||
String content = templateEngine.process("passwordResetEmail", context);
|
||||
String subject = messageSource.getMessage("email.reset.title", null, locale);
|
||||
sendEmail(user.getEmail(), subject, content, false, true);
|
||||
|
@ -10,6 +10,7 @@ import com.mycompany.myapp.security.SecurityUtils;
|
||||
import com.mycompany.myapp.service.MailService;
|
||||
import com.mycompany.myapp.service.UserService;
|
||||
import com.mycompany.myapp.web.rest.dto.KeyAndPasswordDTO;
|
||||
import com.mycompany.myapp.web.rest.dto.ManagedUserDTO;
|
||||
import com.mycompany.myapp.web.rest.dto.UserDTO;
|
||||
import com.mycompany.myapp.web.rest.util.HeaderUtil;
|
||||
|
||||
@ -53,7 +54,7 @@ public class AccountResource {
|
||||
/**
|
||||
* POST /register : register the user.
|
||||
*
|
||||
* @param userDTO the user DTO
|
||||
* @param managedUserDTO the managed user DTO
|
||||
* @param request the HTTP request
|
||||
* @return the ResponseEntity with status 201 (Created) if the user is registred or 400 (Bad Request) if the login or e-mail is already in use
|
||||
*/
|
||||
@ -61,19 +62,19 @@ public class AccountResource {
|
||||
method = RequestMethod.POST,
|
||||
produces={MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_PLAIN_VALUE})
|
||||
@Timed
|
||||
public ResponseEntity<?> registerAccount(@Valid @RequestBody UserDTO userDTO, HttpServletRequest request) {
|
||||
public ResponseEntity<?> registerAccount(@Valid @RequestBody ManagedUserDTO managedUserDTO, HttpServletRequest request) {
|
||||
|
||||
HttpHeaders textPlainHeaders = new HttpHeaders();
|
||||
textPlainHeaders.setContentType(MediaType.TEXT_PLAIN);
|
||||
|
||||
return userRepository.findOneByLogin(userDTO.getLogin())
|
||||
return userRepository.findOneByLogin(managedUserDTO.getLogin())
|
||||
.map(user -> new ResponseEntity<>("login already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
|
||||
.orElseGet(() -> userRepository.findOneByEmail(userDTO.getEmail())
|
||||
.orElseGet(() -> userRepository.findOneByEmail(managedUserDTO.getEmail())
|
||||
.map(user -> new ResponseEntity<>("e-mail address already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
|
||||
.orElseGet(() -> {
|
||||
User user = userService.createUserInformation(userDTO.getLogin(), userDTO.getPassword(),
|
||||
userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail().toLowerCase(),
|
||||
userDTO.getLangKey());
|
||||
User user = userService.createUserInformation(managedUserDTO.getLogin(), managedUserDTO.getPassword(),
|
||||
managedUserDTO.getFirstName(), managedUserDTO.getLastName(), managedUserDTO.getEmail().toLowerCase(),
|
||||
managedUserDTO.getLangKey());
|
||||
String baseUrl = request.getScheme() + // "http"
|
||||
"://" + // "://"
|
||||
request.getServerName() + // "myhost"
|
||||
@ -143,7 +144,7 @@ public class AccountResource {
|
||||
method = RequestMethod.POST,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@Timed
|
||||
public ResponseEntity<String> saveAccount(@RequestBody UserDTO userDTO) {
|
||||
public ResponseEntity<String> saveAccount(@Valid @RequestBody UserDTO userDTO) {
|
||||
Optional<User> existingUser = userRepository.findOneByEmail(userDTO.getEmail());
|
||||
if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userDTO.getLogin()))) {
|
||||
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("user-management", "emailexists", "Email already in use")).body(null);
|
||||
@ -269,7 +270,7 @@ public class AccountResource {
|
||||
|
||||
private boolean checkPasswordLength(String password) {
|
||||
return (!StringUtils.isEmpty(password) &&
|
||||
password.length() >= UserDTO.PASSWORD_MIN_LENGTH &&
|
||||
password.length() <= UserDTO.PASSWORD_MAX_LENGTH);
|
||||
password.length() >= ManagedUserDTO.PASSWORD_MIN_LENGTH &&
|
||||
password.length() <= ManagedUserDTO.PASSWORD_MAX_LENGTH);
|
||||
}
|
||||
}
|
||||
|
@ -2,13 +2,20 @@ package com.mycompany.myapp.web.rest.dto;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.mycompany.myapp.domain.User;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
/**
|
||||
* A DTO extending the UserDTO, which is meant to be used in the user management UI.
|
||||
*/
|
||||
public class ManagedUserDTO extends UserDTO {
|
||||
|
||||
public static final int PASSWORD_MIN_LENGTH = 4;
|
||||
public static final int PASSWORD_MAX_LENGTH = 100;
|
||||
|
||||
private Long id;
|
||||
|
||||
private ZonedDateTime createdDate;
|
||||
@ -17,6 +24,10 @@ public class ManagedUserDTO extends UserDTO {
|
||||
|
||||
private ZonedDateTime lastModifiedDate;
|
||||
|
||||
@NotNull
|
||||
@Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH)
|
||||
private String password;
|
||||
|
||||
public ManagedUserDTO() {
|
||||
}
|
||||
|
||||
@ -26,6 +37,17 @@ public class ManagedUserDTO extends UserDTO {
|
||||
this.createdDate = user.getCreatedDate();
|
||||
this.lastModifiedBy = user.getLastModifiedBy();
|
||||
this.lastModifiedDate = user.getLastModifiedDate();
|
||||
this.password = null;
|
||||
}
|
||||
|
||||
public ManagedUserDTO(Long id, String login, String password, String firstName, String lastName,
|
||||
String email, boolean activated, String langKey, Set<String> authorities , ZonedDateTime createdDate, String lastModifiedBy, ZonedDateTime lastModifiedDate ) {
|
||||
super(login, firstName, lastName, email, activated, langKey, authorities);
|
||||
this.id = id;
|
||||
this.createdDate = createdDate;
|
||||
this.lastModifiedBy = lastModifiedBy;
|
||||
this.lastModifiedDate = lastModifiedDate;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
@ -60,6 +82,10 @@ public class ManagedUserDTO extends UserDTO {
|
||||
this.lastModifiedDate = lastModifiedDate;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ManagedUserDTO{" +
|
||||
|
@ -13,18 +13,11 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class UserDTO {
|
||||
|
||||
public static final int PASSWORD_MIN_LENGTH = 4;
|
||||
public static final int PASSWORD_MAX_LENGTH = 100;
|
||||
|
||||
@Pattern(regexp = "^[a-z0-9]*$")
|
||||
@NotNull
|
||||
@Size(min = 1, max = 50)
|
||||
private String login;
|
||||
|
||||
@NotNull
|
||||
@Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH)
|
||||
private String password;
|
||||
|
||||
@Size(max = 50)
|
||||
private String firstName;
|
||||
|
||||
@ -46,17 +39,16 @@ public class UserDTO {
|
||||
}
|
||||
|
||||
public UserDTO(User user) {
|
||||
this(user.getLogin(), null, user.getFirstName(), user.getLastName(),
|
||||
this(user.getLogin(), user.getFirstName(), user.getLastName(),
|
||||
user.getEmail(), user.getActivated(), user.getLangKey(),
|
||||
user.getAuthorities().stream().map(Authority::getName)
|
||||
.collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
public UserDTO(String login, String password, String firstName, String lastName,
|
||||
public UserDTO(String login, String firstName, String lastName,
|
||||
String email, boolean activated, String langKey, Set<String> authorities) {
|
||||
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
this.login = login;
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
this.email = email;
|
||||
@ -65,10 +57,6 @@ public class UserDTO {
|
||||
this.authorities = authorities;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public String getLogin() {
|
||||
return login;
|
||||
}
|
||||
@ -101,7 +89,6 @@ public class UserDTO {
|
||||
public String toString() {
|
||||
return "UserDTO{" +
|
||||
"login='" + login + '\'' +
|
||||
", password='" + password + '\'' +
|
||||
", firstName='" + firstName + '\'' +
|
||||
", lastName='" + lastName + '\'' +
|
||||
", email='" + email + '\'' +
|
||||
|
@ -28,6 +28,7 @@ public interface UserMapper {
|
||||
@Mapping(target = "activationKey", ignore = true)
|
||||
@Mapping(target = "resetKey", ignore = true)
|
||||
@Mapping(target = "resetDate", ignore = true)
|
||||
@Mapping(target = "password", ignore = true)
|
||||
User userDTOToUser(UserDTO userDTO);
|
||||
|
||||
List<User> userDTOsToUsers(List<UserDTO> userDTOs);
|
||||
@ -41,7 +42,7 @@ public interface UserMapper {
|
||||
return user;
|
||||
}
|
||||
|
||||
default Set<String> stringsFromAuthorities (Set < Authority > authorities) {
|
||||
default Set<String> stringsFromAuthorities (Set<Authority> authorities) {
|
||||
return authorities.stream().map(Authority::getName)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
@ -78,3 +78,5 @@ jhipster:
|
||||
host: localhost
|
||||
port: 5000
|
||||
queueSize: 512
|
||||
swagger: # swagger is enabled. It can be disabled by pasing 'no-swagger' profile at run time as well
|
||||
enabled: true
|
||||
|
@ -88,3 +88,5 @@ jhipster:
|
||||
host: localhost
|
||||
port: 5000
|
||||
queueSize: 512
|
||||
swagger: # swagger is disabled. It can be disabled by pasing 'no-swagger' profile at run time as well
|
||||
enabled: false
|
||||
|
@ -16,7 +16,7 @@
|
||||
<!--
|
||||
Added the entity BankAccount.
|
||||
-->
|
||||
<changeSet id="20150805124838" author="jhipster">
|
||||
<changeSet id="20150805124838-1" author="jhipster">
|
||||
<createTable tableName="bank_account">
|
||||
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
|
||||
<constraints primaryKey="true" nullable="false"/>
|
||||
@ -33,11 +33,5 @@
|
||||
<!-- jhipster-needle-liquibase-add-column - Jhipster will add columns here, do not remove-->
|
||||
</createTable>
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="user_id"
|
||||
baseTableName="bank_account"
|
||||
constraintName="fk_bankaccount_user_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="jhi_user"/>
|
||||
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
|
||||
<!--
|
||||
Added the constraints for entity BankAccount.
|
||||
-->
|
||||
<changeSet id="20150805124838-2" author="jhipster">
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="user_id"
|
||||
baseTableName="bank_account"
|
||||
constraintName="fk_bankaccount_user_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="jhi_user"/>
|
||||
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
@ -16,7 +16,7 @@
|
||||
<!--
|
||||
Added the entity Label.
|
||||
-->
|
||||
<changeSet id="20150805124936" author="jhipster">
|
||||
<changeSet id="20150805124936-1" author="jhipster">
|
||||
<createTable tableName="label">
|
||||
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
|
||||
<constraints primaryKey="true" nullable="false"/>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<!--
|
||||
Added the entity Operation.
|
||||
-->
|
||||
<changeSet id="20150805125054" author="jhipster">
|
||||
<changeSet id="20150805125054-1" author="jhipster">
|
||||
<createTable tableName="operation">
|
||||
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
|
||||
<constraints primaryKey="true" nullable="false"/>
|
||||
@ -38,11 +38,6 @@
|
||||
</createTable>
|
||||
<dropDefaultValue tableName="operation" columnName="date" columnDataType="datetime"/>
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="bank_account_id"
|
||||
baseTableName="operation"
|
||||
constraintName="fk_operation_bankaccount_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="bank_account"/>
|
||||
<createTable tableName="operation_label">
|
||||
<column name="labels_id" type="bigint">
|
||||
<constraints nullable="false"/>
|
||||
@ -53,18 +48,6 @@
|
||||
</createTable>
|
||||
|
||||
<addPrimaryKey columnNames="operations_id, labels_id" tableName="operation_label"/>
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="operations_id"
|
||||
baseTableName="operation_label"
|
||||
constraintName="fk_operation_label_label_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="operation"/>
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="labels_id"
|
||||
baseTableName="operation_label"
|
||||
constraintName="fk_operation_label_operation_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="label"/>
|
||||
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
|
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
|
||||
<!--
|
||||
Added the constraints for entity Operation.
|
||||
-->
|
||||
<changeSet id="20150805125054-2" author="jhipster">
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="bank_account_id"
|
||||
baseTableName="operation"
|
||||
constraintName="fk_operation_bankaccount_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="bank_account"/>
|
||||
|
||||
<addForeignKeyConstraint baseColumnNames="operations_id"
|
||||
baseTableName="operation_label"
|
||||
constraintName="fk_operation_label_label_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="operation"/>
|
||||
<addForeignKeyConstraint baseColumnNames="labels_id"
|
||||
baseTableName="operation_label"
|
||||
constraintName="fk_operation_label_operation_id"
|
||||
referencedColumnNames="id"
|
||||
referencedTableName="label"/>
|
||||
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
@ -9,4 +9,7 @@
|
||||
<include file="classpath:config/liquibase/changelog/20150805124936_added_entity_Label.xml" relativeToChangelogFile="false"/>
|
||||
<include file="classpath:config/liquibase/changelog/20150805125054_added_entity_Operation.xml" relativeToChangelogFile="false"/>
|
||||
<!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
|
||||
<include file="classpath:config/liquibase/changelog/20150805124838_added_entity_constraints_BankAccount.xml" relativeToChangelogFile="false"/>
|
||||
<include file="classpath:config/liquibase/changelog/20150805125054_added_entity_constraints_Operation.xml" relativeToChangelogFile="false"/>
|
||||
<!-- jhipster-needle-liquibase-add-constraints-changelog - JHipster will add liquibase constraints changelogs here -->
|
||||
</databaseChangeLog>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<h1 translate="activate.title">Activation</h1>
|
||||
|
||||
<div class="alert alert-success" ng-show="vm.success" translate="activate.messages.success" translate-compile>
|
||||
<strong>Your user has been activated.</strong> Please <a class="alert-link" href="" ng-click="vm.login">sign in</a>.
|
||||
<strong>Your user has been activated.</strong> Please <a class="alert-link" href="" ng-click="vm.login()">sign in</a>.
|
||||
</div>
|
||||
|
||||
<div class="alert alert-danger" ng-show="vm.error" translate="activate.messages.error">
|
||||
|
@ -19,7 +19,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
|
||||
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
|
||||
ng-model="vm.password" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.password" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.password.$dirty && form.password.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
|
||||
@ -27,7 +27,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
|
||||
Your password is required to be at least 5 characters.
|
||||
Your password is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
|
||||
@ -39,7 +39,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
|
||||
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
|
||||
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
|
||||
@ -47,7 +47,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
|
||||
Your confirmation password is required to be at least 5 characters.
|
||||
Your confirmation password is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">
|
||||
|
@ -19,7 +19,7 @@
|
||||
vm.registerAccount = {};
|
||||
vm.success = null;
|
||||
|
||||
$timeout(function (){angular.element('[ng-model="vm.registerAccount.login"]').focus();});
|
||||
$timeout(function (){angular.element('#login').focus();});
|
||||
|
||||
function register () {
|
||||
if (vm.registerAccount.password !== vm.confirmPassword) {
|
||||
|
@ -75,7 +75,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
|
||||
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
|
||||
ng-model="vm.registerAccount.password" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.registerAccount.password" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.password.$dirty && form.password.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
|
||||
@ -83,7 +83,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
|
||||
Your password is required to be at least 5 characters.
|
||||
Your password is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
|
||||
@ -95,7 +95,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
|
||||
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
|
||||
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
|
||||
@ -103,7 +103,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
|
||||
Your confirmation password is required to be at least 5 characters.
|
||||
Your confirmation password is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">
|
||||
@ -116,7 +116,7 @@
|
||||
</form>
|
||||
<p></p>
|
||||
<div class="alert alert-warning" translate="global.messages.info.authenticated" translate-compile>
|
||||
If you want to <a class="alert-link" href="" ng-click="login()">sign in</a>, you can try the default accounts:<br/>- Administrator (login="admin" and password="admin") <br/>- User (login="user" and password="user").
|
||||
If you want to <a class="alert-link" href="" ng-click="vm.login()">sign in</a>, you can try the default accounts:<br/>- Administrator (login="admin" and password="admin") <br/>- User (login="user" and password="user").
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -19,7 +19,7 @@
|
||||
vm.resetAccount = {};
|
||||
vm.success = null;
|
||||
|
||||
$timeout(function (){angular.element('[ng-model="vm.resetAccount.password"]').focus();});
|
||||
$timeout(function (){angular.element('#password').focus();});
|
||||
|
||||
function finishReset() {
|
||||
if (vm.resetAccount.password !== vm.confirmPassword) {
|
||||
|
@ -16,7 +16,7 @@
|
||||
</div>
|
||||
|
||||
<div class="alert alert-success" ng-show="vm.success">
|
||||
<p translate="reset.finish.messages.success" translate-compile><strong>Your password has been reset.</strong> Please <a class="alert-link" href="" ng-click="login">sign in</a>.</p>
|
||||
<p translate="reset.finish.messages.success" translate-compile><strong>Your password has been reset.</strong> Please <a class="alert-link" href="" ng-click="vm.login()">sign in</a>.</p>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-danger" ng-show="vm.doNotMatch" translate="global.messages.error.dontmatch">
|
||||
@ -28,7 +28,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
|
||||
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
|
||||
ng-model="vm.resetAccount.password" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.resetAccount.password" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.password.$dirty && form.password.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
|
||||
@ -36,7 +36,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
|
||||
Your password is required to be at least 5 characters.
|
||||
Your password is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
|
||||
@ -49,7 +49,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
|
||||
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
|
||||
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
|
||||
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
|
||||
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
|
||||
@ -57,7 +57,7 @@
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
|
||||
Your password confirmation is required to be at least 5 characters.
|
||||
Your password confirmation is required to be at least 4 characters.
|
||||
</p>
|
||||
<p class="help-block"
|
||||
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">
|
||||
|
@ -16,7 +16,7 @@
|
||||
vm.resetAccount = {};
|
||||
vm.success = null;
|
||||
|
||||
$timeout(function (){angular.element('[ng-model="resetAccount.email"]').focus();});
|
||||
$timeout(function (){angular.element('#email').focus();});
|
||||
|
||||
function requestReset () {
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
<div>
|
||||
|
||||
<h2 translate="sessions.title" translate-values="{username: '{{vm.account.login}}'}">Active sessions for [<b>{{vm.account.login}}</b>]</h2>
|
||||
|
||||
<div class="alert alert-success" ng-show="vm.success" translate="sessions.messages.success">
|
||||
|
@ -36,6 +36,6 @@
|
||||
</table>
|
||||
|
||||
<div class="text-center">
|
||||
<uib-pagination class="pagination-sm" total-items="vm.totalItems" ng-model="vm.page" ng-change="vm.loadPage(page)"></uib-pagination>
|
||||
<uib-pagination class="pagination-sm" total-items="vm.totalItems" ng-model="vm.page" ng-change="vm.loadPage(vm.page)"></uib-pagination>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<div>
|
||||
|
||||
<h2 translate="health.title">Health Checks</h2>
|
||||
|
||||
<p>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<div>
|
||||
<div class="table-responsive">
|
||||
<h2 translate="logs.title">Logs</h2>
|
||||
|
||||
<p translate="logs.nbloggers" translate-values="{total: '{{ vm.loggers.length }}'}">There are {{ vm.loggers.length }} loggers.</p>
|
||||
|
||||
<span translate="logs.filter">Filter</span> <input type="text" ng-model="filter" class="form-control">
|
||||
|
||||
<table class="table table-condensed table-striped table-bordered table-responsive">
|
||||
<table class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr title="click to order">
|
||||
<th ng-click="predicate = 'name'; reverse=!reverse"><span translate="logs.table.name">Name</span></th>
|
||||
|
@ -1,239 +1,237 @@
|
||||
<div>
|
||||
<h2 translate="metrics.title">Application Metrics</h2>
|
||||
<p>
|
||||
<button type="button" class="btn btn-primary" ng-click="vm.refresh()"><span class="glyphicon glyphicon-refresh"></span> <span translate="metrics.refresh.button">Refresh</span></button>
|
||||
</p>
|
||||
|
||||
<h2 translate="metrics.title">Application Metrics</h2>
|
||||
<p>
|
||||
<button type="button" class="btn btn-primary" ng-click="vm.refresh()"><span class="glyphicon glyphicon-refresh"></span> <span translate="metrics.refresh.button">Refresh</span></button>
|
||||
</p>
|
||||
|
||||
<h3 translate="metrics.jvm.title">JVM Metrics</h3>
|
||||
<div class="row" ng-hide="vm.updatingMetrics">
|
||||
<div class="col-md-4">
|
||||
<b translate="metrics.jvm.memory.title">Memory</b>
|
||||
<p><span translate="metrics.jvm.memory.total">Total Memory</span> ({{vm.metrics.gauges['jvm.memory.total.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.total.max'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.total.max'].value" value="vm.metrics.gauges['jvm.memory.total.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.total.used'].value * 100 / vm.metrics.gauges['jvm.memory.total.max'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.memory.heap">Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.heap.max'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.heap.max'].value" value="vm.metrics.gauges['jvm.memory.heap.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.heap.max'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.memory.nonheap">Non-Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.non-heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.non-heap.committed'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.non-heap.committed'].value" value="vm.metrics.gauges['jvm.memory.non-heap.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.non-heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.non-heap.committed'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<b translate="metrics.jvm.threads.title">Threads</b> (Total: {{vm.metrics.gauges['jvm.threads.count'].value}}) <a class="hand" ng-click="vm.refreshThreadDumpData()" data-toggle="modal" data-target="#threadDump"><i class="glyphicon glyphicon-eye-open"></i></a>
|
||||
<p><span translate="metrics.jvm.threads.runnable">Runnable</span> {{vm.metrics.gauges['jvm.threads.runnable.count'].value}}</p>
|
||||
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.runnable.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.threads.runnable.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.threads.timedwaiting">Timed Waiting</span> ({{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value}})</p>
|
||||
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.timed_waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
|
||||
<span>{{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.threads.waiting">Waiting</span> ({{vm.metrics.gauges['jvm.threads.waiting.count'].value}})</p>
|
||||
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
|
||||
<span>{{vm.metrics.gauges['jvm.threads.waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.threads.blocked">Blocked</span> ({{vm.metrics.gauges['jvm.threads.blocked.count'].value}})</p>
|
||||
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.blocked.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.threads.blocked.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<b translate="metrics.jvm.gc.title">Garbage collections</b>
|
||||
<div class="row">
|
||||
<div class="col-md-9" translate="metrics.jvm.gc.marksweepcount">Mark Sweep count</div>
|
||||
<div class="col-md-3 text-right">{{vm.metrics.gauges['jvm.garbage.PS-MarkSweep.count'].value}}</div>
|
||||
<h3 translate="metrics.jvm.title">JVM Metrics</h3>
|
||||
<div class="row" ng-hide="vm.updatingMetrics">
|
||||
<div class="col-md-4">
|
||||
<b translate="metrics.jvm.memory.title">Memory</b>
|
||||
<p><span translate="metrics.jvm.memory.total">Total Memory</span> ({{vm.metrics.gauges['jvm.memory.total.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.total.max'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.total.max'].value" value="vm.metrics.gauges['jvm.memory.total.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.total.used'].value * 100 / vm.metrics.gauges['jvm.memory.total.max'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.memory.heap">Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.heap.max'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.heap.max'].value" value="vm.metrics.gauges['jvm.memory.heap.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.heap.max'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.memory.nonheap">Non-Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.non-heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.non-heap.committed'].value / 1000000 | number:0}}M)</p>
|
||||
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.non-heap.committed'].value" value="vm.metrics.gauges['jvm.memory.non-heap.used'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.memory.non-heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.non-heap.committed'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-9" translate="metrics.jvm.gc.marksweeptime">Mark Sweep time</div>
|
||||
<div class="col-md-3 text-right">{{vm.metrics.gauges['jvm.garbage.PS-MarkSweep.time'].value}}ms</div>
|
||||
<div class="col-md-4">
|
||||
<b translate="metrics.jvm.threads.title">Threads</b> (Total: {{vm.metrics.gauges['jvm.threads.count'].value}}) <a class="hand" ng-click="vm.refreshThreadDumpData()" data-toggle="modal" data-target="#threadDump"><i class="glyphicon glyphicon-eye-open"></i></a>
|
||||
<p><span translate="metrics.jvm.threads.runnable">Runnable</span> {{vm.metrics.gauges['jvm.threads.runnable.count'].value}}</p>
|
||||
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.runnable.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
|
||||
<span>{{vm.metrics.gauges['jvm.threads.runnable.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
|
||||
</uib-progressbar>
|
||||
<p><span translate="metrics.jvm.threads.timedwaiting">Timed Waiting</span> ({{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value}})</p>
|
||||