• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

evolvedbinary / elemental / 982

29 Apr 2025 08:34PM UTC coverage: 56.409% (+0.007%) from 56.402%
982

push

circleci

adamretter
[feature] Improve README.md badges

28451 of 55847 branches covered (50.94%)

Branch coverage included in aggregate %.

77468 of 131924 relevant lines covered (58.72%)

0.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/extensions/modules/mail/src/main/java/org/exist/xquery/modules/mail/MailSessionFunctions.java
1
/*
2
 * Elemental
3
 * Copyright (C) 2024, Evolved Binary Ltd
4
 *
5
 * admin@evolvedbinary.com
6
 * https://www.evolvedbinary.com | https://www.elemental.xyz
7
 *
8
 * Use of this software is governed by the Business Source License 1.1
9
 * included in the LICENSE file and at www.mariadb.com/bsl11.
10
 *
11
 * Change Date: 2028-04-27
12
 *
13
 * On the date above, in accordance with the Business Source License, use
14
 * of this software will be governed by the Apache License, Version 2.0.
15
 *
16
 * Additional Use Grant: Production use of the Licensed Work for a permitted
17
 * purpose. A Permitted Purpose is any purpose other than a Competing Use.
18
 * A Competing Use means making the Software available to others in a commercial
19
 * product or service that: substitutes for the Software; substitutes for any
20
 * other product or service we offer using the Software that exists as of the
21
 * date we make the Software available; or offers the same or substantially
22
 * similar functionality as the Software.
23
 *
24
 * NOTE: Parts of this file contain code from 'The eXist-db Authors'.
25
 *       The original license header is included below.
26
 *
27
 * =====================================================================
28
 *
29
 * eXist-db Open Source Native XML Database
30
 * Copyright (C) 2001 The eXist-db Authors
31
 *
32
 * info@exist-db.org
33
 * http://www.exist-db.org
34
 *
35
 * This library is free software; you can redistribute it and/or
36
 * modify it under the terms of the GNU Lesser General Public
37
 * License as published by the Free Software Foundation; either
38
 * version 2.1 of the License, or (at your option) any later version.
39
 *
40
 * This library is distributed in the hope that it will be useful,
41
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
43
 * Lesser General Public License for more details.
44
 *
45
 * You should have received a copy of the GNU Lesser General Public
46
 * License along with this library; if not, write to the Free Software
47
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
48
 */
49
package org.exist.xquery.modules.mail;
50

51

52
import java.util.Properties;
53

54
import jakarta.mail.Authenticator;
55
import jakarta.mail.PasswordAuthentication;
56
import jakarta.mail.Session;
57

58
import org.apache.logging.log4j.LogManager;
59
import org.apache.logging.log4j.Logger;
60
import org.exist.dom.QName;
61
import org.exist.util.ParametersExtractor;
62
import org.exist.xquery.BasicFunction;
63
import org.exist.xquery.Cardinality;
64
import org.exist.xquery.FunctionSignature;
65
import org.exist.xquery.XPathException;
66
import org.exist.xquery.XQueryContext;
67
import org.exist.xquery.value.FunctionParameterSequenceType;
68
import org.exist.xquery.value.FunctionReturnSequenceType;
69
import org.exist.xquery.value.IntegerValue;
70
import org.exist.xquery.value.NodeValue;
71
import org.exist.xquery.value.Sequence;
72
import org.exist.xquery.value.SequenceType;
73
import org.exist.xquery.value.Type;
74

75
import org.w3c.dom.Element;
76

77
/**
78
 * eXist Mail Module Extension GetSession
79
 * 
80
 * Get a mail session
81
 * 
82
 * @author <a href="mailto:andrzej@chaeron.com">Andrzej Taramina</a>
83
 * @author <a href="mailto:josemariafg@gmail.com">José María Fernández</a>
84
 * @serial 2009-03-12
85
 * @version 1.3
86
 *
87
 * @see org.exist.xquery.BasicFunction#BasicFunction(org.exist.xquery.XQueryContext, org.exist.xquery.FunctionSignature)
88
 */
89
public class MailSessionFunctions extends BasicFunction
90
{
91
        protected static final Logger logger = LogManager.getLogger(MailSessionFunctions.class);
×
92

93
        public final static FunctionSignature signatures[] = {
×
94
                new FunctionSignature(
95
                        new QName( "get-mail-session", MailModule.NAMESPACE_URI, MailModule.PREFIX ),
96
                        "Opens a JavaMail session.",
97
                        new SequenceType[]
98
                        {
99
                                new FunctionParameterSequenceType( "properties", Type.ELEMENT, Cardinality.ZERO_OR_ONE, "An optional JavaMail session properties in the form <properties><property name=\"\" value=\"\"/></properties>.  The JavaMail properties are spelled out in Appendix A of the JavaMail specifications." )
100
                        },
101
                        new FunctionReturnSequenceType( Type.LONG, Cardinality.ZERO_OR_ONE, "an xs:long representing the session handle." )
102
                        ),
103
                
104
    new FunctionSignature(
105
        new QName( "get-mail-session", MailModule.NAMESPACE_URI, MailModule.PREFIX ),
106
        "Opens a JavaMail session with authentication.",
107
        new SequenceType[]
108
        {
109
          new FunctionParameterSequenceType( "properties", Type.ELEMENT, Cardinality.ZERO_OR_ONE, "An optional JavaMail session properties in the form <properties><property name=\"\" value=\"\"/></properties>.  The JavaMail properties are spelled out in Appendix A of the JavaMail specifications." ),
110
          new FunctionParameterSequenceType( "authentication", Type.ELEMENT, Cardinality.EXACTLY_ONE, "The username and password for authentication in the form <authentication username=\"\" password=\"\"/>." )
111
        },
112
        new FunctionReturnSequenceType( Type.LONG, Cardinality.ZERO_OR_ONE, "an xs:long representing the session handle." )
113
        )
114
                };
115

116
        public MailSessionFunctions( XQueryContext context, FunctionSignature signature )
117
        {
118
                super( context, signature );
×
119
    }
×
120

121
        @Override
122
        public Sequence eval( Sequence[] args, Sequence contextSequence ) throws XPathException
123
        {
124
                Properties props = new Properties();
×
125
                
126
                if( args.length > 0 ) {
×
127
                        // try and get the session properties
128
                        props = ParametersExtractor.parseProperties( ((NodeValue) args[0].itemAt(0)).getNode() );
×
129
                }
130
                
131
                Authenticator auth = null;
×
132
                
133
                if( args.length > 1 ) {
×
134
                  // get the authentication parameters
135
                  Element authElement = (Element) ((NodeValue) args[1].itemAt(0)).getNode();
×
136
                  if( authElement != null ) {
×
137
                    String username = authElement.getAttribute("username");
×
138
                                String password = authElement.getAttribute("password");
×
139
                    if( (!username.isEmpty()) && (!password.isEmpty()) ) {
×
140
                      auth = new Authenticator() {
×
141
                                                        @Override
142
                                                protected PasswordAuthentication getPasswordAuthentication() {
143
                                                        return new PasswordAuthentication(username, password);
×
144
                                                }
145
                                        };
146
                    } else {
147
                      throw new IllegalArgumentException("'username' and 'password' attributes are mandatory in the 'authentication' element");
×
148
                    }
149
                  } else {
×
150
                    throw new IllegalArgumentException("'authentication' element missing");
×
151
                  }
152
                }
153
                
154
                Session session = Session.getInstance( props, auth );
×
155
                
156
                // store the session and return the handle of the session
157
    return new IntegerValue( this, MailModule.storeSession( context, session ), Type.LONG );
×
158
        }
159
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc