Merge branch 'devel'
This commit is contained in:
commit
804ab691bd
4
.gitignore
vendored
4
.gitignore
vendored
@ -14,3 +14,7 @@ META-INF/
|
|||||||
|
|
||||||
|
|
||||||
classes/artifacts/Discord_Stroumpf_Beta_jar/
|
classes/artifacts/Discord_Stroumpf_Beta_jar/
|
||||||
|
|
||||||
|
src/main/resources/templates/css
|
||||||
|
|
||||||
|
src/main/resources/templates/js
|
||||||
|
@ -9,4 +9,4 @@ RUN chmod +x gradlew
|
|||||||
ENV PORT=8080
|
ENV PORT=8080
|
||||||
ENV TOKEN=10
|
ENV TOKEN=10
|
||||||
RUN ./gradlew build
|
RUN ./gradlew build
|
||||||
CMD java -jar build/libs/DiscordBot-0.1.0.jar -t ${TOKEN}
|
CMD java -Xmx500m -jar build/libs/DiscordBot-0.1.0.jar -t ${TOKEN}
|
||||||
|
50
README.md
50
README.md
@ -9,67 +9,25 @@
|
|||||||
> version: '2'
|
> version: '2'
|
||||||
>
|
>
|
||||||
> services:
|
> services:
|
||||||
> botdiscorddevel:
|
> botdiscord:
|
||||||
> image: brokenfire/brokendiscordbot:latest
|
> image: brokenfire/brokendiscordbot:latest
|
||||||
> networks:
|
> networks:
|
||||||
> - proxy
|
> - proxy
|
||||||
> - internal
|
|
||||||
> environment:
|
> environment:
|
||||||
> - PORT=8080
|
> - PORT=8081
|
||||||
> - TOKEN=1111111111111 #CHANGE ME!
|
> - TOKEN=1111111111111 #CHANGE ME!
|
||||||
> - DB_URL=jdbc:mysql://database/botdiscord
|
|
||||||
> - DB_USER=root
|
|
||||||
> - DB_PWD=ogahxu1eigohN2Eok0xoawae #CHANGE ME!
|
|
||||||
> labels:
|
> labels:
|
||||||
> - "traefik.frontend.rule=Host:exemple.com" #CHANGE ME!
|
> - "traefik.frontend.rule=Host:exemple.com" #CHANGE ME!
|
||||||
> - "traefik.docker.network=proxy"
|
|
||||||
> - "traefik.port=8080"
|
> - "traefik.port=8080"
|
||||||
> - "traefik.backend=botdiscord"
|
> - "traefik.backend=botdiscord"
|
||||||
> - "traefik.frontend.entryPoints=http,https"
|
> - "traefik.frontend.entryPoints=http,https"
|
||||||
> volumes:
|
> volumes:
|
||||||
> - "./logs:/bot_src/logs"
|
> - "./logs:/bot_src/logs"
|
||||||
> depends_on:
|
|
||||||
> - "database"
|
|
||||||
> restart: always
|
> restart: always
|
||||||
>
|
>
|
||||||
> phpmyadmin:
|
|
||||||
> image: phpmyadmin/phpmyadmin:latest
|
|
||||||
> labels:
|
|
||||||
> - "traefik.frontend.rule=Host:phpmyadmin.exemple.com" #CHANGE ME!
|
|
||||||
> - "traefik.port=80"
|
|
||||||
> - "traefik.docker.network=proxy"
|
|
||||||
> - "traefik.backend=phpmyadmin"
|
|
||||||
> - "traefik.frontend.entryPoints=http,https"
|
|
||||||
> environment:
|
|
||||||
> - PMA_HOST=database
|
|
||||||
> depends_on:
|
|
||||||
> - "database"
|
|
||||||
> networks:
|
|
||||||
> - proxy
|
|
||||||
> - internal
|
|
||||||
>
|
|
||||||
> database:
|
|
||||||
> image: mariadb:latest
|
|
||||||
> volumes:
|
|
||||||
> - ./db:/var/lib/mysql
|
|
||||||
> labels:
|
|
||||||
> - "traefik.enable=false"
|
|
||||||
> environment:
|
|
||||||
> - MYSQL_ROOT_PASSWORD=ogahxu1eigohN2Eok0xoawae #CHANGE ME!
|
|
||||||
> - MYSQL_DATABASE=botdiscord
|
|
||||||
> - MYSQL_USER= #CHANGE ME!
|
|
||||||
> - MYSQL_PASSWORD= #CHANGE ME!
|
|
||||||
> networks:
|
|
||||||
> - internal
|
|
||||||
>
|
|
||||||
>
|
|
||||||
>
|
|
||||||
> networks:
|
> networks:
|
||||||
> proxy:
|
> proxy:
|
||||||
> external: true
|
> external: true
|
||||||
> internal:
|
|
||||||
> external: false
|
|
||||||
>
|
|
||||||
> ```
|
> ```
|
||||||
> Docker hub [repo](https://hub.docker.com/r/brokenfire/brokendiscordbot/)
|
> Docker hub [repo](https://hub.docker.com/r/brokenfire/brokendiscordbot/)
|
||||||
|
|
||||||
|
15
build.gradle
15
build.gradle
@ -31,15 +31,16 @@ dependencies {
|
|||||||
exclude group:"org.springframework.boot", module: "spring-boot-starter-logging"
|
exclude group:"org.springframework.boot", module: "spring-boot-starter-logging"
|
||||||
}
|
}
|
||||||
compile("org.springframework.boot:spring-boot-starter-log4j2")
|
compile("org.springframework.boot:spring-boot-starter-log4j2")
|
||||||
compile("com.sedmelluq:lavaplayer:1.2.45")
|
compile("com.sedmelluq:lavaplayer:1.2.49")
|
||||||
compile 'net.dv8tion:JDA:3.3.1_303'
|
compile 'net.dv8tion:JDA:3.3.1_303'
|
||||||
compile group: 'org.json', name: 'json', version: '20160810'
|
compile group: 'org.json', name: 'json', version: '20160810'
|
||||||
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
|
compile 'org.springframework.security:spring-security-web:5.0.1.RELEASE'
|
||||||
//compile("org.springframework.boot:spring-boot-starter-data-jpa") {
|
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
|
||||||
// exclude group:"org.springframework.boot", module: "spring-boot-starter-logging"
|
compile("org.springframework.boot:spring-boot-starter-data-jpa") {
|
||||||
//}
|
exclude group:"org.springframework.boot", module: "spring-boot-starter-logging"
|
||||||
// Use MySQL Connector-J
|
}
|
||||||
//compile 'mysql:mysql-connector-java'
|
// Use MySQL Connector-J
|
||||||
|
compile 'mysql:mysql-connector-java'
|
||||||
compile 'org.reflections:reflections:0.9.11'
|
compile 'org.reflections:reflections:0.9.11'
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ package net.Broken;
|
|||||||
|
|
||||||
import net.Broken.Commands.Move;
|
import net.Broken.Commands.Move;
|
||||||
import net.Broken.Commands.Music;
|
import net.Broken.Commands.Music;
|
||||||
import net.Broken.Outils.AntiSpam;
|
import net.Broken.Tools.AntiSpam;
|
||||||
import net.Broken.Outils.Moderateur;
|
import net.Broken.Tools.Moderateur;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
import net.dv8tion.jda.core.entities.Member;
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
@ -2,7 +2,7 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.Outils.Redirection;
|
import net.Broken.Tools.Redirection;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package net.Broken.Commands;
|
package net.Broken.Commands;
|
||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.dv8tion.jda.core.Permission;
|
import net.dv8tion.jda.core.Permission;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.entities.MessageChannel;
|
import net.dv8tion.jda.core.entities.MessageChannel;
|
||||||
|
@ -2,9 +2,9 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.Broken.Outils.PrivateMessage;
|
import net.Broken.Tools.PrivateMessage;
|
||||||
import net.dv8tion.jda.core.EmbedBuilder;
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
@ -2,8 +2,8 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.dv8tion.jda.core.Permission;
|
import net.dv8tion.jda.core.Permission;
|
||||||
import net.dv8tion.jda.core.entities.*;
|
import net.dv8tion.jda.core.entities.*;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
@ -2,10 +2,9 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.Broken.audio.AudioM;
|
import net.Broken.audio.AudioM;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.entities.VoiceChannel;
|
import net.dv8tion.jda.core.entities.VoiceChannel;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package net.Broken.Commands.Over18;
|
package net.Broken.Commands.Over18;
|
||||||
|
|
||||||
import net.Broken.Outils.Command.NumberedCommande;
|
import net.Broken.Tools.Command.NumberedCommande;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package net.Broken.Commands.Over18;
|
package net.Broken.Commands.Over18;
|
||||||
|
|
||||||
import net.Broken.Outils.Command.NumberedCommande;
|
import net.Broken.Tools.Command.NumberedCommande;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package net.Broken.Commands.Over18;
|
package net.Broken.Commands.Over18;
|
||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.Outils.Redirection;
|
import net.Broken.Tools.Redirection;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package net.Broken.Commands.Over18;
|
package net.Broken.Commands.Over18;
|
||||||
|
|
||||||
import net.Broken.Outils.Command.NumberedCommande;
|
import net.Broken.Tools.Command.NumberedCommande;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package net.Broken.Commands.Over18;
|
package net.Broken.Commands.Over18;
|
||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.Outils.Redirection;
|
import net.Broken.Tools.Redirection;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
@ -2,7 +2,7 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
|
@ -2,10 +2,10 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.AntiSpam;
|
import net.Broken.Tools.AntiSpam;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.Broken.Outils.UserSpamUtils;
|
import net.Broken.Tools.UserSpamUtils;
|
||||||
import net.dv8tion.jda.core.Permission;
|
import net.dv8tion.jda.core.Permission;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
import net.dv8tion.jda.core.entities.Member;
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
|
@ -2,10 +2,10 @@ package net.Broken.Commands;
|
|||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.Broken.Outils.PrivateMessage;
|
import net.Broken.Tools.PrivateMessage;
|
||||||
import net.Broken.Outils.UserSpamUtils;
|
import net.Broken.Tools.UserSpamUtils;
|
||||||
import net.dv8tion.jda.core.EmbedBuilder;
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
|
72
src/main/java/net/Broken/DB/Entity/PendingUserEntity.java
Normal file
72
src/main/java/net/Broken/DB/Entity/PendingUserEntity.java
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package net.Broken.DB.Entity;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PendingUserEntity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy= GenerationType.AUTO)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String jdaId;
|
||||||
|
|
||||||
|
private String checkToken;
|
||||||
|
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public PendingUserEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public PendingUserEntity(String name, String jdaId, String checkToken, String password) {
|
||||||
|
this.name = name;
|
||||||
|
this.jdaId = jdaId;
|
||||||
|
this.checkToken = checkToken;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJdaId() {
|
||||||
|
return jdaId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJdaId(String jdaId) {
|
||||||
|
this.jdaId = jdaId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCheckToken() {
|
||||||
|
return checkToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCheckToken(String checkToken) {
|
||||||
|
this.checkToken = checkToken;
|
||||||
|
}
|
||||||
|
}
|
71
src/main/java/net/Broken/DB/Entity/UserEntity.java
Normal file
71
src/main/java/net/Broken/DB/Entity/UserEntity.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package net.Broken.DB.Entity;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class UserEntity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy= GenerationType.AUTO)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String jdaId;
|
||||||
|
|
||||||
|
private String apiToken;
|
||||||
|
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public UserEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity(PendingUserEntity pendingUserEntity, String apiToken) {
|
||||||
|
this.name = pendingUserEntity.getName();
|
||||||
|
this.jdaId = pendingUserEntity.getJdaId();
|
||||||
|
this.password = pendingUserEntity.getPassword();
|
||||||
|
this.apiToken = apiToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJdaId() {
|
||||||
|
return jdaId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJdaId(String jdaId) {
|
||||||
|
this.jdaId = jdaId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getApiToken() {
|
||||||
|
return apiToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApiToken(String apiToken) {
|
||||||
|
this.apiToken = apiToken;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package net.Broken.DB.Repository;
|
||||||
|
|
||||||
|
import net.Broken.DB.Entity.PendingUserEntity;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface PendingUserRepository extends CrudRepository<PendingUserEntity, Integer> {
|
||||||
|
List<PendingUserEntity> findByJdaId(String jdaId);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
12
src/main/java/net/Broken/DB/Repository/UserRepository.java
Normal file
12
src/main/java/net/Broken/DB/Repository/UserRepository.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package net.Broken.DB.Repository;
|
||||||
|
|
||||||
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface UserRepository extends CrudRepository<UserEntity, Integer>{
|
||||||
|
List<UserEntity> findByName(String name);
|
||||||
|
List<UserEntity> findByJdaId(String jdaId);
|
||||||
|
List<UserEntity> findByApiToken(String apiToken);
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package net.Broken;
|
package net.Broken;
|
||||||
|
|
||||||
import net.Broken.Outils.Command.CommandLoader;
|
import net.Broken.Tools.Command.CommandLoader;
|
||||||
import net.Broken.Outils.DayListener;
|
import net.Broken.Tools.DayListener;
|
||||||
import net.dv8tion.jda.core.AccountType;
|
import net.dv8tion.jda.core.AccountType;
|
||||||
import net.dv8tion.jda.core.JDA;
|
import net.dv8tion.jda.core.JDA;
|
||||||
import net.dv8tion.jda.core.JDABuilder;
|
import net.dv8tion.jda.core.JDABuilder;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package net.Broken;
|
package net.Broken;
|
||||||
|
|
||||||
import net.Broken.Outils.Command.CommandParser;
|
import net.Broken.Tools.Command.CommandParser;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.UserSpamUtils;
|
import net.Broken.Tools.UserManager.UserRegister;
|
||||||
|
import net.Broken.Tools.UserSpamUtils;
|
||||||
import net.Broken.RestApi.ApiCommandLoader;
|
import net.Broken.RestApi.ApiCommandLoader;
|
||||||
import net.dv8tion.jda.core.JDA;
|
import net.dv8tion.jda.core.JDA;
|
||||||
import net.dv8tion.jda.core.entities.ChannelType;
|
import net.dv8tion.jda.core.entities.ChannelType;
|
||||||
@ -17,6 +18,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
|
|
||||||
|
import java.security.SecureRandom;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
@ -33,10 +35,12 @@ public class MainBot {
|
|||||||
public static HashMap<User, Integer> message_compteur =new HashMap<>();
|
public static HashMap<User, Integer> message_compteur =new HashMap<>();
|
||||||
public static boolean roleFlag = false;
|
public static boolean roleFlag = false;
|
||||||
public static HashMap<User, UserSpamUtils> spamUtils = new HashMap<>();
|
public static HashMap<User, UserSpamUtils> spamUtils = new HashMap<>();
|
||||||
|
public static UserRegister userRegister = new UserRegister();
|
||||||
public static JDA jda;
|
public static JDA jda;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static int messageTimeOut = 10;
|
public static int messageTimeOut = 10;
|
||||||
|
|
||||||
|
|
||||||
@ -74,6 +78,7 @@ public class MainBot {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ApiCommandLoader.load();
|
ApiCommandLoader.load();
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,4 +7,6 @@ public class CommandPostData {
|
|||||||
public String url;
|
public String url;
|
||||||
public int playlistLimit;
|
public int playlistLimit;
|
||||||
public String chanelId;
|
public String chanelId;
|
||||||
|
public String name;
|
||||||
|
public String token;
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,16 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
|||||||
public class CommandResponseData {
|
public class CommandResponseData {
|
||||||
public String Commande;
|
public String Commande;
|
||||||
public String Message;
|
public String Message;
|
||||||
|
public String error;
|
||||||
|
|
||||||
public CommandResponseData(String commande, String message) {
|
public CommandResponseData(String commande, String message) {
|
||||||
Commande = commande;
|
Commande = commande;
|
||||||
Message = message;
|
Message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CommandResponseData(String commande, String message, String error) {
|
||||||
|
Commande = commande;
|
||||||
|
Message = message;
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package net.Broken.RestApi.Data.UserManager;
|
||||||
|
|
||||||
|
public class CheckResposeData {
|
||||||
|
public boolean accepted;
|
||||||
|
public String name;
|
||||||
|
public String message;
|
||||||
|
public String id;
|
||||||
|
|
||||||
|
public CheckResposeData(boolean accepted, String name, String message, String id) {
|
||||||
|
this.accepted = accepted;
|
||||||
|
this.name = name;
|
||||||
|
this.message = message;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package net.Broken.RestApi.Data.UserManager;
|
||||||
|
|
||||||
|
public class ConfirmData {
|
||||||
|
public String id;
|
||||||
|
public String checkToken;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package net.Broken.RestApi.Data.UserManager;
|
||||||
|
|
||||||
|
public class UserConnectionData {
|
||||||
|
public boolean accepted;
|
||||||
|
public String token;
|
||||||
|
public String message;
|
||||||
|
public String error;
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
public UserConnectionData(boolean accepted, String name, String token, String message) {
|
||||||
|
this.accepted = accepted;
|
||||||
|
this.token = token;
|
||||||
|
this.message = message;
|
||||||
|
this.name = name;
|
||||||
|
this.error = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserConnectionData(boolean accepted, String message, String error) {
|
||||||
|
this.accepted = accepted;
|
||||||
|
this.token = null;
|
||||||
|
this.message = message;
|
||||||
|
this.error = error;
|
||||||
|
this.name = null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package net.Broken.RestApi.Data.UserManager;
|
||||||
|
|
||||||
|
public class UserInfoData {
|
||||||
|
public String name;
|
||||||
|
public String password;
|
||||||
|
}
|
@ -4,24 +4,33 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
|||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
||||||
import net.Broken.Commands.Music;
|
import net.Broken.Commands.Music;
|
||||||
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
|
import net.Broken.DB.Repository.UserRepository;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.RestApi.Data.*;
|
import net.Broken.RestApi.Data.*;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.CheckResposeData;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.UserInfoData;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.UserNotFoundException;
|
||||||
import net.Broken.audio.NotConectedException;
|
import net.Broken.audio.NotConectedException;
|
||||||
import net.Broken.audio.NullMusicManager;
|
import net.Broken.audio.NullMusicManager;
|
||||||
import net.dv8tion.jda.core.entities.VoiceChannel;
|
import net.dv8tion.jda.core.entities.VoiceChannel;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// import net.Broken.DB.SavedPlaylistRepository;
|
// import net.Broken.DB.Repository.SavedPlaylistRepository;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/music/")
|
@RequestMapping("/api/music/")
|
||||||
@ -29,6 +38,9 @@ public class MusicWebAPIController {
|
|||||||
Logger logger = LogManager.getLogger();
|
Logger logger = LogManager.getLogger();
|
||||||
// @Autowired
|
// @Autowired
|
||||||
// public SavedPlaylistRepository savedPlaylist;
|
// public SavedPlaylistRepository savedPlaylist;
|
||||||
|
@Autowired
|
||||||
|
UserRepository userRepository;
|
||||||
|
|
||||||
|
|
||||||
@RequestMapping("/currentMusicInfo")
|
@RequestMapping("/currentMusicInfo")
|
||||||
public CurrentMusicData getCurrentM(){
|
public CurrentMusicData getCurrentM(){
|
||||||
@ -65,17 +77,32 @@ public class MusicWebAPIController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/command", method = RequestMethod.POST)
|
@RequestMapping(value = "/command", method = RequestMethod.POST)
|
||||||
public ResponseEntity<CommandResponseData> command(@RequestBody CommandPostData data){
|
public ResponseEntity<CommandResponseData> command(@RequestBody CommandPostData data, HttpServletRequest request){
|
||||||
|
|
||||||
if(data.command != null) {
|
if(data.command != null) {
|
||||||
logger.info("receive command: " + data.command);
|
if(data.token != null) {
|
||||||
Music musicCommande = (Music) MainBot.commandes.get("music");
|
try {
|
||||||
|
UserEntity user = MainBot.userRegister.getUserWithApiToken(userRepository, data.token);
|
||||||
|
logger.info("receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName());
|
||||||
|
Music musicCommande = (Music) MainBot.commandes.get("music");
|
||||||
|
|
||||||
if(ApiCommandLoader.apiCommands.containsKey(data.command))
|
if (ApiCommandLoader.apiCommands.containsKey(data.command))
|
||||||
return ApiCommandLoader.apiCommands.get(data.command).action(musicCommande,data);
|
return ApiCommandLoader.apiCommands.get(data.command).action(musicCommande, data);
|
||||||
else
|
else
|
||||||
return new ResponseEntity<>(new CommandResponseData(data.command,"Unknown Command"), HttpStatus.BAD_REQUEST);
|
return new ResponseEntity<>(new CommandResponseData(data.command, "Unknown Command", "command"), HttpStatus.BAD_REQUEST);
|
||||||
|
|
||||||
|
} catch (UnknownTokenException e) {
|
||||||
|
logger.warn("Command with unknown token from: "+request.getRemoteAddr());
|
||||||
|
return new ResponseEntity<>(new CommandResponseData(data.command,"Unknown Token!\nPlease Re-connect.", "token"), HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
logger.warn("Command without token! ip: "+ request.getRemoteAddr());
|
||||||
|
return new ResponseEntity<>(new CommandResponseData(data.command,"Missing token!\nPlease Re-connect.","token"), HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
logger.info("Null");
|
logger.info("Null");
|
||||||
@ -85,7 +112,6 @@ public class MusicWebAPIController {
|
|||||||
@RequestMapping(value = "/getChanel", method = RequestMethod.GET)
|
@RequestMapping(value = "/getChanel", method = RequestMethod.GET)
|
||||||
public List<Chanel> getChanel(){
|
public List<Chanel> getChanel(){
|
||||||
List<Chanel> temp = new ArrayList<>();
|
List<Chanel> temp = new ArrayList<>();
|
||||||
logger.info(MainBot.jda.getVoiceChannels().size());
|
|
||||||
for(VoiceChannel aChanel : MainBot.jda.getVoiceChannels()){
|
for(VoiceChannel aChanel : MainBot.jda.getVoiceChannels()){
|
||||||
temp.add(new Chanel(aChanel.getName(),aChanel.getId(),aChanel.getPosition()));
|
temp.add(new Chanel(aChanel.getName(),aChanel.getId(),aChanel.getPosition()));
|
||||||
}
|
}
|
||||||
@ -95,6 +121,7 @@ public class MusicWebAPIController {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// DB Test Ignore it
|
// DB Test Ignore it
|
||||||
|
|
||||||
// @RequestMapping(value = "/test", method = RequestMethod.GET)
|
// @RequestMapping(value = "/test", method = RequestMethod.GET)
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
package net.Broken.RestApi;
|
||||||
|
|
||||||
|
import net.Broken.DB.Entity.PendingUserEntity;
|
||||||
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
|
import net.Broken.DB.Repository.PendingUserRepository;
|
||||||
|
import net.Broken.DB.Repository.UserRepository;
|
||||||
|
import net.Broken.MainBot;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.CheckResposeData;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.ConfirmData;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.UserConnectionData;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.UserInfoData;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.PasswordNotMatchException;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.TokenNotMatch;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.UserAlreadyRegistered;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.UserNotFoundException;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/userManagement")
|
||||||
|
public class UserManagerAPIController {
|
||||||
|
Logger logger = LogManager.getLogger();
|
||||||
|
@Autowired
|
||||||
|
PendingUserRepository pendingUserRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
UserRepository userRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PasswordEncoder passwordEncoder;
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/preRegister", method = RequestMethod.POST)
|
||||||
|
public ResponseEntity<CheckResposeData> command(@RequestBody UserInfoData data){
|
||||||
|
if(data != null && data.name != null) {
|
||||||
|
try {
|
||||||
|
String id = MainBot.userRegister.sendCheckToken(pendingUserRepository, userRepository, passwordEncoder, data);
|
||||||
|
return new ResponseEntity<>(new CheckResposeData(true, data.name, "Message sent", id), HttpStatus.OK);
|
||||||
|
} catch (UserNotFoundException e) {
|
||||||
|
logger.warn("User \"" + data.name + "\" not found!");
|
||||||
|
return new ResponseEntity<>(new CheckResposeData(false, data.name, "User not found on server!",""), HttpStatus.NOT_FOUND);
|
||||||
|
} catch (PasswordNotMatchException userAlreadyRegistered) {
|
||||||
|
return new ResponseEntity<>(new CheckResposeData(false, data.name, "User already registered in pending database and password not match!",""), HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
|
||||||
|
} catch (UserAlreadyRegistered userAlreadyRegistered) {
|
||||||
|
return new ResponseEntity<>(new CheckResposeData(false, data.name, "User already registered in database!",""), HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return new ResponseEntity<>(new CheckResposeData(false, "", "Missing parameter(s)",""), HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/confirmAccount", method = RequestMethod.POST)
|
||||||
|
public ResponseEntity<UserConnectionData> confirAccount(@RequestBody ConfirmData data){
|
||||||
|
//TODO move pending user to accepted and return right things
|
||||||
|
try {
|
||||||
|
PendingUserEntity pUser = MainBot.userRegister.confirmCheckToken(pendingUserRepository, Integer.parseInt(data.id), data.checkToken);
|
||||||
|
UserEntity user = new UserEntity(pUser, MainBot.userRegister.generateApiToken());
|
||||||
|
userRepository.save(user);
|
||||||
|
pendingUserRepository.delete(pUser);
|
||||||
|
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(true, user.getName(), user.getApiToken(),""),HttpStatus.OK);
|
||||||
|
} catch (TokenNotMatch tokenNotMatch) {
|
||||||
|
logger.warn("Pre token not match for "+data.id+"!");
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(false,"Token not match!","token"),HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
} catch (UserNotFoundException e) {
|
||||||
|
logger.warn("Id not found in DB ("+data.id+")");
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(false,"User not found on DB!", "user"),HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/requestToken", method = RequestMethod.POST)
|
||||||
|
public ResponseEntity<UserConnectionData> requestToken(@RequestBody UserInfoData data){
|
||||||
|
try {
|
||||||
|
UserEntity user = MainBot.userRegister.getUser(userRepository, passwordEncoder, data);
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(true, user.getName(), user.getApiToken(), ""), HttpStatus.OK);
|
||||||
|
|
||||||
|
} catch (UserNotFoundException e) {
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(false,"User not registered!", "user"),HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
} catch (PasswordNotMatchException e) {
|
||||||
|
return new ResponseEntity<>(new UserConnectionData(false,"Wrong user name or password!", "password"),HttpStatus.NOT_ACCEPTABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,10 +1,7 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Commands.Move;
|
import net.Broken.Commands.Move;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
|
||||||
import net.Broken.Outils.UserSpamUtils;
|
|
||||||
import net.dv8tion.jda.core.entities.*;
|
import net.dv8tion.jda.core.entities.*;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import net.dv8tion.jda.core.exceptions.HierarchyException;
|
import net.dv8tion.jda.core.exceptions.HierarchyException;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils.Command;
|
package net.Broken.Tools.Command;
|
||||||
|
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils.Command;
|
package net.Broken.Tools.Command;
|
||||||
|
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
@ -1,8 +1,8 @@
|
|||||||
package net.Broken.Outils.Command;
|
package net.Broken.Tools.Command;
|
||||||
import net.Broken.Commande;
|
import net.Broken.Commande;
|
||||||
import net.Broken.Outils.FindContentOnWebPage;
|
import net.Broken.Tools.FindContentOnWebPage;
|
||||||
import net.Broken.Outils.LimitChecker;
|
import net.Broken.Tools.LimitChecker;
|
||||||
import net.Broken.Outils.Redirection;
|
import net.Broken.Tools.Redirection;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
import net.Broken.Commands.Spam;
|
import net.Broken.Commands.Spam;
|
||||||
import net.dv8tion.jda.core.exceptions.RateLimitedException;
|
import net.dv8tion.jda.core.exceptions.RateLimitedException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
@ -1,10 +1,9 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
|
import net.Broken.MainBot;
|
||||||
import net.dv8tion.jda.core.EmbedBuilder;
|
import net.dv8tion.jda.core.EmbedBuilder;
|
||||||
import net.dv8tion.jda.core.entities.Member;
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
|
||||||
import net.dv8tion.jda.core.entities.MessageEmbed;
|
import net.dv8tion.jda.core.entities.MessageEmbed;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
@ -69,5 +68,10 @@ public class EmbedMessageUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static MessageEmbed getRegister(String message) {
|
||||||
|
return new EmbedBuilder().setTitle(":pencil: Web Registration :pencil:").setDescription(message).setColor(Color.green).setFooter("bot.seb6596.ovh", MainBot.jda.getSelfUser().getAvatarUrl()).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,9 +1,8 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.exceptions.ErrorResponseException;
|
import net.dv8tion.jda.core.exceptions.ErrorResponseException;
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
|
|
@ -1,10 +1,8 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.entities.MessageEmbed;
|
import net.dv8tion.jda.core.entities.MessageEmbed;
|
||||||
import net.dv8tion.jda.core.entities.PrivateChannel;
|
|
||||||
import net.dv8tion.jda.core.entities.User;
|
import net.dv8tion.jda.core.entities.User;
|
||||||
import net.dv8tion.jda.core.exceptions.RateLimitedException;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
40
src/main/java/net/Broken/Tools/ResourceLoader.java
Normal file
40
src/main/java/net/Broken/Tools/ResourceLoader.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package net.Broken.Tools;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class ResourceLoader {
|
||||||
|
|
||||||
|
private Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
|
public String getFile(String fileName) {
|
||||||
|
|
||||||
|
StringBuilder result = new StringBuilder("");
|
||||||
|
|
||||||
|
//Get file from resources folder
|
||||||
|
ClassLoader classLoader = getClass().getClassLoader();
|
||||||
|
InputStream file = classLoader.getResourceAsStream(fileName);
|
||||||
|
|
||||||
|
try (Scanner scanner = new Scanner(file, "UTF-8")) {
|
||||||
|
|
||||||
|
while (scanner.hasNextLine()) {
|
||||||
|
String line = scanner.nextLine();
|
||||||
|
result.append(line).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.Broken.Tools.UserManager.Exceptions;
|
||||||
|
|
||||||
|
public class PasswordNotMatchException extends Exception{
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.Broken.Tools.UserManager.Exceptions;
|
||||||
|
|
||||||
|
public class TokenNotMatch extends Exception {
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.Broken.Tools.UserManager.Exceptions;
|
||||||
|
|
||||||
|
public class UnknownTokenException extends Exception{
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.Broken.Tools.UserManager.Exceptions;
|
||||||
|
|
||||||
|
public class UserAlreadyRegistered extends Exception {
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
package net.Broken.Tools.UserManager.Exceptions;
|
||||||
|
|
||||||
|
public class UserNotFoundException extends Exception{
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package net.Broken.Tools.UserManager;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class PasswordUtils {
|
||||||
|
@Bean
|
||||||
|
public PasswordEncoder passwordEncoder() {
|
||||||
|
return new BCryptPasswordEncoder();
|
||||||
|
}
|
||||||
|
}
|
151
src/main/java/net/Broken/Tools/UserManager/UserRegister.java
Normal file
151
src/main/java/net/Broken/Tools/UserManager/UserRegister.java
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
package net.Broken.Tools.UserManager;
|
||||||
|
|
||||||
|
import net.Broken.DB.Entity.PendingUserEntity;
|
||||||
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
|
import net.Broken.DB.Repository.PendingUserRepository;
|
||||||
|
import net.Broken.DB.Repository.UserRepository;
|
||||||
|
import net.Broken.MainBot;
|
||||||
|
import net.Broken.RestApi.Data.UserManager.UserInfoData;
|
||||||
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
|
import net.Broken.Tools.PrivateMessage;
|
||||||
|
import net.Broken.Tools.ResourceLoader;
|
||||||
|
import net.Broken.Tools.UserManager.Exceptions.*;
|
||||||
|
import net.dv8tion.jda.core.entities.MessageEmbed;
|
||||||
|
import net.dv8tion.jda.core.entities.User;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class UserRegister {
|
||||||
|
|
||||||
|
private Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
|
|
||||||
|
public String sendCheckToken(PendingUserRepository pendingUserRepository, UserRepository userRepository, PasswordEncoder passwordEncoder, UserInfoData userInfo) throws UserNotFoundException, PasswordNotMatchException, UserAlreadyRegistered {
|
||||||
|
|
||||||
|
logger.info("New registration for " + userInfo.name);
|
||||||
|
|
||||||
|
List<User> users = MainBot.jda.getUsersByName(userInfo.name,true);
|
||||||
|
if(users.size() < 1)
|
||||||
|
throw new UserNotFoundException();
|
||||||
|
|
||||||
|
User user = users.get(0);
|
||||||
|
logger.info("User found!");
|
||||||
|
|
||||||
|
PendingUserEntity pendingUserEntity = null;
|
||||||
|
String token = "";
|
||||||
|
|
||||||
|
//Test if exist on register user
|
||||||
|
if(userRepository.findByJdaId(user.getId()).size() > 0){
|
||||||
|
logger.warn("User already registered!");
|
||||||
|
throw new UserAlreadyRegistered();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Check if exist in pading user Table
|
||||||
|
List<PendingUserEntity> pendingUsers = pendingUserRepository.findByJdaId(user.getId());
|
||||||
|
if(pendingUsers.size() != 0){
|
||||||
|
PendingUserEntity thisUser = pendingUsers.get(0);
|
||||||
|
if(passwordEncoder.matches(userInfo.password, thisUser.getPassword())){
|
||||||
|
logger.info("Password matches");
|
||||||
|
pendingUserEntity = thisUser;
|
||||||
|
token = thisUser.getCheckToken();
|
||||||
|
}else{
|
||||||
|
logger.warn("Password Not Match!");
|
||||||
|
throw new PasswordNotMatchException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
logger.info("Generating check Token...");
|
||||||
|
if(token.equals("")){
|
||||||
|
token = generateCheckToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Token generated: " + token);
|
||||||
|
if(pendingUserEntity == null) {
|
||||||
|
pendingUserEntity = new PendingUserEntity(user.getName(), user.getId(), token, passwordEncoder.encode(userInfo.password));
|
||||||
|
pendingUserEntity = pendingUserRepository.save(pendingUserEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
String message = new ResourceLoader().getFile("MessagesTemplates/RegisterMessage.md");
|
||||||
|
|
||||||
|
message = message.replace("%code",token);
|
||||||
|
|
||||||
|
MessageEmbed ebM = EmbedMessageUtils.getRegister(message);
|
||||||
|
PrivateMessage.send(user,ebM,logger);
|
||||||
|
return pendingUserEntity.getId().toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public PendingUserEntity confirmCheckToken(PendingUserRepository pendingUserRepository, int id, String checkToken ) throws TokenNotMatch, UserNotFoundException {
|
||||||
|
PendingUserEntity pendingUser = pendingUserRepository.findOne(id);
|
||||||
|
if(pendingUser != null) {
|
||||||
|
if(pendingUser.getCheckToken().equals(checkToken)){
|
||||||
|
logger.info("Check Token match!");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
logger.warn("Check token not match!");
|
||||||
|
throw new TokenNotMatch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
logger.warn("Id not Found!");
|
||||||
|
throw new UserNotFoundException();
|
||||||
|
}
|
||||||
|
return pendingUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUser(UserRepository userRepository, PasswordEncoder passwordEncoder, UserInfoData userInfoData) throws UserNotFoundException, PasswordNotMatchException {
|
||||||
|
List<UserEntity> users = userRepository.findByName(userInfoData.name);
|
||||||
|
if(users.size()<1){
|
||||||
|
logger.warn("Login with unknown username: " + userInfoData.name);
|
||||||
|
throw new UserNotFoundException();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
UserEntity user = users.get(0);
|
||||||
|
if(passwordEncoder.matches(userInfoData.password,user.getPassword())){
|
||||||
|
logger.info("Login successful for " + user.getName());
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.warn("Login fail for " + user.getName() + ", wrong password!");
|
||||||
|
throw new PasswordNotMatchException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserWithApiToken(UserRepository userRepository, String token) throws UnknownTokenException {
|
||||||
|
List<UserEntity> users = userRepository.findByApiToken(token);
|
||||||
|
if(users.size() > 0){
|
||||||
|
return users.get(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new UnknownTokenException();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String generateApiToken(){
|
||||||
|
return UUID.randomUUID().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateCheckToken(){
|
||||||
|
SecureRandom random = new SecureRandom();
|
||||||
|
long longToken = Math.abs( random.nextLong() );
|
||||||
|
String randomStr = Long.toString( longToken, 16 );
|
||||||
|
randomStr = randomStr.substring(0,4);
|
||||||
|
randomStr = randomStr.toUpperCase();
|
||||||
|
return randomStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package net.Broken.Outils;
|
package net.Broken.Tools;
|
||||||
|
|
||||||
import net.dv8tion.jda.core.entities.Member;
|
import net.dv8tion.jda.core.entities.Member;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
@ -9,15 +9,13 @@ import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
|||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.Outils.EmbedMessageUtils;
|
import net.Broken.Tools.EmbedMessageUtils;
|
||||||
import net.Broken.Outils.MessageTimeOut;
|
import net.Broken.Tools.MessageTimeOut;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.core.entities.Message;
|
||||||
import net.dv8tion.jda.core.entities.TextChannel;
|
|
||||||
import net.dv8tion.jda.core.entities.VoiceChannel;
|
import net.dv8tion.jda.core.entities.VoiceChannel;
|
||||||
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceLeaveEvent;
|
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceLeaveEvent;
|
||||||
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
|
||||||
import net.dv8tion.jda.core.managers.AudioManager;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
16
src/main/java/net/Broken/webView/ResisterWebView.java
Normal file
16
src/main/java/net/Broken/webView/ResisterWebView.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package net.Broken.webView;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class ResisterWebView {
|
||||||
|
@RequestMapping("/register")
|
||||||
|
public String music(@RequestParam(value="id", required = true, defaultValue = "") String id, Model model){
|
||||||
|
model.addAttribute("id", id);
|
||||||
|
return "register";
|
||||||
|
}
|
||||||
|
}
|
5
src/main/resources/MessagesTemplates/RegisterMessage.md
Normal file
5
src/main/resources/MessagesTemplates/RegisterMessage.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
Une tentative d'association à etait demandé.
|
||||||
|
|
||||||
|
Voici le code de vérification:
|
||||||
|
**%code**
|
@ -1 +1,6 @@
|
|||||||
server.port=${PORT}
|
server.port=${PORT}
|
||||||
|
spring.jpa.hibernate.ddl-auto=update
|
||||||
|
spring.datasource.url=${DB_URL}
|
||||||
|
spring.datasource.username=${DB_USER}
|
||||||
|
spring.datasource.password=${DB_PWD}
|
||||||
|
spring.thymeleaf.cache=true
|
@ -7,23 +7,29 @@
|
|||||||
<Pattern>[%d{HH:mm:ss.SSS}]%highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}[%-30.30c{1.}]: %highlight{%msg%n}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}</Pattern>
|
<Pattern>[%d{HH:mm:ss.SSS}]%highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}[%-30.30c{1.}]: %highlight{%msg%n}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}</Pattern>
|
||||||
</PatternLayout>
|
</PatternLayout>
|
||||||
</Console>
|
</Console>
|
||||||
<RollingFile name="RollingFile" fileName="./logs/curent.log"
|
<RollingFile name="RollingFile" fileName="./logs/current-day.log"
|
||||||
filePattern="./logs/$${date:yyyy-MM}/discordBot-%d{yyyy-MM-dd-HH}-%i.log.gz">
|
filePattern="./logs/$${date:yyyy-MM}/discordBot-%d{yyyy-MM-dd}-%i.log.gz">
|
||||||
<PatternLayout>
|
<PatternLayout>
|
||||||
<Pattern>[%d{HH:mm:ss.SSS}]%highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}[%-30.30c{1.}]: %highlight{%msg%n}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}</Pattern>
|
<Pattern>[%d{HH:mm:ss.SSS}]%highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}[%-30.30c{1.}]: %highlight{%msg%n}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}</Pattern>
|
||||||
</PatternLayout>
|
</PatternLayout>
|
||||||
<Policies>
|
<Policies>
|
||||||
<TimeBasedTriggeringPolicy interval="1"/>
|
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
|
||||||
<SizeBasedTriggeringPolicy size="250 MB"/>
|
<SizeBasedTriggeringPolicy size="250 MB"/>
|
||||||
</Policies>
|
</Policies>
|
||||||
<DefaultRolloverStrategy max="120"/>
|
<DefaultRolloverStrategy max="120"/>
|
||||||
</RollingFile>
|
</RollingFile>
|
||||||
|
<File name="current" fileName="logs/current.log" append="false">
|
||||||
|
<PatternLayout>
|
||||||
|
<Pattern>[%d{HH:mm:ss.SSS}]%highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}[%-30.30c{1.}]: %highlight{%msg%n}{FATAL=red blink, ERROR=red, WARN=bright yellow , INFO=blue, DEBUG=bright black, TRACE=cyan}</Pattern>
|
||||||
|
</PatternLayout>
|
||||||
|
</File>
|
||||||
</Appenders>
|
</Appenders>
|
||||||
<Loggers>
|
<Loggers>
|
||||||
<Root level="debug">
|
<Root level="debug">
|
||||||
<AppenderRef ref="RollingFile" level="info" />
|
<AppenderRef ref="RollingFile" level="info" />
|
||||||
<AppenderRef ref="Console" level="info"/>
|
<AppenderRef ref="Console" level="info"/>
|
||||||
<AppenderRef ref="RollingFile" level="info"/>
|
<AppenderRef ref="RollingFile" level="info"/>
|
||||||
|
<AppenderRef ref="current" level="info"/>
|
||||||
</Root>
|
</Root>
|
||||||
</Loggers>
|
</Loggers>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.nav-wrapper{
|
/*.nav-wrapper{*/
|
||||||
margin-right: 1%;
|
/*!*margin-right: 1%;*!*/
|
||||||
margin-left: 1%;
|
/*margin-left: 1%;*/
|
||||||
width: 100%;
|
/*width: 100%;*/
|
||||||
}
|
/*}*/
|
||||||
|
|
||||||
|
|
||||||
.collapsible-body{
|
.collapsible-body{
|
||||||
|
BIN
src/main/resources/static/favicon.png
Normal file
BIN
src/main/resources/static/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.2 KiB |
@ -4,6 +4,9 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
||||||
<title>Discord Bot</title>
|
<title>Discord Bot</title>
|
||||||
|
<link rel="icon"
|
||||||
|
type="image/x-icon"
|
||||||
|
href="favicon.png"/>
|
||||||
|
|
||||||
<!-- CSS -->
|
<!-- CSS -->
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
||||||
@ -12,32 +15,109 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="blue-grey lighten-5" >
|
<body class="blue-grey lighten-5" >
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- NAV BAR -->
|
||||||
|
<!-- AND -->
|
||||||
|
<!-- LOGIN -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
<nav class="blue-grey darken-4 z-depth-3" role="navigation">
|
<nav class="blue-grey darken-4 z-depth-3" role="navigation">
|
||||||
<div class="nav-wrapper container">
|
<div class="nav-wrapper container">
|
||||||
<a id="logo-container" href="#" class="brand-logo">Discord Bot</a>
|
<a id="logo-container" href="/" class="brand-logo">Discord Bot</a>
|
||||||
<ul class="right hide-on-med-and-down">
|
<ul class="right hide-on-med-and-down">
|
||||||
|
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a href="/" data-target="slide-out" class="sidenav-trigger">Home</a>
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/music" >Music Control</a>
|
<a class="waves-effect waves-light" href="/music" >Music Control</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="nav-bar-account">
|
||||||
|
<a class="dropdown-account" data-activates="dropdown1"><i class="material-icons">account_box</i></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul id="nav-mobile" class="side-nav">
|
<ul id="nav-mobile" class="side-nav">
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a href="/" data-target="slide-out" class="sidenav-trigger">Home</a>
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/music" data-target="slide-out" class="sidenav-trigger">Music Control</a>
|
<a class="waves-effect waves-light sidenav-trigger" href="/music" data-target="slide-out" >Music Control</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="#" data-activates="nav-mobile" class="button-collapse-1 button-collapse"><i class="material-icons">menu</i></a>
|
<a href="#" data-activates="nav-mobile" class="button-navbar-mobile button-collapse"><i class="material-icons">menu</i></a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<!-- Dropdown connected -->
|
||||||
|
<ul id="dropdown_connected" class="dropdown-content ">
|
||||||
|
<li>
|
||||||
|
<a class="center blue-grey-text text-darken-4" id="nav-name" style="text-decoration: underline; font-weight: bold"></a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Account</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Playlists</a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li><a class="center red-text" id="nav-disconnect" style="font-weight: bold">Disconnect</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!--________________________________________-->
|
||||||
|
<!-- Connection modal -->
|
||||||
|
<!--________________________________________-->
|
||||||
|
<div id="modal_connection" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="row center">
|
||||||
|
<div class="col s12">
|
||||||
|
<h3 class="" style="font-weight: bold">Sign in</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row center" style="margin-bottom: 0px">
|
||||||
|
<form name="login_form" id="login_form" action="javascript:void(0);" onsubmit="tryConnection()">
|
||||||
|
<div class="row" style="margin-bottom: 0px">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">account_box</i>
|
||||||
|
<input name="username" id="user_input" type="text" class="validate"/>
|
||||||
|
<label for="user_input" data-error="User not registered!">User Name</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">security</i>
|
||||||
|
<input name="password" id="password_input" type="password" class="validate"/>
|
||||||
|
<label for="password_input" data-error="Wrong password!">Password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 10px">
|
||||||
|
<button id="btn-submit-connect" class="btn waves-effect waves-light light-green darken-1 scale-transition scale-out" type="submit" name="action" >
|
||||||
|
Submit<i class="material-icons right">send</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<a class="btn waves-effect waves-light brown" href="/register">
|
||||||
|
Create account<i class="material-icons right">person_add</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- -->
|
||||||
|
<!-- END -->
|
||||||
|
<!-- -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section no-pad-bot main" id="index-banner">
|
<div class="section no-pad-bot main" id="index-banner">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -45,14 +125,8 @@
|
|||||||
<!-- Scripts-->
|
<!-- Scripts-->
|
||||||
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||||
<script src="js/materialize.js"></script>
|
<script src="js/materialize.js"></script>
|
||||||
<script>
|
<script src="js/navabar.js"></script>
|
||||||
$('.button-collapse-1').sideNav({
|
<script src="js/js.cookie.js"></script>
|
||||||
menuWidth: 400, // Default is 300
|
|
||||||
edge: 'right', // Choose the horizontal origin
|
|
||||||
closeOnClick: false, // Closes side-nav on <a> clicks, useful for Angular/Meteor
|
|
||||||
draggable: true // Choose whether you can drag to open on touch screens,
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<!--<script src="js/init.js"></script>-->
|
<!--<script src="js/init.js"></script>-->
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -25,12 +25,14 @@ $(document).ready(function() {
|
|||||||
$('#btn_play').click(function () {
|
$('#btn_play').click(function () {
|
||||||
switch (state){
|
switch (state){
|
||||||
case "PLAYING":
|
case "PLAYING":
|
||||||
sendCommand(JSON.stringify({ command: "PAUSE"}))
|
sendCommand({ command: "PAUSE"})
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "PAUSE":
|
case "PAUSE":
|
||||||
sendCommand(JSON.stringify({ command: "PLAY"}))
|
sendCommand({ command: "PLAY"})
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
sendCommand({command: "PLAY"})
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -38,10 +40,10 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
|
|
||||||
$('#btn_next').click(function () {
|
$('#btn_next').click(function () {
|
||||||
sendCommand(JSON.stringify({ command: "NEXT"}));
|
sendCommand({ command: "NEXT"});
|
||||||
});
|
});
|
||||||
$('#btn_stop').click(function () {
|
$('#btn_stop').click(function () {
|
||||||
sendCommand(JSON.stringify({ command: "STOP"}));
|
sendCommand({ command: "STOP"});
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.dropdown-button').dropdown({
|
$('.dropdown-button').dropdown({
|
||||||
@ -85,7 +87,7 @@ $(document).ready(function() {
|
|||||||
var command = {
|
var command = {
|
||||||
command: "FLUSH"
|
command: "FLUSH"
|
||||||
};
|
};
|
||||||
sendCommand(JSON.stringify(command));
|
sendCommand(command);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#btn_add_top').click(function () {
|
$('#btn_add_top').click(function () {
|
||||||
@ -96,7 +98,7 @@ $(document).ready(function() {
|
|||||||
onHead: true
|
onHead: true
|
||||||
};
|
};
|
||||||
$('#input_link').val('');
|
$('#input_link').val('');
|
||||||
sendCommand(JSON.stringify(command));
|
sendCommand(command);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#btn_add_bottom').click(function () {
|
$('#btn_add_bottom').click(function () {
|
||||||
@ -108,7 +110,7 @@ $(document).ready(function() {
|
|||||||
onHead: false
|
onHead: false
|
||||||
};
|
};
|
||||||
$('#input_link').val('');
|
$('#input_link').val('');
|
||||||
sendCommand(JSON.stringify(command));
|
sendCommand(command);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#btn_ok_channel').click(function () {
|
$('#btn_ok_channel').click(function () {
|
||||||
@ -117,7 +119,7 @@ $(document).ready(function() {
|
|||||||
command: "CONNECT",
|
command: "CONNECT",
|
||||||
chanelId: $('input[name=vocalRadio]:checked').val()
|
chanelId: $('input[name=vocalRadio]:checked').val()
|
||||||
};
|
};
|
||||||
sendCommand(JSON.stringify(command));
|
sendCommand(command);
|
||||||
});
|
});
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -144,27 +146,50 @@ function getCurentMusic() {
|
|||||||
$('#btn_info').addClass("determinate").removeClass("indeterminate");
|
$('#btn_info').addClass("determinate").removeClass("indeterminate");
|
||||||
}
|
}
|
||||||
$('#music_progress').width("0%");
|
$('#music_progress').width("0%");
|
||||||
|
if(Cookies.get('token') != undefined){
|
||||||
|
if (!$('#btn_stop').hasClass("disabled")) {
|
||||||
|
$('#btn_stop').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#btn_info').hasClass("disabled")) {
|
||||||
|
$('#btn_info').addClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#add_btn').hasClass("disabled")) {
|
||||||
|
$('#add_btn').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#flush_btn').hasClass("disabled")) {
|
||||||
|
$('#flush_btn').removeClass("disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('#btn_play').hasClass("disabled")) {
|
||||||
|
$('#btn_play').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#btn_next').hasClass("disabled")) {
|
||||||
|
$('#btn_next').removeClass("disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (!$('#btn_stop').hasClass("disabled")) {
|
||||||
|
$('#btn_stop').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#btn_info').hasClass("disabled")) {
|
||||||
|
$('#btn_info').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#add_btn').hasClass("disabled")) {
|
||||||
|
$('#add_btn').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#flush_btn').hasClass("disabled")) {
|
||||||
|
$('#flush_btn').addClass("disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$('#btn_play').hasClass("disabled")) {
|
||||||
|
$('#btn_play').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#btn_next').hasClass("disabled")) {
|
||||||
|
$('#btn_next').addClass("disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
$('#btn_play').children().text("play_arrow");
|
$('#btn_play').children().text("play_arrow");
|
||||||
if (!$('#btn_stop').hasClass("disabled")) {
|
|
||||||
$('#btn_stop').addClass("disabled");
|
|
||||||
}
|
|
||||||
if (!$('#btn_info').hasClass("disabled")) {
|
|
||||||
$('#btn_info').addClass("disabled");
|
|
||||||
}
|
|
||||||
if ($('#add_btn').hasClass("disabled")) {
|
|
||||||
$('#add_btn').removeClass("disabled");
|
|
||||||
}
|
|
||||||
if ($('#flush_btn').hasClass("disabled")) {
|
|
||||||
$('#flush_btn').removeClass("disabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($('#btn_play').hasClass("disabled")) {
|
|
||||||
$('#btn_play').removeClass("disabled");
|
|
||||||
}
|
|
||||||
if ($('#btn_next').hasClass("disabled")) {
|
|
||||||
$('#btn_next').removeClass("disabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#music_img').attr("src","/img/no_music.jpg");
|
$('#music_img').attr("src","/img/no_music.jpg");
|
||||||
$('#total_time').text("00:00");
|
$('#total_time').text("00:00");
|
||||||
@ -206,6 +231,7 @@ function getCurentMusic() {
|
|||||||
$('#music_progress').width("0%");
|
$('#music_progress').width("0%");
|
||||||
|
|
||||||
$('#btn_play').children().text("play_arrow");
|
$('#btn_play').children().text("play_arrow");
|
||||||
|
|
||||||
if (!$('#btn_play').hasClass("disabled")) {
|
if (!$('#btn_play').hasClass("disabled")) {
|
||||||
$('#btn_play').addClass("disabled");
|
$('#btn_play').addClass("disabled");
|
||||||
}
|
}
|
||||||
@ -227,14 +253,16 @@ function getCurentMusic() {
|
|||||||
|
|
||||||
|
|
||||||
$('#music_img').attr("src","/img/disconnected.png");
|
$('#music_img').attr("src","/img/disconnected.png");
|
||||||
|
if(Cookies.get('token') != undefined){
|
||||||
if(!disconected){
|
if(!disconected){
|
||||||
getChannels();
|
getChannels();
|
||||||
disconected = true;
|
disconected = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
getPlayList();
|
getPlayList();
|
||||||
@ -278,7 +306,7 @@ function getPlayList() {
|
|||||||
command: "DELL",
|
command: "DELL",
|
||||||
url: $(this).attr("data_url")
|
url: $(this).attr("data_url")
|
||||||
};
|
};
|
||||||
sendCommand(JSON.stringify(command));
|
sendCommand(command);
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -334,30 +362,55 @@ function updateControl(data){
|
|||||||
$('#music_text').text(data.info.title);
|
$('#music_text').text(data.info.title);
|
||||||
var percent = (data.currentPos / data.info.length) * 100;
|
var percent = (data.currentPos / data.info.length) * 100;
|
||||||
// console.log(percent)
|
// console.log(percent)
|
||||||
if (!$('#btn_info').hasClass("indeterminate")) {
|
if (!$('#music_progress').hasClass("indeterminate")) {
|
||||||
$('#btn_info').addClass("determinate").removeClass("indeterminate");
|
$('#music_progress').addClass("determinate").removeClass("indeterminate");
|
||||||
}
|
}
|
||||||
$('#music_progress').width(percent + "%");
|
$('#music_progress').width(percent + "%");
|
||||||
|
|
||||||
if ($('#btn_play').hasClass("disabled")) {
|
if(Cookies.get('token') != undefined){
|
||||||
$('#btn_play').removeClass("disabled");
|
if ($('#btn_play').hasClass("disabled")) {
|
||||||
|
$('#btn_play').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#btn_stop').hasClass("disabled")) {
|
||||||
|
$('#btn_stop').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#btn_info').hasClass("disabled")) {
|
||||||
|
$('#btn_info').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#add_btn').hasClass("disabled")) {
|
||||||
|
$('#add_btn').removeClass("disabled");
|
||||||
|
}
|
||||||
|
if ($('#flush_btn').hasClass("disabled")) {
|
||||||
|
$('#flush_btn').removeClass("disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('#btn_next').hasClass("disabled")) {
|
||||||
|
$('#btn_next').removeClass("disabled");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($('#btn_stop').hasClass("disabled")) {
|
else
|
||||||
$('#btn_stop').removeClass("disabled");
|
{
|
||||||
}
|
if (!$('#btn_play').hasClass("disabled")) {
|
||||||
if ($('#btn_info').hasClass("disabled")) {
|
$('#btn_play').addClass("disabled");
|
||||||
$('#btn_info').removeClass("disabled");
|
}
|
||||||
}
|
if (!$('#btn_stop').hasClass("disabled")) {
|
||||||
if ($('#add_btn').hasClass("disabled")) {
|
$('#btn_stop').addClass("disabled");
|
||||||
$('#add_btn').removeClass("disabled");
|
}
|
||||||
}
|
if (!$('#btn_info').hasClass("disabled")) {
|
||||||
if ($('#flush_btn').hasClass("disabled")) {
|
$('#btn_info').addClass("disabled");
|
||||||
$('#flush_btn').removeClass("disabled");
|
}
|
||||||
|
if (!$('#add_btn').hasClass("disabled")) {
|
||||||
|
$('#add_btn').addClass("disabled");
|
||||||
|
}
|
||||||
|
if (!$('#flush_btn').hasClass("disabled")) {
|
||||||
|
$('#flush_btn').addClass("disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$('#btn_next').hasClass("disabled")) {
|
||||||
|
$('#btn_next').addClass("disabled");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($('#btn_next').hasClass("disabled")) {
|
|
||||||
$('#btn_next').removeClass("disabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#music_img').attr("src","https://img.youtube.com/vi/"+data.info.identifier+"/hqdefault.jpg");
|
$('#music_img').attr("src","https://img.youtube.com/vi/"+data.info.identifier+"/hqdefault.jpg");
|
||||||
// console.log(data);
|
// console.log(data);
|
||||||
@ -366,13 +419,15 @@ function updateControl(data){
|
|||||||
updateModal(data);
|
updateModal(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendCommand(commandStr){
|
function sendCommand(command){
|
||||||
|
command["token"] = Cookies.get('token');
|
||||||
|
console.log(command)
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
url: "/api/music/command",
|
url: "/api/music/command",
|
||||||
data: commandStr,
|
data: JSON.stringify(command),
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
}
|
}
|
||||||
@ -380,6 +435,11 @@ function sendCommand(commandStr){
|
|||||||
}).fail(function (data) {
|
}).fail(function (data) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
alert(data.responseJSON.Message);
|
alert(data.responseJSON.Message);
|
||||||
|
if(data.responseJSON.error === "token"){
|
||||||
|
Cookies.remove('token');
|
||||||
|
Cookies.remove('name');
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
165
src/main/resources/static/js/js.cookie.js
Normal file
165
src/main/resources/static/js/js.cookie.js
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
/*!
|
||||||
|
* JavaScript Cookie v2.2.0
|
||||||
|
* https://github.com/js-cookie/js-cookie
|
||||||
|
*
|
||||||
|
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
|
||||||
|
* Released under the MIT license
|
||||||
|
*/
|
||||||
|
;(function (factory) {
|
||||||
|
var registeredInModuleLoader = false;
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define(factory);
|
||||||
|
registeredInModuleLoader = true;
|
||||||
|
}
|
||||||
|
if (typeof exports === 'object') {
|
||||||
|
module.exports = factory();
|
||||||
|
registeredInModuleLoader = true;
|
||||||
|
}
|
||||||
|
if (!registeredInModuleLoader) {
|
||||||
|
var OldCookies = window.Cookies;
|
||||||
|
var api = window.Cookies = factory();
|
||||||
|
api.noConflict = function () {
|
||||||
|
window.Cookies = OldCookies;
|
||||||
|
return api;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}(function () {
|
||||||
|
function extend () {
|
||||||
|
var i = 0;
|
||||||
|
var result = {};
|
||||||
|
for (; i < arguments.length; i++) {
|
||||||
|
var attributes = arguments[ i ];
|
||||||
|
for (var key in attributes) {
|
||||||
|
result[key] = attributes[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init (converter) {
|
||||||
|
function api (key, value, attributes) {
|
||||||
|
var result;
|
||||||
|
if (typeof document === 'undefined') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write
|
||||||
|
|
||||||
|
if (arguments.length > 1) {
|
||||||
|
attributes = extend({
|
||||||
|
path: '/'
|
||||||
|
}, api.defaults, attributes);
|
||||||
|
|
||||||
|
if (typeof attributes.expires === 'number') {
|
||||||
|
var expires = new Date();
|
||||||
|
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
|
||||||
|
attributes.expires = expires;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We're using "expires" because "max-age" is not supported by IE
|
||||||
|
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = JSON.stringify(value);
|
||||||
|
if (/^[\{\[]/.test(result)) {
|
||||||
|
value = result;
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
if (!converter.write) {
|
||||||
|
value = encodeURIComponent(String(value))
|
||||||
|
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
|
||||||
|
} else {
|
||||||
|
value = converter.write(value, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
key = encodeURIComponent(String(key));
|
||||||
|
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
|
||||||
|
key = key.replace(/[\(\)]/g, escape);
|
||||||
|
|
||||||
|
var stringifiedAttributes = '';
|
||||||
|
|
||||||
|
for (var attributeName in attributes) {
|
||||||
|
if (!attributes[attributeName]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
stringifiedAttributes += '; ' + attributeName;
|
||||||
|
if (attributes[attributeName] === true) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
stringifiedAttributes += '=' + attributes[attributeName];
|
||||||
|
}
|
||||||
|
return (document.cookie = key + '=' + value + stringifiedAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read
|
||||||
|
|
||||||
|
if (!key) {
|
||||||
|
result = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
// To prevent the for loop in the first place assign an empty array
|
||||||
|
// in case there are no cookies at all. Also prevents odd result when
|
||||||
|
// calling "get()"
|
||||||
|
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
||||||
|
var rdecode = /(%[0-9A-Z]{2})+/g;
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
for (; i < cookies.length; i++) {
|
||||||
|
var parts = cookies[i].split('=');
|
||||||
|
var cookie = parts.slice(1).join('=');
|
||||||
|
|
||||||
|
if (!this.json && cookie.charAt(0) === '"') {
|
||||||
|
cookie = cookie.slice(1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var name = parts[0].replace(rdecode, decodeURIComponent);
|
||||||
|
cookie = converter.read ?
|
||||||
|
converter.read(cookie, name) : converter(cookie, name) ||
|
||||||
|
cookie.replace(rdecode, decodeURIComponent);
|
||||||
|
|
||||||
|
if (this.json) {
|
||||||
|
try {
|
||||||
|
cookie = JSON.parse(cookie);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key === name) {
|
||||||
|
result = cookie;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!key) {
|
||||||
|
result[name] = cookie;
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
api.set = api;
|
||||||
|
api.get = function (key) {
|
||||||
|
return api.call(api, key);
|
||||||
|
};
|
||||||
|
api.getJSON = function () {
|
||||||
|
return api.apply({
|
||||||
|
json: true
|
||||||
|
}, [].slice.call(arguments));
|
||||||
|
};
|
||||||
|
api.defaults = {};
|
||||||
|
|
||||||
|
api.remove = function (key, attributes) {
|
||||||
|
api(key, '', extend(attributes, {
|
||||||
|
expires: -1
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
api.withConverter = init;
|
||||||
|
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
|
||||||
|
return init(function () {});
|
||||||
|
}));
|
138
src/main/resources/static/js/navabar.js
Normal file
138
src/main/resources/static/js/navabar.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
var nav_bar_account_link;
|
||||||
|
var connected_link = "<a class=\"dropdown-account\" data-activates=\"dropdown_connected\"><i class=\"material-icons green-text\">account_box</i></a>";
|
||||||
|
var disconnected_link = "<a class=\"waves-effect waves-light modal-trigger\" href=\"#modal_connection\"><i class=\"material-icons red-text\">account_box</i></a>";
|
||||||
|
var input_name;
|
||||||
|
var input_psw;
|
||||||
|
var btn_submit;
|
||||||
|
var btn_disconnect;
|
||||||
|
var nav_name;
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.button-navbar-mobile').sideNav({
|
||||||
|
menuWidth: 400, // Default is 300
|
||||||
|
edge: 'right', // Choose the horizontal origin
|
||||||
|
closeOnClick: false, // Closes side-nav on <a> clicks, useful for Angular/Meteor
|
||||||
|
draggable: true // Choose whether you can drag to open on touch screens,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
nav_bar_account_link = $("#nav-bar-account");
|
||||||
|
input_name = $("#user_input");
|
||||||
|
input_psw = $("#password_input");
|
||||||
|
btn_submit = $("#btn-submit-connect");
|
||||||
|
btn_disconnect = $("#nav-disconnect");
|
||||||
|
nav_name = $("#nav-name");
|
||||||
|
|
||||||
|
if(Cookies.get('token') === undefined){
|
||||||
|
disconnected()
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
connected();
|
||||||
|
}
|
||||||
|
|
||||||
|
listeners();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function popOutSubmit(){
|
||||||
|
if (btn_submit.hasClass("scale-in")) {
|
||||||
|
btn_submit.removeClass("scale-in");
|
||||||
|
btn_submit.addClass("scale-out");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function popInSubmit(){
|
||||||
|
if (btn_submit.hasClass("scale-out")) {
|
||||||
|
btn_submit.removeClass("scale-out");
|
||||||
|
btn_submit.addClass("scale-in");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function connected(){
|
||||||
|
console.log("Connected!");
|
||||||
|
nav_bar_account_link.html(connected_link);
|
||||||
|
$('.dropdown-account').dropdown({
|
||||||
|
constrainWidth: false, // Does not change width of dropdown to that of the activator
|
||||||
|
belowOrigin: true, // Displays dropdown below the button
|
||||||
|
alignment: 'left', // Displays dropdown with edge aligned to the left of button
|
||||||
|
stopPropagation: false // Stops event propagation
|
||||||
|
}
|
||||||
|
);
|
||||||
|
nav_name.text(Cookies.get('name'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnected() {
|
||||||
|
console.log("Disconnected");
|
||||||
|
nav_bar_account_link.html(disconnected_link);
|
||||||
|
var modalConnection = $('#modal_connection');
|
||||||
|
modalConnection.modal();
|
||||||
|
if (typeof needLogin !== 'undefined'){
|
||||||
|
modalConnection.modal('open');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function tryConnection() {
|
||||||
|
var request = { name: input_name.val(), password: input_psw.val()};
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
url: "/api/userManagement/requestToken",
|
||||||
|
data: JSON.stringify(request),
|
||||||
|
success: function (data) {
|
||||||
|
console.log(data);
|
||||||
|
Cookies.set('token',data.token);
|
||||||
|
Cookies.set('name', data.name);
|
||||||
|
debugger;
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
}).fail(function (data) {
|
||||||
|
console.log(data);
|
||||||
|
switch(data.responseJSON.error){
|
||||||
|
case "user":
|
||||||
|
input_name.addClass("invalid");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "password":
|
||||||
|
input_psw.addClass("invalid");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function listeners() {
|
||||||
|
input_name.on("input", function () {
|
||||||
|
if(input_name.val() !== "" && input_psw.val() !== "") {
|
||||||
|
popInSubmit();
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
popOutSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
input_psw.on("input", function () {
|
||||||
|
if(input_name.val() !== "" && input_psw.val() !== "") {
|
||||||
|
popInSubmit();
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
popOutSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btn_disconnect.click(function () {
|
||||||
|
Cookies.remove('token');
|
||||||
|
Cookies.remove('name');
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
176
src/main/resources/static/js/register.js
Normal file
176
src/main/resources/static/js/register.js
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
|
||||||
|
var ok_passwrd = false;
|
||||||
|
$(document).ready(function() {
|
||||||
|
var baseUrl = window.location.protocol + "//" +window.location.host + window.location.pathname;
|
||||||
|
console.log(baseUrl);
|
||||||
|
$('.button-collapse-1').sideNav({
|
||||||
|
menuWidth: 400, // Default is 300
|
||||||
|
edge: 'right', // Choose the horizontal origin
|
||||||
|
closeOnClick: false, // Closes side-nav on <a> clicks, useful for Angular/Meteor
|
||||||
|
draggable: true // Choose whether you can drag to open on touch screens,
|
||||||
|
});
|
||||||
|
|
||||||
|
var sendBtn = $('#sendBtn');
|
||||||
|
|
||||||
|
|
||||||
|
$('#name').on("input", function () {
|
||||||
|
if($('#name').val() === ""){
|
||||||
|
if (sendBtn.hasClass("scale-in")) {
|
||||||
|
sendBtn.removeClass("scale-in");
|
||||||
|
sendBtn.addClass("scale-out");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (sendBtn.hasClass("scale-out") && ok_passwrd) {
|
||||||
|
sendBtn.removeClass("scale-out");
|
||||||
|
sendBtn.addClass("scale-in");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var passwrd = $('#passwrd');
|
||||||
|
var confirm = $('#passwrd2');
|
||||||
|
passwrd.on("input", function () {
|
||||||
|
if((passwrd.val() === confirm.val())&& passwrd.val() !== ''){
|
||||||
|
if (passwrd.hasClass("invalid")) {
|
||||||
|
passwrd.addClass("valid");
|
||||||
|
passwrd.removeClass("invalid");
|
||||||
|
confirm.addClass("valid");
|
||||||
|
confirm.removeClass("invalid");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
if($('#name').val() !== ""){
|
||||||
|
if (sendBtn.hasClass("scale-out")) {
|
||||||
|
sendBtn.removeClass("scale-out");
|
||||||
|
sendBtn.addClass("scale-in");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok_passwrd = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (!passwrd.hasClass("invalid")) {
|
||||||
|
passwrd.addClass("invalid");
|
||||||
|
passwrd.removeClass("valid");
|
||||||
|
confirm.addClass("invalid");
|
||||||
|
confirm.removeClass("valid");
|
||||||
|
|
||||||
|
}
|
||||||
|
if (sendBtn.hasClass("scale-in")) {
|
||||||
|
sendBtn.removeClass("scale-in");
|
||||||
|
sendBtn.addClass("scale-out");
|
||||||
|
}
|
||||||
|
ok_passwrd = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
confirm.on("input", function () {
|
||||||
|
if((passwrd.val() === confirm.val())&& passwrd.val() !== ''){
|
||||||
|
if (passwrd.hasClass("invalid")) {
|
||||||
|
passwrd.addClass("valid");
|
||||||
|
passwrd.removeClass("invalid");
|
||||||
|
confirm.addClass("valid");
|
||||||
|
confirm.removeClass("invalid");
|
||||||
|
|
||||||
|
}
|
||||||
|
if($('#name').val() !== ""){
|
||||||
|
if (sendBtn.hasClass("scale-out")) {
|
||||||
|
sendBtn.removeClass("scale-out");
|
||||||
|
sendBtn.addClass("scale-in");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok_passwrd = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (!passwrd.hasClass("invalid")) {
|
||||||
|
passwrd.addClass("invalid");
|
||||||
|
passwrd.removeClass("valid");
|
||||||
|
confirm.addClass("invalid");
|
||||||
|
confirm.removeClass("valid");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendBtn.hasClass("scale-in")) {
|
||||||
|
sendBtn.removeClass("scale-in");
|
||||||
|
sendBtn.addClass("scale-out");
|
||||||
|
}
|
||||||
|
ok_passwrd = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('#sendBtn').click(function () {
|
||||||
|
var name = $('#name').val();
|
||||||
|
var password = $('#passwrd').val();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
url: "/api/userManagement/preRegister",
|
||||||
|
data: JSON.stringify({ name: name, password: password}),
|
||||||
|
success: function (data) {
|
||||||
|
console.log(data);
|
||||||
|
window.location.href = baseUrl + "?id="+data.id
|
||||||
|
}
|
||||||
|
|
||||||
|
}).fail(function (data) {
|
||||||
|
console.log(data);
|
||||||
|
if(data.status === 404){
|
||||||
|
alert("User Not Found!");
|
||||||
|
$('#name').addClass("invalid");
|
||||||
|
$('#name').removeClass("valid");
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
alert(data.responseJSON.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#modalToken').modal({dismissible: false});
|
||||||
|
if(id !== ''){
|
||||||
|
$('#modalToken').modal('open');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$('#input_preToken').on("input", function () {
|
||||||
|
var sendBtn = $('#preTokenSend');
|
||||||
|
if($('#input_preToken').val().length < 4){
|
||||||
|
if (sendBtn.hasClass("scale-in")) {
|
||||||
|
sendBtn.removeClass("scale-in");
|
||||||
|
sendBtn.addClass("scale-out");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (sendBtn.hasClass("scale-out")) {
|
||||||
|
sendBtn.removeClass("scale-out");
|
||||||
|
sendBtn.addClass("scale-in");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#preTokenSend').click(function () {
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
url: "/api/userManagement/confirmAccount",
|
||||||
|
data: JSON.stringify({ id: id.toString(), checkToken: $('#input_preToken').val()}),
|
||||||
|
success: function (data) {
|
||||||
|
console.log(data);
|
||||||
|
Cookies.set('token',data.token);
|
||||||
|
Cookies.set('name', data.name);
|
||||||
|
debugger;
|
||||||
|
window.location.href = "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
}).fail(function (data) {
|
||||||
|
console.log(data);
|
||||||
|
alert(data.responseJSON.message);
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
@ -3,7 +3,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
||||||
<title>Discord Bot - Music Control</title>
|
<title>Music Control - Discord Bot</title>
|
||||||
|
<link rel="icon"
|
||||||
|
type="image/x-icon"
|
||||||
|
href="favicon.png"/>
|
||||||
|
|
||||||
<!-- CSS -->
|
<!-- CSS -->
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
||||||
@ -13,31 +16,106 @@
|
|||||||
|
|
||||||
<body class="blue-grey lighten-5" >
|
<body class="blue-grey lighten-5" >
|
||||||
|
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- NAV BAR -->
|
||||||
|
<!-- AND -->
|
||||||
|
<!-- LOGIN -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
<nav class="blue-grey darken-4 z-depth-3" role="navigation">
|
<nav class="blue-grey darken-4 z-depth-3" role="navigation">
|
||||||
<div class="nav-wrapper container">
|
<div class="nav-wrapper container">
|
||||||
<a id="logo-container" href="#" class="brand-logo">Discord Bot</a>
|
<a id="logo-container" href="/" class="brand-logo">Discord Bot</a>
|
||||||
<ul class="right hide-on-med-and-down">
|
<ul class="right hide-on-med-and-down">
|
||||||
|
|
||||||
<li >
|
<li class="">
|
||||||
<a href="/" data-target="slide-out" class="sidenav-trigger">Home</a>
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a href="/music" >Music Control</a>
|
<a class="waves-effect waves-light" href="/music" >Music Control</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="nav-bar-account">
|
||||||
|
<a class="dropdown-account" data-activates="dropdown1"><i class="material-icons">account_box</i></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul id="nav-mobile" class="side-nav">
|
<ul id="nav-mobile" class="side-nav">
|
||||||
<li >
|
|
||||||
<a href="/" data-target="slide-out" class="sidenav-trigger">Home</a>
|
|
||||||
</li>
|
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a href="/music" data-target="slide-out" class="sidenav-trigger">Music Control</a>
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="waves-effect waves-light sidenav-trigger" href="/music" data-target="slide-out" >Music Control</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="#" data-activates="nav-mobile" class="button-collapse-1 button-collapse"><i class="material-icons">menu</i></a>
|
<a href="#" data-activates="nav-mobile" class="button-navbar-mobile button-collapse"><i class="material-icons">menu</i></a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<!-- Dropdown connected -->
|
||||||
|
<ul id="dropdown_connected" class="dropdown-content ">
|
||||||
|
<li>
|
||||||
|
<a class="center blue-grey-text text-darken-4" id="nav-name" style="text-decoration: underline; font-weight: bold"></a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Account</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Playlists</a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li><a class="center red-text" id="nav-disconnect" style="font-weight: bold">Disconnect</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!--________________________________________-->
|
||||||
|
<!-- Connection modal -->
|
||||||
|
<!--________________________________________-->
|
||||||
|
<div id="modal_connection" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="row center">
|
||||||
|
<div class="col s12">
|
||||||
|
<h3 class="" style="font-weight: bold">Sign in</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row center" style="margin-bottom: 0px">
|
||||||
|
<form name="login_form" id="login_form" action="javascript:void(0);" onsubmit="tryConnection()">
|
||||||
|
<div class="row" style="margin-bottom: 0px">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">account_box</i>
|
||||||
|
<input name="username" id="user_input" type="text" class="validate"/>
|
||||||
|
<label for="user_input" data-error="User not registered!">User Name</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">security</i>
|
||||||
|
<input name="password" id="password_input" type="password" class="validate"/>
|
||||||
|
<label for="password_input" data-error="Wrong password!">Password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 10px">
|
||||||
|
<button id="btn-submit-connect" class="btn waves-effect waves-light light-green darken-1 scale-transition scale-out" type="submit" name="action" >
|
||||||
|
Submit<i class="material-icons right">send</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<a class="btn waves-effect waves-light brown" href="/register">
|
||||||
|
Create account<i class="material-icons right">person_add</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- -->
|
||||||
|
<!-- END -->
|
||||||
|
<!-- -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
|
||||||
<div class="section no-pad-bot main" id="index-banner">
|
<div class="section no-pad-bot main" id="index-banner">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s8">
|
<div class="col s8">
|
||||||
@ -214,6 +292,11 @@
|
|||||||
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||||
<script src="js/materialize.js"></script>
|
<script src="js/materialize.js"></script>
|
||||||
<script src="js/init.js"></script>
|
<script src="js/init.js"></script>
|
||||||
|
<script>
|
||||||
|
var needLogin = true;
|
||||||
|
</script>
|
||||||
|
<script src="js/navabar.js"></script>
|
||||||
|
<script src="js/js.cookie.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
210
src/main/resources/templates/register.html
Normal file
210
src/main/resources/templates/register.html
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0"/>
|
||||||
|
<title>User Registration - Discord Bot</title>
|
||||||
|
<link rel="icon" type="image/x-icon" href="favicon.png"/>
|
||||||
|
|
||||||
|
<!-- CSS -->
|
||||||
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
||||||
|
<link href="css/materialize.css" type="text/css" rel="stylesheet" media="screen,projection"/>
|
||||||
|
<link href="css/style.css" type="text/css" rel="stylesheet" media="screen,projection"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="blue-grey lighten-5" >
|
||||||
|
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- NAV BAR -->
|
||||||
|
<!-- AND -->
|
||||||
|
<!-- LOGIN -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<nav class="blue-grey darken-4 z-depth-3" role="navigation">
|
||||||
|
<div class="nav-wrapper container">
|
||||||
|
<a id="logo-container" href="/" class="brand-logo">Discord Bot</a>
|
||||||
|
<ul class="right hide-on-med-and-down">
|
||||||
|
|
||||||
|
<li class="">
|
||||||
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="waves-effect waves-light" href="/music" >Music Control</a>
|
||||||
|
</li>
|
||||||
|
<li id="nav-bar-account">
|
||||||
|
<a class="dropdown-account" data-activates="dropdown1"><i class="material-icons">account_box</i></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul id="nav-mobile" class="side-nav">
|
||||||
|
<li class="active">
|
||||||
|
<a class="waves-effect waves-light sidenav-trigger" href="/" data-target="slide-out">Home</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="waves-effect waves-light sidenav-trigger" href="/music" data-target="slide-out" >Music Control</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a href="#" data-activates="nav-mobile" class="button-navbar-mobile button-collapse"><i class="material-icons">menu</i></a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Dropdown connected -->
|
||||||
|
<ul id="dropdown_connected" class="dropdown-content ">
|
||||||
|
<li>
|
||||||
|
<a class="center blue-grey-text text-darken-4" id="nav-name" style="text-decoration: underline; font-weight: bold"></a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Account</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="center tooltipped" data-position="left" data-delay="50" data-tooltip="Under Development!">My Playlists</a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li><a class="center red-text" id="nav-disconnect" style="font-weight: bold">Disconnect</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!--________________________________________-->
|
||||||
|
<!-- Connection modal -->
|
||||||
|
<!--________________________________________-->
|
||||||
|
<div id="modal_connection" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="row center">
|
||||||
|
<div class="col s12">
|
||||||
|
<h3 class="" style="font-weight: bold">Sign in</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row center" style="margin-bottom: 0px">
|
||||||
|
<form name="login_form" id="login_form" action="javascript:void(0);" onsubmit="tryConnection()">
|
||||||
|
<div class="row" style="margin-bottom: 0px">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">account_box</i>
|
||||||
|
<input name="username" id="user_input" type="text" class="validate"/>
|
||||||
|
<label for="user_input" data-error="User not registered!">User Name</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">security</i>
|
||||||
|
<input name="password" id="password_input" type="password" class="validate"/>
|
||||||
|
<label for="password_input" data-error="Wrong password!">Password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 10px">
|
||||||
|
<button id="btn-submit-connect" class="btn waves-effect waves-light light-green darken-1 scale-transition scale-out" type="submit" name="action" >
|
||||||
|
Submit<i class="material-icons right">send</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<a class="btn waves-effect waves-light brown" href="/register">
|
||||||
|
Create account<i class="material-icons right">person_add</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
<!-- -->
|
||||||
|
<!-- END -->
|
||||||
|
<!-- -->
|
||||||
|
<!--__________________________________________________________-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="section no-pad-bot main" id="index-banner">
|
||||||
|
<div class="row center">
|
||||||
|
<div class="row">
|
||||||
|
<h2 class="col s12">Account Registration</h2>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 0%">
|
||||||
|
<div class="col s12">
|
||||||
|
<div class="input-field inline">
|
||||||
|
<i class="material-icons prefix">assignment_ind</i>
|
||||||
|
<input id="name" type="text" class="validate invalid"/>
|
||||||
|
<label for="name" data-error="" data-success="">Discord Name</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 0%">
|
||||||
|
<div class="col s12">
|
||||||
|
<div class="input-field inline">
|
||||||
|
<i class="material-icons prefix">security</i>
|
||||||
|
<input id="passwrd" type="password" class="invalid"/>
|
||||||
|
<label for="passwrd" data-error="" data-success="">Password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="margin-bottom: 0%">
|
||||||
|
<div class="col s12">
|
||||||
|
<div class="input-field inline">
|
||||||
|
<i class="material-icons prefix">security</i>
|
||||||
|
<input id="passwrd2" type="password" class="invalid"/>
|
||||||
|
<label for="passwrd2" data-error="" data-success="">Confirm</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col s12">
|
||||||
|
<a id="sendBtn" class="waves-effect waves-light btn scale-transition scale-out">Send<i class="material-icons left">send</i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Modal Structure -->
|
||||||
|
<div id="modalToken" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="row">
|
||||||
|
<h3 class="col s12 center"> User Validation</h3>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s10 offset-s1">
|
||||||
|
<p class="center">
|
||||||
|
A validation code was sent by private message, please copy it below.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12">
|
||||||
|
<div class="row" style="margin-bottom: 0px">
|
||||||
|
<div class="input-field col s6 offset-s3">
|
||||||
|
<i class="material-icons prefix">fingerprint</i>
|
||||||
|
<input id="input_preToken" type="text" class="validate"/>
|
||||||
|
<label for="input_preToken">Verification Code</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<a href="#" id="preTokenSend" class="modal-action waves-effect waves-green btn scale-transition scale-out">Send</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||||
|
<script src="js/materialize.js"></script>
|
||||||
|
<script src="js/register.js"></script>
|
||||||
|
<script src="js/navabar.js"></script>
|
||||||
|
<script src="js/js.cookie.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script th:inline="javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
var id = [[${id}]];
|
||||||
|
console.log(id);
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user