add egroups integration
This commit is contained in:
9
.github/workflows/deploy.yml
vendored
9
.github/workflows/deploy.yml
vendored
@@ -31,7 +31,14 @@ jobs:
|
|||||||
description: Ping selected group of members on mattermost when coffee is mentioned
|
description: Ping selected group of members on mattermost when coffee is mentioned
|
||||||
entry_point: Coffee
|
entry_point: Coffee
|
||||||
source_dir: src
|
source_dir: src
|
||||||
env_vars: PROJECT_ID=rising-city-366608,MATTERMOST_TOKEN=${{ secrets.MATTERMOST_TOKEN }},TEST_TOKEN=${{ secrets.TEST_TOKEN }},GITHUB_URL=${{github.server_url}}/${{github.repository}}
|
env_vars: >-
|
||||||
|
PROJECT_ID=rising-city-366608,
|
||||||
|
MATTERMOST_TOKEN=${{ secrets.MATTERMOST_TOKEN }},
|
||||||
|
TEST_TOKEN=${{ secrets.TEST_TOKEN }},
|
||||||
|
GITHUB_URL=${{github.server_url}}/${{github.repository}}
|
||||||
|
secret_environment_variables: >-
|
||||||
|
EGROUPS_USERNAME=projects/74365131111/secrets/EGROUPS_USERNAME,
|
||||||
|
EGROUPS_PASSWORD=projects/74365131111/secrets/EGROUPS_PASSWORD
|
||||||
runtime: go119
|
runtime: go119
|
||||||
memory_mb: 128
|
memory_mb: 128
|
||||||
region: europe-west1
|
region: europe-west1
|
||||||
|
|||||||
692
src/egroups/egroups.go
Normal file
692
src/egroups/egroups.go
Normal file
@@ -0,0 +1,692 @@
|
|||||||
|
package egroups
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/hooklift/gowsdl/soap"
|
||||||
|
)
|
||||||
|
|
||||||
|
// against "unused imports"
|
||||||
|
var _ time.Time
|
||||||
|
var _ xml.Name
|
||||||
|
|
||||||
|
type PrivilegeTypeCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PrivilegeTypeCodeSeeMembers PrivilegeTypeCode = "SeeMembers"
|
||||||
|
|
||||||
|
PrivilegeTypeCodeAdmin PrivilegeTypeCode = "Admin"
|
||||||
|
)
|
||||||
|
|
||||||
|
type EgroupTypeCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
EgroupTypeCodeStaticEgroup EgroupTypeCode = "StaticEgroup"
|
||||||
|
|
||||||
|
EgroupTypeCodeDynamicEgroup EgroupTypeCode = "DynamicEgroup"
|
||||||
|
)
|
||||||
|
|
||||||
|
type StatusCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
StatusCodeCreated StatusCode = "Created"
|
||||||
|
|
||||||
|
StatusCodeActive StatusCode = "Active"
|
||||||
|
|
||||||
|
StatusCodeBlocked StatusCode = "Blocked"
|
||||||
|
|
||||||
|
StatusCodeDeleted StatusCode = "Deleted"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BlockingReasonCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
BlockingReasonCodeManual BlockingReasonCode = "Manual"
|
||||||
|
|
||||||
|
BlockingReasonCodeExpired BlockingReasonCode = "Expired"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UsageCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
UsageCodeEgroupsOnly UsageCode = "EgroupsOnly"
|
||||||
|
|
||||||
|
UsageCodeSecurityMailing UsageCode = "SecurityMailing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AdministratorTypeCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
AdministratorTypeCodeStaticEgroup AdministratorTypeCode = "StaticEgroup"
|
||||||
|
|
||||||
|
AdministratorTypeCodeDynamicEgroup AdministratorTypeCode = "DynamicEgroup"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PrivacyType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PrivacyTypeMembers PrivacyType = "Members"
|
||||||
|
|
||||||
|
PrivacyTypeOpen PrivacyType = "Open"
|
||||||
|
|
||||||
|
PrivacyTypeAdministrators PrivacyType = "Administrators"
|
||||||
|
|
||||||
|
PrivacyTypeUsers PrivacyType = "Users"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SelfsubscriptionType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
SelfsubscriptionTypeClosed SelfsubscriptionType = "Closed"
|
||||||
|
|
||||||
|
SelfsubscriptionTypeOpen SelfsubscriptionType = "Open"
|
||||||
|
|
||||||
|
SelfsubscriptionTypeMembers SelfsubscriptionType = "Members"
|
||||||
|
|
||||||
|
SelfsubscriptionTypeUsers SelfsubscriptionType = "Users"
|
||||||
|
|
||||||
|
SelfsubscriptionTypeOpenWithAdminApproval SelfsubscriptionType = "OpenWithAdminApproval"
|
||||||
|
|
||||||
|
SelfsubscriptionTypeUsersWithAdminApproval SelfsubscriptionType = "UsersWithAdminApproval"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MemberTypeCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
MemberTypeCodeExternal MemberTypeCode = "External"
|
||||||
|
|
||||||
|
MemberTypeCodePerson MemberTypeCode = "Person"
|
||||||
|
|
||||||
|
MemberTypeCodeServiceProvider MemberTypeCode = "ServiceProvider"
|
||||||
|
|
||||||
|
MemberTypeCodeStaticEgroup MemberTypeCode = "StaticEgroup"
|
||||||
|
|
||||||
|
MemberTypeCodeDynamicEgroup MemberTypeCode = "DynamicEgroup"
|
||||||
|
|
||||||
|
MemberTypeCodeAccount MemberTypeCode = "Account"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PostingRestrictionType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PostingRestrictionTypeEveryone PostingRestrictionType = "Everyone"
|
||||||
|
|
||||||
|
PostingRestrictionTypeCernUsers PostingRestrictionType = "CernUsers"
|
||||||
|
|
||||||
|
PostingRestrictionTypeOwnerAdminsAndOthers PostingRestrictionType = "OwnerAdminsAndOthers"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WhoReceivesDeliveryErrorsType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
WhoReceivesDeliveryErrorsTypeGroupOwner WhoReceivesDeliveryErrorsType = "GroupOwner"
|
||||||
|
|
||||||
|
WhoReceivesDeliveryErrorsTypeSender WhoReceivesDeliveryErrorsType = "Sender"
|
||||||
|
|
||||||
|
WhoReceivesDeliveryErrorsTypeNone WhoReceivesDeliveryErrorsType = "None"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ArchivePropertiesType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ArchivePropertiesTypeDoesNotExist ArchivePropertiesType = "DoesNotExist"
|
||||||
|
|
||||||
|
ArchivePropertiesTypeActive ArchivePropertiesType = "Active"
|
||||||
|
|
||||||
|
ArchivePropertiesTypeNotActive ArchivePropertiesType = "NotActive"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ErrorCode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrorCodeNOT_VALID_USER ErrorCode = "NOT_VALID_USER"
|
||||||
|
|
||||||
|
ErrorCodeNOT_FOUND ErrorCode = "NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeEGROUP_NAME_BAD_FORMATED ErrorCode = "EGROUP_NAME_BAD_FORMATED"
|
||||||
|
|
||||||
|
ErrorCodeINSUFFICIENT_PRIVILEGES ErrorCode = "INSUFFICIENT_PRIVILEGES"
|
||||||
|
|
||||||
|
ErrorCodePERSON_ID_NOT_FOUND ErrorCode = "PERSON_ID_NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeEXPIRE_DATE_BAD_FORMATTED ErrorCode = "EXPIRE_DATE_BAD_FORMATTED"
|
||||||
|
|
||||||
|
ErrorCodeNAME_AND_ID_NOT_CORRESPONDS ErrorCode = "NAME_AND_ID_NOT_CORRESPONDS"
|
||||||
|
|
||||||
|
ErrorCodeEGROUP_RECENTLY_DELETED ErrorCode = "EGROUP_RECENTLY_DELETED"
|
||||||
|
|
||||||
|
ErrorCodeEMAIL_PROP_ARCHIVE_NOT_VALID ErrorCode = "EMAIL_PROP_ARCHIVE_NOT_VALID"
|
||||||
|
|
||||||
|
ErrorCodeEMAIL_PROP_MAIL_SIZE_NOT_VALID ErrorCode = "EMAIL_PROP_MAIL_SIZE_NOT_VALID"
|
||||||
|
|
||||||
|
ErrorCodeEXPIRATION_DATE_MANDATORY ErrorCode = "EXPIRATION_DATE_MANDATORY"
|
||||||
|
|
||||||
|
ErrorCodeEXPIRATION_DATE_NOT_VALID ErrorCode = "EXPIRATION_DATE_NOT_VALID"
|
||||||
|
|
||||||
|
ErrorCodeINTERNAL_DB_ERROR ErrorCode = "INTERNAL_DB_ERROR"
|
||||||
|
|
||||||
|
ErrorCodeDATABASE_CONFIGURATION_NOT_FOUND ErrorCode = "DATABASE_CONFIGURATION_NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeEGROUP_MEMBER_OF_ANOTHER ErrorCode = "EGROUP_MEMBER_OF_ANOTHER"
|
||||||
|
|
||||||
|
ErrorCodeNOT_MAILING_SEGURITY_USAGE ErrorCode = "NOT_MAILING_SEGURITY_USAGE"
|
||||||
|
|
||||||
|
ErrorCodeIS_ALREADY_MEMBER ErrorCode = "IS_ALREADY_MEMBER"
|
||||||
|
|
||||||
|
ErrorCodeTOPIC_ALREADY_EXISTS ErrorCode = "TOPIC_ALREADY_EXISTS"
|
||||||
|
|
||||||
|
ErrorCodeALIAS_MUST_HAVE_HYPHEN ErrorCode = "ALIAS_MUST_HAVE_HYPHEN"
|
||||||
|
|
||||||
|
ErrorCodeALIAS_ALREADY_EXISTS ErrorCode = "ALIAS_ALREADY_EXISTS"
|
||||||
|
|
||||||
|
ErrorCodeNAME_ALREADY_RESERVED ErrorCode = "NAME_ALREADY_RESERVED"
|
||||||
|
|
||||||
|
ErrorCodeNAME_TOO_LONG ErrorCode = "NAME_TOO_LONG"
|
||||||
|
|
||||||
|
ErrorCodeEGROUP_ALREADY_EXISTS ErrorCode = "EGROUP_ALREADY_EXISTS"
|
||||||
|
|
||||||
|
ErrorCodeMEMBER_NOT_FOUND ErrorCode = "MEMBER_NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeALIAS_NOT_FOUND ErrorCode = "ALIAS_NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeSELF_EGROUP_ALREADY_EXISTS ErrorCode = "SELF_EGROUP_ALREADY_EXISTS"
|
||||||
|
|
||||||
|
ErrorCodeALREADY_ACTIVE ErrorCode = "ALREADY_ACTIVE"
|
||||||
|
|
||||||
|
ErrorCodeIS_BLOCKED ErrorCode = "IS_BLOCKED"
|
||||||
|
|
||||||
|
ErrorCodeMUST_BE_MODERATOR ErrorCode = "MUST_BE_MODERATOR"
|
||||||
|
|
||||||
|
ErrorCodeSTATUS_CHANGE_NOT_ALLOWED ErrorCode = "STATUS_CHANGE_NOT_ALLOWED"
|
||||||
|
|
||||||
|
ErrorCodeEXPIRATION_DATE_CANT_BE_PROLONGUED ErrorCode = "EXPIRATION_DATE_CANT_BE_PROLONGUED"
|
||||||
|
|
||||||
|
ErrorCodeBLOCKING_REASON_UNDEFINED ErrorCode = "BLOCKING_REASON_UNDEFINED"
|
||||||
|
|
||||||
|
ErrorCodeUSAGE_TYPE_NOT_VALID ErrorCode = "USAGE_TYPE_NOT_VALID"
|
||||||
|
|
||||||
|
ErrorCodeNOT_LOGGED ErrorCode = "NOT_LOGGED"
|
||||||
|
|
||||||
|
ErrorCodeALREADY_DELETED ErrorCode = "ALREADY_DELETED"
|
||||||
|
|
||||||
|
ErrorCodeNAME_MUST_HAVE_HYPHEN ErrorCode = "NAME_MUST_HAVE_HYPHEN"
|
||||||
|
|
||||||
|
ErrorCodeIS_ALREADY_ALLOWED_TO_POST ErrorCode = "IS_ALREADY_ALLOWED_TO_POST"
|
||||||
|
|
||||||
|
ErrorCodeHAS_ALREADY_PRIVILEGE ErrorCode = "HAS_ALREADY_PRIVILEGE"
|
||||||
|
|
||||||
|
ErrorCodeOWNER_ID_NOT_FOUND ErrorCode = "OWNER_ID_NOT_FOUND"
|
||||||
|
|
||||||
|
ErrorCodeWARNING ErrorCode = "WARNING"
|
||||||
|
|
||||||
|
ErrorCodeUNEXPECTED_ERROR ErrorCode = "UNEXPECTED_ERROR"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UpdateEmailPropertiesRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema UpdateEmailPropertiesRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
|
||||||
|
EmailProperties *EmailPropertiesType `xml:"emailProperties,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpdateEmailPropertiesResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema UpdateEmailPropertiesResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddEgroupEmailMembersRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema AddEgroupEmailMembersRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
|
||||||
|
OverwriteMembers bool `xml:"overwriteMembers,omitempty"`
|
||||||
|
|
||||||
|
Emails []string `xml:"emails,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddEgroupEmailMembersResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema AddEgroupEmailMembersResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddEgroupMembersRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema AddEgroupMembersRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
|
||||||
|
OverwriteMembers bool `xml:"overwriteMembers,omitempty"`
|
||||||
|
|
||||||
|
Members []*MemberType `xml:"members,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddEgroupMembersResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema AddEgroupMembersResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveEgroupEmailMembersRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema RemoveEgroupEmailMembersRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
|
||||||
|
Emails []string `xml:"emails,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveEgroupEmailMembersResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema RemoveEgroupEmailMembersResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveEgroupMembersRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema RemoveEgroupMembersRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
|
||||||
|
Members []*MemberType `xml:"members,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveEgroupMembersResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema RemoveEgroupMembersResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetEgroupsUserOwnOrManageRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema GetEgroupsUserOwnOrManageRequest"`
|
||||||
|
|
||||||
|
UserName string `xml:"userName,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetEgroupsUserOwnOrManageResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema GetEgroupsUserOwnOrManageResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
|
||||||
|
Results []*EgroupType `xml:"results,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChangeExternalEmailAddressRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema ChangeExternalEmailAddressRequest"`
|
||||||
|
|
||||||
|
OldEmail string `xml:"oldEmail,omitempty"`
|
||||||
|
|
||||||
|
NewEmail string `xml:"newEmail,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChangeExternalEmailAddressResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema ChangeExternalEmailAddressResponse"`
|
||||||
|
|
||||||
|
Result int32 `xml:"result,omitempty"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FindEgroupByNameRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema FindEgroupByNameRequest"`
|
||||||
|
|
||||||
|
Name string `xml:"name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FindEgroupByNameResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema FindEgroupByNameResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
|
||||||
|
Result *EgroupType `xml:"result,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FindEgroupByIdRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema FindEgroupByIdRequest"`
|
||||||
|
|
||||||
|
Id int64 `xml:"id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FindEgroupByIdResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema FindEgroupByIdResponse"`
|
||||||
|
|
||||||
|
Result *EgroupType `xml:"result,omitempty"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteEgroupRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema DeleteEgroupRequest"`
|
||||||
|
|
||||||
|
EgroupName string `xml:"egroupName,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteEgroupResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema DeleteEgroupResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SynchronizeEgroupRequest struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema SynchronizeEgroupRequest"`
|
||||||
|
|
||||||
|
Egroup *EgroupType `xml:"egroup,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SynchronizeEgroupResponse struct {
|
||||||
|
XMLName xml.Name `xml:"https://foundservices.cern.ch/ws/egroups/v1/schema/EgroupsServicesSchema SynchronizeEgroupResponse"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transactionId,omitempty"`
|
||||||
|
|
||||||
|
Error *ErrorType `xml:"error,omitempty"`
|
||||||
|
|
||||||
|
Warnings []*ErrorType `xml:"warnings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type EgroupType struct {
|
||||||
|
Name string `xml:"Name,omitempty"`
|
||||||
|
|
||||||
|
Aliases []string `xml:"Aliases,omitempty"`
|
||||||
|
|
||||||
|
ID int64 `xml:"ID,omitempty"`
|
||||||
|
|
||||||
|
Type *EgroupTypeCode `xml:"Type,omitempty"`
|
||||||
|
|
||||||
|
Status *StatusCode `xml:"Status,omitempty"`
|
||||||
|
|
||||||
|
BlockingReason *BlockingReasonCode `xml:"BlockingReason,omitempty"`
|
||||||
|
|
||||||
|
Usage *UsageCode `xml:"Usage,omitempty"`
|
||||||
|
|
||||||
|
Topic string `xml:"Topic,omitempty"`
|
||||||
|
|
||||||
|
Description string `xml:"Description,omitempty"`
|
||||||
|
|
||||||
|
Comments string `xml:"Comments,omitempty"`
|
||||||
|
|
||||||
|
ExpiryDate string `xml:"ExpiryDate,omitempty"`
|
||||||
|
|
||||||
|
Owner *UserType `xml:"Owner,omitempty"`
|
||||||
|
|
||||||
|
AdministratorEgroup string `xml:"AdministratorEgroup,omitempty"`
|
||||||
|
|
||||||
|
Privacy *PrivacyType `xml:"Privacy,omitempty"`
|
||||||
|
|
||||||
|
Selfsubscription *SelfsubscriptionType `xml:"Selfsubscription,omitempty"`
|
||||||
|
|
||||||
|
SelfsubscriptionEgroups []*SelfsubscriptionEgroupType `xml:"SelfsubscriptionEgroups,omitempty"`
|
||||||
|
|
||||||
|
EgroupsWithPrivileges []*EgroupWithPrivilegeType `xml:"EgroupsWithPrivileges,omitempty"`
|
||||||
|
|
||||||
|
Members []*MemberType `xml:"Members,omitempty"`
|
||||||
|
|
||||||
|
EmailProperties *EmailPropertiesType `xml:"EmailProperties,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ErrorType struct {
|
||||||
|
Code *ErrorCode `xml:"Code,omitempty"`
|
||||||
|
|
||||||
|
Field string `xml:"Field,omitempty"`
|
||||||
|
|
||||||
|
Message string `xml:"Message,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type EgroupWithPrivilegeType struct {
|
||||||
|
Name string `xml:"Name,omitempty"`
|
||||||
|
|
||||||
|
Privilege *PrivilegeTypeCode `xml:"Privilege,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserType struct {
|
||||||
|
PersonId int64 `xml:"PersonId,omitempty"`
|
||||||
|
|
||||||
|
Name string `xml:"Name,omitempty"`
|
||||||
|
|
||||||
|
ComputingRulesSigned bool `xml:"ComputingRulesSigned,omitempty"`
|
||||||
|
|
||||||
|
Pem string `xml:"Pem,omitempty"`
|
||||||
|
|
||||||
|
PrimaryGem *GemType `xml:"PrimaryGem,omitempty"`
|
||||||
|
|
||||||
|
CernUnit string `xml:"CernUnit,omitempty"`
|
||||||
|
|
||||||
|
CernDepartment string `xml:"CernDepartment,omitempty"`
|
||||||
|
|
||||||
|
CernGroup string `xml:"CernGroup,omitempty"`
|
||||||
|
|
||||||
|
Telephone1 string `xml:"Telephone1,omitempty"`
|
||||||
|
|
||||||
|
Fax string `xml:"Fax,omitempty"`
|
||||||
|
|
||||||
|
Building string `xml:"Building,omitempty"`
|
||||||
|
|
||||||
|
Floor string `xml:"Floor,omitempty"`
|
||||||
|
|
||||||
|
Room string `xml:"Room,omitempty"`
|
||||||
|
|
||||||
|
Mailbox string `xml:"Mailbox,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GemType struct {
|
||||||
|
EmailAddress string `xml:"EmailAddress,omitempty"`
|
||||||
|
|
||||||
|
DisplayInPhonebook bool `xml:"DisplayInPhonebook,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SelfsubscriptionEgroupType struct {
|
||||||
|
ID int64 `xml:"ID,omitempty"`
|
||||||
|
|
||||||
|
ApprovalNeeded bool `xml:"ApprovalNeeded,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MemberType struct {
|
||||||
|
ID int64 `xml:"ID,omitempty"`
|
||||||
|
|
||||||
|
Type *MemberTypeCode `xml:"Type,omitempty"`
|
||||||
|
|
||||||
|
Name string `xml:"Name,omitempty"`
|
||||||
|
|
||||||
|
Email string `xml:"Email,omitempty"`
|
||||||
|
|
||||||
|
PrimaryAccount string `xml:"PrimaryAccount,omitempty"`
|
||||||
|
|
||||||
|
Comments string `xml:"Comments,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type EmailPropertiesType struct {
|
||||||
|
MailPostingRestrictions *MailPostingRestrictionType `xml:"MailPostingRestrictions,omitempty"`
|
||||||
|
|
||||||
|
SenderAuthenticationEnabled bool `xml:"SenderAuthenticationEnabled,omitempty"`
|
||||||
|
|
||||||
|
WhoReceivesDeliveryErrors *WhoReceivesDeliveryErrorsType `xml:"WhoReceivesDeliveryErrors,omitempty"`
|
||||||
|
|
||||||
|
//MaxMailSize *PositiveInteger `xml:"MaxMailSize,omitempty"`
|
||||||
|
|
||||||
|
ArchiveProperties *ArchivePropertiesType `xml:"ArchiveProperties,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MailPostingRestrictionType struct {
|
||||||
|
PostingRestrictions *PostingRestrictionType `xml:"PostingRestrictions,omitempty"`
|
||||||
|
|
||||||
|
OtherRecipientsAllowedToPost []*MemberType `xml:"OtherRecipientsAllowedToPost,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type EgroupsService interface {
|
||||||
|
UpdateEmailProperties(request *UpdateEmailPropertiesRequest) (*UpdateEmailPropertiesResponse, error)
|
||||||
|
|
||||||
|
AddEgroupEmailMembers(request *AddEgroupEmailMembersRequest) (*AddEgroupEmailMembersResponse, error)
|
||||||
|
|
||||||
|
RemoveEgroupEmailMembers(request *RemoveEgroupEmailMembersRequest) (*RemoveEgroupEmailMembersResponse, error)
|
||||||
|
|
||||||
|
AddEgroupMembers(request *AddEgroupMembersRequest) (*AddEgroupMembersResponse, error)
|
||||||
|
|
||||||
|
RemoveEgroupMembers(request *RemoveEgroupMembersRequest) (*RemoveEgroupMembersResponse, error)
|
||||||
|
|
||||||
|
GetEgroupsUserOwnOrManage(request *GetEgroupsUserOwnOrManageRequest) (*GetEgroupsUserOwnOrManageResponse, error)
|
||||||
|
|
||||||
|
FindEgroupByName(request *FindEgroupByNameRequest) (*FindEgroupByNameResponse, error)
|
||||||
|
|
||||||
|
FindEgroupById(request *FindEgroupByIdRequest) (*FindEgroupByIdResponse, error)
|
||||||
|
|
||||||
|
ChangeExternalEmailAddress(request *ChangeExternalEmailAddressRequest) (*ChangeExternalEmailAddressResponse, error)
|
||||||
|
|
||||||
|
SynchronizeEgroup(request *SynchronizeEgroupRequest) (*SynchronizeEgroupResponse, error)
|
||||||
|
|
||||||
|
DeleteEgroup(request *DeleteEgroupRequest) (*DeleteEgroupResponse, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type egroupsService struct {
|
||||||
|
client *soap.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewEgroupsService(client *soap.Client) EgroupsService {
|
||||||
|
return &egroupsService{
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) UpdateEmailProperties(request *UpdateEmailPropertiesRequest) (*UpdateEmailPropertiesResponse, error) {
|
||||||
|
response := new(UpdateEmailPropertiesResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) AddEgroupEmailMembers(request *AddEgroupEmailMembersRequest) (*AddEgroupEmailMembersResponse, error) {
|
||||||
|
response := new(AddEgroupEmailMembersResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) RemoveEgroupEmailMembers(request *RemoveEgroupEmailMembersRequest) (*RemoveEgroupEmailMembersResponse, error) {
|
||||||
|
response := new(RemoveEgroupEmailMembersResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) AddEgroupMembers(request *AddEgroupMembersRequest) (*AddEgroupMembersResponse, error) {
|
||||||
|
response := new(AddEgroupMembersResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) RemoveEgroupMembers(request *RemoveEgroupMembersRequest) (*RemoveEgroupMembersResponse, error) {
|
||||||
|
response := new(RemoveEgroupMembersResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) GetEgroupsUserOwnOrManage(request *GetEgroupsUserOwnOrManageRequest) (*GetEgroupsUserOwnOrManageResponse, error) {
|
||||||
|
response := new(GetEgroupsUserOwnOrManageResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) FindEgroupByName(request *FindEgroupByNameRequest) (*FindEgroupByNameResponse, error) {
|
||||||
|
response := new(FindEgroupByNameResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) FindEgroupById(request *FindEgroupByIdRequest) (*FindEgroupByIdResponse, error) {
|
||||||
|
response := new(FindEgroupByIdResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) ChangeExternalEmailAddress(request *ChangeExternalEmailAddressRequest) (*ChangeExternalEmailAddressResponse, error) {
|
||||||
|
response := new(ChangeExternalEmailAddressResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) SynchronizeEgroup(request *SynchronizeEgroupRequest) (*SynchronizeEgroupResponse, error) {
|
||||||
|
response := new(SynchronizeEgroupResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *egroupsService) DeleteEgroup(request *DeleteEgroupRequest) (*DeleteEgroupResponse, error) {
|
||||||
|
response := new(DeleteEgroupResponse)
|
||||||
|
err := service.client.Call("", request, response)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
@@ -6,8 +6,11 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"cloud.google.com/go/logging"
|
"cloud.google.com/go/logging"
|
||||||
|
"example.com/cloudfunction/egroups"
|
||||||
|
"github.com/hooklift/gowsdl/soap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type reply struct {
|
type reply struct {
|
||||||
@@ -39,6 +42,29 @@ func contains(haystack []string, needle string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getCoffeeDrinkers(logger *log.Logger) []string {
|
||||||
|
username := os.Getenv("EGROUPS_USERNAME")
|
||||||
|
password := os.Getenv("EGROUPS_PASSWORD")
|
||||||
|
|
||||||
|
soapClient := soap.NewClient("https://foundservices.cern.ch:443/ws/egroups/v1/EgroupsWebService/", soap.WithBasicAuth(username, password))
|
||||||
|
egroupsClient := egroups.NewEgroupsService(soapClient)
|
||||||
|
|
||||||
|
request := egroups.FindEgroupByIdRequest{Id: 10542497}
|
||||||
|
reply, err := egroupsClient.FindEgroupById(&request)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
logger.Println("Could not get egroup members:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
drinkers := make([]string, 0)
|
||||||
|
|
||||||
|
for _, member := range reply.Result.Members {
|
||||||
|
drinkers = append(drinkers, "@"+strings.ToLower(member.PrimaryAccount))
|
||||||
|
}
|
||||||
|
|
||||||
|
return drinkers
|
||||||
|
}
|
||||||
|
|
||||||
// Coffee replies to mattermost webhooks containing valid token values
|
// Coffee replies to mattermost webhooks containing valid token values
|
||||||
func Coffee(writer http.ResponseWriter, request *http.Request) {
|
func Coffee(writer http.ResponseWriter, request *http.Request) {
|
||||||
// Create cloud logging client or default to stderr
|
// Create cloud logging client or default to stderr
|
||||||
@@ -66,7 +92,7 @@ func Coffee(writer http.ResponseWriter, request *http.Request) {
|
|||||||
if token != "" {
|
if token != "" {
|
||||||
tokens = append(tokens, token)
|
tokens = append(tokens, token)
|
||||||
} else {
|
} else {
|
||||||
stdlog.Printf("Environment variable %v is empty\n", token)
|
stdlog.Printf("Environment variable %v is not found/empty\n", token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +112,12 @@ func Coffee(writer http.ResponseWriter, request *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
text := "@omorud"
|
text := ""
|
||||||
|
|
||||||
|
for _, name := range getCoffeeDrinkers(stdlog) {
|
||||||
|
text += name + " "
|
||||||
|
}
|
||||||
|
|
||||||
url, ok := os.LookupEnv("GITHUB_URL")
|
url, ok := os.LookupEnv("GITHUB_URL")
|
||||||
if ok {
|
if ok {
|
||||||
text += " (now open source: " + url + ")"
|
text += " (now open source: " + url + ")"
|
||||||
|
|||||||
30
src/go.mod
30
src/go.mod
@@ -1,5 +1,31 @@
|
|||||||
module example.com/cloudfunction
|
module example.com/cloudfunction
|
||||||
|
|
||||||
go 1.13
|
go 1.19
|
||||||
|
|
||||||
require cloud.google.com/go/logging v1.6.1
|
require (
|
||||||
|
cloud.google.com/go/logging v1.6.1
|
||||||
|
github.com/hooklift/gowsdl v0.5.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
cloud.google.com/go v0.107.0 // indirect
|
||||||
|
cloud.google.com/go/compute v1.14.0 // indirect
|
||||||
|
cloud.google.com/go/compute/metadata v0.2.2 // indirect
|
||||||
|
cloud.google.com/go/longrunning v0.3.0 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
|
github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect
|
||||||
|
github.com/googleapis/gax-go/v2 v2.7.0 // indirect
|
||||||
|
go.opencensus.io v0.24.0 // indirect
|
||||||
|
golang.org/x/net v0.4.0 // indirect
|
||||||
|
golang.org/x/oauth2 v0.3.0 // indirect
|
||||||
|
golang.org/x/sync v0.1.0 // indirect
|
||||||
|
golang.org/x/sys v0.3.0 // indirect
|
||||||
|
golang.org/x/text v0.5.0 // indirect
|
||||||
|
google.golang.org/api v0.104.0 // indirect
|
||||||
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
|
google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect
|
||||||
|
google.golang.org/grpc v1.51.0 // indirect
|
||||||
|
google.golang.org/protobuf v1.28.1 // indirect
|
||||||
|
)
|
||||||
|
|||||||
955
src/go.sum
955
src/go.sum
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user