Skip to content

Commit

Permalink
Merge pull request #124 from Dapp-Learning-DAO/dev
Browse files Browse the repository at this point in the history
release v1.0.1
  • Loading branch information
yanyanho authored Jan 16, 2024
2 parents 0388d85 + 8ebdcbe commit 4688bd7
Show file tree
Hide file tree
Showing 19 changed files with 259 additions and 166 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

# Log file
*.log
*.pdf

# BlueJ files
*.ctxt
Expand Down Expand Up @@ -49,3 +50,6 @@ README-Local.md
/dist
wallet/%
node/*
/gradleRepository
/bin/main
/.vscode/launch.json
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ backend of official website

## interface for front-end
see :

https://www.postman.com/lively-station-290552/workspace/publicworkspace/collection/13180077-af411142-dfd4-4e33-bfb5-ec26ff095072

https://hoppscotch.io/

## login xyz
https://github.com/spruceid/siwe-go/blob/main/message.go

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ public enum CodeEnums {

SHARING_LOCKED("5003", "Sharing locked, please contact admin to unlock"),

NOT_DELETE_TEAM("1019", "not delete admin team");
NOT_DELETE_TEAM("1019", "not delete admin team"),

INVALID_MEMBER("1023", "member is invalid");



Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/dl/officialsite/config/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public CookieSerializer cookieSerializer() {
serializer.setCookieName("SESSION");
serializer.setCookiePath("/");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
serializer.setCookieMaxAge(1800);
// serializer.setDomainNamePattern("^.+?\\.dapplearning\\.org$");
return serializer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.dl.officialsite.common.base.BaseResponse;
import com.dl.officialsite.hiring.vo.HiringVO;
import com.dl.officialsite.login.Auth;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down
13 changes: 5 additions & 8 deletions src/main/java/com/dl/officialsite/hiring/HireService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import com.dl.officialsite.mail.EmailService;
import com.dl.officialsite.member.Member;
import com.dl.officialsite.member.MemberRepository;
import com.dl.officialsite.member.MemberService;
import com.dl.officialsite.member.MemberWithTeam;
import com.dl.officialsite.team.Team;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand All @@ -19,11 +22,6 @@
import java.util.stream.Collectors;
import javax.persistence.criteria.CriteriaBuilder.In;
import javax.persistence.criteria.Predicate;

import com.dl.officialsite.member.MemberService;
import com.dl.officialsite.member.MemberWithTeam;
import com.dl.officialsite.team.Team;
import com.dl.officialsite.team.vo.TeamsWithMembers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -58,7 +56,6 @@ public class HireService {
@Autowired
private EmailService emailService;


@Autowired
private MemberService memberService;
/**
Expand All @@ -71,8 +68,8 @@ public HiringVO add(HiringVO hiringVO, String address) {
//check in hiring team or in sharing team

MemberWithTeam memberWithTeam = memberService.getMemberWithTeamInfoByAddress(address);
ArrayList<TeamsWithMembers> teams = memberWithTeam.getTeams();
List teamNames = teams.stream().map(x->x.getTeamName()).collect(Collectors.toList());
ArrayList<Team> teams = memberWithTeam.getTeams();
List teamNames = teams.stream().map(Team::getTeamName).collect(Collectors.toList());
if(!teamNames.contains("Dapp-Learning DAO co-founders") && !teamNames.contains("Dapp-Learning DAO sharing group") && !teamNames.contains("Hiring Team")) {
throw new BizException("1001", "no permission");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.dl.officialsite.hiring.application;

import com.dl.officialsite.hiring.Hiring;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;


public interface ApplicationRepository extends JpaRepository<Application, Long>,
JpaSpecificationExecutor<Application> {
JpaSpecificationExecutor<Application> {

Application findByMemberIdAndHiringId(Long memberId, Long hireId);

@Modifying
@Query(value ="delete from application where memeber_id = :member_id", nativeQuery = true)
void deleteByMemberId(@Param("member_id")Long memberId);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.dl.officialsite.login.controller;


import cn.hutool.db.Session;
import com.dl.officialsite.common.base.BaseResponse;
import com.dl.officialsite.common.utils.HttpSessionUtils;
import com.dl.officialsite.login.model.SessionUserInfo;
Expand All @@ -16,13 +17,13 @@
import org.web3j.crypto.Keys;
import org.web3j.crypto.Sign;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.math.BigInteger;
import java.security.SignatureException;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.*;

import static org.web3j.crypto.Sign.getEthereumMessageHash;
import static org.web3j.utils.Numeric.hexStringToByteArray;
Expand All @@ -38,8 +39,27 @@ public class LoginController {


@GetMapping("/nonce")
public String getNonce( @RequestParam String address, HttpSession session) {
public String getNonce( @RequestParam String address, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
logger.info(session.getId());

Cookie[] cookies = request.getCookies();
List<String> domains = new ArrayList<>();

if (cookies != null) {
for (Cookie cookie : cookies) {
String domain = cookie.getDomain();
if (domain != null && !domain.isEmpty()) {
logger.info("domains: "+ domain);
domains.add(domain);
if(cookie.getDomain().equals("dapplearning.org")){
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
}
}
}
UUID uuid = UUID.randomUUID();
String uuidAsString = uuid.toString().replaceAll("-", "");

Expand Down Expand Up @@ -111,13 +131,27 @@ private boolean checkNonce(String message, String nonce ) {

@GetMapping("/logout")
public BaseResponse logout(@RequestParam String address, HttpSession session) {
HttpSessionUtils.clearLogin(session);
HttpSessionUtils.clearLogin(session);
session.invalidate();
return BaseResponse.successWithData(null);
}

@GetMapping("/check-session")
public BaseResponse checkSessionStatus( HttpServletRequest request) {

Cookie[] cookies = request.getCookies();
List<String> domains = new ArrayList<>();

if (cookies != null) {
for (Cookie cookie : cookies) {
String domain = cookie.getDomain();
if (domain != null && !domain.isEmpty()) {
logger.info("domains: "+ domain);
domains.add(domain);
}
}
}

if (request.isRequestedSessionIdValid()) {

return BaseResponse.successWithData(true) ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ public BaseResponse updateMemberByAddress(@RequestParam String address, @Request
}
}


@DeleteMapping()
public BaseResponse deleteMember(@RequestParam String address) {
memberService.deleteMember(address);
return BaseResponse.success();
}


//todo query

// findByNickName
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/com/dl/officialsite/member/MemberManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.dl.officialsite.member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class MemberManager {

@Autowired
private MemberRepository memberRepository;

public Member getMemberByAddress(String address) {
Optional<Member> member = memberRepository.findByAddress(address);
if (member.isPresent()) {
return member.get();
}
return null;
}
}
82 changes: 55 additions & 27 deletions src/main/java/com/dl/officialsite/member/MemberService.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.dl.officialsite.member;

import com.dl.officialsite.common.base.BaseResponse;
import com.dl.officialsite.common.enums.CodeEnums;
import com.dl.officialsite.common.exception.BizException;
import com.dl.officialsite.common.utils.UserSecurityUtils;
import com.dl.officialsite.hiring.application.ApplicationRepository;
import com.dl.officialsite.team.Team;
import com.dl.officialsite.team.TeamRepository;
import com.dl.officialsite.team.TeamService;
import com.dl.officialsite.team.teammember.TeamMember;
import com.dl.officialsite.team.teammember.TeamMemberRepository;
import org.slf4j.Logger;
Expand All @@ -11,45 +16,45 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.persistence.PersistenceException;
import javax.transaction.Transactional;

import static com.dl.officialsite.common.enums.CodeEnums.INVALID_MEMBER;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@Service
public class MemberService {


@Autowired
private MemberRepository memberRepository;
@Autowired
private TeamMemberRepository teamMemberRepository;
@Autowired
private TeamRepository teamRepository;
@Autowired
private TeamService teamService;
@Autowired
private ApplicationRepository applicationRepository;
@Autowired
private MemberManager memberManager;

public static final Logger logger = LoggerFactory.getLogger(MemberController.class);

public Member getMemberByAddress(String address) {
Optional<Member> member = memberRepository.findByAddress(address);
if(member.isPresent()) {
return member.get();
}
return null;
}


public MemberWithTeam getMemberWithTeamInfoByAddress(String address) {
Optional<Member> member = memberRepository.findByAddress(address);

if(member.isPresent()) {
if (member.isPresent()) {
MemberWithTeam memberWithTeam = new MemberWithTeam();
BeanUtils.copyProperties(member.get(), memberWithTeam);
ArrayList teams = new ArrayList();
ArrayList teams = new ArrayList();
List<TeamMember> teamMembers = teamMemberRepository.findByMemberIdAndStatus(member.get().getId(), 0);

teamMembers.stream().forEach(teamMember -> {
Team team = teamRepository.findById(teamMember.getTeamId()).get();
if(team.getTeamName().equals("Dapp-Learning DAO co-founders")){
if (team.getTeamName().equals("Dapp-Learning DAO co-founders")) {
memberWithTeam.setAdmin(true);
}
teams.add(team);
Expand All @@ -61,10 +66,10 @@ public MemberWithTeam getMemberWithTeamInfoByAddress(String address) {
}

public MemberVo save(Member member) {
memberRepository.save(member);
MemberVo memberVo = new MemberVo();
memberRepository.save(member);
MemberVo memberVo = new MemberVo();
BeanUtils.copyProperties(member, memberVo);
return memberVo;
return memberVo;

}

Expand All @@ -76,17 +81,40 @@ public MemberVo getMemberPrivacyInfo(String address) {
MemberVo memberVo = new MemberVo();
BeanUtils.copyProperties(member.get(), memberVo);

return memberVo;
return memberVo;

}
// } catch (DataIntegrityViolationException e) {
//
// String mostSpecificCauseMessage = e.getMostSpecificCause().getMessage();
// if (e.getCause() instanceof ConstraintViolationException) {
// String name = ((ConstraintViolationException)
// e.getCause()).getConstraintName();
// logger.info("Encountered ConstraintViolationException, details: " +
// mostSpecificCauseMessage + "constraintName: "+ name);
// }
// return BaseResponse.failWithReason("1000", mostSpecificCauseMessage);
// }

@Transactional(rollbackOn = Exception.class)
public void deleteMember(String memberAddress) {
// check address
Member member = this.memberManager.getMemberByAddress(memberAddress);
if (Objects.isNull(member)) {
throw new BizException(INVALID_MEMBER.getCode(), INVALID_MEMBER.getMsg());
}

// check supper admin
String address = UserSecurityUtils.getUserLogin().getAddress();
if (!teamService.checkMemberIsSuperAdmin(address)) {
throw new BizException(CodeEnums.NOT_THE_ADMIN.getCode(),
CodeEnums.NOT_THE_ADMIN.getMsg());
}

// delete
teamMemberRepository.deleteByMemberId(member.getId());
applicationRepository.deleteByMemberId(member.getId());
memberRepository.deleteById(member.getId());
}
// } catch (DataIntegrityViolationException e) {
//
// String mostSpecificCauseMessage = e.getMostSpecificCause().getMessage();
// if (e.getCause() instanceof ConstraintViolationException) {
// String name = ((ConstraintViolationException) e.getCause()).getConstraintName();
// logger.info("Encountered ConstraintViolationException, details: " + mostSpecificCauseMessage + "constraintName: "+ name);
// }
// return BaseResponse.failWithReason("1000", mostSpecificCauseMessage);
// }

}
7 changes: 3 additions & 4 deletions src/main/java/com/dl/officialsite/member/MemberWithTeam.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@


import com.dl.officialsite.team.Team;
import com.dl.officialsite.team.vo.TeamsWithMembers;
import lombok.*;

import java.util.ArrayList;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = false)
public class MemberWithTeam extends Member
{

private ArrayList<TeamsWithMembers> teams;
private ArrayList<Team> teams;

private boolean isAdmin;

Expand Down
Loading

0 comments on commit 4688bd7

Please sign in to comment.