// Path: src/main/java/org/auslides/security/model/Permission.java
// @JsonIgnoreProperties(value = {"handler"})
// public class Permission {
//     private String id;
//     private String name;
//     private String description;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
// }
// 
// Path: src/main/java/org/auslides/security/model/Role.java
// @JsonIgnoreProperties(value = {"handler"})
// public class Role {
// 
//     private String id;
//     private String name;
//     private String description;
//     private List<Permission> permissions;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public List<Permission> getPermissions() {
//         if (permissions == null)
//             this.permissions = new ArrayList<>();
//         return permissions;
//     }
// 
//     public void setPermissions(List<Permission> permissions) {
//         this.permissions = permissions;
//     }
// 
// }
// 
// Path: src/main/java/org/auslides/security/model/User.java
// @JsonIgnoreProperties(value = {"handler"})
// public class User {
//     private String id;
//     private String email;
//     private String name;
//     private Boolean active;
//     private String password;
//     private List<Role> roles;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Boolean getActive() {
//         return active;
//     }
// 
//     public void setActive(Boolean active) {
//         this.active = active;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public List<Role> getRoles() {
//         if (roles == null) {
//             this.roles = new ArrayList<>();
//         }
//         return roles;
//     }
// 
//     public void setRoles(List<Role> roles) {
//         this.roles = roles;
//     }
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepository.java
// public interface UserRepository {
//     User findByEmail(String email);
//     User findByEmailAndActive(String email, boolean active);
//     List<User> findAll();
//     void deleteAll();
//     void save(User user);
//     int count();
// }


import org.auslides.security.model.Permission;
import org.auslides.security.model.Role;
import org.auslides.security.model.User;
import org.auslides.security.repository.UserRepository;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.DefaultPasswordService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
package org.auslides.security.rest;




@RestController
@RequestMapping("/users")
public class UserRestController {

    private static final Logger log = LoggerFactory.getLogger(UserRestController.class);

    @Autowired
    private DefaultPasswordService passwordService;

    @Autowired
// Path: src/main/java/org/auslides/security/model/Permission.java
// @JsonIgnoreProperties(value = {"handler"})
// public class Permission {
//     private String id;
//     private String name;
//     private String description;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
// }
// 
// Path: src/main/java/org/auslides/security/model/Role.java
// @JsonIgnoreProperties(value = {"handler"})
// public class Role {
// 
//     private String id;
//     private String name;
//     private String description;
//     private List<Permission> permissions;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public List<Permission> getPermissions() {
//         if (permissions == null)
//             this.permissions = new ArrayList<>();
//         return permissions;
//     }
// 
//     public void setPermissions(List<Permission> permissions) {
//         this.permissions = permissions;
//     }
// 
// }
// 
// Path: src/main/java/org/auslides/security/model/User.java
// @JsonIgnoreProperties(value = {"handler"})
// public class User {
//     private String id;
//     private String email;
//     private String name;
//     private Boolean active;
//     private String password;
//     private List<Role> roles;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Boolean getActive() {
//         return active;
//     }
// 
//     public void setActive(Boolean active) {
//         this.active = active;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public List<Role> getRoles() {
//         if (roles == null) {
//             this.roles = new ArrayList<>();
//         }
//         return roles;
//     }
// 
//     public void setRoles(List<Role> roles) {
//         this.roles = roles;
//     }
// }
// 
// Path: src/main/java/org/auslides/security/repository/UserRepository.java
// public interface UserRepository {
//     User findByEmail(String email);
//     User findByEmailAndActive(String email, boolean active);
//     List<User> findAll();
//     void deleteAll();
//     void save(User user);
//     int count();
// }


// Path: src/main/java/org/auslides/security/rest/UserRestController.java
import org.auslides.security.model.Permission;
import org.auslides.security.model.Role;
import org.auslides.security.model.User;
import org.auslides.security.repository.UserRepository;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.DefaultPasswordService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;

package org.auslides.security.rest;




@RestController
@RequestMapping("/users")
public class UserRestController {

    private static final Logger log = LoggerFactory.getLogger(UserRestController.class);

    @Autowired
    private DefaultPasswordService passwordService;

    @Autowired
    private UserRepository userRepo;