not working
This commit is contained in:
parent
096386e7aa
commit
04c6247522
@ -8,9 +8,11 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
public class MvcConfig implements WebMvcConfigurer {
|
||||
|
||||
public void addViewControllers(ViewControllerRegistry registry) {
|
||||
registry.addViewController("/home").setViewName("home");
|
||||
registry.addViewController("/").setViewName("home");
|
||||
registry.addViewController("/addCourse").setViewName("addCourse");
|
||||
registry.addViewController("/").setViewName("start");
|
||||
registry.addViewController("/login").setViewName("login");
|
||||
registry.addViewController("/start").setViewName("start");
|
||||
registry.addViewController("/register").setViewName("register");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,23 +1,43 @@
|
||||
package com.wmi.lti.config;
|
||||
|
||||
import com.wmi.lti.model.user.MyUserDetailsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
@ComponentScan
|
||||
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
|
||||
@Autowired
|
||||
public void configAuthentication(final AuthenticationManagerBuilder auth) throws Exception {
|
||||
auth.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public PasswordEncoder passwordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
http
|
||||
.authorizeRequests()
|
||||
.antMatchers("/", "/home").permitAll()
|
||||
.antMatchers( "/courses/**").authenticated()
|
||||
.antMatchers("/", "/register").permitAll()
|
||||
.antMatchers("/", "/start").authenticated()
|
||||
//.anyRequest().authenticated()
|
||||
.and()
|
||||
@ -34,13 +54,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
@Bean
|
||||
@Override
|
||||
public UserDetailsService userDetailsService() {
|
||||
UserDetails user =
|
||||
/* UserDetails user =
|
||||
User.withDefaultPasswordEncoder()
|
||||
.username("adrianw")
|
||||
.password("eduserwis1245")
|
||||
.roles("USER")
|
||||
.build();
|
||||
|
||||
return new InMemoryUserDetailsManager(user);
|
||||
*/
|
||||
return new MyUserDetailsService() {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
52
src/main/java/com/wmi/lti/controllers/CourseController.java
Normal file
52
src/main/java/com/wmi/lti/controllers/CourseController.java
Normal file
@ -0,0 +1,52 @@
|
||||
package com.wmi.lti.controllers;
|
||||
|
||||
import com.wmi.lti.model.course.Course;
|
||||
import com.wmi.lti.model.course.CourseRepository;
|
||||
import com.wmi.lti.model.user.UserPrincipal;
|
||||
import org.imsglobal.lti.launch.LtiOauthSigner;
|
||||
import org.imsglobal.lti.launch.LtiSigner;
|
||||
import org.imsglobal.lti.launch.LtiSigningException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Controller
|
||||
public class CourseController {
|
||||
|
||||
@Autowired
|
||||
private CourseRepository courseRepository;
|
||||
|
||||
@GetMapping("/courses")
|
||||
public String listCourses() {
|
||||
|
||||
//model.addAttribute("message", name);
|
||||
|
||||
return "start"; //view
|
||||
}
|
||||
|
||||
@GetMapping("/addCourse")
|
||||
public String addCourseView() {
|
||||
return "addCourse"; //view
|
||||
}
|
||||
|
||||
@PostMapping("")
|
||||
public String addCourse(
|
||||
@RequestParam(name = "key", required = false, defaultValue = "")
|
||||
String key, @RequestParam(name = "secret", required = false, defaultValue = "")
|
||||
String secret, @RequestParam(name = "url", required = false, defaultValue = "")
|
||||
String url, @RequestParam(name = "name", required = false, defaultValue = "")
|
||||
String name, Model model) {
|
||||
|
||||
courseRepository.save(new Course(null, name, url, key, secret));
|
||||
return "start"; //view
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.wmi.lti.controllers;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@Controller
|
||||
public class HomeController {
|
||||
|
||||
@GetMapping("/home")
|
||||
public String home(
|
||||
@RequestParam(name = "name", required = false, defaultValue = "")
|
||||
String name, Model model) {
|
||||
|
||||
//model.addAttribute("message", name);
|
||||
|
||||
return "home"; //view
|
||||
}
|
||||
}
|
@ -1,17 +1,15 @@
|
||||
package com.wmi.lti.controllers;
|
||||
|
||||
import com.wmi.lti.model.user.UserPrincipal;
|
||||
import org.imsglobal.lti.launch.LtiOauthSigner;
|
||||
import org.imsglobal.lti.launch.LtiSigner;
|
||||
import org.imsglobal.lti.launch.LtiSigningException;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@ -29,7 +27,7 @@ public class StartController {
|
||||
Map<String, String> parameters = new HashMap<>();
|
||||
parameters.put("lti_message_type","basic-lti-launch-request");
|
||||
parameters.put("lti_version", "LTI-1p0");
|
||||
parameters.put("resource_link_id", ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());
|
||||
parameters.put("resource_link_id", ((UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());
|
||||
try {
|
||||
Map<String, String> signedParameters = signer.signParameters(parameters, key, secret, url, "POST");
|
||||
String link = url + "?" + "oauth_nonce=" + signedParameters.get("oauth_nonce") + "&oauth_signature=" + signedParameters.get("oauth_signature") + "&oauth_consumer_key=" + signedParameters.get("oauth_consumer_key") + "&oauth_signature_method=" + signedParameters.get("oauth_signature_method") + "&oauth_timestamp=" + signedParameters.get("oauth_timestamp") + "&oauth_version=" + signedParameters.get("oauth_version") + "<i_message_type=" + signedParameters.get("lti_message_type") + "<i_version=" + signedParameters.get("lti_version") + "&resource_link_id=" + signedParameters.get("resource_link_id");
|
||||
|
38
src/main/java/com/wmi/lti/controllers/UserController.java
Normal file
38
src/main/java/com/wmi/lti/controllers/UserController.java
Normal file
@ -0,0 +1,38 @@
|
||||
package com.wmi.lti.controllers;
|
||||
|
||||
import com.wmi.lti.model.user.User;
|
||||
import com.wmi.lti.model.user.UserRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/users")
|
||||
public class UserController {
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
|
||||
@PostMapping("")
|
||||
public String create(@RequestParam String username, @RequestParam String password, Model model) {
|
||||
User user = new User();
|
||||
user.setUsername(username);
|
||||
user.setPassword(passwordEncoder.encode(password));
|
||||
userRepository.save(user);
|
||||
return "login";
|
||||
}
|
||||
|
||||
@GetMapping("/register")
|
||||
public String getRegisterView() {
|
||||
return "register";
|
||||
}
|
||||
}
|
38
src/main/java/com/wmi/lti/model/course/Course.java
Normal file
38
src/main/java/com/wmi/lti/model/course/Course.java
Normal file
@ -0,0 +1,38 @@
|
||||
package com.wmi.lti.model.course;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
@AllArgsConstructor
|
||||
public class Course {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
@Getter
|
||||
@Setter
|
||||
private Long id;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String name;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String url;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String course_key;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String secret;
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.wmi.lti.model.course;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface CourseRepository extends JpaRepository<Course, Long> {
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.wmi.lti.model.user;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class MyUserDetailsService implements UserDetailsService {
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username) {
|
||||
User user = userRepository.findByUsername(username);
|
||||
if (user == null) {
|
||||
throw new UsernameNotFoundException(username);
|
||||
}
|
||||
return new UserPrincipal(user);
|
||||
}
|
||||
|
||||
}
|
26
src/main/java/com/wmi/lti/model/user/User.java
Normal file
26
src/main/java/com/wmi/lti/model/user/User.java
Normal file
@ -0,0 +1,26 @@
|
||||
package com.wmi.lti.model.user;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
@Entity
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
@Getter
|
||||
@Setter
|
||||
private Long id;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false, unique = true)
|
||||
private String username;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String password;
|
||||
|
||||
}
|
49
src/main/java/com/wmi/lti/model/user/UserPrincipal.java
Normal file
49
src/main/java/com/wmi/lti/model/user/UserPrincipal.java
Normal file
@ -0,0 +1,49 @@
|
||||
package com.wmi.lti.model.user;
|
||||
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class UserPrincipal implements UserDetails {
|
||||
private User user;
|
||||
|
||||
public UserPrincipal(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<? extends GrantedAuthority> getAuthorities() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return user.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return user.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonLocked() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCredentialsNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
}
|
9
src/main/java/com/wmi/lti/model/user/UserRepository.java
Normal file
9
src/main/java/com/wmi/lti/model/user/UserRepository.java
Normal file
@ -0,0 +1,9 @@
|
||||
package com.wmi.lti.model.user;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
|
||||
User findByUsername(String username);
|
||||
|
||||
}
|
@ -10,10 +10,11 @@
|
||||
</head>
|
||||
<body>
|
||||
This is tool consumer for LTI<br>
|
||||
<form th:action="@{/start}" method="post">
|
||||
<form th:action="@{/courses}" method="post">
|
||||
<div><label> URL: <input type="text" name="url"/></label></div>
|
||||
<div><label> Key: <input type="text" name="key"/></label></div>
|
||||
<div><label> Secret: <input type="text" name="secret"/></label></div>
|
||||
<div><label> Course name: <input type="text" name="name"/></label></div>
|
||||
<div><input type="submit" value="Submit"/></div>
|
||||
</form>
|
||||
</body>
|
@ -16,5 +16,9 @@
|
||||
<div><label> Password: <input type="password" name="password"/> </label></div>
|
||||
<div><input type="submit" value="Sign In"/></div>
|
||||
</form>
|
||||
|
||||
<form th:action="@{/users/register}" method="get">
|
||||
<div><input type="submit" value="Register"/></div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
18
src/main/resources/templates/register.html
Normal file
18
src/main/resources/templates/register.html
Normal file
@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<title>LTI start</title>
|
||||
|
||||
<link rel="stylesheet" th:href="@{/css/main.css}"/>
|
||||
</head>
|
||||
<body>
|
||||
<form th:action="@{/users}" method="post">
|
||||
<div><label> User Name : <input type="text" name="username"/></label></div>
|
||||
<div><label> Password: <input type="password" name="password"/></label></div>
|
||||
<div><input type="submit" value="Register"/></div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
@ -12,5 +12,9 @@
|
||||
<form th:action="${launchUrl}" method="POST">
|
||||
<input type="submit">Launch Tool</input>
|
||||
</form>
|
||||
<br><br><br>
|
||||
<form th:action="@{/courses/addCourse}" method="GET">
|
||||
<div><input type="submit" value="Add new content"/></div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user