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
|
||||
entry_point: Coffee
|
||||
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
|
||||
memory_mb: 128
|
||||
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"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"cloud.google.com/go/logging"
|
||||
"example.com/cloudfunction/egroups"
|
||||
"github.com/hooklift/gowsdl/soap"
|
||||
)
|
||||
|
||||
type reply struct {
|
||||
@@ -39,6 +42,29 @@ func contains(haystack []string, needle string) bool {
|
||||
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
|
||||
func Coffee(writer http.ResponseWriter, request *http.Request) {
|
||||
// Create cloud logging client or default to stderr
|
||||
@@ -66,7 +92,7 @@ func Coffee(writer http.ResponseWriter, request *http.Request) {
|
||||
if token != "" {
|
||||
tokens = append(tokens, token)
|
||||
} 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
|
||||
}
|
||||
|
||||
text := "@omorud"
|
||||
text := ""
|
||||
|
||||
for _, name := range getCoffeeDrinkers(stdlog) {
|
||||
text += name + " "
|
||||
}
|
||||
|
||||
url, ok := os.LookupEnv("GITHUB_URL")
|
||||
if ok {
|
||||
text += " (now open source: " + url + ")"
|
||||
|
||||
30
src/go.mod
30
src/go.mod
@@ -1,5 +1,31 @@
|
||||
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