Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions README.DEV.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

## When starting jPrime for first time.


### Create new database in MySQL DB

$ mysql -u root -p

mysql> USE mysql;

mysql> CREATE DATABASE IF NOT EXISTS javabg
DEFAULT CHARACTER SET = utf8
DEFAULT COLLATE = utf8_unicode_ci;

mysql> GRANT ALL ON javabg.* TO 'root'@'localhost' IDENTIFIED BY 'admin';

mysql> exit;


### Configure REAL Mail or FAKE Mail server

##### FAKE mail servers used only during development

- www.mailtrap.io


### Copy application-DEV.template.properties to application-DEV.properties

$ cd jprime/src/main/resources/

$ cp application-DEV.template.properties application-DEV.properties


### Adjust DEV profile properties file(application-DEV.properties) if needed

$ vim /jprime/src/main/resources/application-DEV.properties

spring.boot.admin.url=http://localhost:9090

server.port=9090

23 changes: 23 additions & 0 deletions jprime - Application.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.springframework.ide.eclipse.boot.launch">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/jprime/src/main/java/site/app/Application.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="site.app.Application"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="jprime"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.springframework.ide.eclipse.boot.launch.BootMavenSourcePathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djava.security.egd=file:/dev/./urandom"/>
<stringAttribute key="process_factory_id" value="org.springframework.ide.eclipse.boot.launch.process.BootProcessFactory"/>
<booleanAttribute key="spring.boot.debug.enable" value="false"/>
<booleanAttribute key="spring.boot.lifecycle.enable" value="true"/>
<stringAttribute key="spring.boot.lifecycle.termination.timeout" value="15000"/>
<booleanAttribute key="spring.boot.livebean.enable" value="true"/>
<stringAttribute key="spring.boot.livebean.port" value="19702"/>
<stringAttribute key="spring.boot.profile" value="DEV"/>
</launchConfiguration>
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@
</profiles>

<properties>
<start-class>site.app.Application</start-class><!-- becase we want to start the spring-boot as a war-->
<start-class>site.app.Application</start-class><!-- because we want to start the spring-boot as a war-->
<spring.version>4.1.5.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-data-jpa.version>1.5.0.M1</spring-data-jpa.version>
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/site/app/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

import site.model.Role;
import site.model.User;
import site.repository.UserRepository;

Expand Down Expand Up @@ -62,17 +63,18 @@ public Authentication authenticate(Authentication authentication) throws Authent
String providedPassword = (String) authentication.getCredentials();

//admin hack
if(email.equals("admin") && providedPassword.equals(environment.getProperty("admin.password"))){
return new UsernamePasswordAuthenticationToken(email, providedPassword, Collections.singleton(new SimpleGrantedAuthority("ADMIN")));
if(email.equals("admin") && providedPassword.equals(environment.getProperty("admin.password"))) {
return new UsernamePasswordAuthenticationToken(email, providedPassword, Collections.singleton(new SimpleGrantedAuthority(Role.ADMIN_NAME)));
}

User user = userRepository.findUserByEmail(email);

if (user == null || !passwordEncoder().matches(providedPassword, user.getPassword())) {
throw new BadCredentialsException("Username/Password does not match for " + authentication.getPrincipal());
}

return new UsernamePasswordAuthenticationToken(email, providedPassword, Collections.singleton(new SimpleGrantedAuthority("USER")));
// @Trifon - Read User roles from DB
// return new UsernamePasswordAuthenticationToken(email, providedPassword, Collections.singleton(new SimpleGrantedAuthority("USER")));
return new UsernamePasswordAuthenticationToken(email, providedPassword, user.getRoles());
}

@Override
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/site/controller/AdminArticleController.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.springframework.web.bind.annotation.RequestMethod;
import site.facade.AdminService;
import site.model.Article;
import site.model.Role;
import site.model.User;

import javax.validation.Valid;
Expand Down Expand Up @@ -45,17 +46,18 @@ public String add(@Valid final Article article, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "/admin/article/edit.jsp";
}
User admin = this.adminFacade.findUserByEmail("admin@jsprime.io");
if (admin == null) {
admin = new User();
admin.setEmail("admin@jsprime.io");
admin.setFirstName("Admin");
admin.setLastName("");
this.adminFacade.saveUser(admin);
User adminUser = this.adminFacade.findUserByEmail(User.ADMIN_EMAIL);
Role adminRole = this.adminFacade.findRoleByNameOrCreate(Role.ADMIN_NAME); //@Trifon
if (adminUser == null) {
adminUser = this.adminFacade.createRegularUser(User.ADMIN_EMAIL);
adminUser.setFirstName("Admin");
adminUser.setLastName("");
adminUser.addRole( adminRole ); //@Trifon
adminUser = this.adminFacade.saveUser(adminUser);
//refresh
admin = this.adminFacade.findUserByEmail("admin@jsprime.io");
adminUser = this.adminFacade.findUserByEmail(User.ADMIN_EMAIL); // TODO - Maybe this refresh is not needed as admin is already updated by saveUser()?
}
article.setAuthor(admin);
article.setAuthor(adminUser);
this.adminFacade.saveArticle(article);

return "redirect:/admin/article/view";
Expand Down Expand Up @@ -83,5 +85,4 @@ public String remove(@PathVariable("itemId") Long itemId, Model model) {
adminFacade.deleteArticle(itemId);
return "redirect:/admin/article/view";
}

}
}
33 changes: 32 additions & 1 deletion src/main/java/site/facade/AdminService.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ public class AdminService {
@Qualifier(UserRepository.NAME)
private UserRepository userRepository;

@Autowired
@Qualifier(RoleRepository.NAME)
private RoleRepository roleRepository;

@Autowired
@Qualifier(TagRepository.NAME)
private TagRepository tagRepository;
Expand Down Expand Up @@ -149,9 +153,36 @@ public User findOneUser(Long id){
return userRepository.findOne(id);
}

//@Trifon
public Role findRoleByName(String roleName) {
return roleRepository.findByName( roleName );
}
//@Trifon
public Role findRoleByNameOrCreate(String roleName) {
Role role = this.findRoleByName( roleName );
if (role == null) {
role = new Role( roleName );
role = this.saveRole( role );
}
return role;
}
//@Trifon
public Role saveRole(Role role) {
return roleRepository.save( role );
}
//@Trifon
public User createRegularUser(String email) {
Role userRole = this.findRoleByNameOrCreate(Role.USER_NAME);

User user = new User();
user.setEmail( email );
user.addRole( userRole );
return user;
}

//currently used for admin TODO:to be fixed with normal authentication with spring
public User findUserByEmail(String email){
if(userRepository.findByEmail(email).size()>0) {
if (userRepository.findByEmail(email).size()>0) {
return userRepository.findByEmail(email).get(0);
}
return null;
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/site/model/Role.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package site.model;

import javax.persistence.Entity;

import org.springframework.security.core.GrantedAuthority;

/**
* @author Trifon Trifonov
*/
@Entity
public class Role
extends AbstractEntity
implements GrantedAuthority
{

private static final long serialVersionUID = 1L;

public final static String USER_NAME = "USER";
public final static String ADMIN_NAME = "ADMIN";

private String name;

public Role() {

}
public Role(String name) {
this.name = name;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@Override
public String getAuthority() {
return name;
}

@Override
public String toString() {
return "Role ["+
"id=" + getId() +
", name=" + name +
"]";
}
}
Loading