func (srv *CompanyPersonService) ServiceGetAuthPerson(ctx context.Context, companyPerson models.CompanyPerson) (result map[string]interface{}) {
session, _ := utils.ContextGetSession(ctx)
result = srv.getAuthPersonsList(ctx, session, companyPerson)
logger.WorkLogger.Debug("ServiceGetAuthPerson", zap.Any("companyPerson", companyPerson))
result["signAllow"] = companyPerson.IsSignAllow == consts.True //srv.compPersonAuth.FindSignAllowOfCompanyPerson(srv.db, companyPerson.ID)
result["privileges"] = strings.Split(session.Permissions, ",")
result["personType"] = "LegalEntity" // todo: personType.LegalEntity not implemented
return
}
func (srv *CompanyPersonService) getAuthPersonsList(ctx context.Context, session models.Session, companyPerson models.CompanyPerson) (result map[string]interface{}) {
result = make(map[string]interface{})
dList := make([]models.CompanyPerson, 0)
if list, err := srv.FindAllCompanyPersonByUserAccount(companyPerson.UserAccountID); err == nil {
logger.WorkLogger.Debug("getAuthPersonsList", zap.Any("list", list))
if utils.IsFactorPassed(ctx, consts.AuthFactorTypeSignature) {
logger.WorkLogger.Debug("getAuthPersonsList 2", zap.Any("list", list))
sessionFactor := utils.GetPassedFactor(ctx, consts.AuthFactorTypeSignature)
certificateSerialNumber := sessionFactor.FactorSn
if acpList, err := srv.certificate.FindAllBySN(srv.db, certificateSerialNumber); err == nil {
authenticatedCompanyPersons := make([]map[string]interface{}, 0)
for _, acp := range acpList {
authenticatedCompanyPersons = append(authenticatedCompanyPersons, acp.ConvertToDTO())
}
if len(authenticatedCompanyPersons) == 0 {
list = []models.CompanyPerson{}
} else {
for _, authCPerson := range authenticatedCompanyPersons {
for _, cPerson := range list {
if cPerson.ID == authCPerson["id"] {
dList = append(dList, cPerson)
}
}
}
}
} else {
logger.WorkLogger.Debug("FindAllBySN", zap.Error(err))
}
} else {
logger.WorkLogger.Debug("IsFactorPassed", zap.Error(err))
}
} else {
logger.WorkLogger.Debug("getAuthPersonsList", zap.Error(err))
}
intlPersons := make([]interface{}, 0)
personList := make([]interface{}, 0)
if len(dList) != 0 {
for _, person := range dList {
personList = append(personList, person)
}
result["persons"] = personList
for _, person := range dList {
intlPersons = append(intlPersons, map[string]interface{}{
tools.Int64ToStr(person.ID): "",
})
}
result["intlPersons"] = intlPersons
}
result["currentAuthPerson"] = companyPerson.ID
result["currentAuthBIN"] = nil
result["quickLinks"] = companyPerson.QuickLinks
allFactors := make([]string, 0)
factors := srv.loginChain.GetAllFactorsName(srv.db)
for _, sessionFactor := range session.Factors {
if sessionFactor.SessionFactorType == consts.AuthFactorTypeSignature &&
sessionFactor.AuthPersonID.Int64 == companyPerson.ID || sessionFactor.SessionFactorType != consts.AuthFactorTypeSignature {
for _, f := range factors {
if f != string(sessionFactor.SessionFactorType) {
allFactors = append(allFactors, f)
}
}
}
}
result["addfactors"] = allFactors
return
}