Sat, 22 May 2021 16:52:45 +0200
Renamed 'E5Utilities' to 'EricUtilities' and 'E5Network' to 'EricNetwork'.
--- a/eric7.epj Sat May 22 12:54:57 2021 +0200 +++ b/eric7.epj Sat May 22 16:52:45 2021 +0200 @@ -2,7 +2,7 @@ "header": { "comment": "eric project file for project eric7", "copyright": "Copyright (C) 2021 Detlev Offenbach, detlev@die-offenbachs.de", - "saved": "2021-05-22, 11:10:19" + "saved": "2021-05-22, 16:56:28" }, "project": { "AUTHOR": "Detlev Offenbach", @@ -294,11 +294,6 @@ "eric7/E5Gui/E5StringListEditWidget.ui", "eric7/E5Gui/E5ToolBarDialog.ui", "eric7/E5Gui/E5ZoomWidget.ui", - "eric7/E5Network/E5NetworkHeaderDetailsDialog.ui", - "eric7/E5Network/E5SslCertificateSelectionDialog.ui", - "eric7/E5Network/E5SslCertificatesDialog.ui", - "eric7/E5Network/E5SslCertificatesInfoDialog.ui", - "eric7/E5Network/E5SslCertificatesInfoWidget.ui", "eric7/Graphics/UMLSceneSizeDialog.ui", "eric7/HexEdit/HexEditGotoWidget.ui", "eric7/HexEdit/HexEditReplaceWidget.ui", @@ -710,7 +705,11 @@ "eric7/WebBrowser/WebBrowserClearPrivateDataDialog.ui", "eric7/WebBrowser/WebBrowserLanguagesDialog.ui", "eric7/WebBrowser/ZoomManager/ZoomValuesDialog.ui", - "eric7/MicroPython/ConnectionSelectionDialog.ui" + "eric7/MicroPython/ConnectionSelectionDialog.ui", + "eric7/EricNetwork/EricSslCertificateSelectionDialog.ui", + "eric7/EricNetwork/EricSslCertificatesDialog.ui", + "eric7/EricNetwork/EricSslCertificatesInfoDialog.ui", + "eric7/EricNetwork/EricSslCertificatesInfoWidget.ui" ], "HASH": "df7daa8781250f7664e6ecaeaf1361fa2efd39ee", "IDLPARAMS": { @@ -769,8 +768,6 @@ "eric7/DesignerTemplates", "eric7/Documentation/Help", "eric7/Documentation/Source", - "eric7/E5Network/data/effective_tld_names.dat", - "eric7/E5Network/data/test_psl.txt", "eric7/IconEditor/cursors/aim-cursor.xpm", "eric7/IconEditor/cursors/colorpicker-cursor.xpm", "eric7/IconEditor/cursors/eraser-cursor.xpm", @@ -931,7 +928,9 @@ "eric7/DebugClients/Python/coverage/doc/CHANGES.rst", "eric7/DebugClients/Python/coverage/doc/LICENSE.txt", "eric7/DebugClients/Python/coverage/doc/CONTRIBUTORS.txt", - "eric7/DebugClients/Python/coverage/doc/README.rst" + "eric7/DebugClients/Python/coverage/doc/README.rst", + "eric7/EricNetwork/data/effective_tld_names.dat", + "eric7/EricNetwork/data/test_psl.txt" ], "OTHERTOOLSPARMS": { "CodeMetrics": { @@ -1122,27 +1121,6 @@ "eric7/E5Gui/E5TreeWidget.py", "eric7/E5Gui/E5ZoomWidget.py", "eric7/E5Gui/__init__.py", - "eric7/E5Network/E5Ftp.py", - "eric7/E5Network/E5GoogleMail.py", - "eric7/E5Network/E5GoogleMailHelpers.py", - "eric7/E5Network/E5NetworkHeaderDetailsDialog.py", - "eric7/E5Network/E5NetworkProxyFactory.py", - "eric7/E5Network/E5RFC6266.py", - "eric7/E5Network/E5SslCertificateSelectionDialog.py", - "eric7/E5Network/E5SslCertificatesDialog.py", - "eric7/E5Network/E5SslCertificatesInfoDialog.py", - "eric7/E5Network/E5SslCertificatesInfoWidget.py", - "eric7/E5Network/E5SslErrorHandler.py", - "eric7/E5Network/E5SslInfoWidget.py", - "eric7/E5Network/E5SslUtilities.py", - "eric7/E5Network/E5TldExtractor.py", - "eric7/E5Network/E5UrlInfo.py", - "eric7/E5Network/E5XmlRpcClient.py", - "eric7/E5Network/__init__.py", - "eric7/E5Network/data/__init__.py", - "eric7/E5Utilities/E5Cache.py", - "eric7/E5Utilities/E5MutexLocker.py", - "eric7/E5Utilities/__init__.py", "eric7/Globals/AppInfo.py", "eric7/Globals/__init__.py", "eric7/Graphics/ApplicationDiagramBuilder.py", @@ -2207,8 +2185,6 @@ "eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsFunctionVisitor.py", "eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsEnums.py", "eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsCheckerDefaults.py", - "eric7/E5Network/E5JsonClient.py", - "eric7/E5Network/E5JsonServer.py", "eric7/eric7_api.py", "eric7/eric7_browser.py", "eric7/eric7_browser.pyw", @@ -2268,7 +2244,27 @@ "eric7/EricXML/TemplatesReader.py", "eric7/EricXML/UserProjectReader.py", "eric7/EricXML/XMLStreamReaderBase.py", - "eric7/EricXML/__init__.py" + "eric7/EricXML/__init__.py", + "eric7/EricUtilities/__init__.py", + "eric7/EricUtilities/EricMutexLocker.py", + "eric7/EricUtilities/EricCache.py", + "eric7/EricNetwork/__init__.py", + "eric7/EricNetwork/data/__init__.py", + "eric7/EricNetwork/EricFtp.py", + "eric7/EricNetwork/EricGoogleMail.py", + "eric7/EricNetwork/EricGoogleMailHelpers.py", + "eric7/EricNetwork/EricJsonClient.py", + "eric7/EricNetwork/EricJsonServer.py", + "eric7/EricNetwork/EricNetworkProxyFactory.py", + "eric7/EricNetwork/EricSslCertificateSelectionDialog.py", + "eric7/EricNetwork/EricSslCertificatesDialog.py", + "eric7/EricNetwork/EricSslCertificatesInfoDialog.py", + "eric7/EricNetwork/EricSslCertificatesInfoWidget.py", + "eric7/EricNetwork/EricSslErrorHandler.py", + "eric7/EricNetwork/EricSslInfoWidget.py", + "eric7/EricNetwork/EricSslUtilities.py", + "eric7/EricNetwork/EricTldExtractor.py", + "eric7/EricNetwork/EricUrlInfo.py" ], "SPELLEXCLUDES": "Dictionaries/excludes.dic", "SPELLLANGUAGE": "en_US",
--- a/eric7/E5Network/E5Ftp.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,369 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing an extension to the Python FTP class to support FTP -proxies. -""" - -import enum -import ftplib # secok -from socket import _GLOBAL_DEFAULT_TIMEOUT - - -class E5FtpProxyError(ftplib.Error): - """ - Class to signal an error related to proxy configuration. - - The error message starts with a three digit error code followed by a - space and the error string. Supported error codes are: - <ul> - <li>910: proxy error; the second number gives the category of the proxy - error. The original response from the proxy is appended in the next - line.</li> - <li>930: proxy error; the second number gives the category of the proxy - error. The original response from the proxy is appended in the next - line.</li> - <li>940: proxy error; the second number gives the category of the proxy - error. The original response from the proxy is appended in the next - line.</li> - <li>950: proxy error; the second number gives the category of the proxy - error. The original response from the proxy is appended in the next - line.</li> - <li>990: proxy usage is enabled but no proxy host given</li> - <li>991: proxy usage is enabled but no proxy user given</li> - <li>992: proxy usage is enabled but no proxy password given</li> - </ul> - """ - pass - - -class E5FtpProxyType(enum.Enum): - """ - Class defining the supported FTP proxy types. - """ - NO_PROXY = 0 # no proxy - NON_AUTHORIZING = 1 # non authorizing proxy - USER_SERVER = 2 # proxy login first, than user@remote.host - SITE = 3 # proxy login first, than use SITE command - OPEN = 4 # proxy login first, than use OPEN command - USER_PROXYUSER_SERVER = 5 # one login for both - PROXYUSER_SERVER = 6 - # proxy login with remote host given, than normal remote login - AUTH_RESP = 7 # authenticate to proxy with AUTH and RESP commands - BLUECOAT = 8 # bluecoat proxy - - -class E5Ftp(ftplib.FTP): - """ - Class implementing an extension to the Python FTP class to support FTP - proxies. - """ - def __init__(self, host="", user="", password="", acct="", # secok - proxyType=E5FtpProxyType.NO_PROXY, proxyHost="", - proxyPort=ftplib.FTP_PORT, proxyUser="", proxyPassword="", - proxyAccount="", timeout=_GLOBAL_DEFAULT_TIMEOUT): - """ - Constructor - - @param host name of the FTP host - @type str - @param user user name for login to FTP host - @type str - @param password password for login to FTP host - @type str - @param acct account for login to FTP host - @type str - @param proxyType type of the FTP proxy - @type E5FtpProxyType - @param proxyHost name of the FTP proxy - @type str - @param proxyPort port of the FTP proxy - @type int - @param proxyUser user name for login to the proxy - @type str - @param proxyPassword password for login to the proxy - @type str - @param proxyAccount accounting info for the proxy - @type str - @param timeout timeout in seconds for blocking operations - @type int - """ - super().__init__() - - self.__timeout = timeout - - self.__proxyType = proxyType - self.__proxyHost = proxyHost - self.__proxyPort = proxyPort - self.__proxyUser = proxyUser - self.__proxyPassword = proxyPassword - self.__proxyAccount = proxyAccount - - self.__host = host - self.__port = ftplib.FTP_PORT - self.__user = user - self.__password = password - self.__acct = acct - - if host: - self.connect(host) - if user: - self.login(user, password, acct) - - def setProxy(self, proxyType=E5FtpProxyType.NO_PROXY, proxyHost="", - proxyPort=ftplib.FTP_PORT, proxyUser="", proxyPassword="", - proxyAccount=""): - """ - Public method to set the proxy configuration. - - @param proxyType type of the FTP proxy - @type E5FtpProxyType - @param proxyHost name of the FTP proxy - @type str - @param proxyPort port of the FTP proxy - @type int - @param proxyUser user name for login to the proxy - @type str - @param proxyPassword password for login to the proxy - @type str - @param proxyAccount accounting info for the proxy - @type str - """ - self.__proxyType = proxyType - self.__proxyHost = proxyHost - self.__proxyPort = proxyPort - self.__proxyUser = proxyUser - self.__proxyPassword = proxyPassword - self.__proxyAccount = proxyAccount - - def setProxyAuthentication(self, proxyUser="", proxyPassword="", - proxyAccount=""): - """ - Public method to set the proxy authentication info. - - @param proxyUser user name for login to the proxy - @type str - @param proxyPassword password for login to the proxy - @type str - @param proxyAccount accounting info for the proxy - @type str - """ - self.__proxyUser = proxyUser - self.__proxyPassword = proxyPassword - self.__proxyAccount = proxyAccount - - def connect(self, host="", port=0, timeout=-999): - """ - Public method to connect to the given FTP server. - - This extended method connects to the proxy instead of the given host, - if a proxy is to be used. It throws an exception, if the proxy data - is incomplete. - - @param host name of the FTP host - @type str - @param port port of the FTP host - @type int - @param timeout timeout in seconds for blocking operations - @type int - @return welcome message of the server - @rtype str - @exception E5FtpProxyError raised to indicate a proxy related issue - """ - if host: - self.__host = host - if port: - self.__port = port - if timeout != -999: - self.__timeout = timeout - - if self.__proxyType != E5FtpProxyType.NO_PROXY: - if not self.__proxyHost: - raise E5FtpProxyError( - "990 Proxy usage requested, but no proxy host given.") - - return super().connect( - self.__proxyHost, self.__proxyPort, self.__timeout) - else: - return super().connect( - self.__host, self.__port, self.__timeout) - - def login(self, user="", password="", acct=""): # secok - """ - Public method to login to the FTP server. - - This extended method respects the FTP proxy configuration. There are - many different FTP proxy products available. But unfortunately there - is no standard for how o traverse a FTP proxy. The lis below shows - the sequence of commands used. - - <table> - <tr><td>user</td><td>Username for remote host</td></tr> - <tr><td>pass</td><td>Password for remote host</td></tr> - <tr><td>pruser</td><td>Username for FTP proxy</td></tr> - <tr><td>prpass</td><td>Password for FTP proxy</td></tr> - <tr><td>remote.host</td><td>Hostname of the remote FTP server</td> - </tr> - </table> - - <dl> - <dt>E5FtpProxyType.NO_PROXY:</dt> - <dd> - USER user<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.NON_AUTHORIZING:</dt> - <dd> - USER user@remote.host<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.USER_SERVER:</dt> - <dd> - USER pruser<br/> - PASS prpass<br/> - USER user@remote.host<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.SITE:</dt> - <dd> - USER pruser<br/> - PASS prpass<br/> - SITE remote.site<br/> - USER user<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.OPEN:</dt> - <dd> - USER pruser<br/> - PASS prpass<br/> - OPEN remote.site<br/> - USER user<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.USER_PROXYUSER_SERVER:</dt> - <dd> - USER user@pruser@remote.host<br/> - PASS pass@prpass - </dd> - <dt>E5FtpProxyType.PROXYUSER_SERVER:</dt> - <dd> - USER pruser@remote.host<br/> - PASS prpass<br/> - USER user<br/> - PASS pass - </dd> - <dt>E5FtpProxyType.AUTH_RESP:</dt> - <dd> - USER user@remote.host<br/> - PASS pass<br/> - AUTH pruser<br/> - RESP prpass - </dd> - <dt>E5FtpProxyType.BLUECOAT:</dt> - <dd> - USER user@remote.host pruser<br/> - PASS pass<br/> - ACCT prpass - </dd> - </dl> - - @param user username for the remote host - @type str - @param password password for the remote host - @type str - @param acct accounting information for the remote host - @type str - @return response sent by the remote host - @rtype str - @exception E5FtpProxyError raised to indicate a proxy related issue - @exception ftplib.error_reply raised to indicate an FTP error reply - """ - if not user: - user = "anonymous" - if not password: - # make sure it is a string - password = "" # secok - if not acct: - # make sure it is a string - acct = "" - if user == "anonymous" and password in {'', '-'}: - password += "anonymous@" - - if self.__proxyType != E5FtpProxyType.NO_PROXY: - if self.__proxyType != E5FtpProxyType.NON_AUTHORIZING: - # check, if a valid proxy configuration is known - if not self.__proxyUser: - raise E5FtpProxyError( - "991 Proxy usage requested, but no proxy user given") - if not self.__proxyPassword: - raise E5FtpProxyError( - "992 Proxy usage requested, but no proxy password" - " given") - - if self.__proxyType in [E5FtpProxyType.NON_AUTHORIZING, - E5FtpProxyType.AUTH_RESP, - E5FtpProxyType.BLUECOAT]: - user += "@" + self.__host - if self.__proxyType == E5FtpProxyType.BLUECOAT: - user += " " + self.__proxyUser - acct = self.__proxyPassword - elif self.__proxyType == E5FtpProxyType.USER_PROXYUSER_SERVER: - user = "{0}@{1}@{2}".format( - user, self.__proxyUser, self.__host) - password = "{0}@{1}".format(password, self.__proxyPassword) - else: - pruser = self.__proxyUser - if self.__proxyType == E5FtpProxyType.USER_SERVER: - user += "@" + self.__host - elif self.__proxyType == E5FtpProxyType.PROXYUSER_SERVER: - pruser += "@" + self.__host - - # authenticate to the proxy first - presp = self.sendcmd("USER " + pruser) - if presp[0] == "3": - presp = self.sendcmd("PASS " + self.__proxyPassword) - if presp[0] == "3" and self.__proxyAccount: - presp = self.sendcmd("ACCT " + self.__proxyAccount) - if presp[0] != "2": - raise E5FtpProxyError( - "9{0}0 Error authorizing at proxy\n{1}".format( - presp[0], presp)) - - if self.__proxyType == E5FtpProxyType.SITE: - # send SITE command - presp = self.sendcmd("SITE " + self.__host) - if presp[0] != "2": - raise E5FtpProxyError( - "9{0}0 Error sending SITE command\n{1}".format( - presp[0], presp)) - elif self.__proxyType == E5FtpProxyType.OPEN: - # send OPEN command - presp = self.sendcmd("OPEN " + self.__host) - if presp[0] != "2": - raise E5FtpProxyError( - "9{0}0 Error sending OPEN command\n{1}".format( - presp[0], presp)) - - # authenticate to the remote host or combined to proxy and remote host - resp = self.sendcmd("USER " + user) - if resp[0] == "3": - resp = self.sendcmd("PASS " + password) - if resp[0] == "3": - resp = self.sendcmd("ACCT " + acct) - if resp[0] != "2": - raise ftplib.error_reply(resp) # secok - - if self.__proxyType == E5FtpProxyType.AUTH_RESP: - # authorize to the FTP proxy - presp = self.sendcmd("AUTH " + self.__proxyUser) - if presp[0] == "3": - presp = self.sendcmd("RESP " + self.__proxyPassword) - if presp[0] != "2": - raise E5FtpProxyError( - "9{0}0 Error authorizing at proxy\n{1}".format( - presp[0], presp)) - - return resp
--- a/eric7/E5Network/E5GoogleMail.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,359 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to send bug reports. -""" - -import os -import base64 -import json -import datetime -import contextlib - -from googleapiclient import discovery -from google.oauth2.credentials import Credentials -from requests_oauthlib import OAuth2Session - -from PyQt6.QtCore import pyqtSlot, pyqtSignal, QObject, QUrl, QUrlQuery -from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout - -from E5Gui.E5TextInputDialog import E5TextInputDialog - -import Globals - -from .E5GoogleMailHelpers import ( - CLIENT_SECRET_FILE, SCOPES, TOKEN_FILE, APPLICATION_NAME -) - - -class E5GoogleMailAuthBrowser(QDialog): - """ - Class implementing a simple web browser to perform the OAuth2 - authentication process. - - @signal approvalCodeReceived(str) emitted to indicate the receipt of the - approval code - """ - approvalCodeReceived = pyqtSignal(str) - - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent widget - @type QWidget - """ - super().__init__(parent) - - self.__layout = QVBoxLayout(self) - - from PyQt6.QtWebEngineWidgets import QWebEngineView - self.__browser = QWebEngineView(self) - self.__browser.titleChanged.connect(self.__titleChanged) - self.__browser.loadFinished.connect(self.__pageLoadFinished) - self.__layout.addWidget(self.__browser) - - self.__buttonBox = QDialogButtonBox( - QDialogButtonBox.StandardButton.Close) - self.__buttonBox.rejected.connect(self.reject) - self.__layout.addWidget(self.__buttonBox) - - self.resize(600, 700) - - @pyqtSlot(str) - def __titleChanged(self, title): - """ - Private slot handling changes of the web page title. - - @param title web page title - @type str - """ - self.setWindowTitle(title) - - @pyqtSlot() - def __pageLoadFinished(self): - """ - Private slot handling the loadFinished signal. - """ - url = self.__browser.url() - if url.toString().startswith( - "https://accounts.google.com/o/oauth2/approval/v2"): - urlQuery = QUrlQuery(url) - approvalCode = urlQuery.queryItemValue( - "approvalCode", QUrl.ComponentFormattingOption.FullyDecoded) - if approvalCode: - self.approvalCodeReceived.emit(approvalCode) - self.close() - - def load(self, url): - """ - Public method to start the authorization flow by loading the given URL. - - @param url URL to be laoded - @type str or QUrl - """ - self.__browser.setUrl(QUrl(url)) - - -class E5GoogleMail(QObject): - """ - Class implementing the logic to send emails via Google Mail. - - @signal sendResult(bool, str) emitted to indicate the transmission result - and a result message - """ - sendResult = pyqtSignal(bool, str) - - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent object - @type QObject - """ - super().__init__(parent=parent) - - self.__messages = [] - - self.__session = None - self.__clientConfig = {} - - self.__browser = None - - def sendMessage(self, message): - """ - Public method to send a message via Google Mail. - - @param message email message to be sent - @type email.mime.text.MIMEBase - """ - self.__messages.append(message) - - if not self.__session: - self.__startSession() - else: - self.__doSendMessages() - - def __prepareMessage(self, message): - """ - Private method to prepare the message for sending. - - @param message message to be prepared - @type email.mime.text.MIMEBase - @return prepared message dictionary - @rtype dict - """ - messageAsBase64 = base64.urlsafe_b64encode(message.as_bytes()) - raw = messageAsBase64.decode() - return {'raw': raw} - - def __startSession(self): - """ - Private method to start an authorized session and optionally start the - authorization flow. - """ - # check for availability of secrets file - if not os.path.exists(os.path.join(Globals.getConfigDir(), - CLIENT_SECRET_FILE)): - self.sendResult.emit( - False, - self.tr("The client secrets file is not present. Has the Gmail" - " API been enabled?") - ) - return - - with open(os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE), - "r") as clientSecret: - clientData = json.load(clientSecret) - self.__clientConfig = clientData['installed'] - token = self.__loadToken() - if token is None: - # no valid OAuth2 token available - self.__session = OAuth2Session( - self.__clientConfig['client_id'], - scope=SCOPES, - redirect_uri=self.__clientConfig['redirect_uris'][0] - ) - authorizationUrl, _ = self.__session.authorization_url( - self.__clientConfig['auth_uri'], - access_type="offline", - prompt="select_account" - ) - if self.__browser is None: - with contextlib.suppress(ImportError): - self.__browser = E5GoogleMailAuthBrowser() - self.__browser.approvalCodeReceived.connect( - self.__processAuthorization) - if self.__browser: - self.__browser.show() - self.__browser.load(QUrl(authorizationUrl)) - else: - from PyQt6.QtGui import QDesktopServices - QDesktopServices.openUrl(QUrl(authorizationUrl)) - ok, authCode = E5TextInputDialog.getText( - None, - self.tr("OAuth2 Authorization Code"), - self.tr("Enter the OAuth2 authorization code:")) - if ok and authCode: - self.__processAuthorization(authCode) - else: - self.__session = None - else: - self.__session = OAuth2Session( - self.__clientConfig['client_id'], - scope=SCOPES, - redirect_uri=self.__clientConfig['redirect_uris'][0], - token=token, - auto_refresh_kwargs={ - 'client_id': self.__clientConfig['client_id'], - 'client_secret': self.__clientConfig['client_secret'], - }, - auto_refresh_url=self.__clientConfig['token_uri'], - token_updater=self.__saveToken) - self.__doSendMessages() - - @pyqtSlot(str) - def __processAuthorization(self, authCode): - """ - Private slot to process the received authorization code. - - @param authCode received authorization code - @type str - """ - self.__session.fetch_token( - self.__clientConfig['token_uri'], - client_secret=self.__clientConfig['client_secret'], - code=authCode) - self.__saveToken(self.__session.token) - - # authorization completed; now send all queued messages - self.__doSendMessages() - - def __doSendMessages(self): - """ - Private method to send all queued messages. - """ - if not self.__session: - self.sendResult.emit( - False, - self.tr("No authorized session available.") - ) - return - - try: - results = [] - credentials = self.__credentialsFromSession() - service = discovery.build('gmail', 'v1', credentials=credentials, - cache_discovery=False) - count = 0 - while self.__messages: - count += 1 - message = self.__messages.pop(0) - message1 = self.__prepareMessage(message) - service.users().messages().send( - userId="me", body=message1).execute() - results.append(self.tr("Message #{0} sent.").format(count)) - - self.sendResult.emit(True, "\n\n".join(results)) - except Exception as error: - self.sendResult.emit(False, str(error)) - - def __loadToken(self): - """ - Private method to load a token from the token file. - - @return loaded token - @rtype dict or None - """ - homeDir = os.path.expanduser('~') - credentialsDir = os.path.join(homeDir, '.credentials') - if not os.path.exists(credentialsDir): - os.makedirs(credentialsDir) - tokenPath = os.path.join(credentialsDir, TOKEN_FILE) - - if os.path.exists(tokenPath): - with open(tokenPath, "r") as tokenFile: - return json.load(tokenFile) - else: - return None - - def __saveToken(self, token): - """ - Private method to save a token to the token file. - - @param token token to be saved - @type dict - """ - homeDir = os.path.expanduser('~') - credentialsDir = os.path.join(homeDir, '.credentials') - if not os.path.exists(credentialsDir): - os.makedirs(credentialsDir) - tokenPath = os.path.join(credentialsDir, TOKEN_FILE) - - with open(tokenPath, "w") as tokenFile: - json.dump(token, tokenFile) - - def __credentialsFromSession(self): - """ - Private method to create a credentials object. - - @return created credentials object - @rtype google.oauth2.credentials.Credentials - """ - credentials = None - - if self.__clientConfig and self.__session: - token = self.__session.token - if token: - credentials = Credentials( - token['access_token'], - refresh_token=token.get('refresh_token'), - id_token=token.get('id_token'), - token_uri=self.__clientConfig['token_uri'], - client_id=self.__clientConfig['client_id'], - client_secret=self.__clientConfig['client_secret'], - scopes=SCOPES - ) - credentials.expiry = datetime.datetime.fromtimestamp( - token['expires_at']) - - return credentials - - -def GoogleMailHelp(): - """ - Module function to get some help about how to enable the Google Mail - OAuth2 service. - - @return help text - @rtype str - """ - return ( - "<h2>Steps to turn on the Gmail API</h2>" - "<ol>" - "<li>Use <a href='{0}'>this wizard</a> to create or select a project" - " in the Google Developers Console and automatically turn on the API." - " Click <b>Continue</b>, then <b>Go to credentials</b>.</li>" - "<li>At the top of the page, select the <b>OAuth consent screen</b>" - " tab. Select an <b>Email address</b>, enter a <b>Product name</b> if" - " not already set, and click the <b>Save</b> button.</li>" - "<li>Select the <b>Credentials</b> tab, click the <b>Add credentials" - "</b> button and select <b>OAuth 2.0 client ID</b>.</li>" - "<li>Select the application type <b>Other</b>, enter the name "" - "{1}", and click the <b>Create</b>" - " button.</li>" - "<li>Click <b>OK</b> to dismiss the resulting dialog.</li>" - "<li>Click the (Download JSON) button to the right of the client ID." - "</li>" - "<li>Move this file to the eric configuration directory" - " <code>{2}</code> and rename it <code>{3}</code>.</li>" - "</ol>".format( - "https://console.developers.google.com/start/api?id=gmail", - APPLICATION_NAME, - Globals.getConfigDir(), - CLIENT_SECRET_FILE - ) - )
--- a/eric7/E5Network/E5GoogleMailHelpers.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing some helpers for Google mail. -""" - -import os - -import Globals - -SCOPES = 'https://www.googleapis.com/auth/gmail.send' -CLIENT_SECRET_FILE = 'eric_client_secret.json' # secok -TOKEN_FILE = 'eric_python_email_send_token.json' # secok -APPLICATION_NAME = 'Eric Python Send Email' - -RequiredPackages = ( - "google-api-python-client", - "requests-oauthlib", -) - - -def isClientSecretFileAvailable(): - """ - Module function to check, if the client secret file has been installed. - - @return flag indicating, that the credentials file is there - @rtype bool - """ - return os.path.exists( - os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE)) - - -def getInstallCommand(): - """ - Module function to get the install command to get the Google mail support - activated. - - @return install command - @rtype str - """ - pipCommand = "pip install --upgrade {0}".format( - " ".join(RequiredPackages)) - - return pipCommand
--- a/eric7/E5Network/E5JsonClient.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing the JSON based client base class. -""" - -import io -import sys -import socket -import select -import traceback -import json -import contextlib - - -class E5JsonClient: - """ - Class implementing a JSON based client base class. - """ - def __init__(self, host, port, idString=""): - """ - Constructor - - @param host ip address the background service is listening - @type str - @param port port of the background service - @type int - @param idString assigned client id to be sent back to the server in - order to identify the connection - @type str - """ - self.__connection = socket.create_connection((host, port)) - if idString: - reply = idString + '\n' - self.__connection.sendall(reply.encode('utf8', 'backslashreplace')) - - def sendJson(self, command, params): - """ - Public method to send a single refactoring command to the server. - - @param command command name to be sent - @type str - @param params dictionary of named parameters for the command - @type dict - """ - commandDict = { - "jsonrpc": "2.0", - "method": command, - "params": params, - } - cmd = json.dumps(commandDict) + '\n' - self.__connection.sendall(cmd.encode('utf8', 'backslashreplace')) - - def __receiveJson(self): - """ - Private method to receive a JSON encode command and data from the - server. - - @return tuple containing the received command and a dictionary - containing the associated data - @rtype tuple of (str, dict) - """ - # step 1: receive the data - # The JSON RPC string is prefixed by a 9 character long length field. - length = self.__connection.recv(9) - if len(length) < 9: - # invalid length string received - return None, None - - length = int(length) - data = b'' - while len(data) < length: - newData = self.__connection.recv(length - len(data)) - if not newData: - return None, None - - data += newData - - # step 2: decode and convert the data - line = data.decode( - 'utf8', 'backslashreplace') - try: - commandDict = json.loads(line.strip()) - except (TypeError, ValueError) as err: - self.sendJson("ClientException", { - "ExceptionType": "ProtocolError", - "ExceptionValue": str(err), - "ProtocolData": line.strip(), - }) - return None, None - - method = commandDict["method"] - params = commandDict["params"] - - return method, params - - def handleCall(self, method, params): - """ - Public method to handle a method call from the server. - - Note: This is an empty implementation that must be overridden in - derived classes. - - @param method requested method name - @type str - @param params dictionary with method specific parameters - @type dict - """ - pass - - def run(self): - """ - Public method implementing the main loop of the client. - """ - try: - selectErrors = 0 - while selectErrors <= 10: # selected arbitrarily - try: - rrdy, wrdy, xrdy = select.select( - [self.__connection], [], []) - - # Just waiting for self.__connection. Therefor no check - # needed. - method, params = self.__receiveJson() - if method is None: - selectErrors += 1 - elif method == "Exit": - break - else: - self.handleCall(method, params) - - # reset select errors - selectErrors = 0 - - except (select.error, KeyboardInterrupt, socket.error): - selectErrors += 1 - - except Exception: - exctype, excval, exctb = sys.exc_info() - tbinfofile = io.StringIO() - traceback.print_tb(exctb, None, tbinfofile) - tbinfofile.seek(0) - tbinfo = tbinfofile.read() - del exctb - self.sendJson("ClientException", { - "ExceptionType": str(exctype), - "ExceptionValue": str(excval), - "Traceback": tbinfo, - }) - - # Give time to process latest response on server side - with contextlib.suppress(socket.error, OSError): - self.__connection.shutdown(socket.SHUT_RDWR) - self.__connection.close() - - def poll(self, waitMethod=""): - """ - Public method to check and receive one message (if available). - - @param waitMethod name of a method to wait for - @type str - @return dictionary containing the data of the waited for method - @rtype dict - """ - try: - if waitMethod: - rrdy, wrdy, xrdy = select.select( - [self.__connection], [], []) - else: - rrdy, wrdy, xrdy = select.select( - [self.__connection], [], [], 0) - - if self.__connection in rrdy: - method, params = self.__receiveJson() - if method is not None: - if method == "Exit": - self.__exitClient = True - elif method == waitMethod: - return params - else: - self.handleCall(method, params) - - except (select.error, KeyboardInterrupt, socket.error): - # just ignore these - pass - - except Exception: - exctype, excval, exctb = sys.exc_info() - tbinfofile = io.StringIO() - traceback.print_tb(exctb, None, tbinfofile) - tbinfofile.seek(0) - tbinfo = tbinfofile.read() - del exctb - self.sendJson("ClientException", { - "ExceptionType": str(exctype), - "ExceptionValue": str(excval), - "Traceback": tbinfo, - }) - - return None
--- a/eric7/E5Network/E5JsonServer.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing the JSON based server base class. -""" - -import contextlib -import json - -from PyQt6.QtCore import ( - pyqtSlot, QProcess, QProcessEnvironment, QCoreApplication, QEventLoop, - QTimer -) -from PyQt6.QtNetwork import QTcpServer, QHostAddress - -from E5Gui import E5MessageBox - -import Preferences -import Utilities - - -class E5JsonServer(QTcpServer): - """ - Class implementing a JSON based server base class. - """ - def __init__(self, name="", multiplex=False, parent=None): - """ - Constructor - - @param name name of the server (used for output only) - @type str - @param multiplex flag indicating a multiplexing server - @type bool - @param parent parent object - @type QObject - """ - super().__init__(parent) - - self.__name = name - self.__multiplex = multiplex - if self.__multiplex: - self.__clientProcesses = {} - self.__connections = {} - else: - self.__clientProcess = None - self.__connection = None - - # setup the network interface - networkInterface = Preferences.getDebugger("NetworkInterface") - if networkInterface == "all" or '.' in networkInterface: - # IPv4 - self.__hostAddress = '127.0.0.1' - else: - # IPv6 - self.__hostAddress = '::1' - self.listen(QHostAddress(self.__hostAddress)) - - self.newConnection.connect(self.handleNewConnection) - - port = self.serverPort() - ## Note: Need the port if client is started external in debugger. - print('JSON server ({1}) listening on: {0:d}' # __IGNORE_WARNING__ - .format(port, self.__name)) - - @pyqtSlot() - def handleNewConnection(self): - """ - Public slot for new incoming connections from a client. - """ - connection = self.nextPendingConnection() - if not connection.isValid(): - return - - if self.__multiplex: - if not connection.waitForReadyRead(3000): - return - idString = bytes(connection.readLine()).decode( - "utf-8", 'backslashreplace').strip() - if idString in self.__connections: - self.__connections[idString].close() - self.__connections[idString] = connection - else: - idString = "" - if self.__connection is not None: - self.__connection.close() - - self.__connection = connection - - connection.readyRead.connect( - lambda: self.__receiveJson(idString)) - connection.disconnected.connect( - lambda: self.__handleDisconnect(idString)) - - @pyqtSlot() - def __handleDisconnect(self, idString): - """ - Private slot handling a disconnect of the client. - - @param idString id of the connection been disconnected - @type str - """ - if idString: - if idString in self.__connections: - self.__connections[idString].close() - del self.__connections[idString] - else: - if self.__connection is not None: - self.__connection.close() - - self.__connection = None - - def connectionNames(self): - """ - Public method to get the list of active connection names. - - If this is not a multiplexing server, an empty list is returned. - - @return list of active connection names - @rtype list of str - """ - if self.__multiplex: - return list(self.__connections.keys()) - else: - return [] - - @pyqtSlot() - def __receiveJson(self, idString): - """ - Private slot handling received data from the client. - - @param idString id of the connection been disconnected - @type str - """ - if idString: - try: - connection = self.__connections[idString] - except KeyError: - connection = None - else: - connection = self.__connection - - while connection and connection.canReadLine(): - data = connection.readLine() - jsonLine = bytes(data).decode("utf-8", 'backslashreplace') - - #- print("JSON Server ({0}): {1}".format(self.__name, jsonLine)) - #- this is for debugging only - - try: - clientDict = json.loads(jsonLine.strip()) - except (TypeError, ValueError) as err: - E5MessageBox.critical( - None, - self.tr("JSON Protocol Error"), - self.tr("""<p>The response received from the client""" - """ could not be decoded. Please report""" - """ this issue with the received data to the""" - """ eric bugs email address.</p>""" - """<p>Error: {0}</p>""" - """<p>Data:<br/>{1}</p>""").format( - str(err), Utilities.html_encode(jsonLine.strip())), - E5MessageBox.Ok) - return - - self.handleCall(clientDict["method"], clientDict["params"]) - - def sendJson(self, command, params, flush=False, idString=""): - """ - Public method to send a single command to a client. - - @param command command name to be sent - @type str - @param params dictionary of named parameters for the command - @type dict - @param flush flag indicating to flush the data to the socket - @type bool - @param idString id of the connection to send data to - @type str - """ - commandDict = { - "jsonrpc": "2.0", - "method": command, - "params": params, - } - cmd = json.dumps(commandDict) + '\n' - - if idString: - try: - connection = self.__connections[idString] - except KeyError: - connection = None - else: - connection = self.__connection - - if connection is not None: - data = cmd.encode('utf8', 'backslashreplace') - length = "{0:09d}".format(len(data)) - connection.write(length.encode() + data) - if flush: - connection.flush() - - def startClient(self, interpreter, clientScript, clientArgs, idString="", - environment=None): - """ - Public method to start a client process. - - @param interpreter interpreter to be used for the client - @type str - @param clientScript path to the client script - @type str - @param clientArgs list of arguments for the client - @param idString id of the client to be started - @type str - @param environment dictionary of environment settings to pass - @type dict - @return flag indicating a successful client start and the exit code - in case of an issue - @rtype bool, int - """ - if interpreter == "" or not Utilities.isinpath(interpreter): - return False - - exitCode = None - - proc = QProcess() - proc.setProcessChannelMode( - QProcess.ProcessChannelMode.ForwardedChannels) - if environment is not None: - env = QProcessEnvironment() - for key, value in list(environment.items()): - env.insert(key, value) - proc.setProcessEnvironment(env) - args = [clientScript, self.__hostAddress, str(self.serverPort())] - if idString: - args.append(idString) - args.extend(clientArgs) - proc.start(interpreter, args) - if not proc.waitForStarted(10000): - proc = None - - if idString: - self.__clientProcesses[idString] = proc - if proc: - timer = QTimer() - timer.setSingleShot(True) - timer.start(30000) # 30s timeout - while ( - idString not in self.connectionNames() and - timer.isActive() - ): - # Give the event loop the chance to process the new - # connection of the client (= slow start). - QCoreApplication.processEvents( - QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) - - # check if client exited prematurely - if proc.state() == QProcess.ProcessState.NotRunning: - exitCode = proc.exitCode() - proc = None - self.__clientProcesses[idString] = None - break - else: - if proc: - timer = QTimer() - timer.setSingleShot(True) - timer.start(1000) # 1s timeout - while timer.isActive(): - # check if client exited prematurely - QCoreApplication.processEvents( - QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) - if proc.state() == QProcess.ProcessState.NotRunning: - exitCode = proc.exitCode() - proc = None - break - self.__clientProcess = proc - - return proc is not None, exitCode - - def stopClient(self, idString=""): - """ - Public method to stop a client process. - - @param idString id of the client to be stopped - @type str - """ - self.sendJson("Exit", {}, flush=True, idString=idString) - - if idString: - try: - connection = self.__connections[idString] - except KeyError: - connection = None - else: - connection = self.__connection - if connection is not None: - connection.waitForDisconnected() - - if idString: - with contextlib.suppress(KeyError): - if self .__clientProcesses[idString] is not None: - self .__clientProcesses[idString].close() - del self.__clientProcesses[idString] - else: - if self.__clientProcess is not None: - self.__clientProcess.close() - self.__clientProcess = None - - def stopAllClients(self): - """ - Public method to stop all clients. - """ - clientNames = self.connectionNames()[:] - for clientName in clientNames: - self.stopClient(clientName) - - ####################################################################### - ## The following methods should be overridden by derived classes - ####################################################################### - - def handleCall(self, method, params): - """ - Public method to handle a method call from the client. - - Note: This is an empty implementation that must be overridden in - derived classes. - - @param method requested method name - @type str - @param params dictionary with method specific parameters - @type dict - """ - pass
--- a/eric7/E5Network/E5NetworkHeaderDetailsDialog.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to show the data of a response or reply header. -""" - -from PyQt6.QtCore import Qt -from PyQt6.QtWidgets import QDialog - -from .Ui_E5NetworkHeaderDetailsDialog import Ui_E5NetworkHeaderDetailsDialog - - -class E5NetworkHeaderDetailsDialog(QDialog, Ui_E5NetworkHeaderDetailsDialog): - """ - Class implementing a dialog to show the data of a response or reply header. - """ - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent object (QWidget) - """ - super().__init__(parent) - self.setupUi(self) - self.setWindowFlags(Qt.WindowType.Window) - - def setData(self, name, value): - """ - Public method to set the data to display. - - @param name name of the header (string) - @param value value of the header (string) - """ - self.nameEdit.setText(name) - self.valueEdit.setPlainText(value)
--- a/eric7/E5Network/E5NetworkHeaderDetailsDialog.ui Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>E5NetworkHeaderDetailsDialog</class> - <widget class="QDialog" name="E5NetworkHeaderDetailsDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>500</width> - <height>350</height> - </rect> - </property> - <property name="windowTitle"> - <string>Header Details</string> - </property> - <property name="sizeGripEnabled"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Name:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="nameEdit"> - <property name="readOnly"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Value:</string> - </property> - </widget> - </item> - <item> - <widget class="QPlainTextEdit" name="valueEdit"> - <property name="tabChangesFocus"> - <bool>true</bool> - </property> - <property name="readOnly"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>E5NetworkHeaderDetailsDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>248</x> - <y>254</y> - </hint> - <hint type="destinationlabel"> - <x>157</x> - <y>274</y> - </hint> - </hints> - </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>E5NetworkHeaderDetailsDialog</receiver> - <slot>reject()</slot> - <hints> - <hint type="sourcelabel"> - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel"> - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> - </connections> -</ui>
--- a/eric7/E5Network/E5NetworkProxyFactory.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a network proxy factory. -""" - -import os -import re - -from PyQt6.QtCore import QUrl, QCoreApplication -from PyQt6.QtWidgets import QDialog -from PyQt6.QtNetwork import ( - QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery -) - -from E5Gui import E5MessageBox - -import Preferences -import Globals -import Utilities - - -def schemeFromProxyType(proxyType): - """ - Module function to determine the scheme name from the proxy type. - - @param proxyType type of the proxy (QNetworkProxy.ProxyType) - @return scheme (string, one of Http, Https, Ftp) - """ - scheme = "" - if proxyType == QNetworkProxy.ProxyType.HttpProxy: - scheme = "Http" - elif proxyType == QNetworkProxy.ProxyType.HttpCachingProxy: - scheme = "Https" - elif proxyType == QNetworkProxy.ProxyType.FtpCachingProxy: - scheme = "Ftp" - elif proxyType == QNetworkProxy.ProxyType.NoProxy: - scheme = "NoProxy" - return scheme - - -def proxyAuthenticationRequired(proxy, auth): - """ - Module slot to handle a proxy authentication request. - - @param proxy reference to the proxy object (QNetworkProxy) - @param auth reference to the authenticator object (QAuthenticator) - """ - info = QCoreApplication.translate( - "E5NetworkProxyFactory", - "<b>Connect to proxy '{0}' using:</b>" - ).format(Utilities.html_encode(proxy.hostName())) - - from UI.AuthenticationDialog import AuthenticationDialog - dlg = AuthenticationDialog(info, proxy.user(), True) - dlg.setData(proxy.user(), proxy.password()) - if dlg.exec() == QDialog.DialogCode.Accepted: - username, password = dlg.getData() - auth.setUser(username) - auth.setPassword(password) - if dlg.shallSave(): - scheme = schemeFromProxyType(proxy.type()) - if scheme and scheme != "NoProxy": - Preferences.setUI("ProxyUser/{0}".format(scheme), username) - Preferences.setUI("ProxyPassword/{0}".format(scheme), password) - proxy.setUser(username) - proxy.setPassword(password) - - -class HostnameMatcher: - """ - Class implementing a matcher for host names. - """ - def __init__(self, pattern): - """ - Constructor - - @param pattern pattern to be matched against - @type str - """ - self.__regExp = None - self.setPattern(pattern) - - def setPattern(self, pattern): - """ - Public method to set the match pattern. - - @param pattern pattern to be matched against - """ - self.__pattern = pattern - - if "?" in pattern or "*" in pattern: - regexp = "^.*{0}.*$".format( - pattern - .replace(".", "\\.") - .replace("*", ".*") - .replace("?", ".") - ) - self.__regExp = re.compile(regexp, re.IGNORECASE) - - def pattern(self): - """ - Public method to get the match pattern. - - @return match pattern - @rtype str - """ - return self.__pattern - - def match(self, host): - """ - Public method to test the given string. - - @param host host name to be matched - @type str - @return flag indicating a successful match - @rtype bool - """ - if self.__regExp is None: - return self.__pattern in host - - return self.__regExp.search(host) is not None - - -class E5NetworkProxyFactory(QNetworkProxyFactory): - """ - Class implementing a network proxy factory. - """ - def __init__(self): - """ - Constructor - """ - super().__init__() - - self.__hostnameMatchers = [] - self.__exceptions = "" - - def __setExceptions(self, exceptions): - """ - Private method to set the host name exceptions. - - @param exceptions list of exceptions separated by ',' - @type str - """ - self.__hostnameMatchers = [] - self.__exceptions = exceptions - for exception in self.__exceptions.split(","): - self.__hostnameMatchers.append(HostnameMatcher(exception.strip())) - - def queryProxy(self, query): - """ - Public method to determine a proxy for a given query. - - @param query reference to the query object (QNetworkProxyQuery) - @return list of proxies in order of preference (list of QNetworkProxy) - """ - if ( - query.queryType() == QNetworkProxyQuery.QueryType.UrlRequest and - query.protocolTag() in ["http", "https", "ftp"] - ): - # use proxy at all ? - if not Preferences.getUI("UseProxy"): - return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] - - # test for exceptions - exceptions = Preferences.getUI("ProxyExceptions") - if exceptions != self.__exceptions: - self.__setExceptions(exceptions) - urlHost = query.url().host() - for matcher in self.__hostnameMatchers: - if matcher.match(urlHost): - return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] - - # determine proxy - if Preferences.getUI("UseSystemProxy"): - proxyList = QNetworkProxyFactory.systemProxyForQuery(query) - if ( - not Globals.isWindowsPlatform() and - len(proxyList) == 1 and - proxyList[0].type() == QNetworkProxy.ProxyType.NoProxy - ): - # try it the Python way - # scan the environment for variables named <scheme>_proxy - # scan over whole environment to make this case insensitive - for name, value in os.environ.items(): - name = name.lower() - if ( - value and - name[-6:] == '_proxy' and - name[:-6] == query.protocolTag().lower() - ): - url = QUrl(value) - if url.scheme() in ["http", "https"]: - proxyType = QNetworkProxy.ProxyType.HttpProxy - elif url.scheme() == "ftp": - proxyType = ( - QNetworkProxy.ProxyType.FtpCachingProxy - ) - else: - proxyType = QNetworkProxy.ProxyType.HttpProxy - proxy = QNetworkProxy( - proxyType, url.host(), url.port(), - url.userName(), url.password()) - proxyList = [proxy] - break - if proxyList: - scheme = schemeFromProxyType(proxyList[0].type()) - if scheme == "": - scheme = "Http" - if scheme != "NoProxy": - proxyList[0].setUser( - Preferences.getUI("ProxyUser/{0}".format(scheme))) - proxyList[0].setPassword( - Preferences.getUI( - "ProxyPassword/{0}".format(scheme))) - return proxyList - else: - return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] - else: - if Preferences.getUI("UseHttpProxyForAll"): - protocolKey = "Http" - else: - protocolKey = query.protocolTag().capitalize() - host = Preferences.getUI("ProxyHost/{0}".format(protocolKey)) - if not host: - E5MessageBox.critical( - None, - QCoreApplication.translate( - "E5NetworkProxyFactory", - "Proxy Configuration Error"), - QCoreApplication.translate( - "E5NetworkProxyFactory", - """Proxy usage was activated""" - """ but no proxy host for protocol""" - """ '{0}' configured.""").format(protocolKey)) - return [ - QNetworkProxy(QNetworkProxy.ProxyType.DefaultProxy) - ] - else: - if protocolKey in ["Http", "Https", "Ftp"]: - if query.protocolTag() == "ftp": - proxyType = QNetworkProxy.ProxyType.FtpCachingProxy - else: - proxyType = QNetworkProxy.ProxyType.HttpProxy - proxy = QNetworkProxy( - proxyType, host, - Preferences.getUI("ProxyPort/" + protocolKey), - Preferences.getUI("ProxyUser/" + protocolKey), - Preferences.getUI("ProxyPassword/" + protocolKey)) - else: - proxy = QNetworkProxy( - QNetworkProxy.ProxyType.DefaultProxy) - return [ - proxy, - QNetworkProxy(QNetworkProxy.ProxyType.DefaultProxy) - ] - else: - return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)]
--- a/eric7/E5Network/E5RFC6266.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a Content-Disposition parser iaw. RFC 6266. -""" - -# -# This code is adapted from the rfc6266.py module of qutebrowser. -# Original copyright 2014-2015 Florian Bruhin (The Compiler) -# <mail@qutebrowser.org> -# - -import urllib.parse as parse -import collections -import string -import re - -try: - import pypeg2 as peg - - class UniqueNamespace(peg.Namespace): - """ - A pyPEG2 namespace which prevents setting a value twice. - """ - def __setitem__(self, key, value): - """ - Special method to set an item. - - @param key key for the item - @param value value of the item - """ - if key in self: - raise DuplicateParamError(key) - super().__setitem__(key, value) - - # RFC 2616 - separator_chars = "()<>@,;:\\\"/[]?={} \t" # __IGNORE_WARNING_M613__ - ctl_chars = ''.join(chr(i) for i in range(32)) + chr(127) - nontoken_chars = separator_chars + ctl_chars - - # RFC 5987 - attr_chars_nonalnum = '!#$&+-.^_`|~' - attr_chars = string.ascii_letters + string.digits + attr_chars_nonalnum - - # RFC 5987 gives this alternative construction of the token character class - token_chars = attr_chars + "*'%" # __IGNORE_WARNING_M601__ - - # Definitions from https://tools.ietf.org/html/rfc2616#section-2.2 - # token was redefined from attr_chars to avoid using AnyBut, - # which might include non-ascii octets. - token_re = '[{0}]+'.format(re.escape(token_chars)) - - class Token(str): - """ - A token (RFC 2616, Section 2.2). - """ - grammar = re.compile(token_re) - - # RFC 2616 says some linear whitespace (LWS) is in fact allowed in text - # and qdtext; however it also mentions folding that whitespace into - # a single SP (which isn't in CTL) before interpretation. - # Assume the caller already that folding when parsing headers. - - # Note: qdtext also allows non-ascii, which we choose to parse - # as ISO-8859-1; rejecting it entirely would also be permitted. - # Some broken browsers attempt encoding-sniffing, which is broken - # because the spec only allows iso, and because encoding-sniffing - # can mangle valid values. - # Everything else in this grammar (including RFC 5987 ext values) - # is in an ascii-safe encoding. - - qdtext_re = r'[^"{0}]'.format(re.escape(ctl_chars)) - quoted_pair_re = r'\\[{0}]'.format(re.escape( - ''.join(chr(i) for i in range(128)))) - - class QuotedString(str): - """ - A quoted string (RFC 2616, Section 2.2). - """ - grammar = re.compile(r'"({0}|{1})+"'.format(quoted_pair_re, qdtext_re)) - - def __str__(self): - s = super().__str__() - s = s[1:-1] # remove quotes - s = re.sub(r'\\(.)', r'\1', s) # drop backslashes - return s - - class Value(str): - """ - A value. (RFC 2616, Section 3.6). - """ - grammar = [re.compile(token_re), QuotedString] - - class Charset(str): - """ - A charset (RFC5987, Section 3.2.1). - """ - # Other charsets are forbidden, the spec reserves them - # for future evolutions. - grammar = re.compile('UTF-8|ISO-8859-1', re.I) - - class Language(str): - """ - A language-tag (RFC 5646, Section 2.1). - - Fixme: This grammar is not 100% correct yet. - https://github.com/The-Compiler/qutebrowser/issues/105 - """ - grammar = re.compile('[A-Za-z0-9-]+') - - attr_char_re = '[{0}]'.format(re.escape(attr_chars)) - hex_digit_re = '%[' + string.hexdigits + ']{2}' - - class ValueChars(str): - """ - A value of an attribute. - - Fixme: Can we merge this with Value? - https://github.com/The-Compiler/qutebrowser/issues/105 - """ - grammar = re.compile('({0}|{1})*'.format(attr_char_re, hex_digit_re)) - - class ExtValue(peg.List): - """ - An ext-value of an attribute (RFC 5987, Section 3.2). - """ - grammar = peg.contiguous(Charset, "'", peg.optional(Language), "'", - ValueChars) - - class ExtToken(peg.Symbol): - """ - A token introducing an extended value (RFC 6266, Section 4.1). - """ - regex = re.compile(token_re + r'\*') - - def __str__(self): - return super().__str__().lower() - - class NoExtToken(peg.Symbol): - """ - A token introducing a normal value (RFC 6266, Section 4.1). - """ - regex = re.compile(token_re + r'(?<!\*)') - - def __str__(self): - return super().__str__().lower() - - class DispositionParm(str): - """ - A parameter for the Disposition-Type header (RFC6266, Section 4.1). - """ - grammar = peg.attr('name', NoExtToken), '=', Value - - class ExtDispositionParm: - """ - An extended parameter (RFC6266, Section 4.1). - """ - grammar = peg.attr('name', ExtToken), '=', ExtValue - - def __init__(self, value, name=None): - self.name = name - self.value = value - - class DispositionType(peg.List): - """ - The disposition type (RFC6266, Section 4.1). - """ - grammar = [re.compile('(inline|attachment)', re.I), Token] - - class DispositionParmList(UniqueNamespace): - """ - A list of disposition parameters (RFC6266, Section 4.1). - """ - grammar = peg.maybe_some(';', [ExtDispositionParm, DispositionParm]) - - class ContentDispositionValue: - """ - A complete Content-Disposition value (RFC 6266, Section 4.1). - """ - # Allows nonconformant final semicolon - # I've seen it in the wild, and browsers accept it - # http://greenbytes.de/tech/tc2231/#attwithasciifilenamenqs - grammar = (peg.attr('dtype', DispositionType), - peg.attr('params', DispositionParmList), - peg.optional(';')) - - LangTagged = collections.namedtuple('LangTagged', ['string', 'langtag']) - - class DuplicateParamError(Exception): - """ - Exception raised when a parameter has been given twice. - """ - - class InvalidISO8859Error(Exception): - """ - Exception raised when a byte is invalid in ISO-8859-1. - """ - - class ContentDisposition: - """ - Records various indications and hints about content disposition. - - These can be used to know if a file should be downloaded or - displayed directly, and to hint what filename it should have - in the download case. - """ - def __init__(self, disposition='inline', assocs=None): - """ - Used internally after parsing the header. - - Instances should generally be created from a factory - function, such as parse_headers and its variants. - """ - if len(disposition) != 1: - self.disposition = 'inline' - else: - self.disposition = disposition[0] - if assocs is None: - self.assocs = {} - else: - self.assocs = dict(assocs) # So we can change values - if 'filename*' in self.assocs: - param = self.assocs['filename*'] - if isinstance(param, ExtDispositionParm): - self.assocs['filename*'] = ( - parse_ext_value(param.value).string - ) - - def filename(self): - """ - The filename from the Content-Disposition header or None. - - On safety: - This property records the intent of the sender. - - You shouldn't use this sender-controlled value as a filesystem - path, it can be insecure. Serving files with this filename can be - dangerous as well, due to a certain browser using the part after - the dot for mime-sniffing. Saving it to a database is fine by - itself though. - """ - if 'filename*' in self.assocs: - return self.assocs['filename*'] - elif 'filename' in self.assocs: - # XXX Reject non-ascii (parsed via qdtext) here? - return self.assocs['filename'] - else: - return None - - def is_inline(self): - """ - Return if the file should be handled inline. - - If not, and unless your application supports other dispositions - than the standard inline and attachment, it should be handled - as an attachment. - """ - return self.disposition.lower() == 'inline' - - def normalize_ws(text): - """ - Do LWS (linear whitespace) folding. - """ - return ' '.join(text.split()) - - def parse_headers(content_disposition): - """ - Build a ContentDisposition from header values. - - @param content_disposition contents of the disposition header - @type bytes - """ - # We allow non-ascii here (it will only be parsed inside of qdtext, and - # rejected by the grammar if it appears in other places), although - # parsing it can be ambiguous. Parsing it ensures that a non-ambiguous - # filename* value won't get dismissed because of an unrelated ambiguity - # in the filename parameter. But it does mean we occasionally give - # less-than-certain values for some legacy senders. - content_disposition = content_disposition.decode('iso-8859-1') - - # Our parsing is relaxed in these regards: - # - The grammar allows a final ';' in the header; - # - We do LWS-folding, and possibly normalise other broken - # whitespace, instead of rejecting non-lws-safe text. - # XXX Would prefer to accept only the quoted whitespace - # case, rather than normalising everything. - content_disposition = normalize_ws(content_disposition) - try: - parsed = peg.parse(content_disposition, ContentDispositionValue) - except (SyntaxError, DuplicateParamError, InvalidISO8859Error): - return ContentDisposition() - else: - return ContentDisposition(disposition=parsed.dtype, - assocs=parsed.params) - - def parse_ext_value(val): - """ - Parse the value of an extended attribute. - """ - if len(val) == 3: - charset, langtag, coded = val - else: - charset, coded = val - langtag = None - decoded = parse.unquote(coded, charset, errors='strict') - if charset == 'iso-8859-1': - # Fail if the filename contains an invalid ISO-8859-1 char - for c in decoded: - if 0x7F <= ord(c) <= 0x9F: - raise InvalidISO8859Error(c) - return LangTagged(decoded, langtag) - -except ImportError: - class ContentDisposition: - """ - Records various indications and hints about content disposition. - - These can be used to know if a file should be downloaded or - displayed directly, and to hint what filename it should have - in the download case. - """ - def __init__(self, filename): - """ - Constructor - - @param filename file name to be stored in this surrogate class - @type str - """ - self.__filename = filename - - def filename(self): - """ - Public method to get the stored file name - - @return file name - @rtype str - """ - return self.__filename - - def parse_headers(content_disposition): - """ - Build a ContentDisposition from header values. - - @param content_disposition contents of the disposition header - @type bytes - """ - header = content_disposition.decode() - if header: - pos = header.find("filename=") - if pos != -1: - path = header[pos + 9:] - if path.startswith('"') and path.endswith('"'): - path = path[1:-1] - return ContentDisposition(path) - return ContentDisposition("")
--- a/eric7/E5Network/E5SslCertificateSelectionDialog.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to select a SSL certificate. -""" - -import contextlib - -from PyQt6.QtCore import pyqtSlot, Qt -from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem -with contextlib.suppress(ImportError): - from PyQt6.QtNetwork import QSslCertificate - -from .Ui_E5SslCertificateSelectionDialog import ( - Ui_E5SslCertificateSelectionDialog -) - -import Utilities -import UI.PixmapCache - - -class E5SslCertificateSelectionDialog(QDialog, - Ui_E5SslCertificateSelectionDialog): - """ - Class implementing a dialog to select a SSL certificate. - """ - CertRole = Qt.ItemDataRole.UserRole + 1 - - def __init__(self, certificates, parent=None): - """ - Constructor - - @param certificates list of SSL certificates to select from - @type list of QSslCertificate - @param parent reference to the parent widget - @type QWidget - """ - super().__init__(parent) - self.setupUi(self) - - self.viewButton.setIcon( - UI.PixmapCache.getIcon("certificates")) - - self.buttonBox.button(QDialogButtonBox.OK).setEnabled(False) - self.viewButton.setEnabled(False) - - self.__populateCertificatesTree(certificates) - - def __populateCertificatesTree(self, certificates): - """ - Private slot to populate the certificates tree. - - @param certificates list of SSL certificates to select from - @type list of QSslCertificate - """ - for cert in certificates(): - self.__createCertificateEntry(cert) - - self.certificatesTree.expandAll() - for i in range(self.certificatesTree.columnCount()): - self.certificatesTree.resizeColumnToContents(i) - self.certificatesTree.sortItems(0, Qt.SortOrder.AscendingOrder) - - def __createCaCertificateEntry(self, cert): - """ - Private method to create a certificate entry. - - @param cert certificate to insert - @type QSslCertificate - """ - # step 1: extract the info to be shown - organisation = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.Organization))) - commonName = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName))) - if organisation is None or organisation == "": - organisation = self.tr("(Unknown)") - if commonName is None or commonName == "": - commonName = self.tr("(Unknown common name)") - expiryDate = cert.expiryDate().toString("yyyy-MM-dd") - - # step 2: create the entry - items = self.certificatesTree.findItems( - organisation, - Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) - if len(items) == 0: - parent = QTreeWidgetItem(self.certificatesTree, [organisation]) - parent.setFirstColumnSpanned(True) - else: - parent = items[0] - - itm = QTreeWidgetItem(parent, [commonName, expiryDate]) - itm.setData(0, self.CertRole, cert.toPem()) - - @pyqtSlot() - def on_certificatesTree_itemSelectionChanged(self): - """ - Private slot to handle the selection of an item. - """ - enable = ( - len(self.certificatesTree.selectedItems()) > 0 and - self.certificatesTree.selectedItems()[0].parent() is not None - ) - self.buttonBox.button(QDialogButtonBox.OK).setEnabled(enable) - self.viewButton.setEnabled(enable) - - @pyqtSlot() - def on_viewButton_clicked(self): - """ - Private slot to show data of the selected certificate. - """ - with contextlib.suppress(ImportError): - from E5Network.E5SslCertificatesInfoDialog import ( - E5SslCertificatesInfoDialog - ) - cert = QSslCertificate.fromData( - self.certificatesTree.selectedItems()[0].data( - 0, self.CertRole)) - dlg = E5SslCertificatesInfoDialog(cert, self) - dlg.exec() - - def getSelectedCertificate(self): - """ - Public method to get the selected certificate. - - @return selected certificate - @rtype QSslCertificate - """ - valid = ( - len(self.certificatesTree.selectedItems()) > 0 and - self.certificatesTree.selectedItems()[0].parent() is not None - ) - - certificate = ( - QSslCertificate.fromData( - self.certificatesTree.selectedItems()[0].data( - 0, self.CertRole)) - if valid else - None - ) - - return certificate
--- a/eric7/E5Network/E5SslCertificateSelectionDialog.ui Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>E5SslCertificateSelectionDialog</class> - <widget class="QDialog" name="E5SslCertificateSelectionDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>760</width> - <height>440</height> - </rect> - </property> - <property name="windowTitle"> - <string>SSL Certificate Selection</string> - </property> - <property name="sizeGripEnabled"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Select a SSL certificate:</string> - </property> - </widget> - </item> - <item> - <widget class="QTreeWidget" name="certificatesTree"> - <column> - <property name="text"> - <string>Certificate name</string> - </property> - </column> - <column> - <property name="text"> - <string>Expiry Date</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QPushButton" name="viewButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to view the selected certificate</string> - </property> - <property name="text"> - <string>&View...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>E5SslCertificateSelectionDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>248</x> - <y>254</y> - </hint> - <hint type="destinationlabel"> - <x>157</x> - <y>274</y> - </hint> - </hints> - </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>E5SslCertificateSelectionDialog</receiver> - <slot>reject()</slot> - <hints> - <hint type="sourcelabel"> - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel"> - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> - </connections> -</ui>
--- a/eric7/E5Network/E5SslCertificatesDialog.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,518 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to show and edit all certificates. -""" - -import contextlib - -from PyQt6.QtCore import ( - pyqtSlot, Qt, QByteArray, QFile, QFileInfo, QIODevice -) -from PyQt6.QtWidgets import QDialog, QTreeWidgetItem -with contextlib.suppress(ImportError): - from PyQt6.QtNetwork import ( - QSslCertificate, QSslSocket, QSslConfiguration, QSsl - ) - -from E5Gui import E5MessageBox, E5FileDialog - -from .Ui_E5SslCertificatesDialog import Ui_E5SslCertificatesDialog - -import Preferences -import Utilities -import UI.PixmapCache -import Globals - - -class E5SslCertificatesDialog(QDialog, Ui_E5SslCertificatesDialog): - """ - Class implementing a dialog to show and edit all certificates. - """ - CertRole = Qt.ItemDataRole.UserRole + 1 - - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent widget (QWidget) - """ - super().__init__(parent) - self.setupUi(self) - - self.serversViewButton.setIcon( - UI.PixmapCache.getIcon("certificates")) - self.serversDeleteButton.setIcon( - UI.PixmapCache.getIcon("certificateDelete")) - self.serversExportButton.setIcon( - UI.PixmapCache.getIcon("certificateExport")) - self.serversImportButton.setIcon( - UI.PixmapCache.getIcon("certificateImport")) - - self.caViewButton.setIcon( - UI.PixmapCache.getIcon("certificates")) - self.caDeleteButton.setIcon( - UI.PixmapCache.getIcon("certificateDelete")) - self.caExportButton.setIcon( - UI.PixmapCache.getIcon("certificateExport")) - self.caImportButton.setIcon( - UI.PixmapCache.getIcon("certificateImport")) - - self.__populateServerCertificatesTree() - self.__populateCaCertificatesTree() - - def __populateServerCertificatesTree(self): - """ - Private slot to populate the server certificates tree. - """ - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - for server in certificateDict: - for cert in QSslCertificate.fromData(certificateDict[server]): - self.__createServerCertificateEntry(server, cert) - - self.serversCertificatesTree.expandAll() - for i in range(self.serversCertificatesTree.columnCount()): - self.serversCertificatesTree.resizeColumnToContents(i) - - def __createServerCertificateEntry(self, server, cert): - """ - Private method to create a server certificate entry. - - @param server server name of the certificate (string) - @param cert certificate to insert (QSslCertificate) - """ - # step 1: extract the info to be shown - organisation = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.Organization))) - commonName = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName))) - if organisation is None or organisation == "": - organisation = self.tr("(Unknown)") - if commonName is None or commonName == "": - commonName = self.tr("(Unknown common name)") - expiryDate = cert.expiryDate().toString("yyyy-MM-dd") - - # step 2: create the entry - items = self.serversCertificatesTree.findItems( - organisation, - Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) - if len(items) == 0: - parent = QTreeWidgetItem( - self.serversCertificatesTree, [organisation]) - parent.setFirstColumnSpanned(True) - else: - parent = items[0] - - itm = QTreeWidgetItem(parent, [commonName, server, expiryDate]) - itm.setData(0, self.CertRole, cert.toPem()) - - @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) - def on_serversCertificatesTree_currentItemChanged(self, current, previous): - """ - Private slot handling a change of the current item in the - server certificates list. - - @param current new current item (QTreeWidgetItem) - @param previous previous current item (QTreeWidgetItem) - """ - enable = current is not None and current.parent() is not None - self.serversViewButton.setEnabled(enable) - self.serversDeleteButton.setEnabled(enable) - self.serversExportButton.setEnabled(enable) - - @pyqtSlot() - def on_serversViewButton_clicked(self): - """ - Private slot to show data of the selected server certificate. - """ - with contextlib.suppress(ImportError): - from E5Network.E5SslCertificatesInfoDialog import ( - E5SslCertificatesInfoDialog - ) - cert = QSslCertificate.fromData( - self.serversCertificatesTree.currentItem().data( - 0, self.CertRole)) - dlg = E5SslCertificatesInfoDialog(cert, self) - dlg.exec() - - @pyqtSlot() - def on_serversDeleteButton_clicked(self): - """ - Private slot to delete the selected server certificate. - """ - itm = self.serversCertificatesTree.currentItem() - res = E5MessageBox.yesNo( - self, - self.tr("Delete Server Certificate"), - self.tr("""<p>Shall the server certificate really be""" - """ deleted?</p><p>{0}</p>""" - """<p>If the server certificate is deleted, the""" - """ normal security checks will be reinstantiated""" - """ and the server has to present a valid""" - """ certificate.</p>""") - .format(itm.text(0))) - if res: - server = itm.text(1) - cert = self.serversCertificatesTree.currentItem().data( - 0, self.CertRole) - - # delete the selected entry and its parent entry, - # if it was the only one - parent = itm.parent() - parent.takeChild(parent.indexOfChild(itm)) - if parent.childCount() == 0: - self.serversCertificatesTree.takeTopLevelItem( - self.serversCertificatesTree.indexOfTopLevelItem(parent)) - - # delete the certificate from the user certificate store - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - if server in certificateDict: - certs = [c.toPem() for c in - QSslCertificate.fromData(certificateDict[server])] - if cert in certs: - certs.remove(cert) - if certs: - pems = QByteArray() - for cert in certs: - pems.append(cert + b'\n') - certificateDict[server] = pems - else: - del certificateDict[server] - Preferences.Prefs.settings.setValue( - "Ssl/CaCertificatesDict", - certificateDict) - - # delete the certificate from the default certificates - self.__updateDefaultConfiguration() - - @pyqtSlot() - def on_serversImportButton_clicked(self): - """ - Private slot to import server certificates. - """ - certs = self.__importCertificate() - if certs: - server = "*" - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - if server in certificateDict: - sCerts = QSslCertificate.fromData(certificateDict[server]) - else: - sCerts = [] - - pems = QByteArray() - for cert in certs: - if cert in sCerts: - commonStr = ", ".join( - cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName)) - E5MessageBox.warning( - self, - self.tr("Import Certificate"), - self.tr( - """<p>The certificate <b>{0}</b> already exists.""" - """ Skipping.</p>""") - .format(Utilities.decodeString(commonStr))) - else: - pems.append(cert.toPem() + '\n') - if server not in certificateDict: - certificateDict[server] = QByteArray() - certificateDict[server].append(pems) - Preferences.Prefs.settings.setValue( - "Ssl/CaCertificatesDict", - certificateDict) - - self.serversCertificatesTree.clear() - self.__populateServerCertificatesTree() - - self.__updateDefaultConfiguration() - - @pyqtSlot() - def on_serversExportButton_clicked(self): - """ - Private slot to export the selected server certificate. - """ - cert = self.serversCertificatesTree.currentItem().data( - 0, self.CertRole) - fname = ( - self.serversCertificatesTree.currentItem().text(0).replace(" ", "") - .replace("\t", "") - ) - self.__exportCertificate(fname, cert) - - def __updateDefaultConfiguration(self): - """ - Private method to update the default SSL configuration. - """ - caList = self.__getSystemCaCertificates() - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - for server in certificateDict: - for cert in QSslCertificate.fromData(certificateDict[server]): - if cert not in caList: - caList.append(cert) - sslCfg = QSslConfiguration.defaultConfiguration() - sslCfg.setCaCertificates(caList) - QSslConfiguration.setDefaultConfiguration(sslCfg) - - def __getSystemCaCertificates(self): - """ - Private method to get the list of system certificates. - - @return list of system certificates (list of QSslCertificate) - """ - caList = QSslCertificate.fromData(Globals.toByteArray( - Preferences.Prefs.settings.value("Help/SystemCertificates"))) - if not caList: - caList = QSslSocket.systemCaCertificates() - return caList - - def __populateCaCertificatesTree(self): - """ - Private slot to populate the CA certificates tree. - """ - for cert in self.__getSystemCaCertificates(): - self.__createCaCertificateEntry(cert) - - self.caCertificatesTree.expandAll() - for i in range(self.caCertificatesTree.columnCount()): - self.caCertificatesTree.resizeColumnToContents(i) - self.caCertificatesTree.sortItems(0, Qt.SortOrder.AscendingOrder) - - def __createCaCertificateEntry(self, cert): - """ - Private method to create a CA certificate entry. - - @param cert certificate to insert (QSslCertificate) - """ - # step 1: extract the info to be shown - organisation = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.Organization))) - commonName = Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName))) - if organisation is None or organisation == "": - organisation = self.tr("(Unknown)") - if commonName is None or commonName == "": - commonName = self.tr("(Unknown common name)") - expiryDate = cert.expiryDate().toString("yyyy-MM-dd") - - # step 2: create the entry - items = self.caCertificatesTree.findItems( - organisation, - Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) - if len(items) == 0: - parent = QTreeWidgetItem(self.caCertificatesTree, [organisation]) - parent.setFirstColumnSpanned(True) - else: - parent = items[0] - - itm = QTreeWidgetItem(parent, [commonName, expiryDate]) - itm.setData(0, self.CertRole, cert.toPem()) - - @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) - def on_caCertificatesTree_currentItemChanged(self, current, previous): - """ - Private slot handling a change of the current item - in the CA certificates list. - - @param current new current item (QTreeWidgetItem) - @param previous previous current item (QTreeWidgetItem) - """ - enable = current is not None and current.parent() is not None - self.caViewButton.setEnabled(enable) - self.caDeleteButton.setEnabled(enable) - self.caExportButton.setEnabled(enable) - - @pyqtSlot() - def on_caViewButton_clicked(self): - """ - Private slot to show data of the selected CA certificate. - """ - with contextlib.suppress(ImportError): - from E5Network.E5SslCertificatesInfoDialog import ( - E5SslCertificatesInfoDialog - ) - cert = QSslCertificate.fromData( - self.caCertificatesTree.currentItem().data(0, self.CertRole)) - dlg = E5SslCertificatesInfoDialog(cert, self) - dlg.exec() - - @pyqtSlot() - def on_caDeleteButton_clicked(self): - """ - Private slot to delete the selected CA certificate. - """ - itm = self.caCertificatesTree.currentItem() - res = E5MessageBox.yesNo( - self, - self.tr("Delete CA Certificate"), - self.tr( - """<p>Shall the CA certificate really be deleted?</p>""" - """<p>{0}</p>""" - """<p>If the CA certificate is deleted, the browser""" - """ will not trust any certificate issued by this CA.</p>""") - .format(itm.text(0))) - if res: - cert = self.caCertificatesTree.currentItem().data(0, self.CertRole) - - # delete the selected entry and its parent entry, - # if it was the only one - parent = itm.parent() - parent.takeChild(parent.indexOfChild(itm)) - if parent.childCount() == 0: - self.caCertificatesTree.takeTopLevelItem( - self.caCertificatesTree.indexOfTopLevelItem(parent)) - - # delete the certificate from the CA certificate store - caCerts = self.__getSystemCaCertificates() - if cert in caCerts: - caCerts.remove(cert) - pems = QByteArray() - for cert in caCerts: - pems.append(cert.toPem() + '\n') - Preferences.Prefs.settings.setValue( - "Help/SystemCertificates", pems) - - # delete the certificate from the default certificates - self.__updateDefaultConfiguration() - - @pyqtSlot() - def on_caImportButton_clicked(self): - """ - Private slot to import server certificates. - """ - certs = self.__importCertificate() - if certs: - caCerts = self.__getSystemCaCertificates() - for cert in certs: - if cert in caCerts: - commonStr = ", ".join( - cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName)) - E5MessageBox.warning( - self, - self.tr("Import Certificate"), - self.tr( - """<p>The certificate <b>{0}</b> already exists.""" - """ Skipping.</p>""") - .format(Utilities.decodeString(commonStr))) - else: - caCerts.append(cert) - - pems = QByteArray() - for cert in caCerts: - pems.append(cert.toPem() + '\n') - Preferences.Prefs.settings.setValue( - "Help/SystemCertificates", pems) - - self.caCertificatesTree.clear() - self.__populateCaCertificatesTree() - - self.__updateDefaultConfiguration() - - @pyqtSlot() - def on_caExportButton_clicked(self): - """ - Private slot to export the selected CA certificate. - """ - cert = self.caCertificatesTree.currentItem().data(0, self.CertRole) - fname = ( - self.caCertificatesTree.currentItem().text(0).replace(" ", "") - .replace("\t", "") - ) - self.__exportCertificate(fname, cert) - - def __exportCertificate(self, name, cert): - """ - Private slot to export a certificate. - - @param name default file name without extension (string) - @param cert certificate to be exported (QSslCertificate) - """ - if cert is not None: - fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( - self, - self.tr("Export Certificate"), - name, - self.tr("Certificate File (PEM) (*.pem);;" - "Certificate File (DER) (*.der)"), - None, - E5FileDialog.DontConfirmOverwrite) - - if fname: - ext = QFileInfo(fname).suffix() - if not ext or ext not in ["pem", "der"]: - ex = selectedFilter.split("(*")[1].split(")")[0] - if ex: - fname += ex - if QFileInfo(fname).exists(): - res = E5MessageBox.yesNo( - self, - self.tr("Export Certificate"), - self.tr("<p>The file <b>{0}</b> already exists." - " Overwrite it?</p>").format(fname), - icon=E5MessageBox.Warning) - if not res: - return - - f = QFile(fname) - if not f.open(QIODevice.OpenModeFlag.WriteOnly): - E5MessageBox.critical( - self, - self.tr("Export Certificate"), - self.tr( - """<p>The certificate could not be written""" - """ to file <b>{0}</b></p><p>Error: {1}</p>""") - .format(fname, f.errorString())) - return - - if fname.endswith(".pem"): - crt = cert.toPem() - else: - crt = cert.toDer() - f.write(crt) - f.close() - - def __importCertificate(self): - """ - Private method to read a certificate. - - @return certificates read (list of QSslCertificate) - """ - fname = E5FileDialog.getOpenFileName( - self, - self.tr("Import Certificate"), - "", - self.tr("Certificate Files (*.pem *.crt *.der *.cer *.ca);;" - "All Files (*)")) - - if fname: - f = QFile(fname) - if not f.open(QIODevice.OpenModeFlag.ReadOnly): - E5MessageBox.critical( - self, - self.tr("Export Certificate"), - self.tr( - """<p>The certificate could not be read from file""" - """ <b>{0}</b></p><p>Error: {1}</p>""") - .format(fname, f.errorString())) - return [] - - crt = f.readAll() - f.close() - cert = QSslCertificate.fromData(crt, QSsl.EncodingFormat.Pem) - if not cert: - cert = QSslCertificate.fromData(crt, QSsl.EncodingFormat.Der) - - return cert - - return []
--- a/eric7/E5Network/E5SslCertificatesDialog.ui Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>E5SslCertificatesDialog</class> - <widget class="QDialog" name="E5SslCertificatesDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>760</width> - <height>440</height> - </rect> - </property> - <property name="windowTitle"> - <string>SSL Certificate Manager</string> - </property> - <property name="sizeGripEnabled"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QTabWidget" name="certificatesWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="serversTab"> - <attribute name="title"> - <string>&Servers</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>You have saved certificates identifying these servers:</string> - </property> - </widget> - </item> - <item> - <widget class="QTreeWidget" name="serversCertificatesTree"> - <column> - <property name="text"> - <string>Certificate name</string> - </property> - </column> - <column> - <property name="text"> - <string>Server</string> - </property> - </column> - <column> - <property name="text"> - <string>Expiry Date</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QPushButton" name="serversViewButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to view the selected certificate</string> - </property> - <property name="text"> - <string>&View...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="serversImportButton"> - <property name="toolTip"> - <string>Press to import a certificate</string> - </property> - <property name="text"> - <string>&Import...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="serversExportButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to export the selected certificate</string> - </property> - <property name="text"> - <string>&Export...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="serversDeleteButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to delete the selected certificate</string> - </property> - <property name="text"> - <string>&Delete...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="caTab"> - <attribute name="title"> - <string>Certificate &Authorities</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>You have saved certificates identifying these certification authorities:</string> - </property> - </widget> - </item> - <item> - <widget class="QTreeWidget" name="caCertificatesTree"> - <column> - <property name="text"> - <string>Certificate name</string> - </property> - </column> - <column> - <property name="text"> - <string>Expiry Date</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QPushButton" name="caViewButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to view the selected certificate</string> - </property> - <property name="text"> - <string>&View...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="caImportButton"> - <property name="toolTip"> - <string>Press to import a certificate</string> - </property> - <property name="text"> - <string>&Import...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="caExportButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to export the selected certificate</string> - </property> - <property name="text"> - <string>&Export...</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="caDeleteButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Press to delete the selected certificate</string> - </property> - <property name="text"> - <string>&Delete...</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> - </layout> - </widget> - <tabstops> - <tabstop>certificatesWidget</tabstop> - <tabstop>serversCertificatesTree</tabstop> - <tabstop>serversViewButton</tabstop> - <tabstop>serversImportButton</tabstop> - <tabstop>serversExportButton</tabstop> - <tabstop>serversDeleteButton</tabstop> - <tabstop>caCertificatesTree</tabstop> - <tabstop>caViewButton</tabstop> - <tabstop>caImportButton</tabstop> - <tabstop>caExportButton</tabstop> - <tabstop>caDeleteButton</tabstop> - <tabstop>buttonBox</tabstop> - </tabstops> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>E5SslCertificatesDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>248</x> - <y>254</y> - </hint> - <hint type="destinationlabel"> - <x>157</x> - <y>274</y> - </hint> - </hints> - </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>E5SslCertificatesDialog</receiver> - <slot>reject()</slot> - <hints> - <hint type="sourcelabel"> - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel"> - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> - </connections> -</ui>
--- a/eric7/E5Network/E5SslCertificatesInfoDialog.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to show SSL certificate infos. -""" - -from PyQt6.QtWidgets import QDialog - -from .Ui_E5SslCertificatesInfoDialog import Ui_E5SslCertificatesInfoDialog - - -class E5SslCertificatesInfoDialog(QDialog, Ui_E5SslCertificatesInfoDialog): - """ - Class implementing a dialog to show SSL certificate infos. - """ - def __init__(self, certificateChain, parent=None): - """ - Constructor - - @param certificateChain SSL certificate chain (list of QSslCertificate) - @param parent reference to the parent widget (QWidget) - """ - super().__init__(parent) - self.setupUi(self) - - self.sslWidget.showCertificateChain(certificateChain)
--- a/eric7/E5Network/E5SslCertificatesInfoDialog.ui Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>E5SslCertificatesInfoDialog</class> - <widget class="QDialog" name="E5SslCertificatesInfoDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>556</width> - <height>486</height> - </rect> - </property> - <property name="windowTitle"> - <string>SSL Certificate Info</string> - </property> - <property name="sizeGripEnabled"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="E5SslCertificatesInfoWidget" name="sslWidget" native="true"/> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>E5SslCertificatesInfoWidget</class> - <extends>QWidget</extends> - <header>E5Network/E5SslCertificatesInfoWidget.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>E5SslCertificatesInfoDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>248</x> - <y>254</y> - </hint> - <hint type="destinationlabel"> - <x>157</x> - <y>274</y> - </hint> - </hints> - </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>E5SslCertificatesInfoDialog</receiver> - <slot>reject()</slot> - <hints> - <hint type="sourcelabel"> - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel"> - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> - </connections> -</ui>
--- a/eric7/E5Network/E5SslCertificatesInfoWidget.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a widget to show SSL certificate infos. -""" - -from PyQt6.QtCore import pyqtSlot, QCryptographicHash, QDateTime -from PyQt6.QtWidgets import QWidget -try: - from PyQt6.QtNetwork import QSslCertificate -except ImportError: - QSslCertificate = None - -from .Ui_E5SslCertificatesInfoWidget import Ui_E5SslCertificatesInfoWidget - -import Utilities - - -class E5SslCertificatesInfoWidget(QWidget, Ui_E5SslCertificatesInfoWidget): - """ - Class implementing a widget to show SSL certificate infos. - """ - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent widget (QWidget) - """ - super().__init__(parent) - self.setupUi(self) - - self.__chain = [] - - def showCertificateChain(self, certificateChain): - """ - Public method to show the SSL certificates of a certificate chain. - - @param certificateChain list od SSL certificates - (list of QSslCertificate) - """ - if QSslCertificate: - self.chainLabel.show() - self.chainComboBox.show() - self.chainComboBox.clear() - - self.__chain = certificateChain[:] - - for cert in self.__chain: - name = ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName)) - if not name: - name = ", ".join( - cert.subjectInfo( - QSslCertificate.SubjectInfo.Organization)) - if not name: - name = cert.serialNumber() - self.chainComboBox.addItem(name) - - self.on_chainComboBox_activated(0) - - def showCertificate(self, certificate): - """ - Public method to show the SSL certificate information. - - @param certificate reference to the SSL certificate (QSslCertificate) - """ - self.chainLabel.hide() - self.chainComboBox.hide() - self.chainComboBox.clear() - - self.__chain = [] - - if QSslCertificate: - self.__showCertificate(certificate) - - def __showCertificate(self, certificate): - """ - Private method to show the SSL certificate information. - - @param certificate reference to the SSL certificate (QSslCertificate) - """ - if QSslCertificate: - self.blacklistedLabel.setVisible(False) - self.blacklistedLabel.setStyleSheet( - "QLabel { color : white; background-color : red; }") - self.expiredLabel.setVisible(False) - self.expiredLabel.setStyleSheet( - "QLabel { color : white; background-color : red; }") - - self.subjectCommonNameLabel.setText(self.__certificateString( - ", ".join(certificate.subjectInfo( - QSslCertificate.SubjectInfo.CommonName)))) - self.subjectOrganizationLabel.setText(self.__certificateString( - ", ".join(certificate.subjectInfo( - QSslCertificate.SubjectInfo.Organization)))) - self.subjectOrganizationalUnitLabel.setText( - self.__certificateString(", ".join( - certificate.subjectInfo( - QSslCertificate.SubjectInfo.OrganizationalUnitName)))) - self.issuerCommonNameLabel.setText(self.__certificateString( - ", ".join(certificate.issuerInfo( - QSslCertificate.SubjectInfo.CommonName)))) - self.issuerOrganizationLabel.setText(self.__certificateString( - ", ".join(certificate.issuerInfo( - QSslCertificate.SubjectInfo.Organization)))) - self.issuerOrganizationalUnitLabel.setText( - self.__certificateString(", ".join( - certificate.issuerInfo( - QSslCertificate.SubjectInfo.OrganizationalUnitName)))) - self.serialNumberLabel.setText(self.__serialNumber(certificate)) - self.effectiveLabel.setText( - certificate.effectiveDate().toString("yyyy-MM-dd")) - self.expiresLabel.setText( - certificate.expiryDate().toString("yyyy-MM-dd")) - self.sha1Label.setText(self.__formatHexString( - str(certificate.digest( - QCryptographicHash.Algorithm.Sha1).toHex(), - encoding="ascii"))) - self.md5Label.setText(self.__formatHexString( - str(certificate.digest( - QCryptographicHash.Algorithm.Md5).toHex(), - encoding="ascii"))) - - if certificate.isBlacklisted(): - # something is wrong; indicate it to the user - if self.__hasExpired(certificate.effectiveDate(), - certificate.expiryDate()): - self.expiredLabel.setVisible(True) - else: - self.blacklistedLabel.setVisible(True) - - def __certificateString(self, txt): - """ - Private method to prepare some text for display. - - @param txt text to be displayed (string) - @return prepared text (string) - """ - if txt is None or txt == "": - return self.tr("<not part of the certificate>") - - return Utilities.decodeString(txt) - - def __serialNumber(self, cert): - """ - Private slot to format the certificate serial number. - - @param cert reference to the SSL certificate (QSslCertificate) - @return formated serial number (string) - """ - serial = cert.serialNumber() - if serial == "": - return self.tr("<not part of the certificate>") - - if b':' in serial: - return str(serial, encoding="ascii").upper() - else: - hexString = hex(int(serial))[2:] - return self.__formatHexString(hexString) - - def __formatHexString(self, hexString): - """ - Private method to format a hex string for display. - - @param hexString hex string to be formatted (string) - @return formatted string (string) - """ - hexString = hexString.upper() - - if len(hexString) % 2 == 1: - hexString = '0' + hexString - - hexList = [] - while hexString: - hexList.append(hexString[:2]) - hexString = hexString[2:] - - return ':'.join(hexList) - - def __hasExpired(self, effectiveDate, expiryDate): - """ - Private method to check for a certificate expiration. - - @param effectiveDate date the certificate becomes effective (QDateTime) - @param expiryDate date the certificate expires (QDateTime) - @return flag indicating the expiration status (boolean) - """ - now = QDateTime.currentDateTime() - - return now < effectiveDate or now >= expiryDate - - @pyqtSlot(int) - def on_chainComboBox_activated(self, index): - """ - Private slot to show the certificate info for the selected entry. - - @param index number of the certificate in the certificate chain - (integer) - """ - self.__showCertificate(self.__chain[index])
--- a/eric7/E5Network/E5SslCertificatesInfoWidget.ui Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,359 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>E5SslCertificatesInfoWidget</class> - <widget class="QWidget" name="E5SslCertificatesInfoWidget"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>500</width> - <height>455</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label_17"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string><h2>Certificate Information</h2></string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="chainLabel"> - <property name="text"> - <string>Certificate Chain:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="chainComboBox"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QLabel" name="blacklistedLabel"> - <property name="text"> - <string>This certificated has been blacklisted.</string> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0" colspan="2"> - <widget class="QLabel" name="label"> - <property name="text"> - <string><b>Issued for:</b></string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Common Name (CN):</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="subjectCommonNameLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Organization (O):</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLabel" name="subjectOrganizationLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Organizational Unit (OU):</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QLabel" name="subjectOrganizationalUnitLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Serialnumber:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="QLabel" name="serialNumberLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="5" column="0"> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>10</height> - </size> - </property> - </spacer> - </item> - <item row="6" column="0" colspan="2"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string><b>Issued by:</b></string> - </property> - </widget> - </item> - <item row="7" column="0"> - <widget class="QLabel" name="label_9"> - <property name="text"> - <string>Common Name (CN):</string> - </property> - </widget> - </item> - <item row="7" column="1"> - <widget class="QLabel" name="issuerCommonNameLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="8" column="0"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Organization (O):</string> - </property> - </widget> - </item> - <item row="8" column="1"> - <widget class="QLabel" name="issuerOrganizationLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="9" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Organizational Unit (OU):</string> - </property> - </widget> - </item> - <item row="9" column="1"> - <widget class="QLabel" name="issuerOrganizationalUnitLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="10" column="0"> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>9</height> - </size> - </property> - </spacer> - </item> - <item row="11" column="0" colspan="2"> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string><b>Validity:</b></string> - </property> - </widget> - </item> - <item row="12" column="0"> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Issued on:</string> - </property> - </widget> - </item> - <item row="12" column="1"> - <widget class="QLabel" name="effectiveLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="13" column="0"> - <widget class="QLabel" name="label_12"> - <property name="text"> - <string>Expires on:</string> - </property> - </widget> - </item> - <item row="13" column="1"> - <widget class="QLabel" name="expiresLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="14" column="0" colspan="2"> - <widget class="QLabel" name="expiredLabel"> - <property name="text"> - <string>This certificate is not valid yet or has expired.</string> - </property> - </widget> - </item> - <item row="15" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>10</height> - </size> - </property> - </spacer> - </item> - <item row="16" column="0" colspan="2"> - <widget class="QLabel" name="label_13"> - <property name="text"> - <string><b>Fingerprints:</b></string> - </property> - </widget> - </item> - <item row="17" column="0"> - <widget class="QLabel" name="label_14"> - <property name="text"> - <string>SHA1-Fingerprint:</string> - </property> - </widget> - </item> - <item row="17" column="1"> - <widget class="QLabel" name="sha1Label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="18" column="0"> - <widget class="QLabel" name="label_15"> - <property name="text"> - <string>MD5-Fingerprint:</string> - </property> - </widget> - </item> - <item row="18" column="1"> - <widget class="QLabel" name="md5Label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui>
--- a/eric7/E5Network/E5SslErrorHandler.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,273 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a SSL error handler. -""" - -import contextlib -import enum -import platform - -from PyQt6.QtCore import QObject, QByteArray -from PyQt6.QtNetwork import QSslCertificate, QSslConfiguration, QSslError, QSsl - -from E5Gui import E5MessageBox - -import Preferences -import Utilities -import Globals - - -class E5SslErrorState(enum.Enum): - """ - Class defining the SSL error handling states. - """ - NOT_IGNORED = 0 - SYSTEM_IGNORED = 1 - USER_IGNORED = 2 - - -class E5SslErrorHandler(QObject): - """ - Class implementing a handler for SSL errors. - - It also initializes the default SSL configuration with certificates - permanently accepted by the user already. - """ - def __init__(self, parent=None): - """ - Constructor - - @param parent reference to the parent object (QObject) - """ - super().__init__(parent) - - caList = self.__getSystemCaCertificates() - if Preferences.Prefs.settings.contains("Help/CaCertificatesDict"): - # port old entries stored under 'Help' - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Help/CaCertificatesDict")) - Preferences.Prefs.settings.setValue( - "Ssl/CaCertificatesDict", certificateDict) - Preferences.Prefs.settings.remove("Help/CaCertificatesDict") - else: - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - for server in certificateDict: - for cert in QSslCertificate.fromData(certificateDict[server]): - if cert not in caList: - caList.append(cert) - sslCfg = QSslConfiguration.defaultConfiguration() - sslCfg.setCaCertificates(caList) - try: - sslProtocol = QSsl.SslProtocol.TlsV1_1OrLater - if Globals.isWindowsPlatform() and platform.win32_ver()[0] == '7': - sslProtocol = QSsl.SslProtocol.SecureProtocols - except AttributeError: - sslProtocol = QSsl.SslProtocol.SecureProtocols - sslCfg.setProtocol(sslProtocol) - with contextlib.suppress(AttributeError): - sslCfg.setSslOption(QSsl.SslOption.SslOptionDisableCompression, - True) - QSslConfiguration.setDefaultConfiguration(sslCfg) - - def sslErrorsReplySlot(self, reply, errors): - """ - Public slot to handle SSL errors for a network reply. - - @param reply reference to the reply object (QNetworkReply) - @param errors list of SSL errors (list of QSslError) - """ - self.sslErrorsReply(reply, errors) - - def sslErrorsReply(self, reply, errors): - """ - Public slot to handle SSL errors for a network reply. - - @param reply reference to the reply object (QNetworkReply) - @param errors list of SSL errors (list of QSslError) - @return tuple indicating to ignore the SSL errors (one of NotIgnored, - SystemIgnored or UserIgnored) and indicating a change of the - default SSL configuration (boolean) - """ - url = reply.url() - ignore, defaultChanged = self.sslErrors(errors, url.host(), url.port()) - if ignore: - if defaultChanged: - reply.setSslConfiguration( - QSslConfiguration.defaultConfiguration()) - reply.ignoreSslErrors() - else: - reply.abort() - - return ignore, defaultChanged - - def sslErrors(self, errors, server, port=-1): - """ - Public method to handle SSL errors. - - @param errors list of SSL errors - @type list of QSslError - @param server name of the server - @type str - @param port value of the port - @type int - @return tuple indicating to ignore the SSL errors and indicating a - change of the default SSL configuration - @rtype tuple of (E5SslErrorState, bool) - """ - caMerge = {} - certificateDict = Globals.toDict( - Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) - for caServer in certificateDict: - caMerge[caServer] = QSslCertificate.fromData( - certificateDict[caServer]) - caNew = [] - - errorStrings = [] - if port != -1: - server += ":{0:d}".format(port) - if errors: - for err in errors: - if err.error() == QSslError.SslError.NoError: - continue - if server in caMerge and err.certificate() in caMerge[server]: - continue - errorStrings.append(err.errorString()) - if not err.certificate().isNull(): - cert = err.certificate() - if cert not in caNew: - caNew.append(cert) - if not errorStrings: - return E5SslErrorState.SYSTEM_IGNORED, False - - errorString = '.</li><li>'.join(errorStrings) - ret = E5MessageBox.yesNo( - None, - self.tr("SSL Errors"), - self.tr("""<p>SSL Errors for <br /><b>{0}</b>""" - """<ul><li>{1}</li></ul></p>""" - """<p>Do you want to ignore these errors?</p>""") - .format(server, errorString), - icon=E5MessageBox.Warning) - - if ret: - caRet = False - if len(caNew) > 0: - certinfos = [] - for cert in caNew: - certinfos.append(self.__certToString(cert)) - caRet = E5MessageBox.yesNo( - None, - self.tr("Certificates"), - self.tr( - """<p>Certificates:<br/>{0}<br/>""" - """Do you want to accept all these certificates?""" - """</p>""") - .format("".join(certinfos))) - if caRet: - if server not in caMerge: - caMerge[server] = [] - for cert in caNew: - caMerge[server].append(cert) - - sslCfg = QSslConfiguration.defaultConfiguration() - caList = sslCfg.caCertificates() - for cert in caNew: - caList.append(cert) - sslCfg.setCaCertificates(caList) - try: - sslCfg.setProtocol(QSsl.SslProtocol.TlsV1_1OrLater) - except AttributeError: - sslCfg.setProtocol(QSsl.SslProtocol.SecureProtocols) - with contextlib.suppress(AttributeError): - sslCfg.setSslOption( - QSsl.SslOption.SslOptionDisableCompression, - True) - QSslConfiguration.setDefaultConfiguration(sslCfg) - - certificateDict = {} - for server in caMerge: - pems = QByteArray() - for cert in caMerge[server]: - pems.append(cert.toPem() + b'\n') - certificateDict[server] = pems - Preferences.Prefs.settings.setValue( - "Ssl/CaCertificatesDict", - certificateDict) - - return E5SslErrorState.USER_IGNORED, caRet - - else: - return E5SslErrorState.NOT_IGNORED, False - - def __certToString(self, cert): - """ - Private method to convert a certificate to a formatted string. - - @param cert certificate to convert (QSslCertificate) - @return formatted string (string) - """ - result = "<p>" - - result += self.tr( - "Name: {0}" - ).format( - Utilities.html_encode( - Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.CommonName)) - ) - ) - ) - - result += self.tr( - "<br/>Organization: {0}" - ).format( - Utilities.html_encode( - Utilities.decodeString( - ", ".join(cert.subjectInfo( - QSslCertificate.SubjectInfo.Organization)) - ) - ) - ) - - result += self.tr( - "<br/>Issuer: {0}" - ).format( - Utilities.html_encode( - Utilities.decodeString( - ", ".join(cert.issuerInfo( - QSslCertificate.SubjectInfo.CommonName)) - ) - ) - ) - result += self.tr( - "<br/>Not valid before: {0}<br/>Valid Until: {1}" - ).format( - Utilities.html_encode( - cert.effectiveDate().toString("yyyy-MM-dd") - ), - Utilities.html_encode( - cert.expiryDate().toString("yyyy-MM-dd") - ) - ) - - result += "</p>" - - return result - - def __getSystemCaCertificates(self): - """ - Private method to get the list of system certificates. - - @return list of system certificates (list of QSslCertificate) - """ - caList = QSslCertificate.fromData(Globals.toByteArray( - Preferences.Prefs.settings.value("Ssl/SystemCertificates"))) - if not caList: - caList = QSslConfiguration.systemCaCertificates() - return caList
--- a/eric7/E5Network/E5SslInfoWidget.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a widget to show SSL information. -""" - -from PyQt6.QtCore import Qt, QUrl, QPoint -from PyQt6.QtWidgets import QMenu, QGridLayout, QLabel, QSizePolicy -from PyQt6.QtNetwork import QSsl, QSslConfiguration, QSslCertificate - -import UI.PixmapCache -import Utilities - - -class E5SslInfoWidget(QMenu): - """ - Class implementing a widget to show SSL certificate infos. - """ - def __init__(self, url, configuration, parent=None): - """ - Constructor - - @param url URL to show SSL info for (QUrl) - @param configuration SSL configuration (QSslConfiguration) - @param parent reference to the parent widget (QWidget) - """ - super().__init__(parent) - - self.__url = QUrl(url) - self.__configuration = QSslConfiguration(configuration) - - self.setMinimumWidth(400) - - certList = self.__configuration.peerCertificateChain() - cert = certList[0] if certList else QSslCertificate() - - layout = QGridLayout(self) - rows = 0 - - ########################################## - ## Identity Information - ########################################## - imageLabel = QLabel(self) - layout.addWidget(imageLabel, rows, 0, Qt.AlignmentFlag.AlignCenter) - - label = QLabel(self) - label.setWordWrap(True) - label.setSizePolicy(QSizePolicy.Policy.Expanding, - QSizePolicy.Policy.Preferred) - label.setText(self.tr("Identity")) - font = label.font() - font.setBold(True) - label.setFont(font) - layout.addWidget(label, rows, 1) - rows += 1 - - label = QLabel(self) - label.setWordWrap(True) - if cert.isNull(): - label.setText(self.tr( - "Warning: this site is NOT carrying a certificate.")) - imageLabel.setPixmap(UI.PixmapCache.getPixmap("securityLow32")) - else: - valid = not cert.isBlacklisted() - if valid: - txt = ", ".join( - cert.issuerInfo(QSslCertificate.SubjectInfo.CommonName)) - label.setText(self.tr( - "The certificate for this site is valid" - " and has been verified by:\n{0}").format( - Utilities.decodeString(txt))) - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityHigh32")) - else: - label.setText(self.tr( - "The certificate for this site is NOT valid.")) - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityLow32")) - layout.addWidget(label, rows, 1) - rows += 1 - - label = QLabel(self) - label.setWordWrap(True) - label.setText( - '<a href="moresslinfos">' + - self.tr("Certificate Information") + "</a>") - label.linkActivated.connect(self.__showCertificateInfos) - layout.addWidget(label, rows, 1) - rows += 1 - - ########################################## - ## Identity Information - ########################################## - imageLabel = QLabel(self) - layout.addWidget(imageLabel, rows, 0, Qt.AlignmentFlag.AlignCenter) - - label = QLabel(self) - label.setWordWrap(True) - label.setText(self.tr("Encryption")) - font = label.font() - font.setBold(True) - label.setFont(font) - layout.addWidget(label, rows, 1) - rows += 1 - - cipher = self.__configuration.sessionCipher() - if cipher.isNull(): - label = QLabel(self) - label.setWordWrap(True) - label.setText(self.tr( - 'Your connection to "{0}" is NOT encrypted.\n').format( - self.__url.host())) - layout.addWidget(label, rows, 1) - imageLabel.setPixmap(UI.PixmapCache.getPixmap("securityLow32")) - rows += 1 - else: - label = QLabel(self) - label.setWordWrap(True) - label.setText(self.tr( - 'Your connection to "{0}" is encrypted.').format( - self.__url.host())) - layout.addWidget(label, rows, 1) - - proto = cipher.protocol() - if proto == QSsl.SslProtocol.SslV3: - sslVersion = "SSL 3.0" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityLow32")) - elif proto == QSsl.SslProtocol.TlsV1SslV3: - sslVersion = "TLS 1.0/SSL 3.0" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityLow32")) - elif proto == QSsl.SslProtocol.SslV2: - sslVersion = "SSL 2.0" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityLow32")) - else: - sslVersion = self.tr("unknown") - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityLow32")) - if proto == QSsl.SslProtocol.TlsV1_0: - sslVersion = "TLS 1.0" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityHigh32")) - elif proto == QSsl.SslProtocol.TlsV1_1: - sslVersion = "TLS 1.1" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityHigh32")) - elif proto == QSsl.SslProtocol.TlsV1_2: - sslVersion = "TLS 1.2" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityHigh32")) - elif proto == QSsl.SslProtocol.TlsV1_3: - sslVersion = "TLS 1.3" - imageLabel.setPixmap( - UI.PixmapCache.getPixmap("securityHigh32")) - rows += 1 - - label = QLabel(self) - label.setWordWrap(True) - label.setText(self.tr( - "It uses protocol: {0}").format(sslVersion)) - layout.addWidget(label, rows, 1) - rows += 1 - - label = QLabel(self) - label.setWordWrap(True) - label.setText(self.tr( - "It is encrypted using {0} at {1} bits, " - "with {2} for message authentication and " - "{3} as key exchange mechanism.\n\n").format( - cipher.encryptionMethod(), - cipher.usedBits(), - cipher.authenticationMethod(), - cipher.keyExchangeMethod())) - layout.addWidget(label, rows, 1) - rows += 1 - - def showAt(self, pos): - """ - Public method to show the widget. - - @param pos position to show at (QPoint) - """ - self.adjustSize() - xpos = pos.x() - self.width() - if xpos < 0: - xpos = 10 - p = QPoint(xpos, pos.y() + 10) - self.move(p) - self.show() - - def __showCertificateInfos(self): - """ - Private slot to show certificate information. - """ - from .E5SslCertificatesInfoDialog import E5SslCertificatesInfoDialog - dlg = E5SslCertificatesInfoDialog( - self.__configuration.peerCertificateChain()) - dlg.exec() - - def accept(self): - """ - Public method to accept the widget. - """ - self.close()
--- a/eric7/E5Network/E5SslUtilities.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing SSL utility functions. -""" - - -def initSSL(): - """ - Function to initialize some global SSL stuff. - """ - blacklist = [ - "SRP-AES-256-CBC-SHA", # open to MitM - "SRP-AES-128-CBC-SHA", # open to MitM - ] - - try: - from PyQt6.QtNetwork import QSslConfiguration - except ImportError: - # no SSL available, so there is nothing to initialize - return - - strongCiphers = [c for c in QSslConfiguration.supportedCiphers() - if c.name() not in blacklist and c.usedBits() >= 128] - defaultSslConfiguration = QSslConfiguration.defaultConfiguration() - defaultSslConfiguration.setCiphers(strongCiphers) - QSslConfiguration.setDefaultConfiguration(defaultSslConfiguration)
--- a/eric7/E5Network/E5TldExtractor.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,554 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing the TLD Extractor. -""" - -# -# This is a Python port of the TLDExtractor of Qupzilla -# Copyright (C) 2014 Razi Alavizadeh <s.r.alavizadeh@gmail.com> -# - -import collections -import os -import re - -from PyQt6.QtCore import QObject, QUrl, QFile, QFileInfo, qWarning - -from E5Gui import E5MessageBox - - -class E5TldHostParts: - """ - Class implementing the host parts helper. - """ - def __init__(self): - """ - Constructor - """ - self.host = "" - self.tld = "" - self.domain = "" - self.registrableDomain = "" - self.subdomain = "" - - -class E5TldExtractor(QObject): - """ - Class implementing the TLD Extractor. - - Note: The module function instance() should be used to get a reference - to a global object to avoid overhead. - """ - def __init__(self, withPrivate=False, parent=None): - """ - Constructor - - @param withPrivate flag indicating to load private TLDs as well - @type bool - @param parent reference to the parent object - @type QObject - """ - super().__init__(parent) - - self.__withPrivate = withPrivate - self.__dataFileName = "" - self.__dataSearchPaths = [] - - self.__tldDict = collections.defaultdict(list) - # dict with list of str as values - - self.setDataSearchPaths() - - def isDataLoaded(self): - """ - Public method to check, if the TLD data ia already loaded. - - @return flag indicating data is loaded - @rtype bool - """ - return bool(self.__tldDict) - - def tld(self, host): - """ - Public method to get the top level domain for a host. - - @param host host name to get TLD for - @type str - @return TLD for host - @rtype str - """ - if not host or host.startswith("."): - return "" - - cleanHost = self.__normalizedHost(host) - - tldPart = cleanHost[cleanHost.rfind(".") + 1:] - cleanHost = bytes(QUrl.toAce(cleanHost)).decode("utf-8") - - self.__loadData() - - if tldPart not in self.__tldDict: - return tldPart - - tldRules = self.__tldDict[tldPart][:] - - if tldPart not in tldRules: - tldRules.append(tldPart) - - maxLabelCount = 0 - isWildcardTLD = False - - for rule in tldRules: - labelCount = rule.count(".") + 1 - - if rule.startswith("!"): - rule = rule[1:] - - rule = bytes(QUrl.toAce(rule)).decode("utf-8") - - # matches with exception TLD - if cleanHost.endswith(rule): - tldPart = rule[rule.find(".") + 1:] - break - - if rule.startswith("*"): - rule = rule[1:] - - if rule.startswith("."): - rule = rule[1:] - - isWildcardTLD = True - else: - isWildcardTLD = False - - rule = bytes(QUrl.toAce(rule)).decode("utf-8") - testRule = "." + rule - testUrl = "." + cleanHost - - if labelCount > maxLabelCount and testUrl.endswith(testRule): - tldPart = rule - maxLabelCount = labelCount - - if isWildcardTLD: - temp = cleanHost - temp = temp[:temp.rfind(tldPart)] - - if temp.endswith("."): - temp = temp[:-1] - - temp = temp[temp.rfind(".") + 1:] - - if temp: - tldPart = temp + "." + rule - else: - tldPart = rule - - temp = self.__normalizedHost(host) - tldPart = ".".join( - temp.split(".")[temp.count(".") - tldPart.count("."):]) - - return tldPart - - def domain(self, host): - """ - Public method to get the domain for a host. - - @param host host name to get the domain for - @type str - @return domain for host - @rtype str - """ - tldPart = self.tld(host) - - return self.__domainHelper(host, tldPart) - - def registrableDomain(self, host): - """ - Public method to get the registrable domain for a host. - - @param host host name to get the registrable domain for - @type str - @return registrable domain for host - @rtype str - """ - tldPart = self.tld(host) - - return self.__registrableDomainHelper( - self.__domainHelper(host, tldPart), tldPart) - - def subdomain(self, host): - """ - Public method to get the subdomain for a host. - - @param host host name to get the subdomain for - @type str - @return subdomain for host - @rtype str - """ - return self.__subdomainHelper(host, self.registrableDomain(host)) - - def splitParts(self, host): - """ - Public method to split a host address into its parts. - - @param host host address to be split - @type str - @return splitted host address - @rtype E5TldHostParts - """ - hostParts = E5TldHostParts() - hostParts.host = host - hostParts.tld = self.tld(host) - hostParts.domain = self.__domainHelper(host, hostParts.tld) - hostParts.registrableDomain = self.__registrableDomainHelper( - hostParts.domain, hostParts.tld) - hostParts.subdomain = self.__subdomainHelper( - host, hostParts.registrableDomain) - - return hostParts - - def dataSearchPaths(self): - """ - Public method to get the search paths for the TLD data file. - - @return search paths for the TLD data file - @rtype list of str - """ - return self.__dataSearchPaths[:] - - def setDataSearchPaths(self, searchPaths=None): - """ - Public method to set the search paths for the TLD data file. - - @param searchPaths search paths for the TLD data file or None, - if the default search paths shall be set - @type list of str - """ - if searchPaths: - self.__dataSearchPaths = searchPaths[:] - self.__dataSearchPaths.extend(self.__defaultDataSearchPaths()) - else: - self.__dataSearchPaths = self.__defaultDataSearchPaths()[:] - - # remove duplicates - paths = [] - for p in self.__dataSearchPaths: - if p not in paths: - paths.append(p) - self.__dataSearchPaths = paths - - def __defaultDataSearchPaths(self): - """ - Private method to get the default search paths for the TLD data file. - - @return default search paths for the TLD data file - @rtype list of str - """ - return [os.path.join(os.path.dirname(__file__), "data")] - - def getTldDownloadUrl(self): - """ - Public method to get the TLD data file download URL. - - @return download URL - @rtype QUrl - """ - return QUrl( - "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/" - "effective_tld_names.dat?raw=1") - - def __loadData(self): - """ - Private method to load the TLD data. - """ - if self.isDataLoaded(): - return - - dataFileName = "" - parsedDataFileExist = False - - for path in self.__dataSearchPaths: - dataFileName = ( - QFileInfo(path + "/effective_tld_names.dat").absoluteFilePath() - ) - if QFileInfo(dataFileName).exists(): - parsedDataFileExist = True - break - - if not parsedDataFileExist: - tldDataFileDownloadLink = ( - "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/" - "effective_tld_names.dat?raw=1" - ) - E5MessageBox.information( - None, - self.tr("TLD Data File not found"), - self.tr("""<p>The file 'effective_tld_names.dat' was not""" - """ found!<br/>You can download it from """ - """'<a href="{0}"><b>here</b></a>' to one of the""" - """ following paths:</p><ul>{1}</ul>""").format( - tldDataFileDownloadLink, - "".join(["<li>{0}</li>".format(p) - for p in self.__dataSearchPaths])) - ) - return - - self.__dataFileName = dataFileName - if not self.__parseData(dataFileName, - loadPrivateDomains=self.__withPrivate): - qWarning( - "E5TldExtractor: There are some parse errors for file: {0}" - .format(dataFileName)) - - def __parseData(self, dataFile, loadPrivateDomains=False): - """ - Private method to parse TLD data. - - @param dataFile name of the file containing the TLD data - @type str - @param loadPrivateDomains flag indicating to load private domains - @type bool - @return flag indicating success - @rtype bool - """ - # start with a fresh dictionary - self.__tldDict = collections.defaultdict(list) - - file = QFile(dataFile) - - if not file.open(QFile.ReadOnly | QFile.Text): - return False - - seekToEndOfPrivateDomains = False - - while not file.atEnd(): - line = bytes(file.readLine()).decode("utf-8").strip() - if not line: - continue - - if line.startswith("."): - line = line[1:] - - if line.startswith("//"): - if "===END PRIVATE DOMAINS===" in line: - seekToEndOfPrivateDomains = False - - if ( - not loadPrivateDomains and - "===BEGIN PRIVATE DOMAINS===" in line - ): - seekToEndOfPrivateDomains = True - - continue - - if seekToEndOfPrivateDomains: - continue - - # only data up to the first whitespace is used - line = line.split(None, 1)[0] - - if "." not in line: - self.__tldDict[line].append(line) - else: - key = line[line.rfind(".") + 1:] - self.__tldDict[key].append(line) - - return self.isDataLoaded() - - def __domainHelper(self, host, tldPart): - """ - Private method to get the domain name without TLD. - - @param host host address - @type str - @param tldPart TLD part of the host address - @type str - @return domain name - @rtype str - """ - if not host or not tldPart: - return "" - - temp = self.__normalizedHost(host) - temp = temp[:temp.rfind(tldPart)] - - if temp.endswith("."): - temp = temp[:-1] - - return temp[temp.rfind(".") + 1:] - - def __registrableDomainHelper(self, domainPart, tldPart): - """ - Private method to get the registrable domain (i.e. domain plus TLD). - - @param domainPart domain part of a host address - @type str - @param tldPart TLD part of a host address - @type str - @return registrable domain name - @rtype str - """ - if not tldPart or not domainPart: - return "" - else: - return "{0}.{1}".format(domainPart, tldPart) - - def __subdomainHelper(self, host, registrablePart): - """ - Private method to get the subdomain of a host address (i.e. domain part - without the registrable domain name). - - @param host host address - @type str - @param registrablePart registrable domain part of the host address - @type str - @return subdomain name - @rtype str - """ - if not host or not registrablePart: - return "" - - subdomain = self.__normalizedHost(host) - - subdomain = subdomain[:subdomain.rfind(registrablePart)] - - if subdomain.endswith("."): - subdomain = subdomain[:-1] - - return subdomain - - def __normalizedHost(self, host): - """ - Private method to get the normalized host for a host address. - - @param host host address to be normalized - @type str - @return normalized host address - @rtype str - """ - return host.lower() - - ################################################################# - ## Methods below are for testing purposes - ################################################################# - - def test(self): - """ - Public method to execute the tests. - - @return flag indicating the test result - @rtype bool - """ - self.__withPrivate = True - self.__loadData() - if not self.__tldDict: - return False - - testDataFileName = "" - testDataFileExist = False - - for path in self.__dataSearchPaths: - testDataFileName = ( - QFileInfo(path + "/test_psl.txt").absoluteFilePath() - ) - if QFileInfo(testDataFileName).exists(): - testDataFileExist = True - break - - if not testDataFileExist: - testFileDownloadLink = ( - "http://mxr.mozilla.org/mozilla-central/source/netwerk/test/" - "unit/data/test_psl.txt?raw=1" - ) - E5MessageBox.information( - None, - self.tr("TLD Data File not found"), - self.tr("""<p>The file 'test_psl.txt' was not found!""" - """<br/>You can download it from '<a href="{0}">""" - """<b>here</b></a>' to one of the following""" - """ paths:</p><ul>{1}</ul>""").format( - testFileDownloadLink, - "".join(["<li>{0}</li>".format(p) - for p in self.__dataSearchPaths])) - ) - return False - - file = QFile(testDataFileName) - - if not file.open(QFile.ReadOnly | QFile.Text): - return False - - testRegExp = re.compile( - "checkPublicSuffix\\(('([^']+)'|null), ('([^']+)'|null)\\);") - allTestSuccess = True - - while not file.atEnd(): - line = bytes(file.readLine()).decode("utf-8").strip() - if not line or line.startswith("//"): - continue - - match = testRegExp.search(line) - if match is None: - allTestSuccess = False - else: - hostName, registrableName = match.group(2, 4) - - if not self.__checkPublicSuffix(hostName, registrableName): - allTestSuccess = False - - if allTestSuccess: - qWarning("E5TldExtractor: Test passed successfully.") - else: - qWarning("E5TldExtractor: Test finished with some errors!") - - # reset the TLD dictionary - self.__tldDict = collections.defaultdict(list) - - return allTestSuccess - - def __checkPublicSuffix(self, host, registrableName): - """ - Private method to test a host name against a registrable name. - - @param host host name to test - @type str - @param registrableName registrable domain name to test against - @type str - @return flag indicating the check result - @rtype bool - """ - regName = self.registrableDomain(host) - if regName != registrableName: - qWarning( - "E5TldExtractor Test Error: hostName: {0}\n" - " Correct registrableName: {1}\n" - " Calculated registrableName: {2}".format( - host, registrableName, regName)) - return False - - return True - - -_TLDExtractor = None - - -def instance(withPrivate=False): - """ - Global function to get a reference to the TLD extractor and create it, if - it hasn't been yet. - - @param withPrivate flag indicating to load private TLDs as well - @type bool - @return reference to the zoom manager object - @rtype E5TldExtractor - """ - global _TLDExtractor - - if _TLDExtractor is None: - _TLDExtractor = E5TldExtractor(withPrivate=withPrivate) - - return _TLDExtractor
--- a/eric7/E5Network/E5UrlInfo.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,272 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a class replacing QUrlInfo. -""" - -import enum - -from PyQt6.QtCore import QDateTime - - -class E5UrlPermission(enum.IntEnum): - """ - Class defining the URL permissions. - """ - READ_OWNER = 0o0400 - WRITE_OWNER = 0o0200 - EXE_OWNER = 0o0100 - READ_GROUP = 0o0040 - WRITE_GROUP = 0o0020 - EXE_GROUP = 0o0010 - READ_OTHER = 0o0004 - WRITE_OTHER = 0o0002 - EXE_OTHER = 0o0001 - - -class E5UrlInfo: - """ - Class implementing a replacement for QUrlInfo. - """ - def __init__(self): - """ - Constructor - """ - self.__valid = False - - self.__permissions = 0 - self.__size = 0 - self.__isDir = False - self.__isFile = True - self.__isSymlink = False - self.__isWritable = True - self.__isReadable = True - self.__isExecutable = False - self.__name = "" - self.__owner = "" - self.__group = "" - self.__lastModified = QDateTime() - self.__lastRead = QDateTime() - - def isValid(self): - """ - Public method to check the validity of the object. - - @return flag indicating validity (boolean) - """ - return self.__valid - - def setName(self, name): - """ - Public method to set the name. - - @param name name to be set (string) - """ - self.__name = name - self.__valid = True - - def setPermissions(self, permissions): - """ - Public method to set the permissions. - - @param permissions permissions to be set (integer) - """ - self.__permissions = permissions - self.__valid = True - - def setDir(self, isDir): - """ - Public method to indicate a directory. - - @param isDir flag indicating a directory (boolean) - """ - self.__isDir = isDir - self.__valid = True - - def setFile(self, isFile): - """ - Public method to indicate a file. - - @param isFile flag indicating a file (boolean) - """ - self.__isFile = isFile - self.__valid = True - - def setSymLink(self, isSymLink): - """ - Public method to indicate a symbolic link. - - @param isSymLink flag indicating a symbolic link (boolean) - """ - self.__isSymLink = isSymLink - self.__valid = True - - def setOwner(self, owner): - """ - Public method to set the owner. - - @param owner owner to be set (string) - """ - self.__owner = owner - self.__valid = True - - def setGroup(self, group): - """ - Public method to set the group. - - @param group group to be set (string) - """ - self.__group = group - self.__valid = True - - def setSize(self, size): - """ - Public method to set the size. - - @param size size to be set (integer) - """ - self.__size = size - self.__valid = True - - def setWritable(self, isWritable): - """ - Public method to a writable entry. - - @param isWritable flag indicating a writable entry (boolean) - """ - self.__isWritable = isWritable - self.__valid = True - - def setReadable(self, isReadable): - """ - Public method to a readable entry. - - @param isReadable flag indicating a readable entry (boolean) - """ - self.__isReadable = isReadable - self.__valid = True - - def setLastModified(self, dt): - """ - Public method to set the last modified date and time. - - @param dt date and time to set (QDateTime) - """ - self.__lastModified = QDateTime(dt) - self.__valid = True - - def setLastRead(self, dt): - """ - Public method to set the last read date and time. - - @param dt date and time to set (QDateTime) - """ - self.__lastRead = QDateTime(dt) - self.__valid = True - - def name(self): - """ - Public method to get the name. - - @return name (string) - """ - return self.__name - - def permissions(self): - """ - Public method to get the permissions. - - @return permissions (integer) - """ - return self.__permissions - - def owner(self): - """ - Public method to get the owner. - - @return owner (string) - """ - return self.__owner - - def group(self): - """ - Public method to get the group. - - @return group (string) - """ - return self.__group - - def size(self): - """ - Public method to get the size. - - @return size (integer) - """ - return self.__size - - def lastModified(self): - """ - Public method to get the last modified date and time. - - @return last modified date and time (QDateTime) - """ - return QDateTime(self.__lastModified) - - def lastRead(self): - """ - Public method to get the last read date and time. - - @return last read date and time (QDateTime) - """ - return QDateTime(self.__lastRead) - - def isDir(self): - """ - Public method to test, if the entry is a directory. - - @return flag indicating a directory (boolean) - """ - return self.__isDir - - def isFile(self): - """ - Public method to test, if the entry is a file. - - @return flag indicating a file (boolean) - """ - return self.__isFile - - def isSymLink(self): - """ - Public method to test, if the entry is a symbolic link. - - @return flag indicating a symbolic link (boolean) - """ - return self.__isSymlink - - def isWritable(self): - """ - Public method to test, if the entry is writable. - - @return flag indicating writable (boolean) - """ - return self.__isWritable - - def isReadable(self): - """ - Public method to test, if the entry is readable. - - @return flag indicating readable (boolean) - """ - return self.__isReadable - - def isExecutable(self): - """ - Public method to test, if the entry is executable. - - @return flag indicating executable (boolean) - """ - return self.__isExecutable
--- a/eric7/E5Network/E5XmlRpcClient.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a xmlrpc client for Qt. -""" - -import xmlrpc.client as xmlrpc - -from PyQt6.QtCore import Qt, QObject, QUrl, QByteArray, QEventLoop -from PyQt6.QtGui import QGuiApplication, QCursor -from PyQt6.QtNetwork import ( - QNetworkAccessManager, QNetworkRequest, QNetworkReply -) - -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired -try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler, E5SslErrorState - SSL_AVAILABLE = True -except ImportError: - SSL_AVAILABLE = False - - -class E5XmlRpcClient(QObject): - """ - Class implementing a xmlrpc client for Qt. - """ - def __init__(self, url, parent=None): - """ - Constructor - - @param url xmlrpc handler URL (string or QUrl) - @param parent parent object (QObject) - """ - super().__init__(parent) - - # attributes for the network objects - self.__networkManager = QNetworkAccessManager(self) - self.__networkManager.proxyAuthenticationRequired.connect( - proxyAuthenticationRequired) - self.__networkManager.finished.connect(self.__replyFinished) - if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) - self.__networkManager.sslErrors.connect(self.__sslErrors) - - self.__callmap = {} - - self.__request = QNetworkRequest(QUrl(url)) - self.__request.setRawHeader(b"User-Agent", b"E5XmlRpcClient/1.0") - self.__request.setHeader( - QNetworkRequest.KnownHeaders.ContentTypeHeader, "text/xml") - - def setUrl(self, url): - """ - Public slot to set the xmlrpc handler URL. - - @param url xmlrpc handler URL (string or QUrl) - """ - url = QUrl(url) - if url.isValid(): - self.__request.setUrl(url) - - def call(self, method, args, responseCallback, errorCallback): - """ - Public method to call the remote server. - - @param method name of the remote method to be called (string) - @param args tuple of method arguments (tuple) - @param responseCallback method to be called with the returned - result as a tuple (function) - @param errorCallback method to be called in case of an error - with error code and error string (function) - @exception TypeError raised to indicate an illegal 'args' parameter - type - """ - if not isinstance(args, tuple): - raise TypeError("argument 'args' must be tuple") - - QGuiApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor)) - QGuiApplication.processEvents( - QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) - - data = xmlrpc.dumps(args, method).encode("utf-8") - reply = self.__networkManager.post( - self.__request, QByteArray(data)) - self.__callmap[reply] = (responseCallback, errorCallback) - - def abort(self): - """ - Public method to abort all calls. - """ - for reply in list(self.__callmap): - if reply.isRunning(): - reply.abort() - - def __sslErrors(self, reply, errors): - """ - Private slot to handle SSL errors. - - @param reply reference to the reply object (QNetworkReply) - @param errors list of SSL errors (list of QSslError) - """ - QGuiApplication.restoreOverrideCursor() - QGuiApplication.processEvents( - QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) - - ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] - if ignored == E5SslErrorState.NOT_IGNORED and reply in self.__callmap: - self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, self.tr( - "SSL Error")) - - def __replyFinished(self, reply): - """ - Private slot handling the receipt of a reply. - - @param reply reference to the finished reply (QNetworkReply) - """ - if reply not in self.__callmap: - return - - QGuiApplication.restoreOverrideCursor() - QGuiApplication.processEvents( - QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) - - if reply.error() != QNetworkReply.NetworkError.NoError: - self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, - reply.errorString()) - else: - data = bytes(reply.readAll()).decode("utf-8") - try: - data = xmlrpc.loads(data)[0] - self.__callmap[reply][0](data) - except xmlrpc.Fault as fault: - self.__callmap[reply][1](fault.faultCode, fault.faultString) - - reply.deleteLater() - del self.__callmap[reply]
--- a/eric7/E5Network/__init__.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Package implementing some special network related objects and functions. -""" - -from PyQt6.QtNetwork import QAbstractSocket, QHostAddress - - -def isValidAddress(address): - """ - Public function to check, if the given address is valid. - - @param address IPv4 or IPv6 address string - @type str - @return flag indicating validity - @rtype bool - """ - h = QHostAddress(address) - return not h.isNull() - - -def isValidIPv4Address(address): - """ - Public function to check, if the given address is a valid IPv4 address. - - @param address IPv4 address string - @type str - @return flag indicating validity - @rtype bool - """ - h = QHostAddress(address) - return ( - not h.isNull() and - h.protocol() == QAbstractSocket.NetworkLayerProtocol.IPv4Protocol - ) - - -def isValidIPv6Address(address): - """ - Public function to check, if the given address is a valid IPv6 address. - - @param address IPv6 address string - @type str - @return flag indicating validity - @rtype bool - """ - h = QHostAddress(address) - return ( - not h.isNull() and - h.protocol() == QAbstractSocket.NetworkLayerProtocol.IPv6Protocol - )
--- a/eric7/E5Network/data/__init__.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Package defining some data used by the networking code. -"""
--- a/eric7/E5Network/data/effective_tld_names.dat Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11476 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at https://mozilla.org/MPL/2.0/. - -// ===BEGIN ICANN DOMAINS=== - -// ac : https://en.wikipedia.org/wiki/.ac -ac -com.ac -edu.ac -gov.ac -net.ac -mil.ac -org.ac - -// ad : https://en.wikipedia.org/wiki/.ad -ad -nom.ad - -// ae : https://en.wikipedia.org/wiki/.ae -// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php -ae -co.ae -net.ae -org.ae -sch.ae -ac.ae -gov.ae -mil.ae - -// aero : see https://www.information.aero/index.php?id=66 -aero -accident-investigation.aero -accident-prevention.aero -aerobatic.aero -aeroclub.aero -aerodrome.aero -agents.aero -aircraft.aero -airline.aero -airport.aero -air-surveillance.aero -airtraffic.aero -air-traffic-control.aero -ambulance.aero -amusement.aero -association.aero -author.aero -ballooning.aero -broker.aero -caa.aero -cargo.aero -catering.aero -certification.aero -championship.aero -charter.aero -civilaviation.aero -club.aero -conference.aero -consultant.aero -consulting.aero -control.aero -council.aero -crew.aero -design.aero -dgca.aero -educator.aero -emergency.aero -engine.aero -engineer.aero -entertainment.aero -equipment.aero -exchange.aero -express.aero -federation.aero -flight.aero -freight.aero -fuel.aero -gliding.aero -government.aero -groundhandling.aero -group.aero -hanggliding.aero -homebuilt.aero -insurance.aero -journal.aero -journalist.aero -leasing.aero -logistics.aero -magazine.aero -maintenance.aero -media.aero -microlight.aero -modelling.aero -navigation.aero -parachuting.aero -paragliding.aero -passenger-association.aero -pilot.aero -press.aero -production.aero -recreation.aero -repbody.aero -res.aero -research.aero -rotorcraft.aero -safety.aero -scientist.aero -services.aero -show.aero -skydiving.aero -software.aero -student.aero -trader.aero -trading.aero -trainer.aero -union.aero -workinggroup.aero -works.aero - -// af : http://www.nic.af/help.jsp -af -gov.af -com.af -org.af -net.af -edu.af - -// ag : http://www.nic.ag/prices.htm -ag -com.ag -org.ag -net.ag -co.ag -nom.ag - -// ai : http://nic.com.ai/ -ai -off.ai -com.ai -net.ai -org.ai - -// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 -al -com.al -edu.al -gov.al -mil.al -net.al -org.al - -// am : https://en.wikipedia.org/wiki/.am -am - -// ao : https://en.wikipedia.org/wiki/.ao -// http://www.dns.ao/REGISTR.DOC -ao -ed.ao -gv.ao -og.ao -co.ao -pb.ao -it.ao - -// aq : https://en.wikipedia.org/wiki/.aq -aq - -// ar : https://nic.ar/normativa-vigente.xhtml -ar -com.ar -edu.ar -gob.ar -gov.ar -int.ar -mil.ar -net.ar -org.ar -tur.ar - -// arpa : https://en.wikipedia.org/wiki/.arpa -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -arpa -e164.arpa -in-addr.arpa -ip6.arpa -iris.arpa -uri.arpa -urn.arpa - -// as : https://en.wikipedia.org/wiki/.as -as -gov.as - -// asia : https://en.wikipedia.org/wiki/.asia -asia - -// at : https://en.wikipedia.org/wiki/.at -// Confirmed by registry <it@nic.at> 2008-06-17 -at -ac.at -co.at -gv.at -or.at - -// au : https://en.wikipedia.org/wiki/.au -// http://www.auda.org.au/ -au -// 2LDs -com.au -net.au -org.au -edu.au -gov.au -asn.au -id.au -// Historic 2LDs (closed to new registration, but sites still exist) -info.au -conf.au -oz.au -// CGDNs - http://www.cgdn.org.au/ -act.au -nsw.au -nt.au -qld.au -sa.au -tas.au -vic.au -wa.au -// 3LDs -act.edu.au -nsw.edu.au -nt.edu.au -qld.edu.au -sa.edu.au -tas.edu.au -vic.edu.au -wa.edu.au -// act.gov.au Bug 984824 - Removed at request of Greg Tankard -// nsw.gov.au Bug 547985 - Removed at request of <Shae.Donelan@services.nsw.gov.au> -// nt.gov.au Bug 940478 - Removed at request of Greg Connors <Greg.Connors@nt.gov.au> -qld.gov.au -sa.gov.au -tas.gov.au -vic.gov.au -wa.gov.au - -// aw : https://en.wikipedia.org/wiki/.aw -aw -com.aw - -// ax : https://en.wikipedia.org/wiki/.ax -ax - -// az : https://en.wikipedia.org/wiki/.az -az -com.az -net.az -int.az -gov.az -org.az -edu.az -info.az -pp.az -mil.az -name.az -pro.az -biz.az - -// ba : https://en.wikipedia.org/wiki/.ba -ba -org.ba -net.ba -edu.ba -gov.ba -mil.ba -unsa.ba -unbi.ba -co.ba -com.ba -rs.ba - -// bb : https://en.wikipedia.org/wiki/.bb -bb -biz.bb -co.bb -com.bb -edu.bb -gov.bb -info.bb -net.bb -org.bb -store.bb -tv.bb - -// bd : https://en.wikipedia.org/wiki/.bd -*.bd - -// be : https://en.wikipedia.org/wiki/.be -// Confirmed by registry <tech@dns.be> 2008-06-08 -be -ac.be - -// bf : https://en.wikipedia.org/wiki/.bf -bf -gov.bf - -// bg : https://en.wikipedia.org/wiki/.bg -// https://www.register.bg/user/static/rules/en/index.html -bg -a.bg -b.bg -c.bg -d.bg -e.bg -f.bg -g.bg -h.bg -i.bg -j.bg -k.bg -l.bg -m.bg -n.bg -o.bg -p.bg -q.bg -r.bg -s.bg -t.bg -u.bg -v.bg -w.bg -x.bg -y.bg -z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg - -// bh : https://en.wikipedia.org/wiki/.bh -bh -com.bh -edu.bh -net.bh -org.bh -gov.bh - -// bi : https://en.wikipedia.org/wiki/.bi -// http://whois.nic.bi/ -bi -co.bi -com.bi -edu.bi -or.bi -org.bi - -// biz : https://en.wikipedia.org/wiki/.biz -biz - -// bj : https://en.wikipedia.org/wiki/.bj -bj -asso.bj -barreau.bj -gouv.bj - -// bm : http://www.bermudanic.bm/dnr-text.txt -bm -com.bm -edu.bm -gov.bm -net.bm -org.bm - -// bn : https://en.wikipedia.org/wiki/.bn -*.bn - -// bo : http://www.nic.bo/ -bo -com.bo -edu.bo -gov.bo -gob.bo -int.bo -org.bo -net.bo -mil.bo -tv.bo - -// br : http://registro.br/dominio/categoria.html -// Submitted by registry <fneves@registro.br> -br -adm.br -adv.br -agr.br -am.br -arq.br -art.br -ato.br -b.br -bio.br -blog.br -bmd.br -cim.br -cng.br -cnt.br -com.br -coop.br -ecn.br -eco.br -edu.br -emp.br -eng.br -esp.br -etc.br -eti.br -far.br -flog.br -fm.br -fnd.br -fot.br -fst.br -g12.br -ggf.br -gov.br -imb.br -ind.br -inf.br -jor.br -jus.br -leg.br -lel.br -mat.br -med.br -mil.br -mp.br -mus.br -net.br -*.nom.br -not.br -ntr.br -odo.br -org.br -ppg.br -pro.br -psc.br -psi.br -qsl.br -radio.br -rec.br -slg.br -srv.br -taxi.br -teo.br -tmp.br -trd.br -tur.br -tv.br -vet.br -vlog.br -wiki.br -zlg.br - -// bs : http://www.nic.bs/rules.html -bs -com.bs -net.bs -org.bs -edu.bs -gov.bs - -// bt : https://en.wikipedia.org/wiki/.bt -bt -com.bt -edu.bt -gov.bt -net.bt -org.bt - -// bv : No registrations at this time. -// Submitted by registry <jarle@uninett.no> -bv - -// bw : https://en.wikipedia.org/wiki/.bw -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? -bw -co.bw -org.bw - -// by : https://en.wikipedia.org/wiki/.by -// http://tld.by/rules_2006_en.html -// list of other 2nd level tlds ? -by -gov.by -mil.by -// Official information does not indicate that com.by is a reserved -// second-level domain, but it's being used as one (see www.google.com.by and -// www.yahoo.com.by, for example), so we list it here for safety's sake. -com.by - -// http://hoster.by/ -of.by - -// bz : https://en.wikipedia.org/wiki/.bz -// http://www.belizenic.bz/ -bz -com.bz -net.bz -org.bz -edu.bz -gov.bz - -// ca : https://en.wikipedia.org/wiki/.ca -ca -// ca geographical names -ab.ca -bc.ca -mb.ca -nb.ca -nf.ca -nl.ca -ns.ca -nt.ca -nu.ca -on.ca -pe.ca -qc.ca -sk.ca -yk.ca -// gc.ca: https://en.wikipedia.org/wiki/.gc.ca -// see also: http://registry.gc.ca/en/SubdomainFAQ -gc.ca - -// cat : https://en.wikipedia.org/wiki/.cat -cat - -// cc : https://en.wikipedia.org/wiki/.cc -cc - -// cd : https://en.wikipedia.org/wiki/.cd -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 -cd -gov.cd - -// cf : https://en.wikipedia.org/wiki/.cf -cf - -// cg : https://en.wikipedia.org/wiki/.cg -cg - -// ch : https://en.wikipedia.org/wiki/.ch -ch - -// ci : https://en.wikipedia.org/wiki/.ci -// http://www.nic.ci/index.php?page=charte -ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci -ac.ci -net.ci -go.ci -asso.ci -aéroport.ci -int.ci -presse.ci -md.ci -gouv.ci - -// ck : https://en.wikipedia.org/wiki/.ck -*.ck -!www.ck - -// cl : https://en.wikipedia.org/wiki/.cl -cl -gov.cl -gob.cl -co.cl -mil.cl - -// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927 -cm -co.cm -com.cm -gov.cm -net.cm - -// cn : https://en.wikipedia.org/wiki/.cn -// Submitted by registry <tanyaling@cnnic.cn> -cn -ac.cn -com.cn -edu.cn -gov.cn -net.cn -org.cn -mil.cn -公司.cn -网络.cn -網絡.cn -// cn geographic names -ah.cn -bj.cn -cq.cn -fj.cn -gd.cn -gs.cn -gz.cn -gx.cn -ha.cn -hb.cn -he.cn -hi.cn -hl.cn -hn.cn -jl.cn -js.cn -jx.cn -ln.cn -nm.cn -nx.cn -qh.cn -sc.cn -sd.cn -sh.cn -sn.cn -sx.cn -tj.cn -xj.cn -xz.cn -yn.cn -zj.cn -hk.cn -mo.cn -tw.cn - -// co : https://en.wikipedia.org/wiki/.co -// Submitted by registry <tecnico@uniandes.edu.co> -co -arts.co -com.co -edu.co -firm.co -gov.co -info.co -int.co -mil.co -net.co -nom.co -org.co -rec.co -web.co - -// com : https://en.wikipedia.org/wiki/.com -com - -// coop : https://en.wikipedia.org/wiki/.coop -coop - -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do -cr -ac.cr -co.cr -ed.cr -fi.cr -go.cr -or.cr -sa.cr - -// cu : https://en.wikipedia.org/wiki/.cu -cu -com.cu -edu.cu -org.cu -net.cu -gov.cu -inf.cu - -// cv : https://en.wikipedia.org/wiki/.cv -cv - -// cw : http://www.una.cw/cw_registry/ -// Confirmed by registry <registry@una.net> 2013-03-26 -cw -com.cw -edu.cw -net.cw -org.cw - -// cx : https://en.wikipedia.org/wiki/.cx -// list of other 2nd level tlds ? -cx -gov.cx - -// cy : https://en.wikipedia.org/wiki/.cy -ac.cy -biz.cy -com.cy -ekloges.cy -gov.cy -ltd.cy -name.cy -net.cy -org.cy -parliament.cy -press.cy -pro.cy -tm.cy - -// cz : https://en.wikipedia.org/wiki/.cz -cz - -// de : https://en.wikipedia.org/wiki/.de -// Confirmed by registry <ops@denic.de> (with technical -// reservations) 2008-07-01 -de - -// dj : https://en.wikipedia.org/wiki/.dj -dj - -// dk : https://en.wikipedia.org/wiki/.dk -// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17 -dk - -// dm : https://en.wikipedia.org/wiki/.dm -dm -com.dm -net.dm -org.dm -edu.dm -gov.dm - -// do : https://en.wikipedia.org/wiki/.do -do -art.do -com.do -edu.do -gob.do -gov.do -mil.do -net.do -org.do -sld.do -web.do - -// dz : https://en.wikipedia.org/wiki/.dz -dz -com.dz -org.dz -net.dz -gov.dz -edu.dz -asso.dz -pol.dz -art.dz - -// ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry <vabboud@nic.ec> -ec -com.ec -info.ec -net.ec -fin.ec -k12.ec -med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec -mil.ec - -// edu : https://en.wikipedia.org/wiki/.edu -edu - -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B -ee -edu.ee -gov.ee -riik.ee -lib.ee -med.ee -com.ee -pri.ee -aip.ee -org.ee -fie.ee - -// eg : https://en.wikipedia.org/wiki/.eg -eg -com.eg -edu.eg -eun.eg -gov.eg -mil.eg -name.eg -net.eg -org.eg -sci.eg - -// er : https://en.wikipedia.org/wiki/.er -*.er - -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html -es -com.es -nom.es -org.es -gob.es -edu.es - -// et : https://en.wikipedia.org/wiki/.et -et -com.et -gov.et -org.et -edu.et -biz.et -name.et -info.et -net.et - -// eu : https://en.wikipedia.org/wiki/.eu -eu - -// fi : https://en.wikipedia.org/wiki/.fi -fi -// aland.fi : https://en.wikipedia.org/wiki/.ax -// This domain is being phased out in favor of .ax. As there are still many -// domains under aland.fi, we still keep it on the list until aland.fi is -// completely removed. -// TODO: Check for updates (expected to be phased out around Q1/2009) -aland.fi - -// fj : https://en.wikipedia.org/wiki/.fj -*.fj - -// fk : https://en.wikipedia.org/wiki/.fk -*.fk - -// fm : https://en.wikipedia.org/wiki/.fm -fm - -// fo : https://en.wikipedia.org/wiki/.fo -fo - -// fr : http://www.afnic.fr/ -// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs -fr -com.fr -asso.fr -nom.fr -prd.fr -presse.fr -tm.fr -// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels -aeroport.fr -assedic.fr -avocat.fr -avoues.fr -cci.fr -chambagri.fr -chirurgiens-dentistes.fr -experts-comptables.fr -geometre-expert.fr -gouv.fr -greta.fr -huissier-justice.fr -medecin.fr -notaires.fr -pharmacien.fr -port.fr -veterinaire.fr - -// ga : https://en.wikipedia.org/wiki/.ga -ga - -// gb : This registry is effectively dormant -// Submitted by registry <Damien.Shaw@ja.net> -gb - -// gd : https://en.wikipedia.org/wiki/.gd -gd - -// ge : http://www.nic.net.ge/policy_en.pdf -ge -com.ge -edu.ge -gov.ge -org.ge -mil.ge -net.ge -pvt.ge - -// gf : https://en.wikipedia.org/wiki/.gf -gf - -// gg : http://www.channelisles.net/register-domains/ -// Confirmed by registry <nigel@channelisles.net> 2013-11-28 -gg -co.gg -net.gg -org.gg - -// gh : https://en.wikipedia.org/wiki/.gh -// see also: http://www.nic.gh/reg_now.php -// Although domains directly at second level are not possible at the moment, -// they have been possible for some time and may come back. -gh -com.gh -edu.gh -gov.gh -org.gh -mil.gh - -// gi : http://www.nic.gi/rules.html -gi -com.gi -ltd.gi -gov.gi -mod.gi -edu.gi -org.gi - -// gl : https://en.wikipedia.org/wiki/.gl -// http://nic.gl -gl -co.gl -com.gl -edu.gl -net.gl -org.gl - -// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm -gm - -// gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry <randy@psg.com> -gn -ac.gn -com.gn -edu.gn -gov.gn -org.gn -net.gn - -// gov : https://en.wikipedia.org/wiki/.gov -gov - -// gp : http://www.nic.gp/index.php?lang=en -gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp -asso.gp - -// gq : https://en.wikipedia.org/wiki/.gq -gq - -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry <segred@ics.forth.gr> -gr -com.gr -edu.gr -net.gr -org.gr -gov.gr - -// gs : https://en.wikipedia.org/wiki/.gs -gs - -// gt : http://www.gt/politicas_de_registro.html -gt -com.gt -edu.gt -gob.gt -ind.gt -mil.gt -net.gt -org.gt - -// gu : http://gadao.gov.gu/registration.txt -*.gu - -// gw : https://en.wikipedia.org/wiki/.gw -gw - -// gy : https://en.wikipedia.org/wiki/.gy -// http://registry.gy/ -gy -co.gy -com.gy -edu.gy -gov.gy -net.gy -org.gy - -// hk : https://www.hkdnr.hk -// Submitted by registry <hk.tech@hkirc.hk> -hk -com.hk -edu.hk -gov.hk -idv.hk -net.hk -org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk -个人.hk -箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk -組織.hk -組织.hk - -// hm : https://en.wikipedia.org/wiki/.hm -hm - -// hn : http://www.nic.hn/politicas/ps02,,05.html -hn -com.hn -edu.hn -org.hn -net.hn -mil.hn -gob.hn - -// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf -hr -iz.hr -from.hr -name.hr -com.hr - -// ht : http://www.nic.ht/info/charte.cfm -ht -com.ht -shop.ht -firm.ht -info.ht -adult.ht -net.ht -pro.ht -org.ht -med.ht -art.ht -coop.ht -pol.ht -asso.ht -edu.ht -rel.ht -gouv.ht -perso.ht - -// hu : http://www.domain.hu/domain/English/sld.html -// Confirmed by registry <pasztor@iszt.hu> 2008-06-12 -hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu -2000.hu -agrar.hu -bolt.hu -casino.hu -city.hu -erotica.hu -erotika.hu -film.hu -forum.hu -games.hu -hotel.hu -ingatlan.hu -jogasz.hu -konyvelo.hu -lakas.hu -media.hu -news.hu -reklam.hu -sex.hu -shop.hu -suli.hu -szex.hu -tozsde.hu -utazas.hu -video.hu - -// id : https://register.pandi.or.id/ -id -ac.id -biz.id -co.id -desa.id -go.id -mil.id -my.id -net.id -or.id -sch.id -web.id - -// ie : https://en.wikipedia.org/wiki/.ie -ie -gov.ie - -// il : http://www.isoc.org.il/domains/ -il -ac.il -co.il -gov.il -idf.il -k12.il -muni.il -net.il -org.il - -// im : https://www.nic.im/ -// Submitted by registry <info@nic.im> -im -ac.im -co.im -com.im -ltd.co.im -net.im -org.im -plc.co.im -tt.im -tv.im - -// in : https://en.wikipedia.org/wiki/.in -// see also: https://registry.in/Policies -// Please note, that nic.in is not an official eTLD, but used by most -// government institutions. -in -co.in -firm.in -net.in -org.in -gen.in -ind.in -nic.in -ac.in -edu.in -res.in -gov.in -mil.in - -// info : https://en.wikipedia.org/wiki/.info -info - -// int : https://en.wikipedia.org/wiki/.int -// Confirmed by registry <iana-questions@icann.org> 2008-06-18 -int -eu.int - -// io : http://www.nic.io/rules.html -// list of other 2nd level tlds ? -io -com.io - -// iq : http://www.cmc.iq/english/iq/iqregister1.htm -iq -gov.iq -edu.iq -mil.iq -com.iq -org.iq -net.iq - -// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules -// Also see http://www.nic.ir/Internationalized_Domain_Names -// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16 -ir -ac.ir -co.ir -gov.ir -id.ir -net.ir -org.ir -sch.ir -// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH) -ایران.ir -// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH) -ايران.ir - -// is : http://www.isnic.is/domain/rules.php -// Confirmed by registry <marius@isgate.is> 2008-12-06 -is -net.is -com.is -edu.is -gov.is -org.is -int.is - -// it : https://en.wikipedia.org/wiki/.it -it -gov.it -edu.it -// Reserved geo-names: -// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf -// There is also a list of reserved geo-names corresponding to Italian municipalities -// http://www.nic.it/documenti/appendice-c.pdf, but it is not included here. -// Regions -abr.it -abruzzo.it -aosta-valley.it -aostavalley.it -bas.it -basilicata.it -cal.it -calabria.it -cam.it -campania.it -emilia-romagna.it -emiliaromagna.it -emr.it -friuli-v-giulia.it -friuli-ve-giulia.it -friuli-vegiulia.it -friuli-venezia-giulia.it -friuli-veneziagiulia.it -friuli-vgiulia.it -friuliv-giulia.it -friulive-giulia.it -friulivegiulia.it -friulivenezia-giulia.it -friuliveneziagiulia.it -friulivgiulia.it -fvg.it -laz.it -lazio.it -lig.it -liguria.it -lom.it -lombardia.it -lombardy.it -lucania.it -mar.it -marche.it -mol.it -molise.it -piedmont.it -piemonte.it -pmn.it -pug.it -puglia.it -sar.it -sardegna.it -sardinia.it -sic.it -sicilia.it -sicily.it -taa.it -tos.it -toscana.it -trentino-a-adige.it -trentino-aadige.it -trentino-alto-adige.it -trentino-altoadige.it -trentino-s-tirol.it -trentino-stirol.it -trentino-sud-tirol.it -trentino-sudtirol.it -trentino-sued-tirol.it -trentino-suedtirol.it -trentinoa-adige.it -trentinoaadige.it -trentinoalto-adige.it -trentinoaltoadige.it -trentinos-tirol.it -trentinostirol.it -trentinosud-tirol.it -trentinosudtirol.it -trentinosued-tirol.it -trentinosuedtirol.it -tuscany.it -umb.it -umbria.it -val-d-aosta.it -val-daosta.it -vald-aosta.it -valdaosta.it -valle-aosta.it -valle-d-aosta.it -valle-daosta.it -valleaosta.it -valled-aosta.it -valledaosta.it -vallee-aoste.it -valleeaoste.it -vao.it -vda.it -ven.it -veneto.it -// Provinces -ag.it -agrigento.it -al.it -alessandria.it -alto-adige.it -altoadige.it -an.it -ancona.it -andria-barletta-trani.it -andria-trani-barletta.it -andriabarlettatrani.it -andriatranibarletta.it -ao.it -aosta.it -aoste.it -ap.it -aq.it -aquila.it -ar.it -arezzo.it -ascoli-piceno.it -ascolipiceno.it -asti.it -at.it -av.it -avellino.it -ba.it -balsan.it -bari.it -barletta-trani-andria.it -barlettatraniandria.it -belluno.it -benevento.it -bergamo.it -bg.it -bi.it -biella.it -bl.it -bn.it -bo.it -bologna.it -bolzano.it -bozen.it -br.it -brescia.it -brindisi.it -bs.it -bt.it -bz.it -ca.it -cagliari.it -caltanissetta.it -campidano-medio.it -campidanomedio.it -campobasso.it -carbonia-iglesias.it -carboniaiglesias.it -carrara-massa.it -carraramassa.it -caserta.it -catania.it -catanzaro.it -cb.it -ce.it -cesena-forli.it -cesenaforli.it -ch.it -chieti.it -ci.it -cl.it -cn.it -co.it -como.it -cosenza.it -cr.it -cremona.it -crotone.it -cs.it -ct.it -cuneo.it -cz.it -dell-ogliastra.it -dellogliastra.it -en.it -enna.it -fc.it -fe.it -fermo.it -ferrara.it -fg.it -fi.it -firenze.it -florence.it -fm.it -foggia.it -forli-cesena.it -forlicesena.it -fr.it -frosinone.it -ge.it -genoa.it -genova.it -go.it -gorizia.it -gr.it -grosseto.it -iglesias-carbonia.it -iglesiascarbonia.it -im.it -imperia.it -is.it -isernia.it -kr.it -la-spezia.it -laquila.it -laspezia.it -latina.it -lc.it -le.it -lecce.it -lecco.it -li.it -livorno.it -lo.it -lodi.it -lt.it -lu.it -lucca.it -macerata.it -mantova.it -massa-carrara.it -massacarrara.it -matera.it -mb.it -mc.it -me.it -medio-campidano.it -mediocampidano.it -messina.it -mi.it -milan.it -milano.it -mn.it -mo.it -modena.it -monza-brianza.it -monza-e-della-brianza.it -monza.it -monzabrianza.it -monzaebrianza.it -monzaedellabrianza.it -ms.it -mt.it -na.it -naples.it -napoli.it -no.it -novara.it -nu.it -nuoro.it -og.it -ogliastra.it -olbia-tempio.it -olbiatempio.it -or.it -oristano.it -ot.it -pa.it -padova.it -padua.it -palermo.it -parma.it -pavia.it -pc.it -pd.it -pe.it -perugia.it -pesaro-urbino.it -pesarourbino.it -pescara.it -pg.it -pi.it -piacenza.it -pisa.it -pistoia.it -pn.it -po.it -pordenone.it -potenza.it -pr.it -prato.it -pt.it -pu.it -pv.it -pz.it -ra.it -ragusa.it -ravenna.it -rc.it -re.it -reggio-calabria.it -reggio-emilia.it -reggiocalabria.it -reggioemilia.it -rg.it -ri.it -rieti.it -rimini.it -rm.it -rn.it -ro.it -roma.it -rome.it -rovigo.it -sa.it -salerno.it -sassari.it -savona.it -si.it -siena.it -siracusa.it -so.it -sondrio.it -sp.it -sr.it -ss.it -suedtirol.it -sv.it -ta.it -taranto.it -te.it -tempio-olbia.it -tempioolbia.it -teramo.it -terni.it -tn.it -to.it -torino.it -tp.it -tr.it -trani-andria-barletta.it -trani-barletta-andria.it -traniandriabarletta.it -tranibarlettaandria.it -trapani.it -trentino.it -trento.it -treviso.it -trieste.it -ts.it -turin.it -tv.it -ud.it -udine.it -urbino-pesaro.it -urbinopesaro.it -va.it -varese.it -vb.it -vc.it -ve.it -venezia.it -venice.it -verbania.it -vercelli.it -verona.it -vi.it -vibo-valentia.it -vibovalentia.it -vicenza.it -viterbo.it -vr.it -vs.it -vt.it -vv.it - -// je : http://www.channelisles.net/register-domains/ -// Confirmed by registry <nigel@channelisles.net> 2013-11-28 -je -co.je -net.je -org.je - -// jm : http://www.com.jm/register.html -*.jm - -// jo : http://www.dns.jo/Registration_policy.aspx -jo -com.jo -org.jo -net.jo -edu.jo -sch.jo -gov.jo -mil.jo -name.jo - -// jobs : https://en.wikipedia.org/wiki/.jobs -jobs - -// jp : https://en.wikipedia.org/wiki/.jp -// http://jprs.co.jp/en/jpdomain.html -// Submitted by registry <info@jprs.jp> -jp -// jp organizational type names -ac.jp -ad.jp -co.jp -ed.jp -go.jp -gr.jp -lg.jp -ne.jp -or.jp -// jp prefecture type names -aichi.jp -akita.jp -aomori.jp -chiba.jp -ehime.jp -fukui.jp -fukuoka.jp -fukushima.jp -gifu.jp -gunma.jp -hiroshima.jp -hokkaido.jp -hyogo.jp -ibaraki.jp -ishikawa.jp -iwate.jp -kagawa.jp -kagoshima.jp -kanagawa.jp -kochi.jp -kumamoto.jp -kyoto.jp -mie.jp -miyagi.jp -miyazaki.jp -nagano.jp -nagasaki.jp -nara.jp -niigata.jp -oita.jp -okayama.jp -okinawa.jp -osaka.jp -saga.jp -saitama.jp -shiga.jp -shimane.jp -shizuoka.jp -tochigi.jp -tokushima.jp -tokyo.jp -tottori.jp -toyama.jp -wakayama.jp -yamagata.jp -yamaguchi.jp -yamanashi.jp -栃木.jp -愛知.jp -愛媛.jp -兵庫.jp -熊本.jp -茨城.jp -北海道.jp -千葉.jp -和歌山.jp -長崎.jp -長野.jp -新潟.jp -青森.jp -静岡.jp -東京.jp -石川.jp -埼玉.jp -三重.jp -京都.jp -佐賀.jp -大分.jp -大阪.jp -奈良.jp -宮城.jp -宮崎.jp -富山.jp -山口.jp -山形.jp -山梨.jp -岩手.jp -岐阜.jp -岡山.jp -島根.jp -広島.jp -徳島.jp -沖縄.jp -滋賀.jp -神奈川.jp -福井.jp -福岡.jp -福島.jp -秋田.jp -群馬.jp -香川.jp -高知.jp -鳥取.jp -鹿児島.jp -// jp geographic type names -// http://jprs.jp/doc/rule/saisoku-1.html -*.kawasaki.jp -*.kitakyushu.jp -*.kobe.jp -*.nagoya.jp -*.sapporo.jp -*.sendai.jp -*.yokohama.jp -!city.kawasaki.jp -!city.kitakyushu.jp -!city.kobe.jp -!city.nagoya.jp -!city.sapporo.jp -!city.sendai.jp -!city.yokohama.jp -// 4th level registration -aisai.aichi.jp -ama.aichi.jp -anjo.aichi.jp -asuke.aichi.jp -chiryu.aichi.jp -chita.aichi.jp -fuso.aichi.jp -gamagori.aichi.jp -handa.aichi.jp -hazu.aichi.jp -hekinan.aichi.jp -higashiura.aichi.jp -ichinomiya.aichi.jp -inazawa.aichi.jp -inuyama.aichi.jp -isshiki.aichi.jp -iwakura.aichi.jp -kanie.aichi.jp -kariya.aichi.jp -kasugai.aichi.jp -kira.aichi.jp -kiyosu.aichi.jp -komaki.aichi.jp -konan.aichi.jp -kota.aichi.jp -mihama.aichi.jp -miyoshi.aichi.jp -nishio.aichi.jp -nisshin.aichi.jp -obu.aichi.jp -oguchi.aichi.jp -oharu.aichi.jp -okazaki.aichi.jp -owariasahi.aichi.jp -seto.aichi.jp -shikatsu.aichi.jp -shinshiro.aichi.jp -shitara.aichi.jp -tahara.aichi.jp -takahama.aichi.jp -tobishima.aichi.jp -toei.aichi.jp -togo.aichi.jp -tokai.aichi.jp -tokoname.aichi.jp -toyoake.aichi.jp -toyohashi.aichi.jp -toyokawa.aichi.jp -toyone.aichi.jp -toyota.aichi.jp -tsushima.aichi.jp -yatomi.aichi.jp -akita.akita.jp -daisen.akita.jp -fujisato.akita.jp -gojome.akita.jp -hachirogata.akita.jp -happou.akita.jp -higashinaruse.akita.jp -honjo.akita.jp -honjyo.akita.jp -ikawa.akita.jp -kamikoani.akita.jp -kamioka.akita.jp -katagami.akita.jp -kazuno.akita.jp -kitaakita.akita.jp -kosaka.akita.jp -kyowa.akita.jp -misato.akita.jp -mitane.akita.jp -moriyoshi.akita.jp -nikaho.akita.jp -noshiro.akita.jp -odate.akita.jp -oga.akita.jp -ogata.akita.jp -semboku.akita.jp -yokote.akita.jp -yurihonjo.akita.jp -aomori.aomori.jp -gonohe.aomori.jp -hachinohe.aomori.jp -hashikami.aomori.jp -hiranai.aomori.jp -hirosaki.aomori.jp -itayanagi.aomori.jp -kuroishi.aomori.jp -misawa.aomori.jp -mutsu.aomori.jp -nakadomari.aomori.jp -noheji.aomori.jp -oirase.aomori.jp -owani.aomori.jp -rokunohe.aomori.jp -sannohe.aomori.jp -shichinohe.aomori.jp -shingo.aomori.jp -takko.aomori.jp -towada.aomori.jp -tsugaru.aomori.jp -tsuruta.aomori.jp -abiko.chiba.jp -asahi.chiba.jp -chonan.chiba.jp -chosei.chiba.jp -choshi.chiba.jp -chuo.chiba.jp -funabashi.chiba.jp -futtsu.chiba.jp -hanamigawa.chiba.jp -ichihara.chiba.jp -ichikawa.chiba.jp -ichinomiya.chiba.jp -inzai.chiba.jp -isumi.chiba.jp -kamagaya.chiba.jp -kamogawa.chiba.jp -kashiwa.chiba.jp -katori.chiba.jp -katsuura.chiba.jp -kimitsu.chiba.jp -kisarazu.chiba.jp -kozaki.chiba.jp -kujukuri.chiba.jp -kyonan.chiba.jp -matsudo.chiba.jp -midori.chiba.jp -mihama.chiba.jp -minamiboso.chiba.jp -mobara.chiba.jp -mutsuzawa.chiba.jp -nagara.chiba.jp -nagareyama.chiba.jp -narashino.chiba.jp -narita.chiba.jp -noda.chiba.jp -oamishirasato.chiba.jp -omigawa.chiba.jp -onjuku.chiba.jp -otaki.chiba.jp -sakae.chiba.jp -sakura.chiba.jp -shimofusa.chiba.jp -shirako.chiba.jp -shiroi.chiba.jp -shisui.chiba.jp -sodegaura.chiba.jp -sosa.chiba.jp -tako.chiba.jp -tateyama.chiba.jp -togane.chiba.jp -tohnosho.chiba.jp -tomisato.chiba.jp -urayasu.chiba.jp -yachimata.chiba.jp -yachiyo.chiba.jp -yokaichiba.chiba.jp -yokoshibahikari.chiba.jp -yotsukaido.chiba.jp -ainan.ehime.jp -honai.ehime.jp -ikata.ehime.jp -imabari.ehime.jp -iyo.ehime.jp -kamijima.ehime.jp -kihoku.ehime.jp -kumakogen.ehime.jp -masaki.ehime.jp -matsuno.ehime.jp -matsuyama.ehime.jp -namikata.ehime.jp -niihama.ehime.jp -ozu.ehime.jp -saijo.ehime.jp -seiyo.ehime.jp -shikokuchuo.ehime.jp -tobe.ehime.jp -toon.ehime.jp -uchiko.ehime.jp -uwajima.ehime.jp -yawatahama.ehime.jp -echizen.fukui.jp -eiheiji.fukui.jp -fukui.fukui.jp -ikeda.fukui.jp -katsuyama.fukui.jp -mihama.fukui.jp -minamiechizen.fukui.jp -obama.fukui.jp -ohi.fukui.jp -ono.fukui.jp -sabae.fukui.jp -sakai.fukui.jp -takahama.fukui.jp -tsuruga.fukui.jp -wakasa.fukui.jp -ashiya.fukuoka.jp -buzen.fukuoka.jp -chikugo.fukuoka.jp -chikuho.fukuoka.jp -chikujo.fukuoka.jp -chikushino.fukuoka.jp -chikuzen.fukuoka.jp -chuo.fukuoka.jp -dazaifu.fukuoka.jp -fukuchi.fukuoka.jp -hakata.fukuoka.jp -higashi.fukuoka.jp -hirokawa.fukuoka.jp -hisayama.fukuoka.jp -iizuka.fukuoka.jp -inatsuki.fukuoka.jp -kaho.fukuoka.jp -kasuga.fukuoka.jp -kasuya.fukuoka.jp -kawara.fukuoka.jp -keisen.fukuoka.jp -koga.fukuoka.jp -kurate.fukuoka.jp -kurogi.fukuoka.jp -kurume.fukuoka.jp -minami.fukuoka.jp -miyako.fukuoka.jp -miyama.fukuoka.jp -miyawaka.fukuoka.jp -mizumaki.fukuoka.jp -munakata.fukuoka.jp -nakagawa.fukuoka.jp -nakama.fukuoka.jp -nishi.fukuoka.jp -nogata.fukuoka.jp -ogori.fukuoka.jp -okagaki.fukuoka.jp -okawa.fukuoka.jp -oki.fukuoka.jp -omuta.fukuoka.jp -onga.fukuoka.jp -onojo.fukuoka.jp -oto.fukuoka.jp -saigawa.fukuoka.jp -sasaguri.fukuoka.jp -shingu.fukuoka.jp -shinyoshitomi.fukuoka.jp -shonai.fukuoka.jp -soeda.fukuoka.jp -sue.fukuoka.jp -tachiarai.fukuoka.jp -tagawa.fukuoka.jp -takata.fukuoka.jp -toho.fukuoka.jp -toyotsu.fukuoka.jp -tsuiki.fukuoka.jp -ukiha.fukuoka.jp -umi.fukuoka.jp -usui.fukuoka.jp -yamada.fukuoka.jp -yame.fukuoka.jp -yanagawa.fukuoka.jp -yukuhashi.fukuoka.jp -aizubange.fukushima.jp -aizumisato.fukushima.jp -aizuwakamatsu.fukushima.jp -asakawa.fukushima.jp -bandai.fukushima.jp -date.fukushima.jp -fukushima.fukushima.jp -furudono.fukushima.jp -futaba.fukushima.jp -hanawa.fukushima.jp -higashi.fukushima.jp -hirata.fukushima.jp -hirono.fukushima.jp -iitate.fukushima.jp -inawashiro.fukushima.jp -ishikawa.fukushima.jp -iwaki.fukushima.jp -izumizaki.fukushima.jp -kagamiishi.fukushima.jp -kaneyama.fukushima.jp -kawamata.fukushima.jp -kitakata.fukushima.jp -kitashiobara.fukushima.jp -koori.fukushima.jp -koriyama.fukushima.jp -kunimi.fukushima.jp -miharu.fukushima.jp -mishima.fukushima.jp -namie.fukushima.jp -nango.fukushima.jp -nishiaizu.fukushima.jp -nishigo.fukushima.jp -okuma.fukushima.jp -omotego.fukushima.jp -ono.fukushima.jp -otama.fukushima.jp -samegawa.fukushima.jp -shimogo.fukushima.jp -shirakawa.fukushima.jp -showa.fukushima.jp -soma.fukushima.jp -sukagawa.fukushima.jp -taishin.fukushima.jp -tamakawa.fukushima.jp -tanagura.fukushima.jp -tenei.fukushima.jp -yabuki.fukushima.jp -yamato.fukushima.jp -yamatsuri.fukushima.jp -yanaizu.fukushima.jp -yugawa.fukushima.jp -anpachi.gifu.jp -ena.gifu.jp -gifu.gifu.jp -ginan.gifu.jp -godo.gifu.jp -gujo.gifu.jp -hashima.gifu.jp -hichiso.gifu.jp -hida.gifu.jp -higashishirakawa.gifu.jp -ibigawa.gifu.jp -ikeda.gifu.jp -kakamigahara.gifu.jp -kani.gifu.jp -kasahara.gifu.jp -kasamatsu.gifu.jp -kawaue.gifu.jp -kitagata.gifu.jp -mino.gifu.jp -minokamo.gifu.jp -mitake.gifu.jp -mizunami.gifu.jp -motosu.gifu.jp -nakatsugawa.gifu.jp -ogaki.gifu.jp -sakahogi.gifu.jp -seki.gifu.jp -sekigahara.gifu.jp -shirakawa.gifu.jp -tajimi.gifu.jp -takayama.gifu.jp -tarui.gifu.jp -toki.gifu.jp -tomika.gifu.jp -wanouchi.gifu.jp -yamagata.gifu.jp -yaotsu.gifu.jp -yoro.gifu.jp -annaka.gunma.jp -chiyoda.gunma.jp -fujioka.gunma.jp -higashiagatsuma.gunma.jp -isesaki.gunma.jp -itakura.gunma.jp -kanna.gunma.jp -kanra.gunma.jp -katashina.gunma.jp -kawaba.gunma.jp -kiryu.gunma.jp -kusatsu.gunma.jp -maebashi.gunma.jp -meiwa.gunma.jp -midori.gunma.jp -minakami.gunma.jp -naganohara.gunma.jp -nakanojo.gunma.jp -nanmoku.gunma.jp -numata.gunma.jp -oizumi.gunma.jp -ora.gunma.jp -ota.gunma.jp -shibukawa.gunma.jp -shimonita.gunma.jp -shinto.gunma.jp -showa.gunma.jp -takasaki.gunma.jp -takayama.gunma.jp -tamamura.gunma.jp -tatebayashi.gunma.jp -tomioka.gunma.jp -tsukiyono.gunma.jp -tsumagoi.gunma.jp -ueno.gunma.jp -yoshioka.gunma.jp -asaminami.hiroshima.jp -daiwa.hiroshima.jp -etajima.hiroshima.jp -fuchu.hiroshima.jp -fukuyama.hiroshima.jp -hatsukaichi.hiroshima.jp -higashihiroshima.hiroshima.jp -hongo.hiroshima.jp -jinsekikogen.hiroshima.jp -kaita.hiroshima.jp -kui.hiroshima.jp -kumano.hiroshima.jp -kure.hiroshima.jp -mihara.hiroshima.jp -miyoshi.hiroshima.jp -naka.hiroshima.jp -onomichi.hiroshima.jp -osakikamijima.hiroshima.jp -otake.hiroshima.jp -saka.hiroshima.jp -sera.hiroshima.jp -seranishi.hiroshima.jp -shinichi.hiroshima.jp -shobara.hiroshima.jp -takehara.hiroshima.jp -abashiri.hokkaido.jp -abira.hokkaido.jp -aibetsu.hokkaido.jp -akabira.hokkaido.jp -akkeshi.hokkaido.jp -asahikawa.hokkaido.jp -ashibetsu.hokkaido.jp -ashoro.hokkaido.jp -assabu.hokkaido.jp -atsuma.hokkaido.jp -bibai.hokkaido.jp -biei.hokkaido.jp -bifuka.hokkaido.jp -bihoro.hokkaido.jp -biratori.hokkaido.jp -chippubetsu.hokkaido.jp -chitose.hokkaido.jp -date.hokkaido.jp -ebetsu.hokkaido.jp -embetsu.hokkaido.jp -eniwa.hokkaido.jp -erimo.hokkaido.jp -esan.hokkaido.jp -esashi.hokkaido.jp -fukagawa.hokkaido.jp -fukushima.hokkaido.jp -furano.hokkaido.jp -furubira.hokkaido.jp -haboro.hokkaido.jp -hakodate.hokkaido.jp -hamatonbetsu.hokkaido.jp -hidaka.hokkaido.jp -higashikagura.hokkaido.jp -higashikawa.hokkaido.jp -hiroo.hokkaido.jp -hokuryu.hokkaido.jp -hokuto.hokkaido.jp -honbetsu.hokkaido.jp -horokanai.hokkaido.jp -horonobe.hokkaido.jp -ikeda.hokkaido.jp -imakane.hokkaido.jp -ishikari.hokkaido.jp -iwamizawa.hokkaido.jp -iwanai.hokkaido.jp -kamifurano.hokkaido.jp -kamikawa.hokkaido.jp -kamishihoro.hokkaido.jp -kamisunagawa.hokkaido.jp -kamoenai.hokkaido.jp -kayabe.hokkaido.jp -kembuchi.hokkaido.jp -kikonai.hokkaido.jp -kimobetsu.hokkaido.jp -kitahiroshima.hokkaido.jp -kitami.hokkaido.jp -kiyosato.hokkaido.jp -koshimizu.hokkaido.jp -kunneppu.hokkaido.jp -kuriyama.hokkaido.jp -kuromatsunai.hokkaido.jp -kushiro.hokkaido.jp -kutchan.hokkaido.jp -kyowa.hokkaido.jp -mashike.hokkaido.jp -matsumae.hokkaido.jp -mikasa.hokkaido.jp -minamifurano.hokkaido.jp -mombetsu.hokkaido.jp -moseushi.hokkaido.jp -mukawa.hokkaido.jp -muroran.hokkaido.jp -naie.hokkaido.jp -nakagawa.hokkaido.jp -nakasatsunai.hokkaido.jp -nakatombetsu.hokkaido.jp -nanae.hokkaido.jp -nanporo.hokkaido.jp -nayoro.hokkaido.jp -nemuro.hokkaido.jp -niikappu.hokkaido.jp -niki.hokkaido.jp -nishiokoppe.hokkaido.jp -noboribetsu.hokkaido.jp -numata.hokkaido.jp -obihiro.hokkaido.jp -obira.hokkaido.jp -oketo.hokkaido.jp -okoppe.hokkaido.jp -otaru.hokkaido.jp -otobe.hokkaido.jp -otofuke.hokkaido.jp -otoineppu.hokkaido.jp -oumu.hokkaido.jp -ozora.hokkaido.jp -pippu.hokkaido.jp -rankoshi.hokkaido.jp -rebun.hokkaido.jp -rikubetsu.hokkaido.jp -rishiri.hokkaido.jp -rishirifuji.hokkaido.jp -saroma.hokkaido.jp -sarufutsu.hokkaido.jp -shakotan.hokkaido.jp -shari.hokkaido.jp -shibecha.hokkaido.jp -shibetsu.hokkaido.jp -shikabe.hokkaido.jp -shikaoi.hokkaido.jp -shimamaki.hokkaido.jp -shimizu.hokkaido.jp -shimokawa.hokkaido.jp -shinshinotsu.hokkaido.jp -shintoku.hokkaido.jp -shiranuka.hokkaido.jp -shiraoi.hokkaido.jp -shiriuchi.hokkaido.jp -sobetsu.hokkaido.jp -sunagawa.hokkaido.jp -taiki.hokkaido.jp -takasu.hokkaido.jp -takikawa.hokkaido.jp -takinoue.hokkaido.jp -teshikaga.hokkaido.jp -tobetsu.hokkaido.jp -tohma.hokkaido.jp -tomakomai.hokkaido.jp -tomari.hokkaido.jp -toya.hokkaido.jp -toyako.hokkaido.jp -toyotomi.hokkaido.jp -toyoura.hokkaido.jp -tsubetsu.hokkaido.jp -tsukigata.hokkaido.jp -urakawa.hokkaido.jp -urausu.hokkaido.jp -uryu.hokkaido.jp -utashinai.hokkaido.jp -wakkanai.hokkaido.jp -wassamu.hokkaido.jp -yakumo.hokkaido.jp -yoichi.hokkaido.jp -aioi.hyogo.jp -akashi.hyogo.jp -ako.hyogo.jp -amagasaki.hyogo.jp -aogaki.hyogo.jp -asago.hyogo.jp -ashiya.hyogo.jp -awaji.hyogo.jp -fukusaki.hyogo.jp -goshiki.hyogo.jp -harima.hyogo.jp -himeji.hyogo.jp -ichikawa.hyogo.jp -inagawa.hyogo.jp -itami.hyogo.jp -kakogawa.hyogo.jp -kamigori.hyogo.jp -kamikawa.hyogo.jp -kasai.hyogo.jp -kasuga.hyogo.jp -kawanishi.hyogo.jp -miki.hyogo.jp -minamiawaji.hyogo.jp -nishinomiya.hyogo.jp -nishiwaki.hyogo.jp -ono.hyogo.jp -sanda.hyogo.jp -sannan.hyogo.jp -sasayama.hyogo.jp -sayo.hyogo.jp -shingu.hyogo.jp -shinonsen.hyogo.jp -shiso.hyogo.jp -sumoto.hyogo.jp -taishi.hyogo.jp -taka.hyogo.jp -takarazuka.hyogo.jp -takasago.hyogo.jp -takino.hyogo.jp -tamba.hyogo.jp -tatsuno.hyogo.jp -toyooka.hyogo.jp -yabu.hyogo.jp -yashiro.hyogo.jp -yoka.hyogo.jp -yokawa.hyogo.jp -ami.ibaraki.jp -asahi.ibaraki.jp -bando.ibaraki.jp -chikusei.ibaraki.jp -daigo.ibaraki.jp -fujishiro.ibaraki.jp -hitachi.ibaraki.jp -hitachinaka.ibaraki.jp -hitachiomiya.ibaraki.jp -hitachiota.ibaraki.jp -ibaraki.ibaraki.jp -ina.ibaraki.jp -inashiki.ibaraki.jp -itako.ibaraki.jp -iwama.ibaraki.jp -joso.ibaraki.jp -kamisu.ibaraki.jp -kasama.ibaraki.jp -kashima.ibaraki.jp -kasumigaura.ibaraki.jp -koga.ibaraki.jp -miho.ibaraki.jp -mito.ibaraki.jp -moriya.ibaraki.jp -naka.ibaraki.jp -namegata.ibaraki.jp -oarai.ibaraki.jp -ogawa.ibaraki.jp -omitama.ibaraki.jp -ryugasaki.ibaraki.jp -sakai.ibaraki.jp -sakuragawa.ibaraki.jp -shimodate.ibaraki.jp -shimotsuma.ibaraki.jp -shirosato.ibaraki.jp -sowa.ibaraki.jp -suifu.ibaraki.jp -takahagi.ibaraki.jp -tamatsukuri.ibaraki.jp -tokai.ibaraki.jp -tomobe.ibaraki.jp -tone.ibaraki.jp -toride.ibaraki.jp -tsuchiura.ibaraki.jp -tsukuba.ibaraki.jp -uchihara.ibaraki.jp -ushiku.ibaraki.jp -yachiyo.ibaraki.jp -yamagata.ibaraki.jp -yawara.ibaraki.jp -yuki.ibaraki.jp -anamizu.ishikawa.jp -hakui.ishikawa.jp -hakusan.ishikawa.jp -kaga.ishikawa.jp -kahoku.ishikawa.jp -kanazawa.ishikawa.jp -kawakita.ishikawa.jp -komatsu.ishikawa.jp -nakanoto.ishikawa.jp -nanao.ishikawa.jp -nomi.ishikawa.jp -nonoichi.ishikawa.jp -noto.ishikawa.jp -shika.ishikawa.jp -suzu.ishikawa.jp -tsubata.ishikawa.jp -tsurugi.ishikawa.jp -uchinada.ishikawa.jp -wajima.ishikawa.jp -fudai.iwate.jp -fujisawa.iwate.jp -hanamaki.iwate.jp -hiraizumi.iwate.jp -hirono.iwate.jp -ichinohe.iwate.jp -ichinoseki.iwate.jp -iwaizumi.iwate.jp -iwate.iwate.jp -joboji.iwate.jp -kamaishi.iwate.jp -kanegasaki.iwate.jp -karumai.iwate.jp -kawai.iwate.jp -kitakami.iwate.jp -kuji.iwate.jp -kunohe.iwate.jp -kuzumaki.iwate.jp -miyako.iwate.jp -mizusawa.iwate.jp -morioka.iwate.jp -ninohe.iwate.jp -noda.iwate.jp -ofunato.iwate.jp -oshu.iwate.jp -otsuchi.iwate.jp -rikuzentakata.iwate.jp -shiwa.iwate.jp -shizukuishi.iwate.jp -sumita.iwate.jp -tanohata.iwate.jp -tono.iwate.jp -yahaba.iwate.jp -yamada.iwate.jp -ayagawa.kagawa.jp -higashikagawa.kagawa.jp -kanonji.kagawa.jp -kotohira.kagawa.jp -manno.kagawa.jp -marugame.kagawa.jp -mitoyo.kagawa.jp -naoshima.kagawa.jp -sanuki.kagawa.jp -tadotsu.kagawa.jp -takamatsu.kagawa.jp -tonosho.kagawa.jp -uchinomi.kagawa.jp -utazu.kagawa.jp -zentsuji.kagawa.jp -akune.kagoshima.jp -amami.kagoshima.jp -hioki.kagoshima.jp -isa.kagoshima.jp -isen.kagoshima.jp -izumi.kagoshima.jp -kagoshima.kagoshima.jp -kanoya.kagoshima.jp -kawanabe.kagoshima.jp -kinko.kagoshima.jp -kouyama.kagoshima.jp -makurazaki.kagoshima.jp -matsumoto.kagoshima.jp -minamitane.kagoshima.jp -nakatane.kagoshima.jp -nishinoomote.kagoshima.jp -satsumasendai.kagoshima.jp -soo.kagoshima.jp -tarumizu.kagoshima.jp -yusui.kagoshima.jp -aikawa.kanagawa.jp -atsugi.kanagawa.jp -ayase.kanagawa.jp -chigasaki.kanagawa.jp -ebina.kanagawa.jp -fujisawa.kanagawa.jp -hadano.kanagawa.jp -hakone.kanagawa.jp -hiratsuka.kanagawa.jp -isehara.kanagawa.jp -kaisei.kanagawa.jp -kamakura.kanagawa.jp -kiyokawa.kanagawa.jp -matsuda.kanagawa.jp -minamiashigara.kanagawa.jp -miura.kanagawa.jp -nakai.kanagawa.jp -ninomiya.kanagawa.jp -odawara.kanagawa.jp -oi.kanagawa.jp -oiso.kanagawa.jp -sagamihara.kanagawa.jp -samukawa.kanagawa.jp -tsukui.kanagawa.jp -yamakita.kanagawa.jp -yamato.kanagawa.jp -yokosuka.kanagawa.jp -yugawara.kanagawa.jp -zama.kanagawa.jp -zushi.kanagawa.jp -aki.kochi.jp -geisei.kochi.jp -hidaka.kochi.jp -higashitsuno.kochi.jp -ino.kochi.jp -kagami.kochi.jp -kami.kochi.jp -kitagawa.kochi.jp -kochi.kochi.jp -mihara.kochi.jp -motoyama.kochi.jp -muroto.kochi.jp -nahari.kochi.jp -nakamura.kochi.jp -nankoku.kochi.jp -nishitosa.kochi.jp -niyodogawa.kochi.jp -ochi.kochi.jp -okawa.kochi.jp -otoyo.kochi.jp -otsuki.kochi.jp -sakawa.kochi.jp -sukumo.kochi.jp -susaki.kochi.jp -tosa.kochi.jp -tosashimizu.kochi.jp -toyo.kochi.jp -tsuno.kochi.jp -umaji.kochi.jp -yasuda.kochi.jp -yusuhara.kochi.jp -amakusa.kumamoto.jp -arao.kumamoto.jp -aso.kumamoto.jp -choyo.kumamoto.jp -gyokuto.kumamoto.jp -hitoyoshi.kumamoto.jp -kamiamakusa.kumamoto.jp -kashima.kumamoto.jp -kikuchi.kumamoto.jp -kosa.kumamoto.jp -kumamoto.kumamoto.jp -mashiki.kumamoto.jp -mifune.kumamoto.jp -minamata.kumamoto.jp -minamioguni.kumamoto.jp -nagasu.kumamoto.jp -nishihara.kumamoto.jp -oguni.kumamoto.jp -ozu.kumamoto.jp -sumoto.kumamoto.jp -takamori.kumamoto.jp -uki.kumamoto.jp -uto.kumamoto.jp -yamaga.kumamoto.jp -yamato.kumamoto.jp -yatsushiro.kumamoto.jp -ayabe.kyoto.jp -fukuchiyama.kyoto.jp -higashiyama.kyoto.jp -ide.kyoto.jp -ine.kyoto.jp -joyo.kyoto.jp -kameoka.kyoto.jp -kamo.kyoto.jp -kita.kyoto.jp -kizu.kyoto.jp -kumiyama.kyoto.jp -kyotamba.kyoto.jp -kyotanabe.kyoto.jp -kyotango.kyoto.jp -maizuru.kyoto.jp -minami.kyoto.jp -minamiyamashiro.kyoto.jp -miyazu.kyoto.jp -muko.kyoto.jp -nagaokakyo.kyoto.jp -nakagyo.kyoto.jp -nantan.kyoto.jp -oyamazaki.kyoto.jp -sakyo.kyoto.jp -seika.kyoto.jp -tanabe.kyoto.jp -uji.kyoto.jp -ujitawara.kyoto.jp -wazuka.kyoto.jp -yamashina.kyoto.jp -yawata.kyoto.jp -asahi.mie.jp -inabe.mie.jp -ise.mie.jp -kameyama.mie.jp -kawagoe.mie.jp -kiho.mie.jp -kisosaki.mie.jp -kiwa.mie.jp -komono.mie.jp -kumano.mie.jp -kuwana.mie.jp -matsusaka.mie.jp -meiwa.mie.jp -mihama.mie.jp -minamiise.mie.jp -misugi.mie.jp -miyama.mie.jp -nabari.mie.jp -shima.mie.jp -suzuka.mie.jp -tado.mie.jp -taiki.mie.jp -taki.mie.jp -tamaki.mie.jp -toba.mie.jp -tsu.mie.jp -udono.mie.jp -ureshino.mie.jp -watarai.mie.jp -yokkaichi.mie.jp -furukawa.miyagi.jp -higashimatsushima.miyagi.jp -ishinomaki.miyagi.jp -iwanuma.miyagi.jp -kakuda.miyagi.jp -kami.miyagi.jp -kawasaki.miyagi.jp -kesennuma.miyagi.jp -marumori.miyagi.jp -matsushima.miyagi.jp -minamisanriku.miyagi.jp -misato.miyagi.jp -murata.miyagi.jp -natori.miyagi.jp -ogawara.miyagi.jp -ohira.miyagi.jp -onagawa.miyagi.jp -osaki.miyagi.jp -rifu.miyagi.jp -semine.miyagi.jp -shibata.miyagi.jp -shichikashuku.miyagi.jp -shikama.miyagi.jp -shiogama.miyagi.jp -shiroishi.miyagi.jp -tagajo.miyagi.jp -taiwa.miyagi.jp -tome.miyagi.jp -tomiya.miyagi.jp -wakuya.miyagi.jp -watari.miyagi.jp -yamamoto.miyagi.jp -zao.miyagi.jp -aya.miyazaki.jp -ebino.miyazaki.jp -gokase.miyazaki.jp -hyuga.miyazaki.jp -kadogawa.miyazaki.jp -kawaminami.miyazaki.jp -kijo.miyazaki.jp -kitagawa.miyazaki.jp -kitakata.miyazaki.jp -kitaura.miyazaki.jp -kobayashi.miyazaki.jp -kunitomi.miyazaki.jp -kushima.miyazaki.jp -mimata.miyazaki.jp -miyakonojo.miyazaki.jp -miyazaki.miyazaki.jp -morotsuka.miyazaki.jp -nichinan.miyazaki.jp -nishimera.miyazaki.jp -nobeoka.miyazaki.jp -saito.miyazaki.jp -shiiba.miyazaki.jp -shintomi.miyazaki.jp -takaharu.miyazaki.jp -takanabe.miyazaki.jp -takazaki.miyazaki.jp -tsuno.miyazaki.jp -achi.nagano.jp -agematsu.nagano.jp -anan.nagano.jp -aoki.nagano.jp -asahi.nagano.jp -azumino.nagano.jp -chikuhoku.nagano.jp -chikuma.nagano.jp -chino.nagano.jp -fujimi.nagano.jp -hakuba.nagano.jp -hara.nagano.jp -hiraya.nagano.jp -iida.nagano.jp -iijima.nagano.jp -iiyama.nagano.jp -iizuna.nagano.jp -ikeda.nagano.jp -ikusaka.nagano.jp -ina.nagano.jp -karuizawa.nagano.jp -kawakami.nagano.jp -kiso.nagano.jp -kisofukushima.nagano.jp -kitaaiki.nagano.jp -komagane.nagano.jp -komoro.nagano.jp -matsukawa.nagano.jp -matsumoto.nagano.jp -miasa.nagano.jp -minamiaiki.nagano.jp -minamimaki.nagano.jp -minamiminowa.nagano.jp -minowa.nagano.jp -miyada.nagano.jp -miyota.nagano.jp -mochizuki.nagano.jp -nagano.nagano.jp -nagawa.nagano.jp -nagiso.nagano.jp -nakagawa.nagano.jp -nakano.nagano.jp -nozawaonsen.nagano.jp -obuse.nagano.jp -ogawa.nagano.jp -okaya.nagano.jp -omachi.nagano.jp -omi.nagano.jp -ookuwa.nagano.jp -ooshika.nagano.jp -otaki.nagano.jp -otari.nagano.jp -sakae.nagano.jp -sakaki.nagano.jp -saku.nagano.jp -sakuho.nagano.jp -shimosuwa.nagano.jp -shinanomachi.nagano.jp -shiojiri.nagano.jp -suwa.nagano.jp -suzaka.nagano.jp -takagi.nagano.jp -takamori.nagano.jp -takayama.nagano.jp -tateshina.nagano.jp -tatsuno.nagano.jp -togakushi.nagano.jp -togura.nagano.jp -tomi.nagano.jp -ueda.nagano.jp -wada.nagano.jp -yamagata.nagano.jp -yamanouchi.nagano.jp -yasaka.nagano.jp -yasuoka.nagano.jp -chijiwa.nagasaki.jp -futsu.nagasaki.jp -goto.nagasaki.jp -hasami.nagasaki.jp -hirado.nagasaki.jp -iki.nagasaki.jp -isahaya.nagasaki.jp -kawatana.nagasaki.jp -kuchinotsu.nagasaki.jp -matsuura.nagasaki.jp -nagasaki.nagasaki.jp -obama.nagasaki.jp -omura.nagasaki.jp -oseto.nagasaki.jp -saikai.nagasaki.jp -sasebo.nagasaki.jp -seihi.nagasaki.jp -shimabara.nagasaki.jp -shinkamigoto.nagasaki.jp -togitsu.nagasaki.jp -tsushima.nagasaki.jp -unzen.nagasaki.jp -ando.nara.jp -gose.nara.jp -heguri.nara.jp -higashiyoshino.nara.jp -ikaruga.nara.jp -ikoma.nara.jp -kamikitayama.nara.jp -kanmaki.nara.jp -kashiba.nara.jp -kashihara.nara.jp -katsuragi.nara.jp -kawai.nara.jp -kawakami.nara.jp -kawanishi.nara.jp -koryo.nara.jp -kurotaki.nara.jp -mitsue.nara.jp -miyake.nara.jp -nara.nara.jp -nosegawa.nara.jp -oji.nara.jp -ouda.nara.jp -oyodo.nara.jp -sakurai.nara.jp -sango.nara.jp -shimoichi.nara.jp -shimokitayama.nara.jp -shinjo.nara.jp -soni.nara.jp -takatori.nara.jp -tawaramoto.nara.jp -tenkawa.nara.jp -tenri.nara.jp -uda.nara.jp -yamatokoriyama.nara.jp -yamatotakada.nara.jp -yamazoe.nara.jp -yoshino.nara.jp -aga.niigata.jp -agano.niigata.jp -gosen.niigata.jp -itoigawa.niigata.jp -izumozaki.niigata.jp -joetsu.niigata.jp -kamo.niigata.jp -kariwa.niigata.jp -kashiwazaki.niigata.jp -minamiuonuma.niigata.jp -mitsuke.niigata.jp -muika.niigata.jp -murakami.niigata.jp -myoko.niigata.jp -nagaoka.niigata.jp -niigata.niigata.jp -ojiya.niigata.jp -omi.niigata.jp -sado.niigata.jp -sanjo.niigata.jp -seiro.niigata.jp -seirou.niigata.jp -sekikawa.niigata.jp -shibata.niigata.jp -tagami.niigata.jp -tainai.niigata.jp -tochio.niigata.jp -tokamachi.niigata.jp -tsubame.niigata.jp -tsunan.niigata.jp -uonuma.niigata.jp -yahiko.niigata.jp -yoita.niigata.jp -yuzawa.niigata.jp -beppu.oita.jp -bungoono.oita.jp -bungotakada.oita.jp -hasama.oita.jp -hiji.oita.jp -himeshima.oita.jp -hita.oita.jp -kamitsue.oita.jp -kokonoe.oita.jp -kuju.oita.jp -kunisaki.oita.jp -kusu.oita.jp -oita.oita.jp -saiki.oita.jp -taketa.oita.jp -tsukumi.oita.jp -usa.oita.jp -usuki.oita.jp -yufu.oita.jp -akaiwa.okayama.jp -asakuchi.okayama.jp -bizen.okayama.jp -hayashima.okayama.jp -ibara.okayama.jp -kagamino.okayama.jp -kasaoka.okayama.jp -kibichuo.okayama.jp -kumenan.okayama.jp -kurashiki.okayama.jp -maniwa.okayama.jp -misaki.okayama.jp -nagi.okayama.jp -niimi.okayama.jp -nishiawakura.okayama.jp -okayama.okayama.jp -satosho.okayama.jp -setouchi.okayama.jp -shinjo.okayama.jp -shoo.okayama.jp -soja.okayama.jp -takahashi.okayama.jp -tamano.okayama.jp -tsuyama.okayama.jp -wake.okayama.jp -yakage.okayama.jp -aguni.okinawa.jp -ginowan.okinawa.jp -ginoza.okinawa.jp -gushikami.okinawa.jp -haebaru.okinawa.jp -higashi.okinawa.jp -hirara.okinawa.jp -iheya.okinawa.jp -ishigaki.okinawa.jp -ishikawa.okinawa.jp -itoman.okinawa.jp -izena.okinawa.jp -kadena.okinawa.jp -kin.okinawa.jp -kitadaito.okinawa.jp -kitanakagusuku.okinawa.jp -kumejima.okinawa.jp -kunigami.okinawa.jp -minamidaito.okinawa.jp -motobu.okinawa.jp -nago.okinawa.jp -naha.okinawa.jp -nakagusuku.okinawa.jp -nakijin.okinawa.jp -nanjo.okinawa.jp -nishihara.okinawa.jp -ogimi.okinawa.jp -okinawa.okinawa.jp -onna.okinawa.jp -shimoji.okinawa.jp -taketomi.okinawa.jp -tarama.okinawa.jp -tokashiki.okinawa.jp -tomigusuku.okinawa.jp -tonaki.okinawa.jp -urasoe.okinawa.jp -uruma.okinawa.jp -yaese.okinawa.jp -yomitan.okinawa.jp -yonabaru.okinawa.jp -yonaguni.okinawa.jp -zamami.okinawa.jp -abeno.osaka.jp -chihayaakasaka.osaka.jp -chuo.osaka.jp -daito.osaka.jp -fujiidera.osaka.jp -habikino.osaka.jp -hannan.osaka.jp -higashiosaka.osaka.jp -higashisumiyoshi.osaka.jp -higashiyodogawa.osaka.jp -hirakata.osaka.jp -ibaraki.osaka.jp -ikeda.osaka.jp -izumi.osaka.jp -izumiotsu.osaka.jp -izumisano.osaka.jp -kadoma.osaka.jp -kaizuka.osaka.jp -kanan.osaka.jp -kashiwara.osaka.jp -katano.osaka.jp -kawachinagano.osaka.jp -kishiwada.osaka.jp -kita.osaka.jp -kumatori.osaka.jp -matsubara.osaka.jp -minato.osaka.jp -minoh.osaka.jp -misaki.osaka.jp -moriguchi.osaka.jp -neyagawa.osaka.jp -nishi.osaka.jp -nose.osaka.jp -osakasayama.osaka.jp -sakai.osaka.jp -sayama.osaka.jp -sennan.osaka.jp -settsu.osaka.jp -shijonawate.osaka.jp -shimamoto.osaka.jp -suita.osaka.jp -tadaoka.osaka.jp -taishi.osaka.jp -tajiri.osaka.jp -takaishi.osaka.jp -takatsuki.osaka.jp -tondabayashi.osaka.jp -toyonaka.osaka.jp -toyono.osaka.jp -yao.osaka.jp -ariake.saga.jp -arita.saga.jp -fukudomi.saga.jp -genkai.saga.jp -hamatama.saga.jp -hizen.saga.jp -imari.saga.jp -kamimine.saga.jp -kanzaki.saga.jp -karatsu.saga.jp -kashima.saga.jp -kitagata.saga.jp -kitahata.saga.jp -kiyama.saga.jp -kouhoku.saga.jp -kyuragi.saga.jp -nishiarita.saga.jp -ogi.saga.jp -omachi.saga.jp -ouchi.saga.jp -saga.saga.jp -shiroishi.saga.jp -taku.saga.jp -tara.saga.jp -tosu.saga.jp -yoshinogari.saga.jp -arakawa.saitama.jp -asaka.saitama.jp -chichibu.saitama.jp -fujimi.saitama.jp -fujimino.saitama.jp -fukaya.saitama.jp -hanno.saitama.jp -hanyu.saitama.jp -hasuda.saitama.jp -hatogaya.saitama.jp -hatoyama.saitama.jp -hidaka.saitama.jp -higashichichibu.saitama.jp -higashimatsuyama.saitama.jp -honjo.saitama.jp -ina.saitama.jp -iruma.saitama.jp -iwatsuki.saitama.jp -kamiizumi.saitama.jp -kamikawa.saitama.jp -kamisato.saitama.jp -kasukabe.saitama.jp -kawagoe.saitama.jp -kawaguchi.saitama.jp -kawajima.saitama.jp -kazo.saitama.jp -kitamoto.saitama.jp -koshigaya.saitama.jp -kounosu.saitama.jp -kuki.saitama.jp -kumagaya.saitama.jp -matsubushi.saitama.jp -minano.saitama.jp -misato.saitama.jp -miyashiro.saitama.jp -miyoshi.saitama.jp -moroyama.saitama.jp -nagatoro.saitama.jp -namegawa.saitama.jp -niiza.saitama.jp -ogano.saitama.jp -ogawa.saitama.jp -ogose.saitama.jp -okegawa.saitama.jp -omiya.saitama.jp -otaki.saitama.jp -ranzan.saitama.jp -ryokami.saitama.jp -saitama.saitama.jp -sakado.saitama.jp -satte.saitama.jp -sayama.saitama.jp -shiki.saitama.jp -shiraoka.saitama.jp -soka.saitama.jp -sugito.saitama.jp -toda.saitama.jp -tokigawa.saitama.jp -tokorozawa.saitama.jp -tsurugashima.saitama.jp -urawa.saitama.jp -warabi.saitama.jp -yashio.saitama.jp -yokoze.saitama.jp -yono.saitama.jp -yorii.saitama.jp -yoshida.saitama.jp -yoshikawa.saitama.jp -yoshimi.saitama.jp -aisho.shiga.jp -gamo.shiga.jp -higashiomi.shiga.jp -hikone.shiga.jp -koka.shiga.jp -konan.shiga.jp -kosei.shiga.jp -koto.shiga.jp -kusatsu.shiga.jp -maibara.shiga.jp -moriyama.shiga.jp -nagahama.shiga.jp -nishiazai.shiga.jp -notogawa.shiga.jp -omihachiman.shiga.jp -otsu.shiga.jp -ritto.shiga.jp -ryuoh.shiga.jp -takashima.shiga.jp -takatsuki.shiga.jp -torahime.shiga.jp -toyosato.shiga.jp -yasu.shiga.jp -akagi.shimane.jp -ama.shimane.jp -gotsu.shimane.jp -hamada.shimane.jp -higashiizumo.shimane.jp -hikawa.shimane.jp -hikimi.shimane.jp -izumo.shimane.jp -kakinoki.shimane.jp -masuda.shimane.jp -matsue.shimane.jp -misato.shimane.jp -nishinoshima.shimane.jp -ohda.shimane.jp -okinoshima.shimane.jp -okuizumo.shimane.jp -shimane.shimane.jp -tamayu.shimane.jp -tsuwano.shimane.jp -unnan.shimane.jp -yakumo.shimane.jp -yasugi.shimane.jp -yatsuka.shimane.jp -arai.shizuoka.jp -atami.shizuoka.jp -fuji.shizuoka.jp -fujieda.shizuoka.jp -fujikawa.shizuoka.jp -fujinomiya.shizuoka.jp -fukuroi.shizuoka.jp -gotemba.shizuoka.jp -haibara.shizuoka.jp -hamamatsu.shizuoka.jp -higashiizu.shizuoka.jp -ito.shizuoka.jp -iwata.shizuoka.jp -izu.shizuoka.jp -izunokuni.shizuoka.jp -kakegawa.shizuoka.jp -kannami.shizuoka.jp -kawanehon.shizuoka.jp -kawazu.shizuoka.jp -kikugawa.shizuoka.jp -kosai.shizuoka.jp -makinohara.shizuoka.jp -matsuzaki.shizuoka.jp -minamiizu.shizuoka.jp -mishima.shizuoka.jp -morimachi.shizuoka.jp -nishiizu.shizuoka.jp -numazu.shizuoka.jp -omaezaki.shizuoka.jp -shimada.shizuoka.jp -shimizu.shizuoka.jp -shimoda.shizuoka.jp -shizuoka.shizuoka.jp -susono.shizuoka.jp -yaizu.shizuoka.jp -yoshida.shizuoka.jp -ashikaga.tochigi.jp -bato.tochigi.jp -haga.tochigi.jp -ichikai.tochigi.jp -iwafune.tochigi.jp -kaminokawa.tochigi.jp -kanuma.tochigi.jp -karasuyama.tochigi.jp -kuroiso.tochigi.jp -mashiko.tochigi.jp -mibu.tochigi.jp -moka.tochigi.jp -motegi.tochigi.jp -nasu.tochigi.jp -nasushiobara.tochigi.jp -nikko.tochigi.jp -nishikata.tochigi.jp -nogi.tochigi.jp -ohira.tochigi.jp -ohtawara.tochigi.jp -oyama.tochigi.jp -sakura.tochigi.jp -sano.tochigi.jp -shimotsuke.tochigi.jp -shioya.tochigi.jp -takanezawa.tochigi.jp -tochigi.tochigi.jp -tsuga.tochigi.jp -ujiie.tochigi.jp -utsunomiya.tochigi.jp -yaita.tochigi.jp -aizumi.tokushima.jp -anan.tokushima.jp -ichiba.tokushima.jp -itano.tokushima.jp -kainan.tokushima.jp -komatsushima.tokushima.jp -matsushige.tokushima.jp -mima.tokushima.jp -minami.tokushima.jp -miyoshi.tokushima.jp -mugi.tokushima.jp -nakagawa.tokushima.jp -naruto.tokushima.jp -sanagochi.tokushima.jp -shishikui.tokushima.jp -tokushima.tokushima.jp -wajiki.tokushima.jp -adachi.tokyo.jp -akiruno.tokyo.jp -akishima.tokyo.jp -aogashima.tokyo.jp -arakawa.tokyo.jp -bunkyo.tokyo.jp -chiyoda.tokyo.jp -chofu.tokyo.jp -chuo.tokyo.jp -edogawa.tokyo.jp -fuchu.tokyo.jp -fussa.tokyo.jp -hachijo.tokyo.jp -hachioji.tokyo.jp -hamura.tokyo.jp -higashikurume.tokyo.jp -higashimurayama.tokyo.jp -higashiyamato.tokyo.jp -hino.tokyo.jp -hinode.tokyo.jp -hinohara.tokyo.jp -inagi.tokyo.jp -itabashi.tokyo.jp -katsushika.tokyo.jp -kita.tokyo.jp -kiyose.tokyo.jp -kodaira.tokyo.jp -koganei.tokyo.jp -kokubunji.tokyo.jp -komae.tokyo.jp -koto.tokyo.jp -kouzushima.tokyo.jp -kunitachi.tokyo.jp -machida.tokyo.jp -meguro.tokyo.jp -minato.tokyo.jp -mitaka.tokyo.jp -mizuho.tokyo.jp -musashimurayama.tokyo.jp -musashino.tokyo.jp -nakano.tokyo.jp -nerima.tokyo.jp -ogasawara.tokyo.jp -okutama.tokyo.jp -ome.tokyo.jp -oshima.tokyo.jp -ota.tokyo.jp -setagaya.tokyo.jp -shibuya.tokyo.jp -shinagawa.tokyo.jp -shinjuku.tokyo.jp -suginami.tokyo.jp -sumida.tokyo.jp -tachikawa.tokyo.jp -taito.tokyo.jp -tama.tokyo.jp -toshima.tokyo.jp -chizu.tottori.jp -hino.tottori.jp -kawahara.tottori.jp -koge.tottori.jp -kotoura.tottori.jp -misasa.tottori.jp -nanbu.tottori.jp -nichinan.tottori.jp -sakaiminato.tottori.jp -tottori.tottori.jp -wakasa.tottori.jp -yazu.tottori.jp -yonago.tottori.jp -asahi.toyama.jp -fuchu.toyama.jp -fukumitsu.toyama.jp -funahashi.toyama.jp -himi.toyama.jp -imizu.toyama.jp -inami.toyama.jp -johana.toyama.jp -kamiichi.toyama.jp -kurobe.toyama.jp -nakaniikawa.toyama.jp -namerikawa.toyama.jp -nanto.toyama.jp -nyuzen.toyama.jp -oyabe.toyama.jp -taira.toyama.jp -takaoka.toyama.jp -tateyama.toyama.jp -toga.toyama.jp -tonami.toyama.jp -toyama.toyama.jp -unazuki.toyama.jp -uozu.toyama.jp -yamada.toyama.jp -arida.wakayama.jp -aridagawa.wakayama.jp -gobo.wakayama.jp -hashimoto.wakayama.jp -hidaka.wakayama.jp -hirogawa.wakayama.jp -inami.wakayama.jp -iwade.wakayama.jp -kainan.wakayama.jp -kamitonda.wakayama.jp -katsuragi.wakayama.jp -kimino.wakayama.jp -kinokawa.wakayama.jp -kitayama.wakayama.jp -koya.wakayama.jp -koza.wakayama.jp -kozagawa.wakayama.jp -kudoyama.wakayama.jp -kushimoto.wakayama.jp -mihama.wakayama.jp -misato.wakayama.jp -nachikatsuura.wakayama.jp -shingu.wakayama.jp -shirahama.wakayama.jp -taiji.wakayama.jp -tanabe.wakayama.jp -wakayama.wakayama.jp -yuasa.wakayama.jp -yura.wakayama.jp -asahi.yamagata.jp -funagata.yamagata.jp -higashine.yamagata.jp -iide.yamagata.jp -kahoku.yamagata.jp -kaminoyama.yamagata.jp -kaneyama.yamagata.jp -kawanishi.yamagata.jp -mamurogawa.yamagata.jp -mikawa.yamagata.jp -murayama.yamagata.jp -nagai.yamagata.jp -nakayama.yamagata.jp -nanyo.yamagata.jp -nishikawa.yamagata.jp -obanazawa.yamagata.jp -oe.yamagata.jp -oguni.yamagata.jp -ohkura.yamagata.jp -oishida.yamagata.jp -sagae.yamagata.jp -sakata.yamagata.jp -sakegawa.yamagata.jp -shinjo.yamagata.jp -shirataka.yamagata.jp -shonai.yamagata.jp -takahata.yamagata.jp -tendo.yamagata.jp -tozawa.yamagata.jp -tsuruoka.yamagata.jp -yamagata.yamagata.jp -yamanobe.yamagata.jp -yonezawa.yamagata.jp -yuza.yamagata.jp -abu.yamaguchi.jp -hagi.yamaguchi.jp -hikari.yamaguchi.jp -hofu.yamaguchi.jp -iwakuni.yamaguchi.jp -kudamatsu.yamaguchi.jp -mitou.yamaguchi.jp -nagato.yamaguchi.jp -oshima.yamaguchi.jp -shimonoseki.yamaguchi.jp -shunan.yamaguchi.jp -tabuse.yamaguchi.jp -tokuyama.yamaguchi.jp -toyota.yamaguchi.jp -ube.yamaguchi.jp -yuu.yamaguchi.jp -chuo.yamanashi.jp -doshi.yamanashi.jp -fuefuki.yamanashi.jp -fujikawa.yamanashi.jp -fujikawaguchiko.yamanashi.jp -fujiyoshida.yamanashi.jp -hayakawa.yamanashi.jp -hokuto.yamanashi.jp -ichikawamisato.yamanashi.jp -kai.yamanashi.jp -kofu.yamanashi.jp -koshu.yamanashi.jp -kosuge.yamanashi.jp -minami-alps.yamanashi.jp -minobu.yamanashi.jp -nakamichi.yamanashi.jp -nanbu.yamanashi.jp -narusawa.yamanashi.jp -nirasaki.yamanashi.jp -nishikatsura.yamanashi.jp -oshino.yamanashi.jp -otsuki.yamanashi.jp -showa.yamanashi.jp -tabayama.yamanashi.jp -tsuru.yamanashi.jp -uenohara.yamanashi.jp -yamanakako.yamanashi.jp -yamanashi.yamanashi.jp - -// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 -*.ke - -// kg : http://www.domain.kg/dmn_n.html -kg -org.kg -net.kg -com.kg -edu.kg -gov.kg -mil.kg - -// kh : http://www.mptc.gov.kh/dns_registration.htm -*.kh - -// ki : http://www.ki/dns/index.html -ki -edu.ki -biz.ki -net.ki -org.ki -gov.ki -info.ki -com.ki - -// km : https://en.wikipedia.org/wiki/.km -// http://www.domaine.km/documents/charte.doc -km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km -ass.km -com.km -// These are only mentioned as proposed suggestions at domaine.km, but -// https://en.wikipedia.org/wiki/.km says they're available for registration: -coop.km -asso.km -presse.km -medecin.km -notaires.km -pharmaciens.km -veterinaire.km -gouv.km - -// kn : https://en.wikipedia.org/wiki/.kn -// http://www.dot.kn/domainRules.html -kn -net.kn -org.kn -edu.kn -gov.kn - -// kp : http://www.kcce.kp/en_index.php -kp -com.kp -edu.kp -gov.kp -org.kp -rep.kp -tra.kp - -// kr : https://en.wikipedia.org/wiki/.kr -// see also: http://domain.nida.or.kr/eng/registration.jsp -kr -ac.kr -co.kr -es.kr -go.kr -hs.kr -kg.kr -mil.kr -ms.kr -ne.kr -or.kr -pe.kr -re.kr -sc.kr -// kr geographical names -busan.kr -chungbuk.kr -chungnam.kr -daegu.kr -daejeon.kr -gangwon.kr -gwangju.kr -gyeongbuk.kr -gyeonggi.kr -gyeongnam.kr -incheon.kr -jeju.kr -jeonbuk.kr -jeonnam.kr -seoul.kr -ulsan.kr - -// kw : https://en.wikipedia.org/wiki/.kw -*.kw - -// ky : http://www.icta.ky/da_ky_reg_dom.php -// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17 -ky -edu.ky -gov.ky -com.ky -org.ky -net.ky - -// kz : https://en.wikipedia.org/wiki/.kz -// see also: http://www.nic.kz/rules/index.jsp -kz -org.kz -edu.kz -net.kz -gov.kz -mil.kz -com.kz - -// la : https://en.wikipedia.org/wiki/.la -// Submitted by registry <gavin.brown@nic.la> -la -int.la -net.la -info.la -edu.la -gov.la -per.la -com.la -org.la - -// lb : https://en.wikipedia.org/wiki/.lb -// Submitted by registry <randy@psg.com> -lb -com.lb -edu.lb -gov.lb -net.lb -org.lb - -// lc : https://en.wikipedia.org/wiki/.lc -// see also: http://www.nic.lc/rules.htm -lc -com.lc -net.lc -co.lc -org.lc -edu.lc -gov.lc - -// li : https://en.wikipedia.org/wiki/.li -li - -// lk : http://www.nic.lk/seclevpr.html -lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk -assn.lk -grp.lk -hotel.lk -ac.lk - -// lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry <randy@psg.com> -lr -com.lr -edu.lr -gov.lr -org.lr -net.lr - -// ls : https://en.wikipedia.org/wiki/.ls -ls -co.ls -org.ls - -// lt : https://en.wikipedia.org/wiki/.lt -lt -// gov.lt : http://www.gov.lt/index_en.php -gov.lt - -// lu : http://www.dns.lu/en/ -lu - -// lv : http://www.nic.lv/DNS/En/generic.php -lv -com.lv -edu.lv -gov.lv -org.lv -mil.lv -id.lv -net.lv -asn.lv -conf.lv - -// ly : http://www.nic.ly/regulations.php -ly -com.ly -net.ly -gov.ly -plc.ly -edu.ly -sch.ly -med.ly -org.ly -id.ly - -// ma : https://en.wikipedia.org/wiki/.ma -// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf -ma -co.ma -net.ma -gov.ma -org.ma -ac.ma -press.ma - -// mc : http://www.nic.mc/ -mc -tm.mc -asso.mc - -// md : https://en.wikipedia.org/wiki/.md -md - -// me : https://en.wikipedia.org/wiki/.me -me -co.me -net.me -org.me -edu.me -ac.me -gov.me -its.me -priv.me - -// mg : http://nic.mg/nicmg/?page_id=39 -mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg -co.mg - -// mh : https://en.wikipedia.org/wiki/.mh -mh - -// mil : https://en.wikipedia.org/wiki/.mil -mil - -// mk : https://en.wikipedia.org/wiki/.mk -// see also: http://dns.marnet.net.mk/postapka.php -mk -com.mk -org.mk -net.mk -edu.mk -gov.mk -inf.mk -name.mk - -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: https://en.wikipedia.org/wiki/.ml -ml -com.ml -edu.ml -gouv.ml -gov.ml -net.ml -org.ml -presse.ml - -// mm : https://en.wikipedia.org/wiki/.mm -*.mm - -// mn : https://en.wikipedia.org/wiki/.mn -mn -gov.mn -edu.mn -org.mn - -// mo : http://www.monic.net.mo/ -mo -com.mo -net.mo -org.mo -edu.mo -gov.mo - -// mobi : https://en.wikipedia.org/wiki/.mobi -mobi - -// mp : http://www.dot.mp/ -// Confirmed by registry <dcamacho@saipan.com> 2008-06-17 -mp - -// mq : https://en.wikipedia.org/wiki/.mq -mq - -// mr : https://en.wikipedia.org/wiki/.mr -mr -gov.mr - -// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf -ms -com.ms -edu.ms -gov.ms -net.ms -org.ms - -// mt : https://www.nic.org.mt/go/policy -// Submitted by registry <help@nic.org.mt> -mt -com.mt -edu.mt -net.mt -org.mt - -// mu : https://en.wikipedia.org/wiki/.mu -mu -com.mu -net.mu -org.mu -gov.mu -ac.mu -co.mu -or.mu - -// museum : http://about.museum/naming/ -// http://index.museum/ -museum -academy.museum -agriculture.museum -air.museum -airguard.museum -alabama.museum -alaska.museum -amber.museum -ambulance.museum -american.museum -americana.museum -americanantiques.museum -americanart.museum -amsterdam.museum -and.museum -annefrank.museum -anthro.museum -anthropology.museum -antiques.museum -aquarium.museum -arboretum.museum -archaeological.museum -archaeology.museum -architecture.museum -art.museum -artanddesign.museum -artcenter.museum -artdeco.museum -arteducation.museum -artgallery.museum -arts.museum -artsandcrafts.museum -asmatart.museum -assassination.museum -assisi.museum -association.museum -astronomy.museum -atlanta.museum -austin.museum -australia.museum -automotive.museum -aviation.museum -axis.museum -badajoz.museum -baghdad.museum -bahn.museum -bale.museum -baltimore.museum -barcelona.museum -baseball.museum -basel.museum -baths.museum -bauern.museum -beauxarts.museum -beeldengeluid.museum -bellevue.museum -bergbau.museum -berkeley.museum -berlin.museum -bern.museum -bible.museum -bilbao.museum -bill.museum -birdart.museum -birthplace.museum -bonn.museum -boston.museum -botanical.museum -botanicalgarden.museum -botanicgarden.museum -botany.museum -brandywinevalley.museum -brasil.museum -bristol.museum -british.museum -britishcolumbia.museum -broadcast.museum -brunel.museum -brussel.museum -brussels.museum -bruxelles.museum -building.museum -burghof.museum -bus.museum -bushey.museum -cadaques.museum -california.museum -cambridge.museum -can.museum -canada.museum -capebreton.museum -carrier.museum -cartoonart.museum -casadelamoneda.museum -castle.museum -castres.museum -celtic.museum -center.museum -chattanooga.museum -cheltenham.museum -chesapeakebay.museum -chicago.museum -children.museum -childrens.museum -childrensgarden.museum -chiropractic.museum -chocolate.museum -christiansburg.museum -cincinnati.museum -cinema.museum -circus.museum -civilisation.museum -civilization.museum -civilwar.museum -clinton.museum -clock.museum -coal.museum -coastaldefence.museum -cody.museum -coldwar.museum -collection.museum -colonialwilliamsburg.museum -coloradoplateau.museum -columbia.museum -columbus.museum -communication.museum -communications.museum -community.museum -computer.museum -computerhistory.museum -comunicações.museum -contemporary.museum -contemporaryart.museum -convent.museum -copenhagen.museum -corporation.museum -correios-e-telecomunicações.museum -corvette.museum -costume.museum -countryestate.museum -county.museum -crafts.museum -cranbrook.museum -creation.museum -cultural.museum -culturalcenter.museum -culture.museum -cyber.museum -cymru.museum -dali.museum -dallas.museum -database.museum -ddr.museum -decorativearts.museum -delaware.museum -delmenhorst.museum -denmark.museum -depot.museum -design.museum -detroit.museum -dinosaur.museum -discovery.museum -dolls.museum -donostia.museum -durham.museum -eastafrica.museum -eastcoast.museum -education.museum -educational.museum -egyptian.museum -eisenbahn.museum -elburg.museum -elvendrell.museum -embroidery.museum -encyclopedic.museum -england.museum -entomology.museum -environment.museum -environmentalconservation.museum -epilepsy.museum -essex.museum -estate.museum -ethnology.museum -exeter.museum -exhibition.museum -family.museum -farm.museum -farmequipment.museum -farmers.museum -farmstead.museum -field.museum -figueres.museum -filatelia.museum -film.museum -fineart.museum -finearts.museum -finland.museum -flanders.museum -florida.museum -force.museum -fortmissoula.museum -fortworth.museum -foundation.museum -francaise.museum -frankfurt.museum -franziskaner.museum -freemasonry.museum -freiburg.museum -fribourg.museum -frog.museum -fundacio.museum -furniture.museum -gallery.museum -garden.museum -gateway.museum -geelvinck.museum -gemological.museum -geology.museum -georgia.museum -giessen.museum -glas.museum -glass.museum -gorge.museum -grandrapids.museum -graz.museum -guernsey.museum -halloffame.museum -hamburg.museum -handson.museum -harvestcelebration.museum -hawaii.museum -health.museum -heimatunduhren.museum -hellas.museum -helsinki.museum -hembygdsforbund.museum -heritage.museum -histoire.museum -historical.museum -historicalsociety.museum -historichouses.museum -historisch.museum -historisches.museum -history.museum -historyofscience.museum -horology.museum -house.museum -humanities.museum -illustration.museum -imageandsound.museum -indian.museum -indiana.museum -indianapolis.museum -indianmarket.museum -intelligence.museum -interactive.museum -iraq.museum -iron.museum -isleofman.museum -jamison.museum -jefferson.museum -jerusalem.museum -jewelry.museum -jewish.museum -jewishart.museum -jfk.museum -journalism.museum -judaica.museum -judygarland.museum -juedisches.museum -juif.museum -karate.museum -karikatur.museum -kids.museum -koebenhavn.museum -koeln.museum -kunst.museum -kunstsammlung.museum -kunstunddesign.museum -labor.museum -labour.museum -lajolla.museum -lancashire.museum -landes.museum -lans.museum -läns.museum -larsson.museum -lewismiller.museum -lincoln.museum -linz.museum -living.museum -livinghistory.museum -localhistory.museum -london.museum -losangeles.museum -louvre.museum -loyalist.museum -lucerne.museum -luxembourg.museum -luzern.museum -mad.museum -madrid.museum -mallorca.museum -manchester.museum -mansion.museum -mansions.museum -manx.museum -marburg.museum -maritime.museum -maritimo.museum -maryland.museum -marylhurst.museum -media.museum -medical.museum -medizinhistorisches.museum -meeres.museum -memorial.museum -mesaverde.museum -michigan.museum -midatlantic.museum -military.museum -mill.museum -miners.museum -mining.museum -minnesota.museum -missile.museum -missoula.museum -modern.museum -moma.museum -money.museum -monmouth.museum -monticello.museum -montreal.museum -moscow.museum -motorcycle.museum -muenchen.museum -muenster.museum -mulhouse.museum -muncie.museum -museet.museum -museumcenter.museum -museumvereniging.museum -music.museum -national.museum -nationalfirearms.museum -nationalheritage.museum -nativeamerican.museum -naturalhistory.museum -naturalhistorymuseum.museum -naturalsciences.museum -nature.museum -naturhistorisches.museum -natuurwetenschappen.museum -naumburg.museum -naval.museum -nebraska.museum -neues.museum -newhampshire.museum -newjersey.museum -newmexico.museum -newport.museum -newspaper.museum -newyork.museum -niepce.museum -norfolk.museum -north.museum -nrw.museum -nuernberg.museum -nuremberg.museum -nyc.museum -nyny.museum -oceanographic.museum -oceanographique.museum -omaha.museum -online.museum -ontario.museum -openair.museum -oregon.museum -oregontrail.museum -otago.museum -oxford.museum -pacific.museum -paderborn.museum -palace.museum -paleo.museum -palmsprings.museum -panama.museum -paris.museum -pasadena.museum -pharmacy.museum -philadelphia.museum -philadelphiaarea.museum -philately.museum -phoenix.museum -photography.museum -pilots.museum -pittsburgh.museum -planetarium.museum -plantation.museum -plants.museum -plaza.museum -portal.museum -portland.museum -portlligat.museum -posts-and-telecommunications.museum -preservation.museum -presidio.museum -press.museum -project.museum -public.museum -pubol.museum -quebec.museum -railroad.museum -railway.museum -research.museum -resistance.museum -riodejaneiro.museum -rochester.museum -rockart.museum -roma.museum -russia.museum -saintlouis.museum -salem.museum -salvadordali.museum -salzburg.museum -sandiego.museum -sanfrancisco.museum -santabarbara.museum -santacruz.museum -santafe.museum -saskatchewan.museum -satx.museum -savannahga.museum -schlesisches.museum -schoenbrunn.museum -schokoladen.museum -school.museum -schweiz.museum -science.museum -scienceandhistory.museum -scienceandindustry.museum -sciencecenter.museum -sciencecenters.museum -science-fiction.museum -sciencehistory.museum -sciences.museum -sciencesnaturelles.museum -scotland.museum -seaport.museum -settlement.museum -settlers.museum -shell.museum -sherbrooke.museum -sibenik.museum -silk.museum -ski.museum -skole.museum -society.museum -sologne.museum -soundandvision.museum -southcarolina.museum -southwest.museum -space.museum -spy.museum -square.museum -stadt.museum -stalbans.museum -starnberg.museum -state.museum -stateofdelaware.museum -station.museum -steam.museum -steiermark.museum -stjohn.museum -stockholm.museum -stpetersburg.museum -stuttgart.museum -suisse.museum -surgeonshall.museum -surrey.museum -svizzera.museum -sweden.museum -sydney.museum -tank.museum -tcm.museum -technology.museum -telekommunikation.museum -television.museum -texas.museum -textile.museum -theater.museum -time.museum -timekeeping.museum -topology.museum -torino.museum -touch.museum -town.museum -transport.museum -tree.museum -trolley.museum -trust.museum -trustee.museum -uhren.museum -ulm.museum -undersea.museum -university.museum -usa.museum -usantiques.museum -usarts.museum -uscountryestate.museum -usculture.museum -usdecorativearts.museum -usgarden.museum -ushistory.museum -ushuaia.museum -uslivinghistory.museum -utah.museum -uvic.museum -valley.museum -vantaa.museum -versailles.museum -viking.museum -village.museum -virginia.museum -virtual.museum -virtuel.museum -vlaanderen.museum -volkenkunde.museum -wales.museum -wallonie.museum -war.museum -washingtondc.museum -watchandclock.museum -watch-and-clock.museum -western.museum -westfalen.museum -whaling.museum -wildlife.museum -williamsburg.museum -windmill.museum -workshop.museum -york.museum -yorkshire.museum -yosemite.museum -youth.museum -zoological.museum -zoology.museum -ירושלים.museum -иком.museum - -// mv : https://en.wikipedia.org/wiki/.mv -// "mv" included because, contra Wikipedia, google.mv exists. -mv -aero.mv -biz.mv -com.mv -coop.mv -edu.mv -gov.mv -info.mv -int.mv -mil.mv -museum.mv -name.mv -net.mv -org.mv -pro.mv - -// mw : http://www.registrar.mw/ -mw -ac.mw -biz.mw -co.mw -com.mw -coop.mw -edu.mw -gov.mw -int.mw -museum.mw -net.mw -org.mw - -// mx : http://www.nic.mx/ -// Submitted by registry <farias@nic.mx> -mx -com.mx -org.mx -gob.mx -edu.mx -net.mx - -// my : http://www.mynic.net.my/ -my -com.my -net.my -org.my -gov.my -edu.my -mil.my -name.my - -// mz : http://www.gobin.info/domainname/mz-template.doc -*.mz -!teledata.mz - -// na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ -na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na -co.na -com.na -org.na - -// name : has 2nd-level tlds, but there's no list of them -name - -// nc : http://www.cctld.nc/ -nc -asso.nc - -// ne : https://en.wikipedia.org/wiki/.ne -ne - -// net : https://en.wikipedia.org/wiki/.net -net - -// nf : https://en.wikipedia.org/wiki/.nf -nf -com.nf -net.nf -per.nf -rec.nf -web.nf -arts.nf -firm.nf -info.nf -other.nf -store.nf - -// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds -ng -com.ng -edu.ng -gov.ng -i.ng -mil.ng -mobi.ng -name.ng -net.ng -org.ng -sch.ng - -// ni : http://www.nic.ni/ -com.ni -gob.ni -edu.ni -org.ni -nom.ni -net.ni -mil.ni -co.ni -biz.ni -web.ni -int.ni -ac.ni -in.ni -info.ni - -// nl : https://en.wikipedia.org/wiki/.nl -// https://www.sidn.nl/ -// ccTLD for the Netherlands -nl - -// BV.nl will be a registry for dutch BV's (besloten vennootschap) -bv.nl - -// no : http://www.norid.no/regelverk/index.en.html -// The Norwegian registry has declined to notify us of updates. The web pages -// referenced below are the official source of the data. There is also an -// announce mailing list: -// https://postlister.uninett.no/sympa/info/norid-diskusjon -no -// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html -fhs.no -vgs.no -fylkesbibl.no -folkebibl.no -museum.no -idrett.no -priv.no -// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html -mil.no -stat.no -dep.no -kommune.no -herad.no -// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html -// counties -aa.no -ah.no -bu.no -fm.no -hl.no -hm.no -jan-mayen.no -mr.no -nl.no -nt.no -of.no -ol.no -oslo.no -rl.no -sf.no -st.no -svalbard.no -tm.no -tr.no -va.no -vf.no -// primary and lower secondary schools per county -gs.aa.no -gs.ah.no -gs.bu.no -gs.fm.no -gs.hl.no -gs.hm.no -gs.jan-mayen.no -gs.mr.no -gs.nl.no -gs.nt.no -gs.of.no -gs.ol.no -gs.oslo.no -gs.rl.no -gs.sf.no -gs.st.no -gs.svalbard.no -gs.tm.no -gs.tr.no -gs.va.no -gs.vf.no -// cities -akrehamn.no -åkrehamn.no -algard.no -ålgård.no -arna.no -brumunddal.no -bryne.no -bronnoysund.no -brønnøysund.no -drobak.no -drøbak.no -egersund.no -fetsund.no -floro.no -florø.no -fredrikstad.no -hokksund.no -honefoss.no -hønefoss.no -jessheim.no -jorpeland.no -jørpeland.no -kirkenes.no -kopervik.no -krokstadelva.no -langevag.no -langevåg.no -leirvik.no -mjondalen.no -mjøndalen.no -mo-i-rana.no -mosjoen.no -mosjøen.no -nesoddtangen.no -orkanger.no -osoyro.no -osøyro.no -raholt.no -råholt.no -sandnessjoen.no -sandnessjøen.no -skedsmokorset.no -slattum.no -spjelkavik.no -stathelle.no -stavern.no -stjordalshalsen.no -stjørdalshalsen.no -tananger.no -tranby.no -vossevangen.no -// communities -afjord.no -åfjord.no -agdenes.no -al.no -ål.no -alesund.no -ålesund.no -alstahaug.no -alta.no -áltá.no -alaheadju.no -álaheadju.no -alvdal.no -amli.no -åmli.no -amot.no -åmot.no -andebu.no -andoy.no -andøy.no -andasuolo.no -ardal.no -årdal.no -aremark.no -arendal.no -ås.no -aseral.no -åseral.no -asker.no -askim.no -askvoll.no -askoy.no -askøy.no -asnes.no -åsnes.no -audnedaln.no -aukra.no -aure.no -aurland.no -aurskog-holand.no -aurskog-høland.no -austevoll.no -austrheim.no -averoy.no -averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no -bahccavuotna.no -báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no -baidar.no -báidár.no -berg.no -bergen.no -berlevag.no -berlevåg.no -bearalvahki.no -bearalváhki.no -bindal.no -birkenes.no -bjarkoy.no -bjarkøy.no -bjerkreim.no -bjugn.no -bodo.no -bodø.no -badaddja.no -bådåddjå.no -budejju.no -bokn.no -bremanger.no -bronnoy.no -brønnøy.no -bygland.no -bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no -dovre.no -drammen.no -drangedal.no -dyroy.no -dyrøy.no -donna.no -dønna.no -eid.no -eidfjord.no -eidsberg.no -eidskog.no -eidsvoll.no -eigersund.no -elverum.no -enebakk.no -engerdal.no -etne.no -etnedal.no -evenes.no -evenassi.no -evenášši.no -evje-og-hornnes.no -farsund.no -fauske.no -fuossko.no -fuoisku.no -fedje.no -fet.no -finnoy.no -finnøy.no -fitjar.no -fjaler.no -fjell.no -flakstad.no -flatanger.no -flekkefjord.no -flesberg.no -flora.no -fla.no -flå.no -folldal.no -forsand.no -fosnes.no -frei.no -frogn.no -froland.no -frosta.no -frana.no -fræna.no -froya.no -frøya.no -fusa.no -fyresdal.no -forde.no -førde.no -gamvik.no -gangaviika.no -gáŋgaviika.no -gaular.no -gausdal.no -gildeskal.no -gildeskål.no -giske.no -gjemnes.no -gjerdrum.no -gjerstad.no -gjesdal.no -gjovik.no -gjøvik.no -gloppen.no -gol.no -gran.no -grane.no -granvin.no -gratangen.no -grimstad.no -grong.no -kraanghke.no -kråanghke.no -grue.no -gulen.no -hadsel.no -halden.no -halsa.no -hamar.no -hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no -hammarfeasta.no -hámmárfeasta.no -haram.no -hareid.no -harstad.no -hasvik.no -aknoluokta.no -ákŋoluokta.no -hattfjelldal.no -aarborte.no -haugesund.no -hemne.no -hemnes.no -hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no -hitra.no -hjartdal.no -hjelmeland.no -hobol.no -hobøl.no -hof.no -hol.no -hole.no -holmestrand.no -holtalen.no -holtålen.no -hornindal.no -horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no -hoyanger.no -høyanger.no -hoylandet.no -høylandet.no -ha.no -hå.no -ibestad.no -inderoy.no -inderøy.no -iveland.no -jevnaker.no -jondal.no -jolster.no -jølster.no -karasjok.no -karasjohka.no -kárášjohka.no -karlsoy.no -galsa.no -gálsá.no -karmoy.no -karmøy.no -kautokeino.no -guovdageaidnu.no -klepp.no -klabu.no -klæbu.no -kongsberg.no -kongsvinger.no -kragero.no -kragerø.no -kristiansand.no -kristiansund.no -krodsherad.no -krødsherad.no -kvalsund.no -rahkkeravju.no -ráhkkerávju.no -kvam.no -kvinesdal.no -kvinnherad.no -kviteseid.no -kvitsoy.no -kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no -larvik.no -lavangen.no -lavagis.no -loabat.no -loabát.no -lebesby.no -davvesiida.no -leikanger.no -leirfjord.no -leka.no -leksvik.no -lenvik.no -leangaviika.no -leaŋgaviika.no -lesja.no -levanger.no -lier.no -lierne.no -lillehammer.no -lillesand.no -lindesnes.no -lindas.no -lindås.no -lom.no -loppa.no -lahppi.no -láhppi.no -lund.no -lunner.no -luroy.no -lurøy.no -luster.no -lyngdal.no -lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no -malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no -mandal.no -marker.no -marnardal.no -masfjorden.no -meland.no -meldal.no -melhus.no -meloy.no -meløy.no -meraker.no -meråker.no -moareke.no -moåreke.no -midsund.no -midtre-gauldal.no -modalen.no -modum.no -molde.no -moskenes.no -moss.no -mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no -naamesjevuemie.no -nååmesjevuemie.no -laakesvuemie.no -nannestad.no -narvik.no -narviika.no -naustdal.no -nedre-eiker.no -nes.akershus.no -nes.buskerud.no -nesna.no -nesodden.no -nesseby.no -unjarga.no -unjárga.no -nesset.no -nissedal.no -nittedal.no -nord-aurdal.no -nord-fron.no -nord-odal.no -norddal.no -nordkapp.no -davvenjarga.no -davvenjárga.no -nordre-land.no -nordreisa.no -raisa.no -ráisa.no -nore-og-uvdal.no -notodden.no -naroy.no -nærøy.no -notteroy.no -nøtterøy.no -odda.no -oksnes.no -øksnes.no -oppdal.no -oppegard.no -oppegård.no -orkdal.no -orland.no -ørland.no -orskog.no -ørskog.no -orsta.no -ørsta.no -os.hedmark.no -os.hordaland.no -osen.no -osteroy.no -osterøy.no -ostre-toten.no -østre-toten.no -overhalla.no -ovre-eiker.no -øvre-eiker.no -oyer.no -øyer.no -oygarden.no -øygarden.no -oystre-slidre.no -øystre-slidre.no -porsanger.no -porsangu.no -porsáŋgu.no -porsgrunn.no -radoy.no -radøy.no -rakkestad.no -rana.no -ruovat.no -randaberg.no -rauma.no -rendalen.no -rennebu.no -rennesoy.no -rennesøy.no -rindal.no -ringebu.no -ringerike.no -ringsaker.no -rissa.no -risor.no -risør.no -roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no -rodoy.no -rødøy.no -romskog.no -rømskog.no -roros.no -røros.no -rost.no -røst.no -royken.no -røyken.no -royrvik.no -røyrvik.no -rade.no -råde.no -salangen.no -siellak.no -saltdal.no -salat.no -sálát.no -sálat.no -samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no -sandefjord.no -sandnes.no -sandoy.no -sandøy.no -sarpsborg.no -sauda.no -sauherad.no -sel.no -selbu.no -selje.no -seljord.no -sigdal.no -siljan.no -sirdal.no -skaun.no -skedsmo.no -ski.no -skien.no -skiptvet.no -skjervoy.no -skjervøy.no -skierva.no -skiervá.no -skjak.no -skjåk.no -skodje.no -skanland.no -skånland.no -skanit.no -skánit.no -smola.no -smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no -snaase.no -snåase.no -sogndal.no -sokndal.no -sola.no -solund.no -songdalen.no -sortland.no -spydeberg.no -stange.no -stavanger.no -steigen.no -steinkjer.no -stjordal.no -stjørdal.no -stokke.no -stor-elvdal.no -stord.no -stordal.no -storfjord.no -omasvuotna.no -strand.no -stranda.no -stryn.no -sula.no -suldal.no -sund.no -sunndal.no -surnadal.no -sveio.no -svelvik.no -sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no -tana.no -deatnu.no -time.no -tingvoll.no -tinn.no -tjeldsund.no -dielddanuorri.no -tjome.no -tjøme.no -tokke.no -tolga.no -torsken.no -tranoy.no -tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no -troandin.no -trysil.no -trana.no -træna.no -trogstad.no -trøgstad.no -tvedestrand.no -tydal.no -tynset.no -tysfjord.no -divtasvuodna.no -divttasvuotna.no -tysnes.no -tysvar.no -tysvær.no -tonsberg.no -tønsberg.no -ullensaker.no -ullensvang.no -ulvik.no -utsira.no -vadso.no -vadsø.no -cahcesuolo.no -čáhcesuolo.no -vaksdal.no -valle.no -vang.no -vanylven.no -vardo.no -vardø.no -varggat.no -várggát.no -vefsn.no -vaapste.no -vega.no -vegarshei.no -vegårshei.no -vennesla.no -verdal.no -verran.no -vestby.no -vestnes.no -vestre-slidre.no -vestre-toten.no -vestvagoy.no -vestvågøy.no -vevelstad.no -vik.no -vikna.no -vindafjord.no -volda.no -voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no - -// np : http://www.mos.com.np/register.html -*.np - -// nr : http://cenpac.net.nr/dns/index.html -// Submitted by registry <technician@cenpac.net.nr> -nr -biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr -com.nr - -// nu : https://en.wikipedia.org/wiki/.nu -nu - -// nz : https://en.wikipedia.org/wiki/.nz -// Submitted by registry <jay@nzrs.net.nz> -nz -ac.nz -co.nz -cri.nz -geek.nz -gen.nz -govt.nz -health.nz -iwi.nz -kiwi.nz -maori.nz -mil.nz -māori.nz -net.nz -org.nz -parliament.nz -school.nz - -// om : https://en.wikipedia.org/wiki/.om -om -co.om -com.om -edu.om -gov.om -med.om -museum.om -net.om -org.om -pro.om - -// org : https://en.wikipedia.org/wiki/.org -org - -// pa : http://www.nic.pa/ -// Some additional second level "domains" resolve directly as hostnames, such as -// pannet.pa, so we add a rule for "pa". -pa -ac.pa -gob.pa -com.pa -org.pa -sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa - -// pe : https://www.nic.pe/InformeFinalComision.pdf -pe -edu.pe -gob.pe -nom.pe -mil.pe -org.pe -com.pe -net.pe - -// pf : http://www.gobin.info/domainname/formulaire-pf.pdf -pf -com.pf -org.pf -edu.pf - -// pg : https://en.wikipedia.org/wiki/.pg -*.pg - -// ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry <jed@email.com.ph> -ph -com.ph -net.ph -org.ph -gov.ph -edu.ph -ngo.ph -mil.ph -i.ph - -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK -pk -com.pk -net.pk -edu.pk -org.pk -fam.pk -biz.pk -web.pk -gov.pk -gob.pk -gok.pk -gon.pk -gop.pk -gos.pk -info.pk - -// pl http://www.dns.pl/english/index.html -// Submitted by registry -pl -com.pl -net.pl -org.pl -// pl functional domains (http://www.dns.pl/english/index.html) -aid.pl -agro.pl -atm.pl -auto.pl -biz.pl -edu.pl -gmina.pl -gsm.pl -info.pl -mail.pl -miasta.pl -media.pl -mil.pl -nieruchomosci.pl -nom.pl -pc.pl -powiat.pl -priv.pl -realestate.pl -rel.pl -sex.pl -shop.pl -sklep.pl -sos.pl -szkola.pl -targi.pl -tm.pl -tourism.pl -travel.pl -turystyka.pl -// Government domains -gov.pl -ap.gov.pl -ic.gov.pl -is.gov.pl -us.gov.pl -kmpsp.gov.pl -kppsp.gov.pl -kwpsp.gov.pl -psp.gov.pl -wskr.gov.pl -kwp.gov.pl -mw.gov.pl -ug.gov.pl -um.gov.pl -umig.gov.pl -ugim.gov.pl -upow.gov.pl -uw.gov.pl -starostwo.gov.pl -pa.gov.pl -po.gov.pl -psse.gov.pl -pup.gov.pl -rzgw.gov.pl -sa.gov.pl -so.gov.pl -sr.gov.pl -wsa.gov.pl -sko.gov.pl -uzs.gov.pl -wiih.gov.pl -winb.gov.pl -pinb.gov.pl -wios.gov.pl -witd.gov.pl -wzmiuw.gov.pl -piw.gov.pl -wiw.gov.pl -griw.gov.pl -wif.gov.pl -oum.gov.pl -sdn.gov.pl -zp.gov.pl -uppo.gov.pl -mup.gov.pl -wuoz.gov.pl -konsulat.gov.pl -oirm.gov.pl -// pl regional domains (http://www.dns.pl/english/index.html) -augustow.pl -babia-gora.pl -bedzin.pl -beskidy.pl -bialowieza.pl -bialystok.pl -bielawa.pl -bieszczady.pl -boleslawiec.pl -bydgoszcz.pl -bytom.pl -cieszyn.pl -czeladz.pl -czest.pl -dlugoleka.pl -elblag.pl -elk.pl -glogow.pl -gniezno.pl -gorlice.pl -grajewo.pl -ilawa.pl -jaworzno.pl -jelenia-gora.pl -jgora.pl -kalisz.pl -kazimierz-dolny.pl -karpacz.pl -kartuzy.pl -kaszuby.pl -katowice.pl -kepno.pl -ketrzyn.pl -klodzko.pl -kobierzyce.pl -kolobrzeg.pl -konin.pl -konskowola.pl -kutno.pl -lapy.pl -lebork.pl -legnica.pl -lezajsk.pl -limanowa.pl -lomza.pl -lowicz.pl -lubin.pl -lukow.pl -malbork.pl -malopolska.pl -mazowsze.pl -mazury.pl -mielec.pl -mielno.pl -mragowo.pl -naklo.pl -nowaruda.pl -nysa.pl -olawa.pl -olecko.pl -olkusz.pl -olsztyn.pl -opoczno.pl -opole.pl -ostroda.pl -ostroleka.pl -ostrowiec.pl -ostrowwlkp.pl -pila.pl -pisz.pl -podhale.pl -podlasie.pl -polkowice.pl -pomorze.pl -pomorskie.pl -prochowice.pl -pruszkow.pl -przeworsk.pl -pulawy.pl -radom.pl -rawa-maz.pl -rybnik.pl -rzeszow.pl -sanok.pl -sejny.pl -slask.pl -slupsk.pl -sosnowiec.pl -stalowa-wola.pl -skoczow.pl -starachowice.pl -stargard.pl -suwalki.pl -swidnica.pl -swiebodzin.pl -swinoujscie.pl -szczecin.pl -szczytno.pl -tarnobrzeg.pl -tgory.pl -turek.pl -tychy.pl -ustka.pl -walbrzych.pl -warmia.pl -warszawa.pl -waw.pl -wegrow.pl -wielun.pl -wlocl.pl -wloclawek.pl -wodzislaw.pl -wolomin.pl -wroclaw.pl -zachpomor.pl -zagan.pl -zarow.pl -zgora.pl -zgorzelec.pl - -// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -pm - -// pn : http://www.government.pn/PnRegistry/policies.htm -pn -gov.pn -co.pn -org.pn -edu.pn -net.pn - -// post : https://en.wikipedia.org/wiki/.post -post - -// pr : http://www.nic.pr/index.asp?f=1 -pr -com.pr -net.pr -org.pr -gov.pr -edu.pr -isla.pr -pro.pr -biz.pr -info.pr -name.pr -// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr -est.pr -prof.pr -ac.pr - -// pro : http://registry.pro/get-pro -pro -aaa.pro -aca.pro -acct.pro -avocat.pro -bar.pro -cpa.pro -eng.pro -jur.pro -law.pro -med.pro -recht.pro - -// ps : https://en.wikipedia.org/wiki/.ps -// http://www.nic.ps/registration/policy.html#reg -ps -edu.ps -gov.ps -sec.ps -plo.ps -com.ps -org.ps -net.ps - -// pt : http://online.dns.pt/dns/start_dns -pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt -com.pt -nome.pt - -// pw : https://en.wikipedia.org/wiki/.pw -pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw - -// py : http://www.nic.py/pautas.html#seccion_9 -// Submitted by registry -py -com.py -coop.py -edu.py -gov.py -mil.py -net.py -org.py - -// qa : http://domains.qa/en/ -qa -com.qa -edu.qa -gov.qa -mil.qa -name.qa -net.qa -org.qa -sch.qa - -// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs -re -asso.re -com.re -nom.re - -// ro : http://www.rotld.ro/ -ro -arts.ro -com.ro -firm.ro -info.ro -nom.ro -nt.ro -org.ro -rec.ro -store.ro -tm.ro -www.ro - -// rs : https://www.rnids.rs/en/domains/national-domains -rs -ac.rs -co.rs -edu.rs -gov.rs -in.rs -org.rs - -// ru : http://www.cctld.ru/ru/docs/aktiv_8.php -// Industry domains -ru -ac.ru -com.ru -edu.ru -int.ru -net.ru -org.ru -pp.ru -// Geographical domains -adygeya.ru -altai.ru -amur.ru -arkhangelsk.ru -astrakhan.ru -bashkiria.ru -belgorod.ru -bir.ru -bryansk.ru -buryatia.ru -cbg.ru -chel.ru -chelyabinsk.ru -chita.ru -chukotka.ru -chuvashia.ru -dagestan.ru -dudinka.ru -e-burg.ru -grozny.ru -irkutsk.ru -ivanovo.ru -izhevsk.ru -jar.ru -joshkar-ola.ru -kalmykia.ru -kaluga.ru -kamchatka.ru -karelia.ru -kazan.ru -kchr.ru -kemerovo.ru -khabarovsk.ru -khakassia.ru -khv.ru -kirov.ru -koenig.ru -komi.ru -kostroma.ru -krasnoyarsk.ru -kuban.ru -kurgan.ru -kursk.ru -lipetsk.ru -magadan.ru -mari.ru -mari-el.ru -marine.ru -mordovia.ru -// mosreg.ru Bug 1090800 - removed at request of Aleksey Konstantinov <konstantinovav@mosreg.ru> -msk.ru -murmansk.ru -nalchik.ru -nnov.ru -nov.ru -novosibirsk.ru -nsk.ru -omsk.ru -orenburg.ru -oryol.ru -palana.ru -penza.ru -perm.ru -ptz.ru -rnd.ru -ryazan.ru -sakhalin.ru -samara.ru -saratov.ru -simbirsk.ru -smolensk.ru -spb.ru -stavropol.ru -stv.ru -surgut.ru -tambov.ru -tatarstan.ru -tom.ru -tomsk.ru -tsaritsyn.ru -tsk.ru -tula.ru -tuva.ru -tver.ru -tyumen.ru -udm.ru -udmurtia.ru -ulan-ude.ru -vladikavkaz.ru -vladimir.ru -vladivostok.ru -volgograd.ru -vologda.ru -voronezh.ru -vrn.ru -vyatka.ru -yakutia.ru -yamal.ru -yaroslavl.ru -yekaterinburg.ru -yuzhno-sakhalinsk.ru -// More geographical domains -amursk.ru -baikal.ru -cmw.ru -fareast.ru -jamal.ru -kms.ru -k-uralsk.ru -kustanai.ru -kuzbass.ru -mytis.ru -nakhodka.ru -nkz.ru -norilsk.ru -oskol.ru -pyatigorsk.ru -rubtsovsk.ru -snz.ru -syzran.ru -vdonsk.ru -zgrad.ru -// State domains -gov.ru -mil.ru -// Technical domains -test.ru - -// rw : http://www.nic.rw/cgi-bin/policy.pl -rw -gov.rw -net.rw -edu.rw -ac.rw -com.rw -co.rw -int.rw -mil.rw -gouv.rw - -// sa : http://www.nic.net.sa/ -sa -com.sa -net.sa -org.sa -gov.sa -med.sa -pub.sa -edu.sa -sch.sa - -// sb : http://www.sbnic.net.sb/ -// Submitted by registry <lee.humphries@telekom.com.sb> -sb -com.sb -edu.sb -gov.sb -net.sb -org.sb - -// sc : http://www.nic.sc/ -sc -com.sc -gov.sc -net.sc -org.sc -edu.sc - -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry <admin@isoc.sd> -sd -com.sd -net.sd -org.sd -edu.sd -med.sd -tv.sd -gov.sd -info.sd - -// se : https://en.wikipedia.org/wiki/.se -// Submitted by registry <patrik.wallstrom@iis.se> -se -a.se -ac.se -b.se -bd.se -brand.se -c.se -d.se -e.se -f.se -fh.se -fhsk.se -fhv.se -g.se -h.se -i.se -k.se -komforb.se -kommunalforbund.se -komvux.se -l.se -lanbib.se -m.se -n.se -naturbruksgymn.se -o.se -org.se -p.se -parti.se -pp.se -press.se -r.se -s.se -t.se -tm.se -u.se -w.se -x.se -y.se -z.se - -// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines -sg -com.sg -net.sg -org.sg -gov.sg -edu.sg -per.sg - -// sh : http://www.nic.sh/registrar.html -sh -com.sh -net.sh -gov.sh -org.sh -mil.sh - -// si : https://en.wikipedia.org/wiki/.si -si - -// sj : No registrations at this time. -// Submitted by registry <jarle@uninett.no> -sj - -// sk : https://en.wikipedia.org/wiki/.sk -// list of 2nd level domains ? -sk - -// sl : http://www.nic.sl -// Submitted by registry <adam@neoip.com> -sl -com.sl -net.sl -edu.sl -gov.sl -org.sl - -// sm : https://en.wikipedia.org/wiki/.sm -sm - -// sn : https://en.wikipedia.org/wiki/.sn -sn -art.sn -com.sn -edu.sn -gouv.sn -org.sn -perso.sn -univ.sn - -// so : http://www.soregistry.com/ -so -com.so -net.so -org.so - -// sr : https://en.wikipedia.org/wiki/.sr -sr - -// st : http://www.nic.st/html/policyrules/ -st -co.st -com.st -consulado.st -edu.st -embaixada.st -gov.st -mil.st -net.st -org.st -principe.st -saotome.st -store.st - -// su : https://en.wikipedia.org/wiki/.su -su -adygeya.su -arkhangelsk.su -balashov.su -bashkiria.su -bryansk.su -dagestan.su -grozny.su -ivanovo.su -kalmykia.su -kaluga.su -karelia.su -khakassia.su -krasnodar.su -kurgan.su -lenug.su -mordovia.su -msk.su -murmansk.su -nalchik.su -nov.su -obninsk.su -penza.su -pokrovsk.su -sochi.su -spb.su -togliatti.su -troitsk.su -tula.su -tuva.su -vladikavkaz.su -vladimir.su -vologda.su - -// sv : http://www.svnet.org.sv/niveldos.pdf -sv -com.sv -edu.sv -gob.sv -org.sv -red.sv - -// sx : https://en.wikipedia.org/wiki/.sx -// Submitted by registry <jcvignes@openregistry.com> -sx -gov.sx - -// sy : https://en.wikipedia.org/wiki/.sy -// see also: http://www.gobin.info/domainname/sy.doc -sy -edu.sy -gov.sy -net.sy -mil.sy -com.sy -org.sy - -// sz : https://en.wikipedia.org/wiki/.sz -// http://www.sispa.org.sz/ -sz -co.sz -ac.sz -org.sz - -// tc : https://en.wikipedia.org/wiki/.tc -tc - -// td : https://en.wikipedia.org/wiki/.td -td - -// tel: https://en.wikipedia.org/wiki/.tel -// http://www.telnic.org/ -tel - -// tf : https://en.wikipedia.org/wiki/.tf -tf - -// tg : https://en.wikipedia.org/wiki/.tg -// http://www.nic.tg/ -tg - -// th : https://en.wikipedia.org/wiki/.th -// Submitted by registry <krit@thains.co.th> -th -ac.th -co.th -go.th -in.th -mi.th -net.th -or.th - -// tj : http://www.nic.tj/policy.html -tj -ac.tj -biz.tj -co.tj -com.tj -edu.tj -go.tj -gov.tj -int.tj -mil.tj -name.tj -net.tj -nic.tj -org.tj -test.tj -web.tj - -// tk : https://en.wikipedia.org/wiki/.tk -tk - -// tl : https://en.wikipedia.org/wiki/.tl -tl -gov.tl - -// tm : http://www.nic.tm/local.html -tm -com.tm -co.tm -org.tm -net.tm -nom.tm -gov.tm -mil.tm -edu.tm - -// tn : https://en.wikipedia.org/wiki/.tn -// http://whois.ati.tn/ -tn -com.tn -ens.tn -fin.tn -gov.tn -ind.tn -intl.tn -nat.tn -net.tn -org.tn -info.tn -perso.tn -tourism.tn -edunet.tn -rnrt.tn -rns.tn -rnu.tn -mincom.tn -agrinet.tn -defense.tn -turen.tn - -// to : https://en.wikipedia.org/wiki/.to -// Submitted by registry <egullich@colo.to> -to -com.to -gov.to -net.to -org.to -edu.to -mil.to - -// subTLDs: https://www.nic.tr/forms/eng/policies.pdf -// and: https://www.nic.tr/forms/politikalar.pdf -// Submitted by <mehmetgurevin@gmail.com> -tr -com.tr -info.tr -biz.tr -net.tr -org.tr -web.tr -gen.tr -tv.tr -av.tr -dr.tr -bbs.tr -name.tr -tel.tr -gov.tr -bel.tr -pol.tr -mil.tr -k12.tr -edu.tr -kep.tr - -// Used by Northern Cyprus -nc.tr - -// Used by government agencies of Northern Cyprus -gov.nc.tr - -// travel : https://en.wikipedia.org/wiki/.travel -travel - -// tt : http://www.nic.tt/ -tt -co.tt -com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt -edu.tt - -// tv : https://en.wikipedia.org/wiki/.tv -// Not listing any 2LDs as reserved since none seem to exist in practice, -// Wikipedia notwithstanding. -tv - -// tw : https://en.wikipedia.org/wiki/.tw -tw -edu.tw -gov.tw -mil.tw -com.tw -net.tw -org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw - -// tz : http://www.tznic.or.tz/index.php/domains -// Submitted by registry <manager@tznic.or.tz> -tz -ac.tz -co.tz -go.tz -hotel.tz -info.tz -me.tz -mil.tz -mobi.tz -ne.tz -or.tz -sc.tz -tv.tz - -// ua : https://hostmaster.ua/policy/?ua -// Submitted by registry <dk@cctld.ua> -ua -// ua 2LD -com.ua -edu.ua -gov.ua -in.ua -net.ua -org.ua -// ua geographic names -// https://hostmaster.ua/2ld/ -cherkassy.ua -cherkasy.ua -chernigov.ua -chernihiv.ua -chernivtsi.ua -chernovtsy.ua -ck.ua -cn.ua -cr.ua -crimea.ua -cv.ua -dn.ua -dnepropetrovsk.ua -dnipropetrovsk.ua -dominic.ua -donetsk.ua -dp.ua -if.ua -ivano-frankivsk.ua -kh.ua -kharkiv.ua -kharkov.ua -kherson.ua -khmelnitskiy.ua -khmelnytskyi.ua -kiev.ua -kirovograd.ua -km.ua -kr.ua -krym.ua -ks.ua -kv.ua -kyiv.ua -lg.ua -lt.ua -lugansk.ua -lutsk.ua -lv.ua -lviv.ua -mk.ua -mykolaiv.ua -nikolaev.ua -od.ua -odesa.ua -odessa.ua -pl.ua -poltava.ua -rivne.ua -rovno.ua -rv.ua -sb.ua -sebastopol.ua -sevastopol.ua -sm.ua -sumy.ua -te.ua -ternopil.ua -uz.ua -uzhgorod.ua -vinnica.ua -vinnytsia.ua -vn.ua -volyn.ua -yalta.ua -zaporizhzhe.ua -zaporizhzhia.ua -zhitomir.ua -zhytomyr.ua -zp.ua -zt.ua - -// ug : https://www.registry.co.ug/ -ug -co.ug -or.ug -ac.ug -sc.ug -go.ug -ne.ug -com.ug -org.ug - -// uk : https://en.wikipedia.org/wiki/.uk -// Submitted by registry <Michael.Daly@nominet.org.uk> -uk -ac.uk -co.uk -gov.uk -ltd.uk -me.uk -net.uk -nhs.uk -org.uk -plc.uk -police.uk -*.sch.uk - -// us : https://en.wikipedia.org/wiki/.us -us -dni.us -fed.us -isa.us -kids.us -nsn.us -// us geographic names -ak.us -al.us -ar.us -as.us -az.us -ca.us -co.us -ct.us -dc.us -de.us -fl.us -ga.us -gu.us -hi.us -ia.us -id.us -il.us -in.us -ks.us -ky.us -la.us -ma.us -md.us -me.us -mi.us -mn.us -mo.us -ms.us -mt.us -nc.us -nd.us -ne.us -nh.us -nj.us -nm.us -nv.us -ny.us -oh.us -ok.us -or.us -pa.us -pr.us -ri.us -sc.us -sd.us -tn.us -tx.us -ut.us -vi.us -vt.us -va.us -wa.us -wi.us -wv.us -wy.us -// The registrar notes several more specific domains available in each state, -// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat -// haphazard; in some states these domains resolve as addresses, while in others -// only subdomains are available, or even nothing at all. We include the -// most common ones where it's clear that different sites are different -// entities. -k12.ak.us -k12.al.us -k12.ar.us -k12.as.us -k12.az.us -k12.ca.us -k12.co.us -k12.ct.us -k12.dc.us -k12.de.us -k12.fl.us -k12.ga.us -k12.gu.us -// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login -k12.ia.us -k12.id.us -k12.il.us -k12.in.us -k12.ks.us -k12.ky.us -k12.la.us -k12.ma.us -k12.md.us -k12.me.us -k12.mi.us -k12.mn.us -k12.mo.us -k12.ms.us -k12.mt.us -k12.nc.us -// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso <trossow@nd.gov> -k12.ne.us -k12.nh.us -k12.nj.us -k12.nm.us -k12.nv.us -k12.ny.us -k12.oh.us -k12.ok.us -k12.or.us -k12.pa.us -k12.pr.us -k12.ri.us -k12.sc.us -// k12.sd.us Bug 934131 - Removed at request of James Booze <James.Booze@k12.sd.us> -k12.tn.us -k12.tx.us -k12.ut.us -k12.vi.us -k12.vt.us -k12.va.us -k12.wa.us -k12.wi.us -// k12.wv.us Bug 947705 - Removed at request of Verne Britton <verne@wvnet.edu> -k12.wy.us -cc.ak.us -cc.al.us -cc.ar.us -cc.as.us -cc.az.us -cc.ca.us -cc.co.us -cc.ct.us -cc.dc.us -cc.de.us -cc.fl.us -cc.ga.us -cc.gu.us -cc.hi.us -cc.ia.us -cc.id.us -cc.il.us -cc.in.us -cc.ks.us -cc.ky.us -cc.la.us -cc.ma.us -cc.md.us -cc.me.us -cc.mi.us -cc.mn.us -cc.mo.us -cc.ms.us -cc.mt.us -cc.nc.us -cc.nd.us -cc.ne.us -cc.nh.us -cc.nj.us -cc.nm.us -cc.nv.us -cc.ny.us -cc.oh.us -cc.ok.us -cc.or.us -cc.pa.us -cc.pr.us -cc.ri.us -cc.sc.us -cc.sd.us -cc.tn.us -cc.tx.us -cc.ut.us -cc.vi.us -cc.vt.us -cc.va.us -cc.wa.us -cc.wi.us -cc.wv.us -cc.wy.us -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -lib.de.us -lib.fl.us -lib.ga.us -lib.gu.us -lib.hi.us -lib.ia.us -lib.id.us -lib.il.us -lib.in.us -lib.ks.us -lib.ky.us -lib.la.us -lib.ma.us -lib.md.us -lib.me.us -lib.mi.us -lib.mn.us -lib.mo.us -lib.ms.us -lib.mt.us -lib.nc.us -lib.nd.us -lib.ne.us -lib.nh.us -lib.nj.us -lib.nm.us -lib.nv.us -lib.ny.us -lib.oh.us -lib.ok.us -lib.or.us -lib.pa.us -lib.pr.us -lib.ri.us -lib.sc.us -lib.sd.us -lib.tn.us -lib.tx.us -lib.ut.us -lib.vi.us -lib.vt.us -lib.va.us -lib.wa.us -lib.wi.us -// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold <arnold@wvlc.lib.wv.us> -lib.wy.us -// k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed independently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated directly to the -// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net> -pvt.k12.ma.us -chtr.k12.ma.us -paroch.k12.ma.us - -// uy : http://www.nic.org.uy/ -uy -com.uy -edu.uy -gub.uy -mil.uy -net.uy -org.uy - -// uz : http://www.reg.uz/ -uz -co.uz -com.uz -net.uz -org.uz - -// va : https://en.wikipedia.org/wiki/.va -va - -// vc : https://en.wikipedia.org/wiki/.vc -// Submitted by registry <kshah@ca.afilias.info> -vc -com.vc -net.vc -org.vc -gov.vc -mil.vc -edu.vc - -// ve : https://registro.nic.ve/ -// Submitted by registry -ve -arts.ve -co.ve -com.ve -e12.ve -edu.ve -firm.ve -gob.ve -gov.ve -info.ve -int.ve -mil.ve -net.ve -org.ve -rec.ve -store.ve -tec.ve -web.ve - -// vg : https://en.wikipedia.org/wiki/.vg -vg - -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). -vi -co.vi -com.vi -k12.vi -net.vi -org.vi - -// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp -vn -com.vn -net.vn -org.vn -edu.vn -gov.vn -int.vn -ac.vn -biz.vn -info.vn -name.vn -pro.vn -health.vn - -// vu : https://en.wikipedia.org/wiki/.vu -// http://www.vunic.vu/ -vu -com.vu -edu.vu -net.vu -org.vu - -// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -wf - -// ws : https://en.wikipedia.org/wiki/.ws -// http://samoanic.ws/index.dhtml -ws -com.ws -net.ws -org.ws -gov.ws -edu.ws - -// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf -yt - -// IDN ccTLDs -// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then -// U-label, and follow this format: -// // A-Label ("<Latin renderings>", <language name>[, variant info]) : <ISO 3166 ccTLD> -// // [sponsoring org] -// U-Label - -// xn--mgbaam7a8h ("Emerat", Arabic) : AE -// http://nic.ae/english/arabicdomain/rules.jsp -امارات - -// xn--y9a3aq ("hye", Armenian) : AM -// ISOC AM (operated by .am Registry) -հայ - -// xn--54b7fta0cc ("Bangla", Bangla) : BD -বাংলা - -// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY -// Operated by .by registry -бел - -// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 - -// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 - -// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ -الجزائر - -// xn--wgbh1c ("Egypt/Masr", Arabic) : EG -// http://www.dotmasr.eg/ -مصر - -// xn--e1a4c ("eu", Cyrillic) : EU -ею - -// xn--node ("ge", Georgian Mkhedruli) : GE -გე - -// xn--qxam ("el", Greek) : GR -// Hellenic Ministry of Infrastructure, Transport, and Networks -ελ - -// xn--j6w193g ("Hong Kong", Chinese) : HK -// https://www2.hkirc.hk/register/rules.jsp -香港 - -// xn--h2brj9c ("Bharat", Devanagari) : IN -// India -भारत - -// xn--mgbbh1a71e ("Bharat", Arabic) : IN -// India -بھارت - -// xn--fpcrj9c3d ("Bharat", Telugu) : IN -// India -భారత్ - -// xn--gecrj9c ("Bharat", Gujarati) : IN -// India -ભારત - -// xn--s9brj9c ("Bharat", Gurmukhi) : IN -// India -ਭਾਰਤ - -// xn--45brj9c ("Bharat", Bengali) : IN -// India -ভারত - -// xn--xkc2dl3a5ee0h ("India", Tamil) : IN -// India -இந்தியா - -// xn--mgba3a4f16a ("Iran", Persian) : IR -ایران - -// xn--mgba3a4fra ("Iran", Arabic) : IR -ايران - -// xn--mgbtx2b ("Iraq", Arabic) : IQ -// Communications and Media Commission -عراق - -// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO -// National Information Technology Center (NITC) -// Royal Scientific Society, Al-Jubeiha -الاردن - -// xn--3e0b707e ("Republic of Korea", Hangul) : KR -한국 - -// xn--80ao21a ("Kaz", Kazakh) : KZ -қаз - -// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK -// http://nic.lk -ලංකා - -// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK -// http://nic.lk -இலங்கை - -// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA -المغرب - -// xn--d1alf ("mkd", Macedonian) : MK -// MARnet -мкд - -// xn--l1acc ("mon", Mongolian) : MN -мон - -// xn--mix891f ("Macao", Chinese, Traditional) : MO -// MONIC / HNET Asia (Registry Operator for .mo) -澳門 - -// xn--mix082f ("Macao", Chinese, Simplified) : MO -澳门 - -// xn--mgbx4cd0ab ("Malaysia", Malay) : MY -مليسيا - -// xn--mgb9awbf ("Oman", Arabic) : OM -عمان - -// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK -پاکستان - -// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK -پاكستان - -// xn--ygbi2ammx ("Falasteen", Arabic) : PS -// The Palestinian National Internet Naming Authority (PNINA) -// http://www.pnina.ps -فلسطين - -// xn--90a3ac ("srb", Cyrillic) : RS -// https://www.rnids.rs/en/domains/national-domains -срб -пр.срб -орг.срб -обр.срб -од.срб -упр.срб -ак.срб - -// xn--p1ai ("rf", Russian-Cyrillic) : RU -// http://www.cctld.ru/en/docs/rulesrf.php -рф - -// xn--wgbl6a ("Qatar", Arabic) : QA -// http://www.ict.gov.qa/ -قطر - -// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA -// http://www.nic.net.sa/ -السعودية - -// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA -السعودیة - -// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA -السعودیۃ - -// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA -السعوديه - -// xn--mgbpl2fh ("sudan", Arabic) : SD -// Operated by .sd registry -سودان - -// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG -新加坡 - -// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG -சிங்கப்பூர் - -// xn--ogbpf8fl ("Syria", Arabic) : SY -سورية - -// xn--mgbtf8fl ("Syria", Arabic, variant) : SY -سوريا - -// xn--o3cw4h ("Thai", Thai) : TH -// http://www.thnic.co.th -ไทย - -// xn--pgbs0dh ("Tunisia", Arabic) : TN -// http://nic.tn -تونس - -// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台灣 - -// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台湾 - -// xn--nnx388a ("Taiwan", Chinese, variant) : TW -臺灣 - -// xn--j1amh ("ukr", Cyrillic) : UA -укр - -// xn--mgb2ddes ("AlYemen", Arabic) : YE -اليمن - -// xxx : http://icmregistry.com -xxx - -// ye : http://www.y.net.ye/services/domain_name.htm -*.ye - -// za : http://www.zadna.org.za/content/page/domain-information -ac.za -agric.za -alt.za -co.za -edu.za -gov.za -grondar.za -law.za -mil.za -net.za -ngo.za -nis.za -nom.za -org.za -school.za -tm.za -web.za - -// zm : https://zicta.zm/ -// Submitted by registry <info@zicta.zm> -zm -ac.zm -biz.zm -co.zm -com.zm -edu.zm -gov.zm -info.zm -mil.zm -net.zm -org.zm -sch.zm - -// zw : https://en.wikipedia.org/wiki/.zw -*.zw - - -// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-04-04T20:12:16Z - -// aaa : 2015-02-26 American Automobile Association, Inc. -aaa - -// aarp : 2015-05-21 AARP -aarp - -// abarth : 2015-07-30 Fiat Chrysler Automobiles N.V. -abarth - -// abb : 2014-10-24 ABB Ltd -abb - -// abbott : 2014-07-24 Abbott Laboratories, Inc. -abbott - -// abbvie : 2015-07-30 AbbVie Inc. -abbvie - -// abc : 2015-07-30 Disney Enterprises, Inc. -abc - -// able : 2015-06-25 Able Inc. -able - -// abogado : 2014-04-24 Top Level Domain Holdings Limited -abogado - -// abudhabi : 2015-07-30 Abu Dhabi Systems and Information Centre -abudhabi - -// academy : 2013-11-07 Half Oaks, LLC -academy - -// accenture : 2014-08-15 Accenture plc -accenture - -// accountant : 2014-11-20 dot Accountant Limited -accountant - -// accountants : 2014-03-20 Knob Town, LLC -accountants - -// aco : 2015-01-08 ACO Severin Ahlmann GmbH & Co. KG -aco - -// active : 2014-05-01 The Active Network, Inc -active - -// actor : 2013-12-12 United TLD Holdco Ltd. -actor - -// adac : 2015-07-16 Allgemeiner Deutscher Automobil-Club e.V. (ADAC) -adac - -// ads : 2014-12-04 Charleston Road Registry Inc. -ads - -// adult : 2014-10-16 ICM Registry AD LLC -adult - -// aeg : 2015-03-19 Aktiebolaget Electrolux -aeg - -// aetna : 2015-05-21 Aetna Life Insurance Company -aetna - -// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc. -afamilycompany - -// afl : 2014-10-02 Australian Football League -afl - -// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa -africa - -// africamagic : 2015-03-05 Electronic Media Network (Pty) Ltd -africamagic - -// agakhan : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) -agakhan - -// agency : 2013-11-14 Steel Falls, LLC -agency - -// aig : 2014-12-18 American International Group, Inc. -aig - -// aigo : 2015-08-06 aigo Digital Technology Co,Ltd. -aigo - -// airbus : 2015-07-30 Airbus S.A.S. -airbus - -// airforce : 2014-03-06 United TLD Holdco Ltd. -airforce - -// airtel : 2014-10-24 Bharti Airtel Limited -airtel - -// akdn : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) -akdn - -// alfaromeo : 2015-07-31 Fiat Chrysler Automobiles N.V. -alfaromeo - -// alibaba : 2015-01-15 Alibaba Group Holding Limited -alibaba - -// alipay : 2015-01-15 Alibaba Group Holding Limited -alipay - -// allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung Aktiengesellschaft -allfinanz - -// allstate : 2015-07-31 Allstate Fire and Casualty Insurance Company -allstate - -// ally : 2015-06-18 Ally Financial Inc. -ally - -// alsace : 2014-07-02 REGION D ALSACE -alsace - -// alstom : 2015-07-30 ALSTOM -alstom - -// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc. -americanexpress - -// americanfamily : 2015-07-23 AmFam, Inc. -americanfamily - -// amex : 2015-07-31 American Express Travel Related Services Company, Inc. -amex - -// amfam : 2015-07-23 AmFam, Inc. -amfam - -// amica : 2015-05-28 Amica Mutual Insurance Company -amica - -// amsterdam : 2014-07-24 Gemeente Amsterdam -amsterdam - -// analytics : 2014-12-18 Campus IP LLC -analytics - -// android : 2014-08-07 Charleston Road Registry Inc. -android - -// anquan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. -anquan - -// anz : 2015-07-31 Australia and New Zealand Banking Group Limited -anz - -// aol : 2015-09-17 AOL Inc. -aol - -// apartments : 2014-12-11 June Maple, LLC -apartments - -// app : 2015-05-14 Charleston Road Registry Inc. -app - -// apple : 2015-05-14 Apple Inc. -apple - -// aquarelle : 2014-07-24 Aquarelle.com -aquarelle - -// arab : 2015-11-12 League of Arab States -arab - -// aramco : 2014-11-20 Aramco Services Company -aramco - -// archi : 2014-02-06 STARTING DOT LIMITED -archi - -// army : 2014-03-06 United TLD Holdco Ltd. -army - -// art : 2016-03-24 UK Creative Ideas Limited -art - -// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E. -arte - -// asda : 2015-07-31 Wal-Mart Stores, Inc. -asda - -// associates : 2014-03-06 Baxter Hill, LLC -associates - -// athleta : 2015-07-30 The Gap, Inc. -athleta - -// attorney : 2014-03-20 -attorney - -// auction : 2014-03-20 -auction - -// audi : 2015-05-21 AUDI Aktiengesellschaft -audi - -// audible : 2015-06-25 Amazon EU S.à r.l. -audible - -// audio : 2014-03-20 Uniregistry, Corp. -audio - -// auspost : 2015-08-13 Australian Postal Corporation -auspost - -// author : 2014-12-18 Amazon EU S.à r.l. -author - -// auto : 2014-11-13 -auto - -// autos : 2014-01-09 DERAutos, LLC -autos - -// avianca : 2015-01-08 Aerovias del Continente Americano S.A. Avianca -avianca - -// aws : 2015-06-25 Amazon EU S.à r.l. -aws - -// axa : 2013-12-19 AXA SA -axa - -// azure : 2014-12-18 Microsoft Corporation -azure - -// baby : 2015-04-09 Johnson & Johnson Services, Inc. -baby - -// baidu : 2015-01-08 Baidu, Inc. -baidu - -// banamex : 2015-07-30 Citigroup Inc. -banamex - -// bananarepublic : 2015-07-31 The Gap, Inc. -bananarepublic - -// band : 2014-06-12 -band - -// bank : 2014-09-25 fTLD Registry Services LLC -bank - -// bar : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -bar - -// barcelona : 2014-07-24 Municipi de Barcelona -barcelona - -// barclaycard : 2014-11-20 Barclays Bank PLC -barclaycard - -// barclays : 2014-11-20 Barclays Bank PLC -barclays - -// barefoot : 2015-06-11 Gallo Vineyards, Inc. -barefoot - -// bargains : 2013-11-14 Half Hallow, LLC -bargains - -// baseball : 2015-10-29 MLB Advanced Media DH, LLC -baseball - -// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA) -basketball - -// bauhaus : 2014-04-17 Werkhaus GmbH -bauhaus - -// bayern : 2014-01-23 Bayern Connect GmbH -bayern - -// bbc : 2014-12-18 British Broadcasting Corporation -bbc - -// bbt : 2015-07-23 BB&T Corporation -bbt - -// bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A. -bbva - -// bcg : 2015-04-02 The Boston Consulting Group, Inc. -bcg - -// bcn : 2014-07-24 Municipi de Barcelona -bcn - -// beats : 2015-05-14 Beats Electronics, LLC -beats - -// beauty : 2015-12-03 L'Oréal -beauty - -// beer : 2014-01-09 Top Level Domain Holdings Limited -beer - -// bentley : 2014-12-18 Bentley Motors Limited -bentley - -// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG -berlin - -// best : 2013-12-19 BestTLD Pty Ltd -best - -// bestbuy : 2015-07-31 BBY Solutions, Inc. -bestbuy - -// bet : 2015-05-07 Afilias plc -bet - -// bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited -bharti - -// bible : 2014-06-19 American Bible Society -bible - -// bid : 2013-12-19 dot Bid Limited -bid - -// bike : 2013-08-27 Grand Hollow, LLC -bike - -// bing : 2014-12-18 Microsoft Corporation -bing - -// bingo : 2014-12-04 Sand Cedar, LLC -bingo - -// bio : 2014-03-06 STARTING DOT LIMITED -bio - -// black : 2014-01-16 Afilias Limited -black - -// blackfriday : 2014-01-16 Uniregistry, Corp. -blackfriday - -// blanco : 2015-07-16 BLANCO GmbH + Co KG -blanco - -// blockbuster : 2015-07-30 Dish DBS Corporation -blockbuster - -// blog : 2015-05-14 PRIMER NIVEL S.A. -blog - -// bloomberg : 2014-07-17 Bloomberg IP Holdings LLC -bloomberg - -// blue : 2013-11-07 Afilias Limited -blue - -// bms : 2014-10-30 Bristol-Myers Squibb Company -bms - -// bmw : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft -bmw - -// bnl : 2014-07-24 Banca Nazionale del Lavoro -bnl - -// bnpparibas : 2014-05-29 BNP Paribas -bnpparibas - -// boats : 2014-12-04 DERBoats, LLC -boats - -// boehringer : 2015-07-09 Boehringer Ingelheim International GmbH -boehringer - -// bofa : 2015-07-31 NMS Services, Inc. -bofa - -// bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br -bom - -// bond : 2014-06-05 Bond University Limited -bond - -// boo : 2014-01-30 Charleston Road Registry Inc. -boo - -// book : 2015-08-27 Amazon EU S.à r.l. -book - -// booking : 2015-07-16 Booking.com B.V. -booking - -// boots : 2015-01-08 THE BOOTS COMPANY PLC -boots - -// bosch : 2015-06-18 Robert Bosch GMBH -bosch - -// bostik : 2015-05-28 Bostik SA -bostik - -// boston : 2015-12-10 Boston Globe Media Partners, LLC -boston - -// bot : 2014-12-18 Amazon EU S.à r.l. -bot - -// boutique : 2013-11-14 Over Galley, LLC -boutique - -// box : 2015-11-12 NS1 Limited -box - -// bradesco : 2014-12-18 Banco Bradesco S.A. -bradesco - -// bridgestone : 2014-12-18 Bridgestone Corporation -bridgestone - -// broadway : 2014-12-22 Celebrate Broadway, Inc. -broadway - -// broker : 2014-12-11 IG Group Holdings PLC -broker - -// brother : 2015-01-29 Brother Industries, Ltd. -brother - -// brussels : 2014-02-06 DNS.be vzw -brussels - -// budapest : 2013-11-21 Top Level Domain Holdings Limited -budapest - -// bugatti : 2015-07-23 Bugatti International SA -bugatti - -// build : 2013-11-07 Plan Bee LLC -build - -// builders : 2013-11-07 Atomic Madison, LLC -builders - -// business : 2013-11-07 Spring Cross, LLC -business - -// buy : 2014-12-18 Amazon EU S.à r.l. -buy - -// buzz : 2013-10-02 DOTSTRATEGY CO. -buzz - -// bzh : 2014-02-27 Association www.bzh -bzh - -// cab : 2013-10-24 Half Sunset, LLC -cab - -// cafe : 2015-02-11 Pioneer Canyon, LLC -cafe - -// cal : 2014-07-24 Charleston Road Registry Inc. -cal - -// call : 2014-12-18 Amazon EU S.à r.l. -call - -// calvinklein : 2015-07-30 PVH gTLD Holdings LLC -calvinklein - -// camera : 2013-08-27 Atomic Maple, LLC -camera - -// camp : 2013-11-07 Delta Dynamite, LLC -camp - -// cancerresearch : 2014-05-15 Australian Cancer Research Foundation -cancerresearch - -// canon : 2014-09-12 Canon Inc. -canon - -// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -capetown - -// capital : 2014-03-06 Delta Mill, LLC -capital - -// capitalone : 2015-08-06 Capital One Financial Corporation -capitalone - -// car : 2015-01-22 -car - -// caravan : 2013-12-12 Caravan International, Inc. -caravan - -// cards : 2013-12-05 Foggy Hollow, LLC -cards - -// care : 2014-03-06 Goose Cross -care - -// career : 2013-10-09 dotCareer LLC -career - -// careers : 2013-10-02 Wild Corner, LLC -careers - -// cars : 2014-11-13 -cars - -// cartier : 2014-06-23 Richemont DNS Inc. -cartier - -// casa : 2013-11-21 Top Level Domain Holdings Limited -casa - -// case : 2015-09-03 CNH Industrial N.V. -case - -// caseih : 2015-09-03 CNH Industrial N.V. -caseih - -// cash : 2014-03-06 Delta Lake, LLC -cash - -// casino : 2014-12-18 Binky Sky, LLC -casino - -// catering : 2013-12-05 New Falls. LLC -catering - -// catholic : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -catholic - -// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA -cba - -// cbn : 2014-08-22 The Christian Broadcasting Network, Inc. -cbn - -// cbre : 2015-07-02 CBRE, Inc. -cbre - -// cbs : 2015-08-06 CBS Domains Inc. -cbs - -// ceb : 2015-04-09 The Corporate Executive Board Company -ceb - -// center : 2013-11-07 Tin Mill, LLC -center - -// ceo : 2013-11-07 CEOTLD Pty Ltd -ceo - -// cern : 2014-06-05 European Organization for Nuclear Research ("CERN") -cern - -// cfa : 2014-08-28 CFA Institute -cfa - -// cfd : 2014-12-11 IG Group Holdings PLC -cfd - -// chanel : 2015-04-09 Chanel International B.V. -chanel - -// channel : 2014-05-08 Charleston Road Registry Inc. -channel - -// chase : 2015-04-30 JPMorgan Chase & Co. -chase - -// chat : 2014-12-04 Sand Fields, LLC -chat - -// cheap : 2013-11-14 Sand Cover, LLC -cheap - -// chintai : 2015-06-11 CHINTAI Corporation -chintai - -// chloe : 2014-10-16 Richemont DNS Inc. -chloe - -// christmas : 2013-11-21 Uniregistry, Corp. -christmas - -// chrome : 2014-07-24 Charleston Road Registry Inc. -chrome - -// chrysler : 2015-07-30 FCA US LLC. -chrysler - -// church : 2014-02-06 Holly Fields, LLC -church - -// cipriani : 2015-02-19 Hotel Cipriani Srl -cipriani - -// circle : 2014-12-18 Amazon EU S.à r.l. -circle - -// cisco : 2014-12-22 Cisco Technology, Inc. -cisco - -// citadel : 2015-07-23 Citadel Domain LLC -citadel - -// citi : 2015-07-30 Citigroup Inc. -citi - -// citic : 2014-01-09 CITIC Group Corporation -citic - -// city : 2014-05-29 Snow Sky, LLC -city - -// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc. -cityeats - -// claims : 2014-03-20 Black Corner, LLC -claims - -// cleaning : 2013-12-05 Fox Shadow, LLC -cleaning - -// click : 2014-06-05 Uniregistry, Corp. -click - -// clinic : 2014-03-20 Goose Park, LLC -clinic - -// clinique : 2015-10-01 The Estée Lauder Companies Inc. -clinique - -// clothing : 2013-08-27 Steel Lake, LLC -clothing - -// cloud : 2015-04-16 ARUBA S.p.A. -cloud - -// club : 2013-11-08 .CLUB DOMAINS, LLC -club - -// clubmed : 2015-06-25 Club Méditerranée S.A. -clubmed - -// coach : 2014-10-09 Koko Island, LLC -coach - -// codes : 2013-10-31 Puff Willow, LLC -codes - -// coffee : 2013-10-17 Trixy Cover, LLC -coffee - -// college : 2014-01-16 XYZ.COM LLC -college - -// cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH -cologne - -// comcast : 2015-07-23 Comcast IP Holdings I, LLC -comcast - -// commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA -commbank - -// community : 2013-12-05 Fox Orchard, LLC -community - -// company : 2013-11-07 Silver Avenue, LLC -company - -// compare : 2015-10-08 iSelect Ltd -compare - -// computer : 2013-10-24 Pine Mill, LLC -computer - -// comsec : 2015-01-08 VeriSign, Inc. -comsec - -// condos : 2013-12-05 Pine House, LLC -condos - -// construction : 2013-09-16 Fox Dynamite, LLC -construction - -// consulting : 2013-12-05 -consulting - -// contact : 2015-01-08 Top Level Spectrum, Inc. -contact - -// contractors : 2013-09-10 Magic Woods, LLC -contractors - -// cooking : 2013-11-21 Top Level Domain Holdings Limited -cooking - -// cookingchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. -cookingchannel - -// cool : 2013-11-14 Koko Lake, LLC -cool - -// corsica : 2014-09-25 Collectivité Territoriale de Corse -corsica - -// country : 2013-12-19 Top Level Domain Holdings Limited -country - -// coupon : 2015-02-26 Amazon EU S.à r.l. -coupon - -// coupons : 2015-03-26 Black Island, LLC -coupons - -// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD -courses - -// credit : 2014-03-20 Snow Shadow, LLC -credit - -// creditcard : 2014-03-20 Binky Frostbite, LLC -creditcard - -// creditunion : 2015-01-22 CUNA Performance Resources, LLC -creditunion - -// cricket : 2014-10-09 dot Cricket Limited -cricket - -// crown : 2014-10-24 Crown Equipment Corporation -crown - -// crs : 2014-04-03 Federated Co-operatives Limited -crs - -// cruise : 2015-12-10 Viking River Cruises (Bermuda) Ltd. -cruise - -// cruises : 2013-12-05 Spring Way, LLC -cruises - -// csc : 2014-09-25 Alliance-One Services, Inc. -csc - -// cuisinella : 2014-04-03 SALM S.A.S. -cuisinella - -// cymru : 2014-05-08 Nominet UK -cymru - -// cyou : 2015-01-22 Beijing Gamease Age Digital Technology Co., Ltd. -cyou - -// dabur : 2014-02-06 Dabur India Limited -dabur - -// dad : 2014-01-23 Charleston Road Registry Inc. -dad - -// dance : 2013-10-24 United TLD Holdco Ltd. -dance - -// date : 2014-11-20 dot Date Limited -date - -// dating : 2013-12-05 Pine Fest, LLC -dating - -// datsun : 2014-03-27 NISSAN MOTOR CO., LTD. -datsun - -// day : 2014-01-30 Charleston Road Registry Inc. -day - -// dclk : 2014-11-20 Charleston Road Registry Inc. -dclk - -// dds : 2015-05-07 Top Level Domain Holdings Limited -dds - -// deal : 2015-06-25 Amazon EU S.à r.l. -deal - -// dealer : 2014-12-22 Dealer Dot Com, Inc. -dealer - -// deals : 2014-05-22 Sand Sunset, LLC -deals - -// degree : 2014-03-06 -degree - -// delivery : 2014-09-11 Steel Station, LLC -delivery - -// dell : 2014-10-24 Dell Inc. -dell - -// deloitte : 2015-07-31 Deloitte Touche Tohmatsu -deloitte - -// delta : 2015-02-19 Delta Air Lines, Inc. -delta - -// democrat : 2013-10-24 United TLD Holdco Ltd. -democrat - -// dental : 2014-03-20 Tin Birch, LLC -dental - -// dentist : 2014-03-20 -dentist - -// desi : 2013-11-14 Desi Networks LLC -desi - -// design : 2014-11-07 Top Level Design, LLC -design - -// dev : 2014-10-16 Charleston Road Registry Inc. -dev - -// dhl : 2015-07-23 Deutsche Post AG -dhl - -// diamonds : 2013-09-22 John Edge, LLC -diamonds - -// diet : 2014-06-26 Uniregistry, Corp. -diet - -// digital : 2014-03-06 Dash Park, LLC -digital - -// direct : 2014-04-10 Half Trail, LLC -direct - -// directory : 2013-09-20 Extra Madison, LLC -directory - -// discount : 2014-03-06 Holly Hill, LLC -discount - -// discover : 2015-07-23 Discover Financial Services -discover - -// dish : 2015-07-30 Dish DBS Corporation -dish - -// diy : 2015-11-05 Lifestyle Domain Holdings, Inc. -diy - -// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd. -dnp - -// docs : 2014-10-16 Charleston Road Registry Inc. -docs - -// dodge : 2015-07-30 FCA US LLC. -dodge - -// dog : 2014-12-04 Koko Mill, LLC -dog - -// doha : 2014-09-18 Communications Regulatory Authority (CRA) -doha - -// domains : 2013-10-17 Sugar Cross, LLC -domains - -// dot : 2015-05-21 Dish DBS Corporation -dot - -// download : 2014-11-20 dot Support Limited -download - -// drive : 2015-03-05 Charleston Road Registry Inc. -drive - -// dstv : 2015-03-12 MultiChoice (Proprietary) Limited -dstv - -// dtv : 2015-06-04 Dish DBS Corporation -dtv - -// dubai : 2015-01-01 Dubai Smart Government Department -dubai - -// duck : 2015-07-23 Johnson Shareholdings, Inc. -duck - -// dunlop : 2015-07-02 The Goodyear Tire & Rubber Company -dunlop - -// duns : 2015-08-06 The Dun & Bradstreet Corporation -duns - -// dupont : 2015-06-25 E.I. du Pont de Nemours and Company -dupont - -// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -durban - -// dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -dvag - -// dwg : 2015-07-23 Autodesk, Inc. -dwg - -// earth : 2014-12-04 Interlink Co., Ltd. -earth - -// eat : 2014-01-23 Charleston Road Registry Inc. -eat - -// edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V. -edeka - -// education : 2013-11-07 Brice Way, LLC -education - -// email : 2013-10-31 Spring Madison, LLC -email - -// emerck : 2014-04-03 Merck KGaA -emerck - -// emerson : 2015-07-23 Emerson Electric Co. -emerson - -// energy : 2014-09-11 Binky Birch, LLC -energy - -// engineer : 2014-03-06 United TLD Holdco Ltd. -engineer - -// engineering : 2014-03-06 Romeo Canyon -engineering - -// enterprises : 2013-09-20 Snow Oaks, LLC -enterprises - -// epost : 2015-07-23 Deutsche Post AG -epost - -// epson : 2014-12-04 Seiko Epson Corporation -epson - -// equipment : 2013-08-27 Corn Station, LLC -equipment - -// ericsson : 2015-07-09 Telefonaktiebolaget L M Ericsson -ericsson - -// erni : 2014-04-03 ERNI Group Holding AG -erni - -// esq : 2014-05-08 Charleston Road Registry Inc. -esq - -// estate : 2013-08-27 Trixy Park, LLC -estate - -// esurance : 2015-07-23 Esurance Insurance Company -esurance - -// etisalat : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) -etisalat - -// eurovision : 2014-04-24 European Broadcasting Union (EBU) -eurovision - -// eus : 2013-12-12 Puntueus Fundazioa -eus - -// events : 2013-12-05 Pioneer Maple, LLC -events - -// everbank : 2014-05-15 EverBank -everbank - -// exchange : 2014-03-06 Spring Falls, LLC -exchange - -// expert : 2013-11-21 Magic Pass, LLC -expert - -// exposed : 2013-12-05 Victor Beach, LLC -exposed - -// express : 2015-02-11 Sea Sunset, LLC -express - -// extraspace : 2015-05-14 Extra Space Storage LLC -extraspace - -// fage : 2014-12-18 Fage International S.A. -fage - -// fail : 2014-03-06 Atomic Pipe, LLC -fail - -// fairwinds : 2014-11-13 FairWinds Partners, LLC -fairwinds - -// faith : 2014-11-20 dot Faith Limited -faith - -// family : 2015-04-02 -family - -// fan : 2014-03-06 -fan - -// fans : 2014-11-07 Asiamix Digital Limited -fans - -// farm : 2013-11-07 Just Maple, LLC -farm - -// farmers : 2015-07-09 Farmers Insurance Exchange -farmers - -// fashion : 2014-07-03 Top Level Domain Holdings Limited -fashion - -// fast : 2014-12-18 Amazon EU S.à r.l. -fast - -// fedex : 2015-08-06 Federal Express Corporation -fedex - -// feedback : 2013-12-19 Top Level Spectrum, Inc. -feedback - -// ferrari : 2015-07-31 Fiat Chrysler Automobiles N.V. -ferrari - -// ferrero : 2014-12-18 Ferrero Trading Lux S.A. -ferrero - -// fiat : 2015-07-31 Fiat Chrysler Automobiles N.V. -fiat - -// fidelity : 2015-07-30 Fidelity Brokerage Services LLC -fidelity - -// fido : 2015-08-06 Rogers Communications Partnership -fido - -// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd -film - -// final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br -final - -// finance : 2014-03-20 Cotton Cypress, LLC -finance - -// financial : 2014-03-06 Just Cover, LLC -financial - -// fire : 2015-06-25 Amazon EU S.à r.l. -fire - -// firestone : 2014-12-18 Bridgestone Corporation -firestone - -// firmdale : 2014-03-27 Firmdale Holdings Limited -firmdale - -// fish : 2013-12-12 Fox Woods, LLC -fish - -// fishing : 2013-11-21 Top Level Domain Holdings Limited -fishing - -// fit : 2014-11-07 Top Level Domain Holdings Limited -fit - -// fitness : 2014-03-06 Brice Orchard, LLC -fitness - -// flickr : 2015-04-02 Yahoo! Domain Services Inc. -flickr - -// flights : 2013-12-05 Fox Station, LLC -flights - -// flir : 2015-07-23 FLIR Systems, Inc. -flir - -// florist : 2013-11-07 Half Cypress, LLC -florist - -// flowers : 2014-10-09 Uniregistry, Corp. -flowers - -// flsmidth : 2014-07-24 FLSmidth A/S -flsmidth - -// fly : 2014-05-08 Charleston Road Registry Inc. -fly - -// foo : 2014-01-23 Charleston Road Registry Inc. -foo - -// foodnetwork : 2015-07-02 Lifestyle Domain Holdings, Inc. -foodnetwork - -// football : 2014-12-18 Foggy Farms, LLC -football - -// ford : 2014-11-13 Ford Motor Company -ford - -// forex : 2014-12-11 IG Group Holdings PLC -forex - -// forsale : 2014-05-22 -forsale - -// forum : 2015-04-02 Fegistry, LLC -forum - -// foundation : 2013-12-05 John Dale, LLC -foundation - -// fox : 2015-09-11 FOX Registry, LLC -fox - -// free : 2015-12-10 Amazon EU S.à r.l. -free - -// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH -fresenius - -// frl : 2014-05-15 FRLregistry B.V. -frl - -// frogans : 2013-12-19 OP3FT -frogans - -// frontdoor : 2015-07-02 Lifestyle Domain Holdings, Inc. -frontdoor - -// frontier : 2015-02-05 Frontier Communications Corporation -frontier - -// ftr : 2015-07-16 Frontier Communications Corporation -ftr - -// fujitsu : 2015-07-30 Fujitsu Limited -fujitsu - -// fujixerox : 2015-07-23 Xerox DNHC LLC -fujixerox - -// fun : 2016-01-14 Oriental Trading Company, Inc. -fun - -// fund : 2014-03-20 John Castle, LLC -fund - -// furniture : 2014-03-20 Lone Fields, LLC -furniture - -// futbol : 2013-09-20 -futbol - -// fyi : 2015-04-02 Silver Tigers, LLC -fyi - -// gal : 2013-11-07 Asociación puntoGAL -gal - -// gallery : 2013-09-13 Sugar House, LLC -gallery - -// gallo : 2015-06-11 Gallo Vineyards, Inc. -gallo - -// gallup : 2015-02-19 Gallup, Inc. -gallup - -// game : 2015-05-28 Uniregistry, Corp. -game - -// games : 2015-05-28 Foggy Beach, LLC -games - -// gap : 2015-07-31 The Gap, Inc. -gap - -// garden : 2014-06-26 Top Level Domain Holdings Limited -garden - -// gbiz : 2014-07-17 Charleston Road Registry Inc. -gbiz - -// gdn : 2014-07-31 Joint Stock Company "Navigation-information systems" -gdn - -// gea : 2014-12-04 GEA Group Aktiengesellschaft -gea - -// gent : 2014-01-23 COMBELL GROUP NV/SA -gent - -// genting : 2015-03-12 Resorts World Inc Pte. Ltd. -genting - -// george : 2015-07-31 Wal-Mart Stores, Inc. -george - -// ggee : 2014-01-09 GMO Internet, Inc. -ggee - -// gift : 2013-10-17 Uniregistry, Corp. -gift - -// gifts : 2014-07-03 Goose Sky, LLC -gifts - -// gives : 2014-03-06 United TLD Holdco Ltd. -gives - -// giving : 2014-11-13 Giving Limited -giving - -// glade : 2015-07-23 Johnson Shareholdings, Inc. -glade - -// glass : 2013-11-07 Black Cover, LLC -glass - -// gle : 2014-07-24 Charleston Road Registry Inc. -gle - -// global : 2014-04-17 Dot GLOBAL AS -global - -// globo : 2013-12-19 Globo Comunicação e Participações S.A -globo - -// gmail : 2014-05-01 Charleston Road Registry Inc. -gmail - -// gmbh : 2016-01-29 Extra Dynamite, LLC -gmbh - -// gmo : 2014-01-09 GMO Internet, Inc. -gmo - -// gmx : 2014-04-24 1&1 Mail & Media GmbH -gmx - -// godaddy : 2015-07-23 Go Daddy East, LLC -godaddy - -// gold : 2015-01-22 June Edge, LLC -gold - -// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD. -goldpoint - -// golf : 2014-12-18 Lone falls, LLC -golf - -// goo : 2014-12-18 NTT Resonant Inc. -goo - -// goodhands : 2015-07-31 Allstate Fire and Casualty Insurance Company -goodhands - -// goodyear : 2015-07-02 The Goodyear Tire & Rubber Company -goodyear - -// goog : 2014-11-20 Charleston Road Registry Inc. -goog - -// google : 2014-07-24 Charleston Road Registry Inc. -google - -// gop : 2014-01-16 Republican State Leadership Committee, Inc. -gop - -// got : 2014-12-18 Amazon EU S.à r.l. -got - -// gotv : 2015-03-12 MultiChoice (Proprietary) Limited -gotv - -// grainger : 2015-05-07 Grainger Registry Services, LLC -grainger - -// graphics : 2013-09-13 Over Madison, LLC -graphics - -// gratis : 2014-03-20 Pioneer Tigers, LLC -gratis - -// green : 2014-05-08 Afilias Limited -green - -// gripe : 2014-03-06 Corn Sunset, LLC -gripe - -// group : 2014-08-15 Romeo Town, LLC -group - -// guardian : 2015-07-30 The Guardian Life Insurance Company of America -guardian - -// gucci : 2014-11-13 Guccio Gucci S.p.a. -gucci - -// guge : 2014-08-28 Charleston Road Registry Inc. -guge - -// guide : 2013-09-13 Snow Moon, LLC -guide - -// guitars : 2013-11-14 Uniregistry, Corp. -guitars - -// guru : 2013-08-27 Pioneer Cypress, LLC -guru - -// hair : 2015-12-03 L'Oréal -hair - -// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH -hamburg - -// hangout : 2014-11-13 Charleston Road Registry Inc. -hangout - -// haus : 2013-12-05 -haus - -// hbo : 2015-07-30 HBO Registry Services, Inc. -hbo - -// hdfc : 2015-07-30 HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED -hdfc - -// hdfcbank : 2015-02-12 HDFC Bank Limited -hdfcbank - -// health : 2015-02-11 DotHealth, LLC -health - -// healthcare : 2014-06-12 Silver Glen, LLC -healthcare - -// help : 2014-06-26 Uniregistry, Corp. -help - -// helsinki : 2015-02-05 City of Helsinki -helsinki - -// here : 2014-02-06 Charleston Road Registry Inc. -here - -// hermes : 2014-07-10 HERMES INTERNATIONAL -hermes - -// hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc. -hgtv - -// hiphop : 2014-03-06 Uniregistry, Corp. -hiphop - -// hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc. -hisamitsu - -// hitachi : 2014-10-31 Hitachi, Ltd. -hitachi - -// hiv : 2014-03-13 -hiv - -// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited -hkt - -// hockey : 2015-03-19 Half Willow, LLC -hockey - -// holdings : 2013-08-27 John Madison, LLC -holdings - -// holiday : 2013-11-07 Goose Woods, LLC -holiday - -// homedepot : 2015-04-02 Homer TLC, Inc. -homedepot - -// homegoods : 2015-07-16 The TJX Companies, Inc. -homegoods - -// homes : 2014-01-09 DERHomes, LLC -homes - -// homesense : 2015-07-16 The TJX Companies, Inc. -homesense - -// honda : 2014-12-18 Honda Motor Co., Ltd. -honda - -// honeywell : 2015-07-23 Honeywell GTLD LLC -honeywell - -// horse : 2013-11-21 Top Level Domain Holdings Limited -horse - -// host : 2014-04-17 DotHost Inc. -host - -// hosting : 2014-05-29 Uniregistry, Corp. -hosting - -// hot : 2015-08-27 Amazon EU S.à r.l. -hot - -// hoteles : 2015-03-05 Travel Reservations SRL -hoteles - -// hotmail : 2014-12-18 Microsoft Corporation -hotmail - -// house : 2013-11-07 Sugar Park, LLC -house - -// how : 2014-01-23 Charleston Road Registry Inc. -how - -// hsbc : 2014-10-24 HSBC Holdings PLC -hsbc - -// htc : 2015-04-02 HTC corporation -htc - -// hughes : 2015-07-30 Hughes Satellite Systems Corporation -hughes - -// hyatt : 2015-07-30 Hyatt GTLD, L.L.C. -hyatt - -// hyundai : 2015-07-09 Hyundai Motor Company -hyundai - -// ibm : 2014-07-31 International Business Machines Corporation -ibm - -// icbc : 2015-02-19 Industrial and Commercial Bank of China Limited -icbc - -// ice : 2014-10-30 IntercontinentalExchange, Inc. -ice - -// icu : 2015-01-08 One.com A/S -icu - -// ieee : 2015-07-23 IEEE Global LLC -ieee - -// ifm : 2014-01-30 ifm electronic gmbh -ifm - -// iinet : 2014-07-03 Connect West Pty. Ltd. -iinet - -// ikano : 2015-07-09 Ikano S.A. -ikano - -// imamat : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) -imamat - -// imdb : 2015-06-25 Amazon EU S.à r.l. -imdb - -// immo : 2014-07-10 Auburn Bloom, LLC -immo - -// immobilien : 2013-11-07 United TLD Holdco Ltd. -immobilien - -// industries : 2013-12-05 Outer House, LLC -industries - -// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD. -infiniti - -// ing : 2014-01-23 Charleston Road Registry Inc. -ing - -// ink : 2013-12-05 Top Level Design, LLC -ink - -// institute : 2013-11-07 Outer Maple, LLC -institute - -// insurance : 2015-02-19 fTLD Registry Services LLC -insurance - -// insure : 2014-03-20 Pioneer Willow, LLC -insure - -// intel : 2015-08-06 Intel Corporation -intel - -// international : 2013-11-07 Wild Way, LLC -international - -// intuit : 2015-07-30 Intuit Administrative Services, Inc. -intuit - -// investments : 2014-03-20 Holly Glen, LLC -investments - -// ipiranga : 2014-08-28 Ipiranga Produtos de Petroleo S.A. -ipiranga - -// irish : 2014-08-07 Dot-Irish LLC -irish - -// iselect : 2015-02-11 iSelect Ltd -iselect - -// ismaili : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) -ismaili - -// ist : 2014-08-28 Istanbul Metropolitan Municipality -ist - -// istanbul : 2014-08-28 Istanbul Metropolitan Municipality -istanbul - -// itau : 2014-10-02 Itau Unibanco Holding S.A. -itau - -// itv : 2015-07-09 ITV Services Limited -itv - -// iveco : 2015-09-03 CNH Industrial N.V. -iveco - -// iwc : 2014-06-23 Richemont DNS Inc. -iwc - -// jaguar : 2014-11-13 Jaguar Land Rover Ltd -jaguar - -// java : 2014-06-19 Oracle Corporation -java - -// jcb : 2014-11-20 JCB Co., Ltd. -jcb - -// jcp : 2015-04-23 JCP Media, Inc. -jcp - -// jeep : 2015-07-30 FCA US LLC. -jeep - -// jetzt : 2014-01-09 New TLD Company AB -jetzt - -// jewelry : 2015-03-05 Wild Bloom, LLC -jewelry - -// jio : 2015-04-02 Affinity Names, Inc. -jio - -// jlc : 2014-12-04 Richemont DNS Inc. -jlc - -// jll : 2015-04-02 Jones Lang LaSalle Incorporated -jll - -// jmp : 2015-03-26 Matrix IP LLC -jmp - -// jnj : 2015-06-18 Johnson & Johnson Services, Inc. -jnj - -// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -joburg - -// jot : 2014-12-18 Amazon EU S.à r.l. -jot - -// joy : 2014-12-18 Amazon EU S.à r.l. -joy - -// jpmorgan : 2015-04-30 JPMorgan Chase & Co. -jpmorgan - -// jprs : 2014-09-18 Japan Registry Services Co., Ltd. -jprs - -// juegos : 2014-03-20 Uniregistry, Corp. -juegos - -// juniper : 2015-07-30 JUNIPER NETWORKS, INC. -juniper - -// kaufen : 2013-11-07 United TLD Holdco Ltd. -kaufen - -// kddi : 2014-09-12 KDDI CORPORATION -kddi - -// kerryhotels : 2015-04-30 Kerry Trading Co. Limited -kerryhotels - -// kerrylogistics : 2015-04-09 Kerry Trading Co. Limited -kerrylogistics - -// kerryproperties : 2015-04-09 Kerry Trading Co. Limited -kerryproperties - -// kfh : 2014-12-04 Kuwait Finance House -kfh - -// kia : 2015-07-09 KIA MOTORS CORPORATION -kia - -// kim : 2013-09-23 Afilias Limited -kim - -// kinder : 2014-11-07 Ferrero Trading Lux S.A. -kinder - -// kindle : 2015-06-25 Amazon EU S.à r.l. -kindle - -// kitchen : 2013-09-20 Just Goodbye, LLC -kitchen - -// kiwi : 2013-09-20 DOT KIWI LIMITED -kiwi - -// koeln : 2014-01-09 NetCologne Gesellschaft für Telekommunikation mbH -koeln - -// komatsu : 2015-01-08 Komatsu Ltd. -komatsu - -// kosher : 2015-08-20 Kosher Marketing Assets LLC -kosher - -// kpmg : 2015-04-23 KPMG International Cooperative (KPMG International Genossenschaft) -kpmg - -// kpn : 2015-01-08 Koninklijke KPN N.V. -kpn - -// krd : 2013-12-05 KRG Department of Information Technology -krd - -// kred : 2013-12-19 KredTLD Pty Ltd -kred - -// kuokgroup : 2015-04-09 Kerry Trading Co. Limited -kuokgroup - -// kyknet : 2015-03-05 Electronic Media Network (Pty) Ltd -kyknet - -// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen -kyoto - -// lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA -lacaixa - -// ladbrokes : 2015-08-06 LADBROKES INTERNATIONAL PLC -ladbrokes - -// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A. -lamborghini - -// lamer : 2015-10-01 The Estée Lauder Companies Inc. -lamer - -// lancaster : 2015-02-12 LANCASTER -lancaster - -// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V. -lancia - -// lancome : 2015-07-23 L'Oréal -lancome - -// land : 2013-09-10 Pine Moon, LLC -land - -// landrover : 2014-11-13 Jaguar Land Rover Ltd -landrover - -// lanxess : 2015-07-30 LANXESS Corporation -lanxess - -// lasalle : 2015-04-02 Jones Lang LaSalle Incorporated -lasalle - -// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico -lat - -// latino : 2015-07-30 Dish DBS Corporation -latino - -// latrobe : 2014-06-16 La Trobe University -latrobe - -// law : 2015-01-22 Minds + Machines Group Limited -law - -// lawyer : 2014-03-20 -lawyer - -// lds : 2014-03-20 IRI Domain Management, LLC ("Applicant") -lds - -// lease : 2014-03-06 Victor Trail, LLC -lease - -// leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc -leclerc - -// lefrak : 2015-07-16 LeFrak Organization, Inc. -lefrak - -// legal : 2014-10-16 Blue Falls, LLC -legal - -// lego : 2015-07-16 LEGO Juris A/S -lego - -// lexus : 2015-04-23 TOYOTA MOTOR CORPORATION -lexus - -// lgbt : 2014-05-08 Afilias Limited -lgbt - -// liaison : 2014-10-02 Liaison Technologies, Incorporated -liaison - -// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG -lidl - -// life : 2014-02-06 Trixy Oaks, LLC -life - -// lifeinsurance : 2015-01-15 American Council of Life Insurers -lifeinsurance - -// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc. -lifestyle - -// lighting : 2013-08-27 John McCook, LLC -lighting - -// like : 2014-12-18 Amazon EU S.à r.l. -like - -// lilly : 2015-07-31 Eli Lilly and Company -lilly - -// limited : 2014-03-06 Big Fest, LLC -limited - -// limo : 2013-10-17 Hidden Frostbite, LLC -limo - -// lincoln : 2014-11-13 Ford Motor Company -lincoln - -// linde : 2014-12-04 Linde Aktiengesellschaft -linde - -// link : 2013-11-14 Uniregistry, Corp. -link - -// lipsy : 2015-06-25 Lipsy Ltd -lipsy - -// live : 2014-12-04 -live - -// living : 2015-07-30 Lifestyle Domain Holdings, Inc. -living - -// lixil : 2015-03-19 LIXIL Group Corporation -lixil - -// loan : 2014-11-20 dot Loan Limited -loan - -// loans : 2014-03-20 June Woods, LLC -loans - -// locker : 2015-06-04 Dish DBS Corporation -locker - -// locus : 2015-06-25 Locus Analytics LLC -locus - -// loft : 2015-07-30 Annco, Inc. -loft - -// lol : 2015-01-30 Uniregistry, Corp. -lol - -// london : 2013-11-14 Dot London Domains Limited -london - -// lotte : 2014-11-07 Lotte Holdings Co., Ltd. -lotte - -// lotto : 2014-04-10 Afilias Limited -lotto - -// love : 2014-12-22 Merchant Law Group LLP -love - -// lpl : 2015-07-30 LPL Holdings, Inc. -lpl - -// lplfinancial : 2015-07-30 LPL Holdings, Inc. -lplfinancial - -// ltd : 2014-09-25 Over Corner, LLC -ltd - -// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA -ltda - -// lundbeck : 2015-08-06 H. Lundbeck A/S -lundbeck - -// lupin : 2014-11-07 LUPIN LIMITED -lupin - -// luxe : 2014-01-09 Top Level Domain Holdings Limited -luxe - -// luxury : 2013-10-17 Luxury Partners, LLC -luxury - -// macys : 2015-07-31 Macys, Inc. -macys - -// madrid : 2014-05-01 Comunidad de Madrid -madrid - -// maif : 2014-10-02 Mutuelle Assurance Instituteur France (MAIF) -maif - -// maison : 2013-12-05 Victor Frostbite, LLC -maison - -// makeup : 2015-01-15 L'Oréal -makeup - -// man : 2014-12-04 MAN SE -man - -// management : 2013-11-07 John Goodbye, LLC -management - -// mango : 2013-10-24 PUNTO FA S.L. -mango - -// market : 2014-03-06 -market - -// marketing : 2013-11-07 Fern Pass, LLC -marketing - -// markets : 2014-12-11 IG Group Holdings PLC -markets - -// marriott : 2014-10-09 Marriott Worldwide Corporation -marriott - -// marshalls : 2015-07-16 The TJX Companies, Inc. -marshalls - -// maserati : 2015-07-31 Fiat Chrysler Automobiles N.V. -maserati - -// mattel : 2015-08-06 Mattel Sites, Inc. -mattel - -// mba : 2015-04-02 Lone Hollow, LLC -mba - -// mcd : 2015-07-30 McDonald’s Corporation -mcd - -// mcdonalds : 2015-07-30 McDonald’s Corporation -mcdonalds - -// mckinsey : 2015-07-31 McKinsey Holdings, Inc. -mckinsey - -// med : 2015-08-06 Medistry LLC -med - -// media : 2014-03-06 Grand Glen, LLC -media - -// meet : 2014-01-16 -meet - -// melbourne : 2014-05-29 The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation -melbourne - -// meme : 2014-01-30 Charleston Road Registry Inc. -meme - -// memorial : 2014-10-16 Dog Beach, LLC -memorial - -// men : 2015-02-26 Exclusive Registry Limited -men - -// menu : 2013-09-11 Wedding TLD2, LLC -menu - -// meo : 2014-11-07 PT Comunicacoes S.A. -meo - -// metlife : 2015-05-07 MetLife Services and Solutions, LLC -metlife - -// miami : 2013-12-19 Top Level Domain Holdings Limited -miami - -// microsoft : 2014-12-18 Microsoft Corporation -microsoft - -// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft -mini - -// mint : 2015-07-30 Intuit Administrative Services, Inc. -mint - -// mit : 2015-07-02 Massachusetts Institute of Technology -mit - -// mitsubishi : 2015-07-23 Mitsubishi Corporation -mitsubishi - -// mlb : 2015-05-21 MLB Advanced Media DH, LLC -mlb - -// mls : 2015-04-23 The Canadian Real Estate Association -mls - -// mma : 2014-11-07 MMA IARD -mma - -// mnet : 2015-03-05 Electronic Media Network (Pty) Ltd -mnet - -// mobily : 2014-12-18 GreenTech Consultancy Company W.L.L. -mobily - -// moda : 2013-11-07 United TLD Holdco Ltd. -moda - -// moe : 2013-11-13 Interlink Co., Ltd. -moe - -// moi : 2014-12-18 Amazon EU S.à r.l. -moi - -// mom : 2015-04-16 Uniregistry, Corp. -mom - -// monash : 2013-09-30 Monash University -monash - -// money : 2014-10-16 Outer McCook, LLC -money - -// monster : 2015-09-11 Monster Worldwide, Inc. -monster - -// montblanc : 2014-06-23 Richemont DNS Inc. -montblanc - -// mopar : 2015-07-30 FCA US LLC. -mopar - -// mormon : 2013-12-05 IRI Domain Management, LLC ("Applicant") -mormon - -// mortgage : 2014-03-20 -mortgage - -// moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -moscow - -// moto : 2015-06-04 Charleston Road Registry Inc. -moto - -// motorcycles : 2014-01-09 DERMotorcycles, LLC -motorcycles - -// mov : 2014-01-30 Charleston Road Registry Inc. -mov - -// movie : 2015-02-05 New Frostbite, LLC -movie - -// movistar : 2014-10-16 Telefónica S.A. -movistar - -// msd : 2015-07-23 MSD Registry Holdings, Inc. -msd - -// mtn : 2014-12-04 MTN Dubai Limited -mtn - -// mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation -mtpc - -// mtr : 2015-03-12 MTR Corporation Limited -mtr - -// multichoice : 2015-03-12 MultiChoice (Proprietary) Limited -multichoice - -// mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC -mutual - -// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française -mutuelle - -// mzansimagic : 2015-03-05 Electronic Media Network (Pty) Ltd -mzansimagic - -// nab : 2015-08-20 National Australia Bank Limited -nab - -// nadex : 2014-12-11 IG Group Holdings PLC -nadex - -// nagoya : 2013-10-24 GMO Registry, Inc. -nagoya - -// naspers : 2015-02-12 Intelprop (Proprietary) Limited -naspers - -// nationwide : 2015-07-23 Nationwide Mutual Insurance Company -nationwide - -// natura : 2015-03-12 NATURA COSMÉTICOS S.A. -natura - -// navy : 2014-03-06 United TLD Holdco Ltd. -navy - -// nba : 2015-07-31 NBA REGISTRY, LLC -nba - -// nec : 2015-01-08 NEC Corporation -nec - -// netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA -netbank - -// netflix : 2015-06-18 Netflix, Inc. -netflix - -// network : 2013-11-14 Trixy Manor, LLC -network - -// neustar : 2013-12-05 NeuStar, Inc. -neustar - -// new : 2014-01-30 Charleston Road Registry Inc. -new - -// newholland : 2015-09-03 CNH Industrial N.V. -newholland - -// news : 2014-12-18 -news - -// next : 2015-06-18 Next plc -next - -// nextdirect : 2015-06-18 Next plc -nextdirect - -// nexus : 2014-07-24 Charleston Road Registry Inc. -nexus - -// nfl : 2015-07-23 NFL Reg Ops LLC -nfl - -// ngo : 2014-03-06 Public Interest Registry -ngo - -// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK) -nhk - -// nico : 2014-12-04 DWANGO Co., Ltd. -nico - -// nike : 2015-07-23 NIKE, Inc. -nike - -// nikon : 2015-05-21 NIKON CORPORATION -nikon - -// ninja : 2013-11-07 United TLD Holdco Ltd. -ninja - -// nissan : 2014-03-27 NISSAN MOTOR CO., LTD. -nissan - -// nissay : 2015-10-29 Nippon Life Insurance Company -nissay - -// nokia : 2015-01-08 Nokia Corporation -nokia - -// northwesternmutual : 2015-06-18 Northwestern Mutual Registry, LLC -northwesternmutual - -// norton : 2014-12-04 Symantec Corporation -norton - -// now : 2015-06-25 Amazon EU S.à r.l. -now - -// nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -nowruz - -// nowtv : 2015-05-14 Starbucks (HK) Limited -nowtv - -// nra : 2014-05-22 NRA Holdings Company, INC. -nra - -// nrw : 2013-11-21 Minds + Machines GmbH -nrw - -// ntt : 2014-10-31 NIPPON TELEGRAPH AND TELEPHONE CORPORATION -ntt - -// nyc : 2014-01-23 The City of New York by and through the New York City Department of Information Technology & Telecommunications -nyc - -// obi : 2014-09-25 OBI Group Holding SE & Co. KGaA -obi - -// observer : 2015-04-30 Guardian News and Media Limited -observer - -// off : 2015-07-23 Johnson Shareholdings, Inc. -off - -// office : 2015-03-12 Microsoft Corporation -office - -// okinawa : 2013-12-05 BusinessRalliart Inc. -okinawa - -// olayan : 2015-05-14 Crescent Holding GmbH -olayan - -// olayangroup : 2015-05-14 Crescent Holding GmbH -olayangroup - -// oldnavy : 2015-07-31 The Gap, Inc. -oldnavy - -// ollo : 2015-06-04 Dish DBS Corporation -ollo - -// omega : 2015-01-08 The Swatch Group Ltd -omega - -// one : 2014-11-07 One.com A/S -one - -// ong : 2014-03-06 Public Interest Registry -ong - -// onl : 2013-09-16 I-Registry Ltd. -onl - -// online : 2015-01-15 DotOnline Inc. -online - -// onyourside : 2015-07-23 Nationwide Mutual Insurance Company -onyourside - -// ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED -ooo - -// open : 2015-07-31 American Express Travel Related Services Company, Inc. -open - -// oracle : 2014-06-19 Oracle Corporation -oracle - -// orange : 2015-03-12 Orange Brand Services Limited -orange - -// organic : 2014-03-27 Afilias Limited -organic - -// orientexpress : 2015-02-05 Belmond Ltd. -orientexpress - -// origins : 2015-10-01 The Estée Lauder Companies Inc. -origins - -// osaka : 2014-09-04 Interlink Co., Ltd. -osaka - -// otsuka : 2013-10-11 Otsuka Holdings Co., Ltd. -otsuka - -// ott : 2015-06-04 Dish DBS Corporation -ott - -// ovh : 2014-01-16 OVH SAS -ovh - -// page : 2014-12-04 Charleston Road Registry Inc. -page - -// pamperedchef : 2015-02-05 The Pampered Chef, Ltd. -pamperedchef - -// panasonic : 2015-07-30 Panasonic Corporation -panasonic - -// panerai : 2014-11-07 Richemont DNS Inc. -panerai - -// paris : 2014-01-30 City of Paris -paris - -// pars : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -pars - -// partners : 2013-12-05 Magic Glen, LLC -partners - -// parts : 2013-12-05 Sea Goodbye, LLC -parts - -// party : 2014-09-11 Blue Sky Registry Limited -party - -// passagens : 2015-03-05 Travel Reservations SRL -passagens - -// pay : 2015-08-27 Amazon EU S.à r.l. -pay - -// payu : 2015-02-12 MIH PayU B.V. -payu - -// pccw : 2015-05-14 PCCW Enterprises Limited -pccw - -// pet : 2015-05-07 Afilias plc -pet - -// pfizer : 2015-09-11 Pfizer Inc. -pfizer - -// pharmacy : 2014-06-19 National Association of Boards of Pharmacy -pharmacy - -// philips : 2014-11-07 Koninklijke Philips N.V. -philips - -// photo : 2013-11-14 Uniregistry, Corp. -photo - -// photography : 2013-09-20 Sugar Glen, LLC -photography - -// photos : 2013-10-17 Sea Corner, LLC -photos - -// physio : 2014-05-01 PhysBiz Pty Ltd -physio - -// piaget : 2014-10-16 Richemont DNS Inc. -piaget - -// pics : 2013-11-14 Uniregistry, Corp. -pics - -// pictet : 2014-06-26 Pictet Europe S.A. -pictet - -// pictures : 2014-03-06 Foggy Sky, LLC -pictures - -// pid : 2015-01-08 Top Level Spectrum, Inc. -pid - -// pin : 2014-12-18 Amazon EU S.à r.l. -pin - -// ping : 2015-06-11 Ping Registry Provider, Inc. -ping - -// pink : 2013-10-01 Afilias Limited -pink - -// pioneer : 2015-07-16 Pioneer Corporation -pioneer - -// pizza : 2014-06-26 Foggy Moon, LLC -pizza - -// place : 2014-04-24 Snow Galley, LLC -place - -// play : 2015-03-05 Charleston Road Registry Inc. -play - -// playstation : 2015-07-02 Sony Computer Entertainment Inc. -playstation - -// plumbing : 2013-09-10 Spring Tigers, LLC -plumbing - -// plus : 2015-02-05 Sugar Mill, LLC -plus - -// pnc : 2015-07-02 PNC Domain Co., LLC -pnc - -// pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -pohl - -// poker : 2014-07-03 Afilias Domains No. 5 Limited -poker - -// politie : 2015-08-20 Politie Nederland -politie - -// porn : 2014-10-16 ICM Registry PN LLC -porn - -// pramerica : 2015-07-30 Prudential Financial, Inc. -pramerica - -// praxi : 2013-12-05 Praxi S.p.A. -praxi - -// press : 2014-04-03 DotPress Inc. -press - -// prime : 2015-06-25 Amazon EU S.à r.l. -prime - -// prod : 2014-01-23 Charleston Road Registry Inc. -prod - -// productions : 2013-12-05 Magic Birch, LLC -productions - -// prof : 2014-07-24 Charleston Road Registry Inc. -prof - -// progressive : 2015-07-23 Progressive Casualty Insurance Company -progressive - -// promo : 2014-12-18 -promo - -// properties : 2013-12-05 Big Pass, LLC -properties - -// property : 2014-05-22 Uniregistry, Corp. -property - -// protection : 2015-04-23 -protection - -// pru : 2015-07-30 Prudential Financial, Inc. -pru - -// prudential : 2015-07-30 Prudential Financial, Inc. -prudential - -// pub : 2013-12-12 United TLD Holdco Ltd. -pub - -// pwc : 2015-10-29 PricewaterhouseCoopers LLP -pwc - -// qpon : 2013-11-14 dotCOOL, Inc. -qpon - -// quebec : 2013-12-19 PointQuébec Inc -quebec - -// quest : 2015-03-26 Quest ION Limited -quest - -// qvc : 2015-07-30 QVC, Inc. -qvc - -// racing : 2014-12-04 Premier Registry Limited -racing - -// raid : 2015-07-23 Johnson Shareholdings, Inc. -raid - -// read : 2014-12-18 Amazon EU S.à r.l. -read - -// realestate : 2015-09-11 dotRealEstate LLC -realestate - -// realtor : 2014-05-29 Real Estate Domains LLC -realtor - -// realty : 2015-03-19 Fegistry, LLC -realty - -// recipes : 2013-10-17 Grand Island, LLC -recipes - -// red : 2013-11-07 Afilias Limited -red - -// redstone : 2014-10-31 Redstone Haute Couture Co., Ltd. -redstone - -// redumbrella : 2015-03-26 Travelers TLD, LLC -redumbrella - -// rehab : 2014-03-06 United TLD Holdco Ltd. -rehab - -// reise : 2014-03-13 -reise - -// reisen : 2014-03-06 New Cypress, LLC -reisen - -// reit : 2014-09-04 National Association of Real Estate Investment Trusts, Inc. -reit - -// reliance : 2015-04-02 Reliance Industries Limited -reliance - -// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd. -ren - -// rent : 2014-12-04 DERRent, LLC -rent - -// rentals : 2013-12-05 Big Hollow,LLC -rentals - -// repair : 2013-11-07 Lone Sunset, LLC -repair - -// report : 2013-12-05 Binky Glen, LLC -report - -// republican : 2014-03-20 United TLD Holdco Ltd. -republican - -// rest : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -rest - -// restaurant : 2014-07-03 Snow Avenue, LLC -restaurant - -// review : 2014-11-20 dot Review Limited -review - -// reviews : 2013-09-13 -reviews - -// rexroth : 2015-06-18 Robert Bosch GMBH -rexroth - -// rich : 2013-11-21 I-Registry Ltd. -rich - -// richardli : 2015-05-14 Pacific Century Asset Management (HK) Limited -richardli - -// ricoh : 2014-11-20 Ricoh Company, Ltd. -ricoh - -// rightathome : 2015-07-23 Johnson Shareholdings, Inc. -rightathome - -// ril : 2015-04-02 Reliance Industries Limited -ril - -// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO -rio - -// rip : 2014-07-10 United TLD Holdco Ltd. -rip - -// rmit : 2015-11-19 Royal Melbourne Institute of Technology -rmit - -// rocher : 2014-12-18 Ferrero Trading Lux S.A. -rocher - -// rocks : 2013-11-14 -rocks - -// rodeo : 2013-12-19 Top Level Domain Holdings Limited -rodeo - -// rogers : 2015-08-06 Rogers Communications Partnership -rogers - -// room : 2014-12-18 Amazon EU S.à r.l. -room - -// rsvp : 2014-05-08 Charleston Road Registry Inc. -rsvp - -// ruhr : 2013-10-02 regiodot GmbH & Co. KG -ruhr - -// run : 2015-03-19 Snow Park, LLC -run - -// rwe : 2015-04-02 RWE AG -rwe - -// ryukyu : 2014-01-09 BusinessRalliart Inc. -ryukyu - -// saarland : 2013-12-12 dotSaarland GmbH -saarland - -// safe : 2014-12-18 Amazon EU S.à r.l. -safe - -// safety : 2015-01-08 Safety Registry Services, LLC. -safety - -// sakura : 2014-12-18 SAKURA Internet Inc. -sakura - -// sale : 2014-10-16 -sale - -// salon : 2014-12-11 Outer Orchard, LLC -salon - -// samsclub : 2015-07-31 Wal-Mart Stores, Inc. -samsclub - -// samsung : 2014-04-03 SAMSUNG SDS CO., LTD -samsung - -// sandvik : 2014-11-13 Sandvik AB -sandvik - -// sandvikcoromant : 2014-11-07 Sandvik AB -sandvikcoromant - -// sanofi : 2014-10-09 Sanofi -sanofi - -// sap : 2014-03-27 SAP AG -sap - -// sapo : 2014-11-07 PT Comunicacoes S.A. -sapo - -// sarl : 2014-07-03 Delta Orchard, LLC -sarl - -// sas : 2015-04-02 Research IP LLC -sas - -// save : 2015-06-25 Amazon EU S.à r.l. -save - -// saxo : 2014-10-31 Saxo Bank A/S -saxo - -// sbi : 2015-03-12 STATE BANK OF INDIA -sbi - -// sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION -sbs - -// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) -sca - -// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB") -scb - -// schaeffler : 2015-08-06 Schaeffler Technologies AG & Co. KG -schaeffler - -// schmidt : 2014-04-03 SALM S.A.S. -schmidt - -// scholarships : 2014-04-24 Scholarships.com, LLC -scholarships - -// school : 2014-12-18 Little Galley, LLC -school - -// schule : 2014-03-06 Outer Moon, LLC -schule - -// schwarz : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG -schwarz - -// science : 2014-09-11 dot Science Limited -science - -// scjohnson : 2015-07-23 Johnson Shareholdings, Inc. -scjohnson - -// scor : 2014-10-31 SCOR SE -scor - -// scot : 2014-01-23 Dot Scot Registry Limited -scot - -// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) -seat - -// secure : 2015-08-27 Amazon EU S.à r.l. -secure - -// security : 2015-05-14 -security - -// seek : 2014-12-04 Seek Limited -seek - -// select : 2015-10-08 iSelect Ltd -select - -// sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A. -sener - -// services : 2014-02-27 Fox Castle, LLC -services - -// ses : 2015-07-23 SES -ses - -// seven : 2015-08-06 Seven West Media Ltd -seven - -// sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG -sew - -// sex : 2014-11-13 ICM Registry SX LLC -sex - -// sexy : 2013-09-11 Uniregistry, Corp. -sexy - -// sfr : 2015-08-13 Societe Francaise du Radiotelephone - SFR -sfr - -// shangrila : 2015-09-03 Shangri‐La International Hotel Management Limited -shangrila - -// sharp : 2014-05-01 Sharp Corporation -sharp - -// shaw : 2015-04-23 Shaw Cablesystems G.P. -shaw - -// shell : 2015-07-30 Shell Information Technology International Inc -shell - -// shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -shia - -// shiksha : 2013-11-14 Afilias Limited -shiksha - -// shoes : 2013-10-02 Binky Galley, LLC -shoes - -// shopping : 2016-03-31 Uniregistry, Corp. -shopping - -// shouji : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. -shouji - -// show : 2015-03-05 Snow Beach, LLC -show - -// showtime : 2015-08-06 CBS Domains Inc. -showtime - -// shriram : 2014-01-23 Shriram Capital Ltd. -shriram - -// silk : 2015-06-25 Amazon EU S.à r.l. -silk - -// sina : 2015-03-12 Sina Corporation -sina - -// singles : 2013-08-27 Fern Madison, LLC -singles - -// site : 2015-01-15 DotSite Inc. -site - -// ski : 2015-04-09 STARTING DOT LIMITED -ski - -// skin : 2015-01-15 L'Oréal -skin - -// sky : 2014-06-19 Sky IP International Ltd, a company incorporated in England and Wales, operating via its registered Swiss branch -sky - -// skype : 2014-12-18 Microsoft Corporation -skype - -// sling : 2015-07-30 Hughes Satellite Systems Corporation -sling - -// smart : 2015-07-09 Smart Communications, Inc. (SMART) -smart - -// smile : 2014-12-18 Amazon EU S.à r.l. -smile - -// sncf : 2015-02-19 Société Nationale des Chemins de fer Francais S N C F -sncf - -// soccer : 2015-03-26 Foggy Shadow, LLC -soccer - -// social : 2013-11-07 United TLD Holdco Ltd. -social - -// softbank : 2015-07-02 SoftBank Corp. -softbank - -// software : 2014-03-20 -software - -// sohu : 2013-12-19 Sohu.com Limited -sohu - -// solar : 2013-11-07 Ruby Town, LLC -solar - -// solutions : 2013-11-07 Silver Cover, LLC -solutions - -// song : 2015-02-26 Amazon EU S.à r.l. -song - -// sony : 2015-01-08 Sony Corporation -sony - -// soy : 2014-01-23 Charleston Road Registry Inc. -soy - -// space : 2014-04-03 DotSpace Inc. -space - -// spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG -spiegel - -// spot : 2015-02-26 Amazon EU S.à r.l. -spot - -// spreadbetting : 2014-12-11 IG Group Holdings PLC -spreadbetting - -// srl : 2015-05-07 mySRL GmbH -srl - -// srt : 2015-07-30 FCA US LLC. -srt - -// stada : 2014-11-13 STADA Arzneimittel AG -stada - -// staples : 2015-07-30 Staples, Inc. -staples - -// star : 2015-01-08 Star India Private Limited -star - -// starhub : 2015-02-05 StarHub Ltd -starhub - -// statebank : 2015-03-12 STATE BANK OF INDIA -statebank - -// statefarm : 2015-07-30 State Farm Mutual Automobile Insurance Company -statefarm - -// statoil : 2014-12-04 Statoil ASA -statoil - -// stc : 2014-10-09 Saudi Telecom Company -stc - -// stcgroup : 2014-10-09 Saudi Telecom Company -stcgroup - -// stockholm : 2014-12-18 Stockholms kommun -stockholm - -// storage : 2014-12-22 Self Storage Company LLC -storage - -// store : 2015-04-09 DotStore Inc. -store - -// stream : 2016-01-08 dot Stream Limited -stream - -// studio : 2015-02-11 -studio - -// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD -study - -// style : 2014-12-04 Binky Moon, LLC -style - -// sucks : 2014-12-22 Vox Populi Registry Inc. -sucks - -// supersport : 2015-03-05 SuperSport International Holdings Proprietary Limited -supersport - -// supplies : 2013-12-19 Atomic Fields, LLC -supplies - -// supply : 2013-12-19 Half Falls, LLC -supply - -// support : 2013-10-24 Grand Orchard, LLC -support - -// surf : 2014-01-09 Top Level Domain Holdings Limited -surf - -// surgery : 2014-03-20 Tin Avenue, LLC -surgery - -// suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION -suzuki - -// swatch : 2015-01-08 The Swatch Group Ltd -swatch - -// swiftcover : 2015-07-23 Swiftcover Insurance Services Limited -swiftcover - -// swiss : 2014-10-16 Swiss Confederation -swiss - -// sydney : 2014-09-18 State of New South Wales, Department of Premier and Cabinet -sydney - -// symantec : 2014-12-04 Symantec Corporation -symantec - -// systems : 2013-11-07 Dash Cypress, LLC -systems - -// tab : 2014-12-04 Tabcorp Holdings Limited -tab - -// taipei : 2014-07-10 Taipei City Government -taipei - -// talk : 2015-04-09 Amazon EU S.à r.l. -talk - -// taobao : 2015-01-15 Alibaba Group Holding Limited -taobao - -// target : 2015-07-31 Target Domain Holdings, LLC -target - -// tatamotors : 2015-03-12 Tata Motors Ltd -tatamotors - -// tatar : 2014-04-24 Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic" -tatar - -// tattoo : 2013-08-30 Uniregistry, Corp. -tattoo - -// tax : 2014-03-20 Storm Orchard, LLC -tax - -// taxi : 2015-03-19 Pine Falls, LLC -taxi - -// tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -tci - -// tdk : 2015-06-11 TDK Corporation -tdk - -// team : 2015-03-05 Atomic Lake, LLC -team - -// tech : 2015-01-30 Dot Tech LLC -tech - -// technology : 2013-09-13 Auburn Falls -technology - -// telecity : 2015-02-19 TelecityGroup International Limited -telecity - -// telefonica : 2014-10-16 Telefónica S.A. -telefonica - -// temasek : 2014-08-07 Temasek Holdings (Private) Limited -temasek - -// tennis : 2014-12-04 Cotton Bloom, LLC -tennis - -// teva : 2015-07-02 Teva Pharmaceutical Industries Limited -teva - -// thd : 2015-04-02 Homer TLC, Inc. -thd - -// theater : 2015-03-19 Blue Tigers, LLC -theater - -// theatre : 2015-05-07 -theatre - -// theguardian : 2015-04-30 Guardian News and Media Limited -theguardian - -// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America -tiaa - -// tickets : 2015-02-05 Accent Media Limited -tickets - -// tienda : 2013-11-14 Victor Manor, LLC -tienda - -// tiffany : 2015-01-30 Tiffany and Company -tiffany - -// tips : 2013-09-20 Corn Willow, LLC -tips - -// tires : 2014-11-07 Dog Edge, LLC -tires - -// tirol : 2014-04-24 punkt Tirol GmbH -tirol - -// tjmaxx : 2015-07-16 The TJX Companies, Inc. -tjmaxx - -// tjx : 2015-07-16 The TJX Companies, Inc. -tjx - -// tkmaxx : 2015-07-16 The TJX Companies, Inc. -tkmaxx - -// tmall : 2015-01-15 Alibaba Group Holding Limited -tmall - -// today : 2013-09-20 Pearl Woods, LLC -today - -// tokyo : 2013-11-13 GMO Registry, Inc. -tokyo - -// tools : 2013-11-21 Pioneer North, LLC -tools - -// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd. -top - -// toray : 2014-12-18 Toray Industries, Inc. -toray - -// toshiba : 2014-04-10 TOSHIBA Corporation -toshiba - -// total : 2015-08-06 Total SA -total - -// tours : 2015-01-22 Sugar Station, LLC -tours - -// town : 2014-03-06 Koko Moon, LLC -town - -// toyota : 2015-04-23 TOYOTA MOTOR CORPORATION -toyota - -// toys : 2014-03-06 Pioneer Orchard, LLC -toys - -// trade : 2014-01-23 Elite Registry Limited -trade - -// trading : 2014-12-11 IG Group Holdings PLC -trading - -// training : 2013-11-07 Wild Willow, LLC -training - -// travelchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. -travelchannel - -// travelers : 2015-03-26 Travelers TLD, LLC -travelers - -// travelersinsurance : 2015-03-26 Travelers TLD, LLC -travelersinsurance - -// trust : 2014-10-16 -trust - -// trv : 2015-03-26 Travelers TLD, LLC -trv - -// tube : 2015-06-11 Latin American Telecom LLC -tube - -// tui : 2014-07-03 TUI AG -tui - -// tunes : 2015-02-26 Amazon EU S.à r.l. -tunes - -// tushu : 2014-12-18 Amazon EU S.à r.l. -tushu - -// tvs : 2015-02-19 T V SUNDRAM IYENGAR & SONS LIMITED -tvs - -// ubank : 2015-08-20 National Australia Bank Limited -ubank - -// ubs : 2014-12-11 UBS AG -ubs - -// uconnect : 2015-07-30 FCA US LLC. -uconnect - -// unicom : 2015-10-15 China United Network Communications Corporation Limited -unicom - -// university : 2014-03-06 Little Station, LLC -university - -// uno : 2013-09-11 Dot Latin LLC -uno - -// uol : 2014-05-01 UBN INTERNET LTDA. -uol - -// ups : 2015-06-25 UPS Market Driver, Inc. -ups - -// vacations : 2013-12-05 Atomic Tigers, LLC -vacations - -// vana : 2014-12-11 Lifestyle Domain Holdings, Inc. -vana - -// vanguard : 2015-09-03 The Vanguard Group, Inc. -vanguard - -// vegas : 2014-01-16 Dot Vegas, Inc. -vegas - -// ventures : 2013-08-27 Binky Lake, LLC -ventures - -// verisign : 2015-08-13 VeriSign, Inc. -verisign - -// versicherung : 2014-03-20 dotversicherung-registry GmbH -versicherung - -// vet : 2014-03-06 -vet - -// viajes : 2013-10-17 Black Madison, LLC -viajes - -// video : 2014-10-16 -video - -// vig : 2015-05-14 VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe -vig - -// viking : 2015-04-02 Viking River Cruises (Bermuda) Ltd. -viking - -// villas : 2013-12-05 New Sky, LLC -villas - -// vin : 2015-06-18 Holly Shadow, LLC -vin - -// vip : 2015-01-22 Minds + Machines Group Limited -vip - -// virgin : 2014-09-25 Virgin Enterprises Limited -virgin - -// visa : 2015-07-30 Visa Worldwide Pte. Limited -visa - -// vision : 2013-12-05 Koko Station, LLC -vision - -// vista : 2014-09-18 Vistaprint Limited -vista - -// vistaprint : 2014-09-18 Vistaprint Limited -vistaprint - -// viva : 2014-11-07 Saudi Telecom Company -viva - -// vivo : 2015-07-31 Telefonica Brasil S.A. -vivo - -// vlaanderen : 2014-02-06 DNS.be vzw -vlaanderen - -// vodka : 2013-12-19 Top Level Domain Holdings Limited -vodka - -// volkswagen : 2015-05-14 Volkswagen Group of America Inc. -volkswagen - -// volvo : 2015-11-12 Volvo Holding Sverige Aktiebolag -volvo - -// vote : 2013-11-21 Monolith Registry LLC -vote - -// voting : 2013-11-13 Valuetainment Corp. -voting - -// voto : 2013-11-21 Monolith Registry LLC -voto - -// voyage : 2013-08-27 Ruby House, LLC -voyage - -// vuelos : 2015-03-05 Travel Reservations SRL -vuelos - -// wales : 2014-05-08 Nominet UK -wales - -// walmart : 2015-07-31 Wal-Mart Stores, Inc. -walmart - -// walter : 2014-11-13 Sandvik AB -walter - -// wang : 2013-10-24 Zodiac Leo Limited -wang - -// wanggou : 2014-12-18 Amazon EU S.à r.l. -wanggou - -// warman : 2015-06-18 Weir Group IP Limited -warman - -// watch : 2013-11-14 Sand Shadow, LLC -watch - -// watches : 2014-12-22 Richemont DNS Inc. -watches - -// weather : 2015-01-08 The Weather Channel, LLC -weather - -// weatherchannel : 2015-03-12 The Weather Channel, LLC -weatherchannel - -// webcam : 2014-01-23 dot Webcam Limited -webcam - -// weber : 2015-06-04 Saint-Gobain Weber SA -weber - -// website : 2014-04-03 DotWebsite Inc. -website - -// wed : 2013-10-01 Atgron, Inc. -wed - -// wedding : 2014-04-24 Top Level Domain Holdings Limited -wedding - -// weibo : 2015-03-05 Sina Corporation -weibo - -// weir : 2015-01-29 Weir Group IP Limited -weir - -// whoswho : 2014-02-20 Who's Who Registry -whoswho - -// wien : 2013-10-28 punkt.wien GmbH -wien - -// wiki : 2013-11-07 Top Level Design, LLC -wiki - -// williamhill : 2014-03-13 William Hill Organization Limited -williamhill - -// win : 2014-11-20 First Registry Limited -win - -// windows : 2014-12-18 Microsoft Corporation -windows - -// wine : 2015-06-18 June Station, LLC -wine - -// winners : 2015-07-16 The TJX Companies, Inc. -winners - -// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC -wme - -// wolterskluwer : 2015-08-06 Wolters Kluwer N.V. -wolterskluwer - -// woodside : 2015-07-09 Woodside Petroleum Limited -woodside - -// work : 2013-12-19 Top Level Domain Holdings Limited -work - -// works : 2013-11-14 Little Dynamite, LLC -works - -// world : 2014-06-12 Bitter Fields, LLC -world - -// wow : 2015-10-08 Amazon EU S.à r.l. -wow - -// wtc : 2013-12-19 World Trade Centers Association, Inc. -wtc - -// wtf : 2014-03-06 Hidden Way, LLC -wtf - -// xbox : 2014-12-18 Microsoft Corporation -xbox - -// xerox : 2014-10-24 Xerox DNHC LLC -xerox - -// xfinity : 2015-07-09 Comcast IP Holdings I, LLC -xfinity - -// xihuan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. -xihuan - -// xin : 2014-12-11 Elegant Leader Limited -xin - -// xn--11b4c3d : 2015-01-15 VeriSign Sarl -कॉम - -// xn--1ck2e1b : 2015-02-26 Amazon EU S.à r.l. -セール - -// xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd. -佛山 - -// xn--30rr7y : 2014-06-12 Excellent First Limited -慈善 - -// xn--3bst00m : 2013-09-13 Eagle Horizon Limited -集团 - -// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED -在线 - -// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd. -大众汽车 - -// xn--3pxu8k : 2015-01-15 VeriSign Sarl -点看 - -// xn--42c2d9a : 2015-01-15 VeriSign Sarl -คอม - -// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited -八卦 - -// xn--4gbrim : 2013-10-04 Suhub Electronic Establishment -موقع - -// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc. -一号店 - -// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center -公益 - -// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -公司 - -// xn--5su34j936bgsg : 2015-09-03 Shangri‐La International Hotel Management Limited -香格里拉 - -// xn--5tzm5g : 2014-12-22 Global Website TLD Asia Limited -网站 - -// xn--6frz82g : 2013-09-23 Afilias Limited -移动 - -// xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited -我爱你 - -// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -москва - -// xn--80aqecdr1a : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -католик - -// xn--80asehdb : 2013-07-14 CORE Association -онлайн - -// xn--80aswg : 2013-07-14 CORE Association -сайт - -// xn--8y0a063a : 2015-03-26 China United Network Communications Corporation Limited -联通 - -// xn--9dbq2a : 2015-01-15 VeriSign Sarl -קום - -// xn--9et52u : 2014-06-12 RISE VICTORY LIMITED -时尚 - -// xn--9krt00a : 2015-03-12 Sina Corporation -微博 - -// xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited -淡马锡 - -// xn--bck1b9a5dre4c : 2015-02-26 Amazon EU S.à r.l. -ファッション - -// xn--c1avg : 2013-11-14 Public Interest Registry -орг - -// xn--c2br7g : 2015-01-15 VeriSign Sarl -नेट - -// xn--cck2b3b : 2015-02-26 Amazon EU S.à r.l. -ストア - -// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD -삼성 - -// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED -商标 - -// xn--czrs0t : 2013-12-19 Wild Island, LLC -商店 - -// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited -商城 - -// xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart Internet” -дети - -// xn--eckvdtc9d : 2014-12-18 Amazon EU S.à r.l. -ポイント - -// xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch 新华通讯社广东分社 -新闻 - -// xn--estv75g : 2015-02-19 Industrial and Commercial Bank of China Limited -工行 - -// xn--fct429k : 2015-04-09 Amazon EU S.à r.l. -家電 - -// xn--fhbei : 2015-01-15 VeriSign Sarl -كوم - -// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED -中文网 - -// xn--fiq64b : 2013-10-14 CITIC Group Corporation -中信 - -// xn--fjq720a : 2014-05-22 Will Bloom, LLC -娱乐 - -// xn--flw351e : 2014-07-31 Charleston Road Registry Inc. -谷歌 - -// xn--fzys8d69uvgm : 2015-05-14 PCCW Enterprises Limited -電訊盈科 - -// xn--g2xx48c : 2015-01-30 Minds + Machines Group Limited -购物 - -// xn--gckr3f0f : 2015-02-26 Amazon EU S.à r.l. -クラウド - -// xn--gk3at1e : 2015-10-08 Amazon EU S.à r.l. -通販 - -// xn--hxt814e : 2014-05-15 Zodiac Libra Limited -网店 - -// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry -संगठन - -// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED -餐厅 - -// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -网络 - -// xn--j1aef : 2015-01-15 VeriSign Sarl -ком - -// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation -诺基亚 - -// xn--jvr189m : 2015-02-26 Amazon EU S.à r.l. -食品 - -// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V. -飞利浦 - -// xn--kpu716f : 2014-12-22 Richemont DNS Inc. -手表 - -// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd -手机 - -// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company -ارامكو - -// xn--mgba7c0bbn0a : 2015-05-14 Crescent Holding GmbH -العليان - -// xn--mgbaakc7dvf : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) -اتصالات - -// xn--mgbab2bd : 2013-10-31 CORE Association -بازار - -// xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L. -موبايلي - -// xn--mgbca7dzdo : 2015-07-30 Abu Dhabi Systems and Information Centre -ابوظبي - -// xn--mgbi4ecexp : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -كاثوليك - -// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -همراه - -// xn--mk1bu44c : 2015-01-15 VeriSign Sarl -닷컴 - -// xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd. -政府 - -// xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd. -شبكة - -// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House -بيتك - -// xn--ngbrx : 2015-11-12 League of Arab States -عرب - -// xn--nqv7f : 2013-11-14 Public Interest Registry -机构 - -// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry -组织机构 - -// xn--nyqy26a : 2014-11-07 Stable Tone Limited -健康 - -// xn--p1acf : 2013-12-12 Rusnames Limited -рус - -// xn--pbt977c : 2014-12-22 Richemont DNS Inc. -珠宝 - -// xn--pssy2u : 2015-01-15 VeriSign Sarl -大拿 - -// xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc. -みんな - -// xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc. -グーグル - -// xn--rhqv96g : 2013-09-11 Stable Tone Limited -世界 - -// xn--rovu88b : 2015-02-26 Amazon EU S.à r.l. -書籍 - -// xn--ses554g : 2014-01-16 -网址 - -// xn--t60b56a : 2015-01-15 VeriSign Sarl -닷넷 - -// xn--tckwe : 2015-01-15 VeriSign Sarl -コム - -// xn--tiq49xqyj : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -天主教 - -// xn--unup4y : 2013-07-14 Spring Fields, LLC -游戏 - -// xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -vermögensberater - -// xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -vermögensberatung - -// xn--vhquv : 2013-08-27 Dash McCook, LLC -企业 - -// xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd. -信息 - -// xn--w4r85el8fhu5dnra : 2015-04-30 Kerry Trading Co. Limited -嘉里大酒店 - -// xn--w4rs40l : 2015-07-30 Kerry Trading Co. Limited -嘉里 - -// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. -广东 - -// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center -政务 - -// xperia : 2015-05-14 Sony Mobile Communications AB -xperia - -// xyz : 2013-12-05 XYZ.COM LLC -xyz - -// yachts : 2014-01-09 DERYachts, LLC -yachts - -// yahoo : 2015-04-02 Yahoo! Domain Services Inc. -yahoo - -// yamaxun : 2014-12-18 Amazon EU S.à r.l. -yamaxun - -// yandex : 2014-04-10 YANDEX, LLC -yandex - -// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD. -yodobashi - -// yoga : 2014-05-29 Top Level Domain Holdings Limited -yoga - -// yokohama : 2013-12-12 GMO Registry, Inc. -yokohama - -// you : 2015-04-09 Amazon EU S.à r.l. -you - -// youtube : 2014-05-01 Charleston Road Registry Inc. -youtube - -// yun : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. -yun - -// zappos : 2015-06-25 Amazon EU S.à r.l. -zappos - -// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.) -zara - -// zero : 2014-12-18 Amazon EU S.à r.l. -zero - -// zip : 2014-05-08 Charleston Road Registry Inc. -zip - -// zippo : 2015-07-02 Zadco Company -zippo - -// zone : 2013-11-14 Outer Falls, LLC -zone - -// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich) -zuerich - - -// ===END ICANN DOMAINS=== -// ===BEGIN PRIVATE DOMAINS=== -// (Note: these are in alphabetical order by company name) - -// Alces Software Ltd : http://alces-software.com -// Submitted by Mark J. Titorenko <mark.titorenko@alces-software.com> -*.compute.estate -*.alces.network - -// Amazon CloudFront : https://aws.amazon.com/cloudfront/ -// Submitted by Donavan Miller <donavanm@amazon.com> -cloudfront.net - -// Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ -// Submitted by Luke Wells <lawells@amazon.com> -ap-northeast-1.compute.amazonaws.com -ap-northeast-2.compute.amazonaws.com -ap-southeast-1.compute.amazonaws.com -ap-southeast-2.compute.amazonaws.com -cn-north-1.compute.amazonaws.cn -compute-1.amazonaws.com -compute.amazonaws.cn -compute.amazonaws.com -eu-central-1.compute.amazonaws.com -eu-west-1.compute.amazonaws.com -sa-east-1.compute.amazonaws.com -us-east-1.amazonaws.com -us-gov-west-1.compute.amazonaws.com -us-west-1.compute.amazonaws.com -us-west-2.compute.amazonaws.com -z-1.compute-1.amazonaws.com -z-2.compute-1.amazonaws.com - -// Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ -// Submitted by Adam Stein <astein@amazon.com> -elasticbeanstalk.com - -// Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/ -// Submitted by Scott Vidmar <svidmar@amazon.com> -elb.amazonaws.com - -// Amazon S3 : https://aws.amazon.com/s3/ -// Submitted by Luke Wells <lawells@amazon.com> -s3.amazonaws.com -s3-ap-northeast-1.amazonaws.com -s3-ap-northeast-2.amazonaws.com -s3-ap-southeast-1.amazonaws.com -s3-ap-southeast-2.amazonaws.com -s3-eu-central-1.amazonaws.com -s3-eu-west-1.amazonaws.com -s3-external-1.amazonaws.com -s3-external-2.amazonaws.com -s3-fips-us-gov-west-1.amazonaws.com -s3-sa-east-1.amazonaws.com -s3-us-gov-west-1.amazonaws.com -s3-us-west-1.amazonaws.com -s3-us-west-2.amazonaws.com -s3.ap-northeast-2.amazonaws.com -s3.cn-north-1.amazonaws.com.cn -s3.eu-central-1.amazonaws.com - -// Aptible : https://www.aptible.com/ -// Submitted by Thomas Orozco <thomas@aptible.com> -on-aptible.com - -// AVM : https://avm.de -// Submitted by Andreas Weise <a.weise@avm.de> -myfritz.net - -// BetaInABox -// Submitted by Adrian <adrian@betainabox.com> -betainabox.com - -// CentralNic : http://www.centralnic.com/names/domains -// Submitted by registry <gavin.brown@centralnic.com> -ae.org -ar.com -br.com -cn.com -com.de -com.se -de.com -eu.com -gb.com -gb.net -hu.com -hu.net -jp.net -jpn.com -kr.com -mex.com -no.com -qc.com -ru.com -sa.com -se.com -se.net -uk.com -uk.net -us.com -uy.com -za.bz -za.com - -// Africa.com Web Solutions Ltd : https://registry.africa.com -// Submitted by Gavin Brown <gavin.brown@centralnic.com> -africa.com - -// iDOT Services Limited : http://www.domain.gr.com -// Submitted by Gavin Brown <gavin.brown@centralnic.com> -gr.com - -// Radix FZC : http://domains.in.net -// Submitted by Gavin Brown <gavin.brown@centralnic.com> -in.net - -// US REGISTRY LLC : http://us.org -// Submitted by Gavin Brown <gavin.brown@centralnic.com> -us.org - -// co.com Registry, LLC : https://registry.co.com -// Submitted by Gavin Brown <gavin.brown@centralnic.com> -co.com - -// c.la : http://www.c.la/ -c.la - -// Citrix : https://citrix.com -// Submitted by Alex Stoddard <alex.stoddard@citrix.com> -xenapponazure.com - -// cloudControl : https://www.cloudcontrol.com/ -// Submitted by Tobias Wilken <tw@cloudcontrol.com> -cloudcontrolled.com -cloudcontrolapp.com - -// co.ca : http://registry.co.ca/ -co.ca - -// i-registry s.r.o. : http://www.i-registry.cz/ -// Submitted by Martin Semrad <semrad@i-registry.cz> -co.cz - -// CDN77.com : http://www.cdn77.com -// Submitted by Jan Krpes <jan.krpes@cdn77.com> -c.cdn77.org -cdn77-ssl.net -r.cdn77.net -rsc.cdn77.org -ssl.origin.cdn77-secure.org - -// CoDNS B.V. -co.nl -co.no - -// Commerce Guys, SAS -// Submitted by Damien Tournoud <damien@commerceguys.com> -*.platform.sh - -// Cupcake : https://cupcake.io/ -// Submitted by Jonathan Rudenberg <jonathan@cupcake.io> -cupcake.is - -// cyon GmbH : https://www.cyon.ch/ -// Submitted by Dominic Luechinger <dol@cyon.ch> -cyon.link -cyon.site - -// Daplie, Inc : https://daplie.com -// Submitted by AJ ONeal <aj@daplie.com> -daplie.me - -// Dansk.net : http://www.dansk.net/ -// Submitted by Anani Voule <digital@digital.co.dk> -biz.dk -co.dk -firm.dk -reg.dk -store.dk - -// deSEC : https://desec.io/ -// Submitted by Peter Thomassen <peter@desec.io> -dedyn.io - -// DNShome : https://www.dnshome.de/ -// Submitted by Norbert Auler <mail@dnshome.de> -dnshome.de - -// DreamHost : http://www.dreamhost.com/ -// Submitted by Andrew Farmer <andrew.farmer@dreamhost.com> -dreamhosters.com - -// Drobo : http://www.drobo.com/ -// Submitted by Ricardo Padilha <rpadilha@drobo.com> -mydrobo.com - -// DuckDNS : http://www.duckdns.org/ -// Submitted by Richard Harper <richard@duckdns.org> -duckdns.org - -// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ -dyndns-at-home.com -dyndns-at-work.com -dyndns-blog.com -dyndns-free.com -dyndns-home.com -dyndns-ip.com -dyndns-mail.com -dyndns-office.com -dyndns-pics.com -dyndns-remote.com -dyndns-server.com -dyndns-web.com -dyndns-wiki.com -dyndns-work.com -dyndns.biz -dyndns.info -dyndns.org -dyndns.tv -at-band-camp.net -ath.cx -barrel-of-knowledge.info -barrell-of-knowledge.info -better-than.tv -blogdns.com -blogdns.net -blogdns.org -blogsite.org -boldlygoingnowhere.org -broke-it.net -buyshouses.net -cechire.com -dnsalias.com -dnsalias.net -dnsalias.org -dnsdojo.com -dnsdojo.net -dnsdojo.org -does-it.net -doesntexist.com -doesntexist.org -dontexist.com -dontexist.net -dontexist.org -doomdns.com -doomdns.org -dvrdns.org -dyn-o-saur.com -dynalias.com -dynalias.net -dynalias.org -dynathome.net -dyndns.ws -endofinternet.net -endofinternet.org -endoftheinternet.org -est-a-la-maison.com -est-a-la-masion.com -est-le-patron.com -est-mon-blogueur.com -for-better.biz -for-more.biz -for-our.info -for-some.biz -for-the.biz -forgot.her.name -forgot.his.name -from-ak.com -from-al.com -from-ar.com -from-az.net -from-ca.com -from-co.net -from-ct.com -from-dc.com -from-de.com -from-fl.com -from-ga.com -from-hi.com -from-ia.com -from-id.com -from-il.com -from-in.com -from-ks.com -from-ky.com -from-la.net -from-ma.com -from-md.com -from-me.org -from-mi.com -from-mn.com -from-mo.com -from-ms.com -from-mt.com -from-nc.com -from-nd.com -from-ne.com -from-nh.com -from-nj.com -from-nm.com -from-nv.com -from-ny.net -from-oh.com -from-ok.com -from-or.com -from-pa.com -from-pr.com -from-ri.com -from-sc.com -from-sd.com -from-tn.com -from-tx.com -from-ut.com -from-va.com -from-vt.com -from-wa.com -from-wi.com -from-wv.com -from-wy.com -ftpaccess.cc -fuettertdasnetz.de -game-host.org -game-server.cc -getmyip.com -gets-it.net -go.dyndns.org -gotdns.com -gotdns.org -groks-the.info -groks-this.info -ham-radio-op.net -here-for-more.info -hobby-site.com -hobby-site.org -home.dyndns.org -homedns.org -homeftp.net -homeftp.org -homeip.net -homelinux.com -homelinux.net -homelinux.org -homeunix.com -homeunix.net -homeunix.org -iamallama.com -in-the-band.net -is-a-anarchist.com -is-a-blogger.com -is-a-bookkeeper.com -is-a-bruinsfan.org -is-a-bulls-fan.com -is-a-candidate.org -is-a-caterer.com -is-a-celticsfan.org -is-a-chef.com -is-a-chef.net -is-a-chef.org -is-a-conservative.com -is-a-cpa.com -is-a-cubicle-slave.com -is-a-democrat.com -is-a-designer.com -is-a-doctor.com -is-a-financialadvisor.com -is-a-geek.com -is-a-geek.net -is-a-geek.org -is-a-green.com -is-a-guru.com -is-a-hard-worker.com -is-a-hunter.com -is-a-knight.org -is-a-landscaper.com -is-a-lawyer.com -is-a-liberal.com -is-a-libertarian.com -is-a-linux-user.org -is-a-llama.com -is-a-musician.com -is-a-nascarfan.com -is-a-nurse.com -is-a-painter.com -is-a-patsfan.org -is-a-personaltrainer.com -is-a-photographer.com -is-a-player.com -is-a-republican.com -is-a-rockstar.com -is-a-socialist.com -is-a-soxfan.org -is-a-student.com -is-a-teacher.com -is-a-techie.com -is-a-therapist.com -is-an-accountant.com -is-an-actor.com -is-an-actress.com -is-an-anarchist.com -is-an-artist.com -is-an-engineer.com -is-an-entertainer.com -is-by.us -is-certified.com -is-found.org -is-gone.com -is-into-anime.com -is-into-cars.com -is-into-cartoons.com -is-into-games.com -is-leet.com -is-lost.org -is-not-certified.com -is-saved.org -is-slick.com -is-uberleet.com -is-very-bad.org -is-very-evil.org -is-very-good.org -is-very-nice.org -is-very-sweet.org -is-with-theband.com -isa-geek.com -isa-geek.net -isa-geek.org -isa-hockeynut.com -issmarterthanyou.com -isteingeek.de -istmein.de -kicks-ass.net -kicks-ass.org -knowsitall.info -land-4-sale.us -lebtimnetz.de -leitungsen.de -likes-pie.com -likescandy.com -merseine.nu -mine.nu -misconfused.org -mypets.ws -myphotos.cc -neat-url.com -office-on-the.net -on-the-web.tv -podzone.net -podzone.org -readmyblog.org -saves-the-whales.com -scrapper-site.net -scrapping.cc -selfip.biz -selfip.com -selfip.info -selfip.net -selfip.org -sells-for-less.com -sells-for-u.com -sells-it.net -sellsyourhome.org -servebbs.com -servebbs.net -servebbs.org -serveftp.net -serveftp.org -servegame.org -shacknet.nu -simple-url.com -space-to-rent.com -stuff-4-sale.org -stuff-4-sale.us -teaches-yoga.com -thruhere.net -traeumtgerade.de -webhop.biz -webhop.info -webhop.net -webhop.org -worse-than.tv -writesthisblog.com - -// dynv6 : https://dynv6.com -// Submitted by Dominik Menke <dom@digineo.de> 2016-01-18 -dynv6.net - -// EU.org https://eu.org/ -// Submitted by Pierre Beyssac <hostmaster@eu.org> -eu.org -al.eu.org -asso.eu.org -at.eu.org -au.eu.org -be.eu.org -bg.eu.org -ca.eu.org -cd.eu.org -ch.eu.org -cn.eu.org -cy.eu.org -cz.eu.org -de.eu.org -dk.eu.org -edu.eu.org -ee.eu.org -es.eu.org -fi.eu.org -fr.eu.org -gr.eu.org -hr.eu.org -hu.eu.org -ie.eu.org -il.eu.org -in.eu.org -int.eu.org -is.eu.org -it.eu.org -jp.eu.org -kr.eu.org -lt.eu.org -lu.eu.org -lv.eu.org -mc.eu.org -me.eu.org -mk.eu.org -mt.eu.org -my.eu.org -net.eu.org -ng.eu.org -nl.eu.org -no.eu.org -nz.eu.org -paris.eu.org -pl.eu.org -pt.eu.org -q-a.eu.org -ro.eu.org -ru.eu.org -se.eu.org -si.eu.org -sk.eu.org -tr.eu.org -uk.eu.org -us.eu.org - -// Facebook, Inc. -// Submitted by Peter Ruibal <public-suffix@fb.com> -apps.fbsbx.com - -// Fastly Inc. http://www.fastly.com/ -// Submitted by Vladimir Vuksan <vladimir@fastly.com> -a.ssl.fastly.net -b.ssl.fastly.net -global.ssl.fastly.net -a.prod.fastly.net -global.prod.fastly.net - -// Firebase, Inc. -// Submitted by Chris Raynor <chris@firebase.com> -firebaseapp.com - -// Flynn : https://flynn.io -// Submitted by Jonathan Rudenberg <jonathan@flynn.io> -flynnhub.com - -// GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains -// Submitted by David Illsley <david.illsley@digital.cabinet-office.gov.uk> -service.gov.uk - -// GitHub, Inc. -// Submitted by Patrick Toomey <security@github.com> -github.io -githubusercontent.com -githubcloud.com -*.api.githubcloud.com -*.ext.githubcloud.com -gist.githubcloud.com -*.githubcloudusercontent.com - -// GlobeHosting, Inc. -// Submitted by Zoltan Egresi <egresi@globehosting.com> -ro.com - -// GoIP DNS Services : http://www.goip.de -// Submitted by Christian Poulter <milchstrasse@goip.de> -goip.de - -// Google, Inc. -// Submitted by Eduardo Vela <evn@google.com> -*.0emm.com -appspot.com -blogspot.ae -blogspot.al -blogspot.am -blogspot.ba -blogspot.be -blogspot.bg -blogspot.bj -blogspot.ca -blogspot.cf -blogspot.ch -blogspot.cl -blogspot.co.at -blogspot.co.id -blogspot.co.il -blogspot.co.ke -blogspot.co.nz -blogspot.co.uk -blogspot.co.za -blogspot.com -blogspot.com.ar -blogspot.com.au -blogspot.com.br -blogspot.com.by -blogspot.com.co -blogspot.com.cy -blogspot.com.ee -blogspot.com.eg -blogspot.com.es -blogspot.com.mt -blogspot.com.ng -blogspot.com.tr -blogspot.com.uy -blogspot.cv -blogspot.cz -blogspot.de -blogspot.dk -blogspot.fi -blogspot.fr -blogspot.gr -blogspot.hk -blogspot.hr -blogspot.hu -blogspot.ie -blogspot.in -blogspot.is -blogspot.it -blogspot.jp -blogspot.kr -blogspot.li -blogspot.lt -blogspot.lu -blogspot.md -blogspot.mk -blogspot.mr -blogspot.mx -blogspot.my -blogspot.nl -blogspot.no -blogspot.pe -blogspot.pt -blogspot.qa -blogspot.re -blogspot.ro -blogspot.rs -blogspot.ru -blogspot.se -blogspot.sg -blogspot.si -blogspot.sk -blogspot.sn -blogspot.td -blogspot.tw -blogspot.ug -blogspot.vn -cloudfunctions.net -codespot.com -googleapis.com -googlecode.com -pagespeedmobilizer.com -withgoogle.com -withyoutube.com - -// Hashbang : https://hashbang.sh -hashbang.sh - -// Heroku : https://www.heroku.com/ -// Submitted by Tom Maher <tmaher@heroku.com> -herokuapp.com -herokussl.com - -// iki.fi -// Submitted by Hannu Aronsson <haa@iki.fi> -iki.fi - -// info.at : http://www.info.at/ -biz.at -info.at - -// Michau Enterprises Limited : http://www.co.pl/ -co.pl - -// Microsoft : http://microsoft.com -// Submitted by Barry Dorrans <bdorrans@microsoft.com> -azurewebsites.net -azure-mobile.net -cloudapp.net - -// Mozilla Foundation : https://mozilla.org/ -// Submitted by glob <glob@mozilla.com> -bmoattachments.org - -// Neustar Inc. -// Submitted by Trung Tran <Trung.Tran@neustar.biz> -4u.com - -// ngrok : https://ngrok.com/ -// Submitted by Alan Shreve <alan@ngrok.com> -ngrok.io - -// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ -// Submitted by Jeff Wheelhouse <support@nearlyfreespeech.net> -nfshost.com - -// nsupdate.info : https://www.nsupdate.info/ -// Submitted by Thomas Waldmann <info@nsupdate.info> -nsupdate.info -nerdpol.ovh - -// NYC.mn : http://www.information.nyc.mn -// Submitted by Matthew Brown <mattbrown@nyc.mn> -nyc.mn - -// One Fold Media : http://www.onefoldmedia.com/ -// Submitted by Eddie Jones <eddie@onefoldmedia.com> -nid.io - -// Opera Software, A.S.A. -// Submitted by Yngve Pettersen <yngve@opera.com> -operaunite.com - -// OutSystems -// Submitted by Duarte Santos <domain-admin@outsystemscloud.com> -outsystemscloud.com - -// OwnProvider : http://www.ownprovider.com -// Submitted by Jan Moennich <jan.moennich@ownprovider.com> -ownprovider.com - -// oy.lc -// Submitted by Charly Coste <changaco@changaco.oy.lc> -oy.lc - -// Pagefront : https://www.pagefronthq.com/ -// Submitted by Jason Kriss <jason@pagefronthq.com> -pagefrontapp.com - -// .pl domains (grandfathered) -art.pl -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl - -// Pantheon Systems, Inc. : https://pantheon.io/ -// Submitted by Gary Dylina <gary@pantheon.io> -pantheonsite.io -gotpantheon.com - -// Peplink | Pepwave : http://peplink.com/ -// Submitted by Steve Leung <steveleung@peplink.com> -mypep.link - -// prgmr.com : https://prgmr.com/ -// Submitted by Sarah Newman <owner@prgmr.com> -xen.prgmr.com - -// priv.at : http://www.nic.priv.at/ -// Submitted by registry <lendl@nic.at> -priv.at - -// Publication Presse Communication SARL : https://ppcom.fr -// Submitted by Yaacov Akiba Slama <admin@chirurgiens-dentistes-en-france.fr> -chirurgiens-dentistes-en-france.fr - -// QA2 -// Submitted by Daniel Dent (https://www.danieldent.com/) -qa2.com - -// Rackmaze LLC : https://www.rackmaze.com -// Submitted by Kirill Pertsev <kika@rackmaze.com> -rackmaze.com -rackmaze.net - -// Red Hat, Inc. OpenShift : https://openshift.redhat.com/ -// Submitted by Tim Kramer <tkramer@rhcloud.com> -rhcloud.com - -// RethinkDB : https://www.rethinkdb.com/ -// Submitted by Chris Kastorff <info@rethinkdb.com> -hzc.io - -// Sandstorm Development Group, Inc. : https://sandcats.io/ -// Submitted by Asheesh Laroia <asheesh@sandstorm.io> -sandcats.io - -// Service Online LLC : http://drs.ua/ -// Submitted by Serhii Bulakh <support@drs.ua> -biz.ua -co.ua -pp.ua - -// SinaAppEngine : http://sae.sina.com.cn/ -// Submitted by SinaAppEngine <saesupport@sinacloud.com> -sinaapp.com -vipsinaapp.com -1kapp.com - -// Synology, Inc. : https://www.synology.com/ -// Submitted by Rony Weng <ronyweng@synology.com> -diskstation.me -dscloud.biz -dscloud.me -dscloud.mobi -dsmynas.com -dsmynas.net -dsmynas.org -familyds.com -familyds.net -familyds.org -i234.me -myds.me -synology.me - -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl - -// TownNews.com domains : http://www.townnews.com -// Submitted by Dustin Ward <dward@townnews.com> -bloxcms.com -townnews-staging.com - -// UDR Limited : http://www.udr.hk.com -// Submitted by registry <hostmaster@udr.hk.com> -hk.com -hk.org -ltd.hk -inc.hk - -// Viprinet Europe GmbH : http://www.viprinet.com -// Submitted by Simon Kissel <hostmaster@viprinet.com> -router.management - -// Yola : https://www.yola.com/ -// Submitted by Stefano Rivera <stefano@yola.com> -yolasite.com - -// ZaNiC : http://www.za.net/ -// Submitted by registry <hostmaster@nic.za.net> -za.net -za.org - -// ===END PRIVATE DOMAINS===
--- a/eric7/E5Network/data/test_psl.txt Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -// Any copyright is dedicated to the Public Domain. -// http://creativecommons.org/publicdomain/zero/1.0/ - -// null input. -checkPublicSuffix(null, null); -// Mixed case. -checkPublicSuffix('COM', null); -checkPublicSuffix('example.COM', 'example.com'); -checkPublicSuffix('WwW.example.COM', 'example.com'); -// Leading dot. -checkPublicSuffix('.com', null); -checkPublicSuffix('.example', null); -checkPublicSuffix('.example.com', null); -checkPublicSuffix('.example.example', null); -// Unlisted TLD. -checkPublicSuffix('example', null); -checkPublicSuffix('example.example', 'example.example'); -checkPublicSuffix('b.example.example', 'example.example'); -checkPublicSuffix('a.b.example.example', 'example.example'); -// Listed, but non-Internet, TLD. -//checkPublicSuffix('local', null); -//checkPublicSuffix('example.local', null); -//checkPublicSuffix('b.example.local', null); -//checkPublicSuffix('a.b.example.local', null); -// TLD with only 1 rule. -checkPublicSuffix('biz', null); -checkPublicSuffix('domain.biz', 'domain.biz'); -checkPublicSuffix('b.domain.biz', 'domain.biz'); -checkPublicSuffix('a.b.domain.biz', 'domain.biz'); -// TLD with some 2-level rules. -checkPublicSuffix('com', null); -checkPublicSuffix('example.com', 'example.com'); -checkPublicSuffix('b.example.com', 'example.com'); -checkPublicSuffix('a.b.example.com', 'example.com'); -checkPublicSuffix('uk.com', null); -checkPublicSuffix('example.uk.com', 'example.uk.com'); -checkPublicSuffix('b.example.uk.com', 'example.uk.com'); -checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); -checkPublicSuffix('test.ac', 'test.ac'); -// TLD with only 1 (wildcard) rule. -checkPublicSuffix('bd', null); -checkPublicSuffix('c.bd', null); -checkPublicSuffix('b.c.bd', 'b.c.bd'); -checkPublicSuffix('a.b.c.bd', 'b.c.bd'); -// More complex TLD. -checkPublicSuffix('jp', null); -checkPublicSuffix('test.jp', 'test.jp'); -checkPublicSuffix('www.test.jp', 'test.jp'); -checkPublicSuffix('ac.jp', null); -checkPublicSuffix('test.ac.jp', 'test.ac.jp'); -checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); -checkPublicSuffix('kyoto.jp', null); -checkPublicSuffix('test.kyoto.jp', 'test.kyoto.jp'); -checkPublicSuffix('ide.kyoto.jp', null); -checkPublicSuffix('b.ide.kyoto.jp', 'b.ide.kyoto.jp'); -checkPublicSuffix('a.b.ide.kyoto.jp', 'b.ide.kyoto.jp'); -checkPublicSuffix('c.kobe.jp', null); -checkPublicSuffix('b.c.kobe.jp', 'b.c.kobe.jp'); -checkPublicSuffix('a.b.c.kobe.jp', 'b.c.kobe.jp'); -checkPublicSuffix('city.kobe.jp', 'city.kobe.jp'); -checkPublicSuffix('www.city.kobe.jp', 'city.kobe.jp'); -// TLD with a wildcard rule and exceptions. -checkPublicSuffix('ck', null); -checkPublicSuffix('test.ck', null); -checkPublicSuffix('b.test.ck', 'b.test.ck'); -checkPublicSuffix('a.b.test.ck', 'b.test.ck'); -checkPublicSuffix('www.ck', 'www.ck'); -checkPublicSuffix('www.www.ck', 'www.ck'); -// US K12. -checkPublicSuffix('us', null); -checkPublicSuffix('test.us', 'test.us'); -checkPublicSuffix('www.test.us', 'test.us'); -checkPublicSuffix('ak.us', null); -checkPublicSuffix('test.ak.us', 'test.ak.us'); -checkPublicSuffix('www.test.ak.us', 'test.ak.us'); -checkPublicSuffix('k12.ak.us', null); -checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); -checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); -// IDN labels. -checkPublicSuffix('食狮.com.cn', '食狮.com.cn'); -checkPublicSuffix('食狮.公司.cn', '食狮.公司.cn'); -checkPublicSuffix('www.食狮.公司.cn', '食狮.公司.cn'); -checkPublicSuffix('shishi.公司.cn', 'shishi.公司.cn'); -checkPublicSuffix('公司.cn', null); -checkPublicSuffix('食狮.中国', '食狮.中国'); -checkPublicSuffix('www.食狮.中国', '食狮.中国'); -checkPublicSuffix('shishi.中国', 'shishi.中国'); -checkPublicSuffix('中国', null); -// Same as above, but punycoded. -checkPublicSuffix('xn--85x722f.com.cn', 'xn--85x722f.com.cn'); -checkPublicSuffix('xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); -checkPublicSuffix('www.xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); -checkPublicSuffix('shishi.xn--55qx5d.cn', 'shishi.xn--55qx5d.cn'); -checkPublicSuffix('xn--55qx5d.cn', null); -checkPublicSuffix('xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); -checkPublicSuffix('www.xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); -checkPublicSuffix('shishi.xn--fiqs8s', 'shishi.xn--fiqs8s'); -checkPublicSuffix('xn--fiqs8s', null);
--- a/eric7/E5Utilities/E5Cache.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing classes used for caching objects. -""" - -from PyQt6.QtCore import QDateTime, QTimer - - -class E5Cache: - """ - Class implementing a LRU cache of a specific size. - - If the maximum number of entries is exceeded, the least recently used item - is removed from the cache. A cache hit moves the entry to the front of the - cache. - """ - def __init__(self, size=100): - """ - Constructor - - @param size maximum number of entries that may be stored in the cache - @type int - @exception ValueError raised to indicate an illegal 'size' parameter - """ - if size < 0: - raise ValueError("'size' parameter must be positive.") - - self.__size = size - - # internal objects - self.__keyList = [] - self.__store = {} # stores the cache entries - self.__accesStore = {} # stores the last access date and times - self.__hits = 0 - self.__misses = 0 - self.__maxsize = 0 - self.__maxCacheTime = 0 # 0 seconds means aging is disabled - - self.__cacheTimer = QTimer() - self.__cacheTimer.setSingleShot(True) - self.__cacheTimer.timeout.connect(self.__pruneCache) - - def __moveLast(self, key): - """ - Private method to move a cached item to the MRU position. - - @param key key of the item to be retrieved - @type any hashable type that can be used as a dict key - """ - self.__keyList.remove(key) - self.__keyList.append(key) - - def __adjustToSize(self): - """ - Private method to adjust the cache to its size. - """ - if self.__size: - removeList = self.__keyList[:-self.__size] - self.__keyList = self.__keyList[-self.__size:] - for key in removeList: - del self.__store[key] - del self.__accesStore[key] - else: - self.reset() - - def getSize(self): - """ - Public method to get the maximum size of the cache. - - @return maximum number of entries of the cache - @rtype int - """ - return self.__size - - def setSize(self, newSize): - """ - Public method to change the maximum size of the cache. - - @param newSize maximum number of entries that may be stored in the - cache - @type int - """ - if newSize >= 0: - self.__size = newSize - self.__adjustToSize() - - def getMaximumCacheTime(self): - """ - Public method to get the maximum time entries may exist in the cache. - - @return maximum cache time in seconds - @rtype int - """ - return self.__maxCacheTime - - def setMaximumCacheTime(self, time): - """ - Public method to set the maximum time entries may exist in the cache. - - @param time maximum cache time in seconds - @type int - """ - if time != self.__maxCacheTime: - self.__cacheTimer.stop() - self.__pruneCache() - self.__maxCacheTime = time - if self.__maxCacheTime > 0: - self.__cacheTimer.setInterval(self.__maxCacheTime * 1000) - self.__cacheTimer.start() - - def get(self, key): - """ - Public method to get an entry from the cache given its key. - - If the key is present in the cache, it is moved to the MRU position. - - @param key key of the item to be retrieved - @type any hashable type that can be used as a dict key - @return cached item for the given key or None, if the key is not - present - @rtype object or None - """ - if key in self.__store: - self.__hits += 1 - self.__moveLast(key) - self.__accesStore[key] = QDateTime.currentDateTimeUtc() - return self.__store[key] - else: - self.__misses += 1 - return None - - def add(self, key, item): - """ - Public method to add an item to the cache. - - If the key is already in use, the cached item is replaced by the new - one given and is moved to the MRU position - - @param key key of the item to be retrieved - @type any hashable type that can be used as a dict key - @param item item to be cached under the given key - @type object - """ - if key in self.__store: - self.__moveLast(key) - else: - self.__keyList.append(key) - self.__store[key] = item - self.__accesStore[key] = QDateTime.currentDateTimeUtc() - - self.__adjustToSize() - - self.__maxsize = max(self.__maxsize, len(self.__keyList)) - - def remove(self, key): - """ - Public method to remove an item from the cache. - - @param key key of the item to be retrieved - @type any hashable type that can be used as a dict key - """ - if key in self.__store: - del self.__store[key] - del self.__accesStore[key] - self.__keyList.remove(key) - - def clear(self): - """ - Public method to clear the cache. - """ - self.__keyList = [] - self.__store = {} - self.__accesStore = {} - - def reset(self): - """ - Public method to reset the cache. - - This is like clear() but sets the various counters to their initial - value as well. - """ - self.clear() - self.__hits = 0 - self.__misses = 0 - self.__maxsize = 0 - - def length(self): - """ - Public method to get the current length of the cache. - - @return current length of the cache - @rtype int - """ - return len(self.__keyList) - - def info(self): - """ - Public method to get some information about the cache. - - @return dictionary containing the cache info - @rtype dict (with keys "hits", "misses", "maxsize", "currsize") - """ - return { - "hits": self.__hits, - "misses": self.__misses, - "maxsize": self.__maxsize, - "currsize": self.length(), - } - - def __pruneCache(self): - """ - Private slot to prune outdated cache entries and restart the timer. - """ - if self.__maxCacheTime > 0: - current = QDateTime.currentDateTimeUtc() - - keysToBeDeleted = [] - for key, lastAccessTime in self.__accesStore.items(): - if lastAccessTime.secsTo(current) > self.__maxCacheTime: - keysToBeDeleted.append(key) - for key in keysToBeDeleted: - self.remove(key) - - self.__cacheTimer.start()
--- a/eric7/E5Utilities/E5MutexLocker.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a context manager locking and unlocking a mutex. -""" - -import contextlib - - -class E5MutexLocker(contextlib.AbstractContextManager): - """ - Class implementing a context manager locking and unlocking a mutex. - """ - def __init__(self, mutex): - """ - Constructor - - @param mutex reference to the mutex to be locked - @type QMutex or QRecursiveMutex - """ - self.__mutex = mutex - - def __enter__(self): - """ - Special method called when entering the runtime ccontext. - - @return reference to the context manager object - @rtype E5OverrideCursor - """ - self.__mutex.lock() - - return self - - def __exit__(self, exc_type, exc_value, traceback): - """ - Special method called when exiting the runtime ccontext. - - @param exc_type type of an exception raised in the runtime context - @param exc_value value of an exception raised in the runtime context - @param traceback traceback of an exception raised in the runtime - context - @return always returns None to not suppress any exception - @rtype None - """ - self.__mutex.unlock() - - return None # __IGNORE_WARNING_M831__
--- a/eric7/E5Utilities/__init__.py Sat May 22 12:54:57 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Package containing utility modules. -"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricFtp.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,369 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing an extension to the Python FTP class to support FTP +proxies. +""" + +import enum +import ftplib # secok +from socket import _GLOBAL_DEFAULT_TIMEOUT + + +class EricFtpProxyError(ftplib.Error): + """ + Class to signal an error related to proxy configuration. + + The error message starts with a three digit error code followed by a + space and the error string. Supported error codes are: + <ul> + <li>910: proxy error; the second number gives the category of the proxy + error. The original response from the proxy is appended in the next + line.</li> + <li>930: proxy error; the second number gives the category of the proxy + error. The original response from the proxy is appended in the next + line.</li> + <li>940: proxy error; the second number gives the category of the proxy + error. The original response from the proxy is appended in the next + line.</li> + <li>950: proxy error; the second number gives the category of the proxy + error. The original response from the proxy is appended in the next + line.</li> + <li>990: proxy usage is enabled but no proxy host given</li> + <li>991: proxy usage is enabled but no proxy user given</li> + <li>992: proxy usage is enabled but no proxy password given</li> + </ul> + """ + pass + + +class EricFtpProxyType(enum.Enum): + """ + Class defining the supported FTP proxy types. + """ + NO_PROXY = 0 # no proxy + NON_AUTHORIZING = 1 # non authorizing proxy + USER_SERVER = 2 # proxy login first, than user@remote.host + SITE = 3 # proxy login first, than use SITE command + OPEN = 4 # proxy login first, than use OPEN command + USER_PROXYUSER_SERVER = 5 # one login for both + PROXYUSER_SERVER = 6 + # proxy login with remote host given, than normal remote login + AUTH_RESP = 7 # authenticate to proxy with AUTH and RESP commands + BLUECOAT = 8 # bluecoat proxy + + +class EricFtp(ftplib.FTP): + """ + Class implementing an extension to the Python FTP class to support FTP + proxies. + """ + def __init__(self, host="", user="", password="", acct="", # secok + proxyType=EricFtpProxyType.NO_PROXY, proxyHost="", + proxyPort=ftplib.FTP_PORT, proxyUser="", proxyPassword="", + proxyAccount="", timeout=_GLOBAL_DEFAULT_TIMEOUT): + """ + Constructor + + @param host name of the FTP host + @type str + @param user user name for login to FTP host + @type str + @param password password for login to FTP host + @type str + @param acct account for login to FTP host + @type str + @param proxyType type of the FTP proxy + @type EricFtpProxyType + @param proxyHost name of the FTP proxy + @type str + @param proxyPort port of the FTP proxy + @type int + @param proxyUser user name for login to the proxy + @type str + @param proxyPassword password for login to the proxy + @type str + @param proxyAccount accounting info for the proxy + @type str + @param timeout timeout in seconds for blocking operations + @type int + """ + super().__init__() + + self.__timeout = timeout + + self.__proxyType = proxyType + self.__proxyHost = proxyHost + self.__proxyPort = proxyPort + self.__proxyUser = proxyUser + self.__proxyPassword = proxyPassword + self.__proxyAccount = proxyAccount + + self.__host = host + self.__port = ftplib.FTP_PORT + self.__user = user + self.__password = password + self.__acct = acct + + if host: + self.connect(host) + if user: + self.login(user, password, acct) + + def setProxy(self, proxyType=EricFtpProxyType.NO_PROXY, proxyHost="", + proxyPort=ftplib.FTP_PORT, proxyUser="", proxyPassword="", + proxyAccount=""): + """ + Public method to set the proxy configuration. + + @param proxyType type of the FTP proxy + @type EricFtpProxyType + @param proxyHost name of the FTP proxy + @type str + @param proxyPort port of the FTP proxy + @type int + @param proxyUser user name for login to the proxy + @type str + @param proxyPassword password for login to the proxy + @type str + @param proxyAccount accounting info for the proxy + @type str + """ + self.__proxyType = proxyType + self.__proxyHost = proxyHost + self.__proxyPort = proxyPort + self.__proxyUser = proxyUser + self.__proxyPassword = proxyPassword + self.__proxyAccount = proxyAccount + + def setProxyAuthentication(self, proxyUser="", proxyPassword="", + proxyAccount=""): + """ + Public method to set the proxy authentication info. + + @param proxyUser user name for login to the proxy + @type str + @param proxyPassword password for login to the proxy + @type str + @param proxyAccount accounting info for the proxy + @type str + """ + self.__proxyUser = proxyUser + self.__proxyPassword = proxyPassword + self.__proxyAccount = proxyAccount + + def connect(self, host="", port=0, timeout=-999): + """ + Public method to connect to the given FTP server. + + This extended method connects to the proxy instead of the given host, + if a proxy is to be used. It throws an exception, if the proxy data + is incomplete. + + @param host name of the FTP host + @type str + @param port port of the FTP host + @type int + @param timeout timeout in seconds for blocking operations + @type int + @return welcome message of the server + @rtype str + @exception EricFtpProxyError raised to indicate a proxy related issue + """ + if host: + self.__host = host + if port: + self.__port = port + if timeout != -999: + self.__timeout = timeout + + if self.__proxyType != EricFtpProxyType.NO_PROXY: + if not self.__proxyHost: + raise EricFtpProxyError( + "990 Proxy usage requested, but no proxy host given.") + + return super().connect( + self.__proxyHost, self.__proxyPort, self.__timeout) + else: + return super().connect( + self.__host, self.__port, self.__timeout) + + def login(self, user="", password="", acct=""): # secok + """ + Public method to login to the FTP server. + + This extended method respects the FTP proxy configuration. There are + many different FTP proxy products available. But unfortunately there + is no standard for how o traverse a FTP proxy. The lis below shows + the sequence of commands used. + + <table> + <tr><td>user</td><td>Username for remote host</td></tr> + <tr><td>pass</td><td>Password for remote host</td></tr> + <tr><td>pruser</td><td>Username for FTP proxy</td></tr> + <tr><td>prpass</td><td>Password for FTP proxy</td></tr> + <tr><td>remote.host</td><td>Hostname of the remote FTP server</td> + </tr> + </table> + + <dl> + <dt>EricFtpProxyType.NO_PROXY:</dt> + <dd> + USER user<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.NON_AUTHORIZING:</dt> + <dd> + USER user@remote.host<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.USER_SERVER:</dt> + <dd> + USER pruser<br/> + PASS prpass<br/> + USER user@remote.host<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.SITE:</dt> + <dd> + USER pruser<br/> + PASS prpass<br/> + SITE remote.site<br/> + USER user<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.OPEN:</dt> + <dd> + USER pruser<br/> + PASS prpass<br/> + OPEN remote.site<br/> + USER user<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.USER_PROXYUSER_SERVER:</dt> + <dd> + USER user@pruser@remote.host<br/> + PASS pass@prpass + </dd> + <dt>EricFtpProxyType.PROXYUSER_SERVER:</dt> + <dd> + USER pruser@remote.host<br/> + PASS prpass<br/> + USER user<br/> + PASS pass + </dd> + <dt>EricFtpProxyType.AUTH_RESP:</dt> + <dd> + USER user@remote.host<br/> + PASS pass<br/> + AUTH pruser<br/> + RESP prpass + </dd> + <dt>EricFtpProxyType.BLUECOAT:</dt> + <dd> + USER user@remote.host pruser<br/> + PASS pass<br/> + ACCT prpass + </dd> + </dl> + + @param user username for the remote host + @type str + @param password password for the remote host + @type str + @param acct accounting information for the remote host + @type str + @return response sent by the remote host + @rtype str + @exception EricFtpProxyError raised to indicate a proxy related issue + @exception ftplib.error_reply raised to indicate an FTP error reply + """ + if not user: + user = "anonymous" + if not password: + # make sure it is a string + password = "" # secok + if not acct: + # make sure it is a string + acct = "" + if user == "anonymous" and password in {'', '-'}: + password += "anonymous@" + + if self.__proxyType != EricFtpProxyType.NO_PROXY: + if self.__proxyType != EricFtpProxyType.NON_AUTHORIZING: + # check, if a valid proxy configuration is known + if not self.__proxyUser: + raise EricFtpProxyError( + "991 Proxy usage requested, but no proxy user given") + if not self.__proxyPassword: + raise EricFtpProxyError( + "992 Proxy usage requested, but no proxy password" + " given") + + if self.__proxyType in [EricFtpProxyType.NON_AUTHORIZING, + EricFtpProxyType.AUTH_RESP, + EricFtpProxyType.BLUECOAT]: + user += "@" + self.__host + if self.__proxyType == EricFtpProxyType.BLUECOAT: + user += " " + self.__proxyUser + acct = self.__proxyPassword + elif self.__proxyType == EricFtpProxyType.USER_PROXYUSER_SERVER: + user = "{0}@{1}@{2}".format( + user, self.__proxyUser, self.__host) + password = "{0}@{1}".format(password, self.__proxyPassword) + else: + pruser = self.__proxyUser + if self.__proxyType == EricFtpProxyType.USER_SERVER: + user += "@" + self.__host + elif self.__proxyType == EricFtpProxyType.PROXYUSER_SERVER: + pruser += "@" + self.__host + + # authenticate to the proxy first + presp = self.sendcmd("USER " + pruser) + if presp[0] == "3": + presp = self.sendcmd("PASS " + self.__proxyPassword) + if presp[0] == "3" and self.__proxyAccount: + presp = self.sendcmd("ACCT " + self.__proxyAccount) + if presp[0] != "2": + raise EricFtpProxyError( + "9{0}0 Error authorizing at proxy\n{1}".format( + presp[0], presp)) + + if self.__proxyType == EricFtpProxyType.SITE: + # send SITE command + presp = self.sendcmd("SITE " + self.__host) + if presp[0] != "2": + raise EricFtpProxyError( + "9{0}0 Error sending SITE command\n{1}".format( + presp[0], presp)) + elif self.__proxyType == EricFtpProxyType.OPEN: + # send OPEN command + presp = self.sendcmd("OPEN " + self.__host) + if presp[0] != "2": + raise EricFtpProxyError( + "9{0}0 Error sending OPEN command\n{1}".format( + presp[0], presp)) + + # authenticate to the remote host or combined to proxy and remote host + resp = self.sendcmd("USER " + user) + if resp[0] == "3": + resp = self.sendcmd("PASS " + password) + if resp[0] == "3": + resp = self.sendcmd("ACCT " + acct) + if resp[0] != "2": + raise ftplib.error_reply(resp) # secok + + if self.__proxyType == EricFtpProxyType.AUTH_RESP: + # authorize to the FTP proxy + presp = self.sendcmd("AUTH " + self.__proxyUser) + if presp[0] == "3": + presp = self.sendcmd("RESP " + self.__proxyPassword) + if presp[0] != "2": + raise EricFtpProxyError( + "9{0}0 Error authorizing at proxy\n{1}".format( + presp[0], presp)) + + return resp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricGoogleMail.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,359 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to send bug reports. +""" + +import os +import base64 +import json +import datetime +import contextlib + +from googleapiclient import discovery +from google.oauth2.credentials import Credentials +from requests_oauthlib import OAuth2Session + +from PyQt6.QtCore import pyqtSlot, pyqtSignal, QObject, QUrl, QUrlQuery +from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout + +from E5Gui.E5TextInputDialog import E5TextInputDialog + +import Globals + +from .EricGoogleMailHelpers import ( + CLIENT_SECRET_FILE, SCOPES, TOKEN_FILE, APPLICATION_NAME +) + + +class EricGoogleMailAuthBrowser(QDialog): + """ + Class implementing a simple web browser to perform the OAuth2 + authentication process. + + @signal approvalCodeReceived(str) emitted to indicate the receipt of the + approval code + """ + approvalCodeReceived = pyqtSignal(str) + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget + @type QWidget + """ + super().__init__(parent) + + self.__layout = QVBoxLayout(self) + + from PyQt6.QtWebEngineWidgets import QWebEngineView + self.__browser = QWebEngineView(self) + self.__browser.titleChanged.connect(self.__titleChanged) + self.__browser.loadFinished.connect(self.__pageLoadFinished) + self.__layout.addWidget(self.__browser) + + self.__buttonBox = QDialogButtonBox( + QDialogButtonBox.StandardButton.Close) + self.__buttonBox.rejected.connect(self.reject) + self.__layout.addWidget(self.__buttonBox) + + self.resize(600, 700) + + @pyqtSlot(str) + def __titleChanged(self, title): + """ + Private slot handling changes of the web page title. + + @param title web page title + @type str + """ + self.setWindowTitle(title) + + @pyqtSlot() + def __pageLoadFinished(self): + """ + Private slot handling the loadFinished signal. + """ + url = self.__browser.url() + if url.toString().startswith( + "https://accounts.google.com/o/oauth2/approval/v2"): + urlQuery = QUrlQuery(url) + approvalCode = urlQuery.queryItemValue( + "approvalCode", QUrl.ComponentFormattingOption.FullyDecoded) + if approvalCode: + self.approvalCodeReceived.emit(approvalCode) + self.close() + + def load(self, url): + """ + Public method to start the authorization flow by loading the given URL. + + @param url URL to be laoded + @type str or QUrl + """ + self.__browser.setUrl(QUrl(url)) + + +class EricGoogleMail(QObject): + """ + Class implementing the logic to send emails via Google Mail. + + @signal sendResult(bool, str) emitted to indicate the transmission result + and a result message + """ + sendResult = pyqtSignal(bool, str) + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent object + @type QObject + """ + super().__init__(parent=parent) + + self.__messages = [] + + self.__session = None + self.__clientConfig = {} + + self.__browser = None + + def sendMessage(self, message): + """ + Public method to send a message via Google Mail. + + @param message email message to be sent + @type email.mime.text.MIMEBase + """ + self.__messages.append(message) + + if not self.__session: + self.__startSession() + else: + self.__doSendMessages() + + def __prepareMessage(self, message): + """ + Private method to prepare the message for sending. + + @param message message to be prepared + @type email.mime.text.MIMEBase + @return prepared message dictionary + @rtype dict + """ + messageAsBase64 = base64.urlsafe_b64encode(message.as_bytes()) + raw = messageAsBase64.decode() + return {'raw': raw} + + def __startSession(self): + """ + Private method to start an authorized session and optionally start the + authorization flow. + """ + # check for availability of secrets file + if not os.path.exists(os.path.join(Globals.getConfigDir(), + CLIENT_SECRET_FILE)): + self.sendResult.emit( + False, + self.tr("The client secrets file is not present. Has the Gmail" + " API been enabled?") + ) + return + + with open(os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE), + "r") as clientSecret: + clientData = json.load(clientSecret) + self.__clientConfig = clientData['installed'] + token = self.__loadToken() + if token is None: + # no valid OAuth2 token available + self.__session = OAuth2Session( + self.__clientConfig['client_id'], + scope=SCOPES, + redirect_uri=self.__clientConfig['redirect_uris'][0] + ) + authorizationUrl, _ = self.__session.authorization_url( + self.__clientConfig['auth_uri'], + access_type="offline", + prompt="select_account" + ) + if self.__browser is None: + with contextlib.suppress(ImportError): + self.__browser = EricGoogleMailAuthBrowser() + self.__browser.approvalCodeReceived.connect( + self.__processAuthorization) + if self.__browser: + self.__browser.show() + self.__browser.load(QUrl(authorizationUrl)) + else: + from PyQt6.QtGui import QDesktopServices + QDesktopServices.openUrl(QUrl(authorizationUrl)) + ok, authCode = E5TextInputDialog.getText( + None, + self.tr("OAuth2 Authorization Code"), + self.tr("Enter the OAuth2 authorization code:")) + if ok and authCode: + self.__processAuthorization(authCode) + else: + self.__session = None + else: + self.__session = OAuth2Session( + self.__clientConfig['client_id'], + scope=SCOPES, + redirect_uri=self.__clientConfig['redirect_uris'][0], + token=token, + auto_refresh_kwargs={ + 'client_id': self.__clientConfig['client_id'], + 'client_secret': self.__clientConfig['client_secret'], + }, + auto_refresh_url=self.__clientConfig['token_uri'], + token_updater=self.__saveToken) + self.__doSendMessages() + + @pyqtSlot(str) + def __processAuthorization(self, authCode): + """ + Private slot to process the received authorization code. + + @param authCode received authorization code + @type str + """ + self.__session.fetch_token( + self.__clientConfig['token_uri'], + client_secret=self.__clientConfig['client_secret'], + code=authCode) + self.__saveToken(self.__session.token) + + # authorization completed; now send all queued messages + self.__doSendMessages() + + def __doSendMessages(self): + """ + Private method to send all queued messages. + """ + if not self.__session: + self.sendResult.emit( + False, + self.tr("No authorized session available.") + ) + return + + try: + results = [] + credentials = self.__credentialsFromSession() + service = discovery.build('gmail', 'v1', credentials=credentials, + cache_discovery=False) + count = 0 + while self.__messages: + count += 1 + message = self.__messages.pop(0) + message1 = self.__prepareMessage(message) + service.users().messages().send( + userId="me", body=message1).execute() + results.append(self.tr("Message #{0} sent.").format(count)) + + self.sendResult.emit(True, "\n\n".join(results)) + except Exception as error: + self.sendResult.emit(False, str(error)) + + def __loadToken(self): + """ + Private method to load a token from the token file. + + @return loaded token + @rtype dict or None + """ + homeDir = os.path.expanduser('~') + credentialsDir = os.path.join(homeDir, '.credentials') + if not os.path.exists(credentialsDir): + os.makedirs(credentialsDir) + tokenPath = os.path.join(credentialsDir, TOKEN_FILE) + + if os.path.exists(tokenPath): + with open(tokenPath, "r") as tokenFile: + return json.load(tokenFile) + else: + return None + + def __saveToken(self, token): + """ + Private method to save a token to the token file. + + @param token token to be saved + @type dict + """ + homeDir = os.path.expanduser('~') + credentialsDir = os.path.join(homeDir, '.credentials') + if not os.path.exists(credentialsDir): + os.makedirs(credentialsDir) + tokenPath = os.path.join(credentialsDir, TOKEN_FILE) + + with open(tokenPath, "w") as tokenFile: + json.dump(token, tokenFile) + + def __credentialsFromSession(self): + """ + Private method to create a credentials object. + + @return created credentials object + @rtype google.oauth2.credentials.Credentials + """ + credentials = None + + if self.__clientConfig and self.__session: + token = self.__session.token + if token: + credentials = Credentials( + token['access_token'], + refresh_token=token.get('refresh_token'), + id_token=token.get('id_token'), + token_uri=self.__clientConfig['token_uri'], + client_id=self.__clientConfig['client_id'], + client_secret=self.__clientConfig['client_secret'], + scopes=SCOPES + ) + credentials.expiry = datetime.datetime.fromtimestamp( + token['expires_at']) + + return credentials + + +def GoogleMailHelp(): + """ + Module function to get some help about how to enable the Google Mail + OAuth2 service. + + @return help text + @rtype str + """ + return ( + "<h2>Steps to turn on the Gmail API</h2>" + "<ol>" + "<li>Use <a href='{0}'>this wizard</a> to create or select a project" + " in the Google Developers Console and automatically turn on the API." + " Click <b>Continue</b>, then <b>Go to credentials</b>.</li>" + "<li>At the top of the page, select the <b>OAuth consent screen</b>" + " tab. Select an <b>Email address</b>, enter a <b>Product name</b> if" + " not already set, and click the <b>Save</b> button.</li>" + "<li>Select the <b>Credentials</b> tab, click the <b>Add credentials" + "</b> button and select <b>OAuth 2.0 client ID</b>.</li>" + "<li>Select the application type <b>Other</b>, enter the name "" + "{1}", and click the <b>Create</b>" + " button.</li>" + "<li>Click <b>OK</b> to dismiss the resulting dialog.</li>" + "<li>Click the (Download JSON) button to the right of the client ID." + "</li>" + "<li>Move this file to the eric configuration directory" + " <code>{2}</code> and rename it <code>{3}</code>.</li>" + "</ol>".format( + "https://console.developers.google.com/start/api?id=gmail", + APPLICATION_NAME, + Globals.getConfigDir(), + CLIENT_SECRET_FILE + ) + )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricGoogleMailHelpers.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing some helpers for Google mail. +""" + +import os + +import Globals + +SCOPES = 'https://www.googleapis.com/auth/gmail.send' +CLIENT_SECRET_FILE = 'eric_client_secret.json' # secok +TOKEN_FILE = 'eric_python_email_send_token.json' # secok +APPLICATION_NAME = 'Eric Python Send Email' + +RequiredPackages = ( + "google-api-python-client", + "requests-oauthlib", +) + + +def isClientSecretFileAvailable(): + """ + Module function to check, if the client secret file has been installed. + + @return flag indicating, that the credentials file is there + @rtype bool + """ + return os.path.exists( + os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE)) + + +def getInstallCommand(): + """ + Module function to get the install command to get the Google mail support + activated. + + @return install command + @rtype str + """ + pipCommand = "pip install --upgrade {0}".format( + " ".join(RequiredPackages)) + + return pipCommand
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricJsonClient.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the JSON based client base class. +""" + +import io +import sys +import socket +import select +import traceback +import json +import contextlib + + +class EricJsonClient: + """ + Class implementing a JSON based client base class. + """ + def __init__(self, host, port, idString=""): + """ + Constructor + + @param host ip address the background service is listening + @type str + @param port port of the background service + @type int + @param idString assigned client id to be sent back to the server in + order to identify the connection + @type str + """ + self.__connection = socket.create_connection((host, port)) + if idString: + reply = idString + '\n' + self.__connection.sendall(reply.encode('utf8', 'backslashreplace')) + + def sendJson(self, command, params): + """ + Public method to send a single refactoring command to the server. + + @param command command name to be sent + @type str + @param params dictionary of named parameters for the command + @type dict + """ + commandDict = { + "jsonrpc": "2.0", + "method": command, + "params": params, + } + cmd = json.dumps(commandDict) + '\n' + self.__connection.sendall(cmd.encode('utf8', 'backslashreplace')) + + def __receiveJson(self): + """ + Private method to receive a JSON encode command and data from the + server. + + @return tuple containing the received command and a dictionary + containing the associated data + @rtype tuple of (str, dict) + """ + # step 1: receive the data + # The JSON RPC string is prefixed by a 9 character long length field. + length = self.__connection.recv(9) + if len(length) < 9: + # invalid length string received + return None, None + + length = int(length) + data = b'' + while len(data) < length: + newData = self.__connection.recv(length - len(data)) + if not newData: + return None, None + + data += newData + + # step 2: decode and convert the data + line = data.decode( + 'utf8', 'backslashreplace') + try: + commandDict = json.loads(line.strip()) + except (TypeError, ValueError) as err: + self.sendJson("ClientException", { + "ExceptionType": "ProtocolError", + "ExceptionValue": str(err), + "ProtocolData": line.strip(), + }) + return None, None + + method = commandDict["method"] + params = commandDict["params"] + + return method, params + + def handleCall(self, method, params): + """ + Public method to handle a method call from the server. + + Note: This is an empty implementation that must be overridden in + derived classes. + + @param method requested method name + @type str + @param params dictionary with method specific parameters + @type dict + """ + pass + + def run(self): + """ + Public method implementing the main loop of the client. + """ + try: + selectErrors = 0 + while selectErrors <= 10: # selected arbitrarily + try: + rrdy, wrdy, xrdy = select.select( + [self.__connection], [], []) + + # Just waiting for self.__connection. Therefor no check + # needed. + method, params = self.__receiveJson() + if method is None: + selectErrors += 1 + elif method == "Exit": + break + else: + self.handleCall(method, params) + + # reset select errors + selectErrors = 0 + + except (select.error, KeyboardInterrupt, socket.error): + selectErrors += 1 + + except Exception: + exctype, excval, exctb = sys.exc_info() + tbinfofile = io.StringIO() + traceback.print_tb(exctb, None, tbinfofile) + tbinfofile.seek(0) + tbinfo = tbinfofile.read() + del exctb + self.sendJson("ClientException", { + "ExceptionType": str(exctype), + "ExceptionValue": str(excval), + "Traceback": tbinfo, + }) + + # Give time to process latest response on server side + with contextlib.suppress(socket.error, OSError): + self.__connection.shutdown(socket.SHUT_RDWR) + self.__connection.close() + + def poll(self, waitMethod=""): + """ + Public method to check and receive one message (if available). + + @param waitMethod name of a method to wait for + @type str + @return dictionary containing the data of the waited for method + @rtype dict + """ + try: + if waitMethod: + rrdy, wrdy, xrdy = select.select( + [self.__connection], [], []) + else: + rrdy, wrdy, xrdy = select.select( + [self.__connection], [], [], 0) + + if self.__connection in rrdy: + method, params = self.__receiveJson() + if method is not None: + if method == "Exit": + self.__exitClient = True + elif method == waitMethod: + return params + else: + self.handleCall(method, params) + + except (select.error, KeyboardInterrupt, socket.error): + # just ignore these + pass + + except Exception: + exctype, excval, exctb = sys.exc_info() + tbinfofile = io.StringIO() + traceback.print_tb(exctb, None, tbinfofile) + tbinfofile.seek(0) + tbinfo = tbinfofile.read() + del exctb + self.sendJson("ClientException", { + "ExceptionType": str(exctype), + "ExceptionValue": str(excval), + "Traceback": tbinfo, + }) + + return None
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricJsonServer.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,335 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the JSON based server base class. +""" + +import contextlib +import json + +from PyQt6.QtCore import ( + pyqtSlot, QProcess, QProcessEnvironment, QCoreApplication, QEventLoop, + QTimer +) +from PyQt6.QtNetwork import QTcpServer, QHostAddress + +from E5Gui import E5MessageBox + +import Preferences +import Utilities + + +class EricJsonServer(QTcpServer): + """ + Class implementing a JSON based server base class. + """ + def __init__(self, name="", multiplex=False, parent=None): + """ + Constructor + + @param name name of the server (used for output only) + @type str + @param multiplex flag indicating a multiplexing server + @type bool + @param parent parent object + @type QObject + """ + super().__init__(parent) + + self.__name = name + self.__multiplex = multiplex + if self.__multiplex: + self.__clientProcesses = {} + self.__connections = {} + else: + self.__clientProcess = None + self.__connection = None + + # setup the network interface + networkInterface = Preferences.getDebugger("NetworkInterface") + if networkInterface == "all" or '.' in networkInterface: + # IPv4 + self.__hostAddress = '127.0.0.1' + else: + # IPv6 + self.__hostAddress = '::1' + self.listen(QHostAddress(self.__hostAddress)) + + self.newConnection.connect(self.handleNewConnection) + + port = self.serverPort() + ## Note: Need the port if client is started external in debugger. + print('JSON server ({1}) listening on: {0:d}' # __IGNORE_WARNING__ + .format(port, self.__name)) + + @pyqtSlot() + def handleNewConnection(self): + """ + Public slot for new incoming connections from a client. + """ + connection = self.nextPendingConnection() + if not connection.isValid(): + return + + if self.__multiplex: + if not connection.waitForReadyRead(3000): + return + idString = bytes(connection.readLine()).decode( + "utf-8", 'backslashreplace').strip() + if idString in self.__connections: + self.__connections[idString].close() + self.__connections[idString] = connection + else: + idString = "" + if self.__connection is not None: + self.__connection.close() + + self.__connection = connection + + connection.readyRead.connect( + lambda: self.__receiveJson(idString)) + connection.disconnected.connect( + lambda: self.__handleDisconnect(idString)) + + @pyqtSlot() + def __handleDisconnect(self, idString): + """ + Private slot handling a disconnect of the client. + + @param idString id of the connection been disconnected + @type str + """ + if idString: + if idString in self.__connections: + self.__connections[idString].close() + del self.__connections[idString] + else: + if self.__connection is not None: + self.__connection.close() + + self.__connection = None + + def connectionNames(self): + """ + Public method to get the list of active connection names. + + If this is not a multiplexing server, an empty list is returned. + + @return list of active connection names + @rtype list of str + """ + if self.__multiplex: + return list(self.__connections.keys()) + else: + return [] + + @pyqtSlot() + def __receiveJson(self, idString): + """ + Private slot handling received data from the client. + + @param idString id of the connection been disconnected + @type str + """ + if idString: + try: + connection = self.__connections[idString] + except KeyError: + connection = None + else: + connection = self.__connection + + while connection and connection.canReadLine(): + data = connection.readLine() + jsonLine = bytes(data).decode("utf-8", 'backslashreplace') + + #- print("JSON Server ({0}): {1}".format(self.__name, jsonLine)) + #- this is for debugging only + + try: + clientDict = json.loads(jsonLine.strip()) + except (TypeError, ValueError) as err: + E5MessageBox.critical( + None, + self.tr("JSON Protocol Error"), + self.tr("""<p>The response received from the client""" + """ could not be decoded. Please report""" + """ this issue with the received data to the""" + """ eric bugs email address.</p>""" + """<p>Error: {0}</p>""" + """<p>Data:<br/>{1}</p>""").format( + str(err), Utilities.html_encode(jsonLine.strip())), + E5MessageBox.Ok) + return + + self.handleCall(clientDict["method"], clientDict["params"]) + + def sendJson(self, command, params, flush=False, idString=""): + """ + Public method to send a single command to a client. + + @param command command name to be sent + @type str + @param params dictionary of named parameters for the command + @type dict + @param flush flag indicating to flush the data to the socket + @type bool + @param idString id of the connection to send data to + @type str + """ + commandDict = { + "jsonrpc": "2.0", + "method": command, + "params": params, + } + cmd = json.dumps(commandDict) + '\n' + + if idString: + try: + connection = self.__connections[idString] + except KeyError: + connection = None + else: + connection = self.__connection + + if connection is not None: + data = cmd.encode('utf8', 'backslashreplace') + length = "{0:09d}".format(len(data)) + connection.write(length.encode() + data) + if flush: + connection.flush() + + def startClient(self, interpreter, clientScript, clientArgs, idString="", + environment=None): + """ + Public method to start a client process. + + @param interpreter interpreter to be used for the client + @type str + @param clientScript path to the client script + @type str + @param clientArgs list of arguments for the client + @param idString id of the client to be started + @type str + @param environment dictionary of environment settings to pass + @type dict + @return flag indicating a successful client start and the exit code + in case of an issue + @rtype bool, int + """ + if interpreter == "" or not Utilities.isinpath(interpreter): + return False + + exitCode = None + + proc = QProcess() + proc.setProcessChannelMode( + QProcess.ProcessChannelMode.ForwardedChannels) + if environment is not None: + env = QProcessEnvironment() + for key, value in list(environment.items()): + env.insert(key, value) + proc.setProcessEnvironment(env) + args = [clientScript, self.__hostAddress, str(self.serverPort())] + if idString: + args.append(idString) + args.extend(clientArgs) + proc.start(interpreter, args) + if not proc.waitForStarted(10000): + proc = None + + if idString: + self.__clientProcesses[idString] = proc + if proc: + timer = QTimer() + timer.setSingleShot(True) + timer.start(30000) # 30s timeout + while ( + idString not in self.connectionNames() and + timer.isActive() + ): + # Give the event loop the chance to process the new + # connection of the client (= slow start). + QCoreApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + + # check if client exited prematurely + if proc.state() == QProcess.ProcessState.NotRunning: + exitCode = proc.exitCode() + proc = None + self.__clientProcesses[idString] = None + break + else: + if proc: + timer = QTimer() + timer.setSingleShot(True) + timer.start(1000) # 1s timeout + while timer.isActive(): + # check if client exited prematurely + QCoreApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + if proc.state() == QProcess.ProcessState.NotRunning: + exitCode = proc.exitCode() + proc = None + break + self.__clientProcess = proc + + return proc is not None, exitCode + + def stopClient(self, idString=""): + """ + Public method to stop a client process. + + @param idString id of the client to be stopped + @type str + """ + self.sendJson("Exit", {}, flush=True, idString=idString) + + if idString: + try: + connection = self.__connections[idString] + except KeyError: + connection = None + else: + connection = self.__connection + if connection is not None: + connection.waitForDisconnected() + + if idString: + with contextlib.suppress(KeyError): + if self .__clientProcesses[idString] is not None: + self .__clientProcesses[idString].close() + del self.__clientProcesses[idString] + else: + if self.__clientProcess is not None: + self.__clientProcess.close() + self.__clientProcess = None + + def stopAllClients(self): + """ + Public method to stop all clients. + """ + clientNames = self.connectionNames()[:] + for clientName in clientNames: + self.stopClient(clientName) + + ####################################################################### + ## The following methods should be overridden by derived classes + ####################################################################### + + def handleCall(self, method, params): + """ + Public method to handle a method call from the client. + + Note: This is an empty implementation that must be overridden in + derived classes. + + @param method requested method name + @type str + @param params dictionary with method specific parameters + @type dict + """ + pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricNetworkProxyFactory.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,261 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a network proxy factory. +""" + +import os +import re + +from PyQt6.QtCore import QUrl, QCoreApplication +from PyQt6.QtWidgets import QDialog +from PyQt6.QtNetwork import ( + QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery +) + +from E5Gui import E5MessageBox + +import Preferences +import Globals +import Utilities + + +def schemeFromProxyType(proxyType): + """ + Module function to determine the scheme name from the proxy type. + + @param proxyType type of the proxy (QNetworkProxy.ProxyType) + @return scheme (string, one of Http, Https, Ftp) + """ + scheme = "" + if proxyType == QNetworkProxy.ProxyType.HttpProxy: + scheme = "Http" + elif proxyType == QNetworkProxy.ProxyType.HttpCachingProxy: + scheme = "Https" + elif proxyType == QNetworkProxy.ProxyType.FtpCachingProxy: + scheme = "Ftp" + elif proxyType == QNetworkProxy.ProxyType.NoProxy: + scheme = "NoProxy" + return scheme + + +def proxyAuthenticationRequired(proxy, auth): + """ + Module slot to handle a proxy authentication request. + + @param proxy reference to the proxy object (QNetworkProxy) + @param auth reference to the authenticator object (QAuthenticator) + """ + info = QCoreApplication.translate( + "EricNetworkProxyFactory", + "<b>Connect to proxy '{0}' using:</b>" + ).format(Utilities.html_encode(proxy.hostName())) + + from UI.AuthenticationDialog import AuthenticationDialog + dlg = AuthenticationDialog(info, proxy.user(), True) + dlg.setData(proxy.user(), proxy.password()) + if dlg.exec() == QDialog.DialogCode.Accepted: + username, password = dlg.getData() + auth.setUser(username) + auth.setPassword(password) + if dlg.shallSave(): + scheme = schemeFromProxyType(proxy.type()) + if scheme and scheme != "NoProxy": + Preferences.setUI("ProxyUser/{0}".format(scheme), username) + Preferences.setUI("ProxyPassword/{0}".format(scheme), password) + proxy.setUser(username) + proxy.setPassword(password) + + +class HostnameMatcher: + """ + Class implementing a matcher for host names. + """ + def __init__(self, pattern): + """ + Constructor + + @param pattern pattern to be matched against + @type str + """ + self.__regExp = None + self.setPattern(pattern) + + def setPattern(self, pattern): + """ + Public method to set the match pattern. + + @param pattern pattern to be matched against + """ + self.__pattern = pattern + + if "?" in pattern or "*" in pattern: + regexp = "^.*{0}.*$".format( + pattern + .replace(".", "\\.") + .replace("*", ".*") + .replace("?", ".") + ) + self.__regExp = re.compile(regexp, re.IGNORECASE) + + def pattern(self): + """ + Public method to get the match pattern. + + @return match pattern + @rtype str + """ + return self.__pattern + + def match(self, host): + """ + Public method to test the given string. + + @param host host name to be matched + @type str + @return flag indicating a successful match + @rtype bool + """ + if self.__regExp is None: + return self.__pattern in host + + return self.__regExp.search(host) is not None + + +class EricNetworkProxyFactory(QNetworkProxyFactory): + """ + Class implementing a network proxy factory. + """ + def __init__(self): + """ + Constructor + """ + super().__init__() + + self.__hostnameMatchers = [] + self.__exceptions = "" + + def __setExceptions(self, exceptions): + """ + Private method to set the host name exceptions. + + @param exceptions list of exceptions separated by ',' + @type str + """ + self.__hostnameMatchers = [] + self.__exceptions = exceptions + for exception in self.__exceptions.split(","): + self.__hostnameMatchers.append(HostnameMatcher(exception.strip())) + + def queryProxy(self, query): + """ + Public method to determine a proxy for a given query. + + @param query reference to the query object (QNetworkProxyQuery) + @return list of proxies in order of preference (list of QNetworkProxy) + """ + if ( + query.queryType() == QNetworkProxyQuery.QueryType.UrlRequest and + query.protocolTag() in ["http", "https", "ftp"] + ): + # use proxy at all ? + if not Preferences.getUI("UseProxy"): + return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] + + # test for exceptions + exceptions = Preferences.getUI("ProxyExceptions") + if exceptions != self.__exceptions: + self.__setExceptions(exceptions) + urlHost = query.url().host() + for matcher in self.__hostnameMatchers: + if matcher.match(urlHost): + return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] + + # determine proxy + if Preferences.getUI("UseSystemProxy"): + proxyList = QNetworkProxyFactory.systemProxyForQuery(query) + if ( + not Globals.isWindowsPlatform() and + len(proxyList) == 1 and + proxyList[0].type() == QNetworkProxy.ProxyType.NoProxy + ): + # try it the Python way + # scan the environment for variables named <scheme>_proxy + # scan over whole environment to make this case insensitive + for name, value in os.environ.items(): + name = name.lower() + if ( + value and + name[-6:] == '_proxy' and + name[:-6] == query.protocolTag().lower() + ): + url = QUrl(value) + if url.scheme() in ["http", "https"]: + proxyType = QNetworkProxy.ProxyType.HttpProxy + elif url.scheme() == "ftp": + proxyType = ( + QNetworkProxy.ProxyType.FtpCachingProxy + ) + else: + proxyType = QNetworkProxy.ProxyType.HttpProxy + proxy = QNetworkProxy( + proxyType, url.host(), url.port(), + url.userName(), url.password()) + proxyList = [proxy] + break + if proxyList: + scheme = schemeFromProxyType(proxyList[0].type()) + if scheme == "": + scheme = "Http" + if scheme != "NoProxy": + proxyList[0].setUser( + Preferences.getUI("ProxyUser/{0}".format(scheme))) + proxyList[0].setPassword( + Preferences.getUI( + "ProxyPassword/{0}".format(scheme))) + return proxyList + else: + return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)] + else: + if Preferences.getUI("UseHttpProxyForAll"): + protocolKey = "Http" + else: + protocolKey = query.protocolTag().capitalize() + host = Preferences.getUI("ProxyHost/{0}".format(protocolKey)) + if not host: + E5MessageBox.critical( + None, + QCoreApplication.translate( + "EricNetworkProxyFactory", + "Proxy Configuration Error"), + QCoreApplication.translate( + "EricNetworkProxyFactory", + """Proxy usage was activated""" + """ but no proxy host for protocol""" + """ '{0}' configured.""").format(protocolKey)) + return [ + QNetworkProxy(QNetworkProxy.ProxyType.DefaultProxy) + ] + else: + if protocolKey in ["Http", "Https", "Ftp"]: + if query.protocolTag() == "ftp": + proxyType = QNetworkProxy.ProxyType.FtpCachingProxy + else: + proxyType = QNetworkProxy.ProxyType.HttpProxy + proxy = QNetworkProxy( + proxyType, host, + Preferences.getUI("ProxyPort/" + protocolKey), + Preferences.getUI("ProxyUser/" + protocolKey), + Preferences.getUI("ProxyPassword/" + protocolKey)) + else: + proxy = QNetworkProxy( + QNetworkProxy.ProxyType.DefaultProxy) + return [ + proxy, + QNetworkProxy(QNetworkProxy.ProxyType.DefaultProxy) + ] + else: + return [QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificateSelectionDialog.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to select a SSL certificate. +""" + +import contextlib + +from PyQt6.QtCore import pyqtSlot, Qt +from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem +with contextlib.suppress(ImportError): + from PyQt6.QtNetwork import QSslCertificate + +from .Ui_EricSslCertificateSelectionDialog import ( + Ui_EricSslCertificateSelectionDialog +) + +import Utilities +import UI.PixmapCache + + +class EricSslCertificateSelectionDialog(QDialog, + Ui_EricSslCertificateSelectionDialog): + """ + Class implementing a dialog to select a SSL certificate. + """ + CertRole = Qt.ItemDataRole.UserRole + 1 + + def __init__(self, certificates, parent=None): + """ + Constructor + + @param certificates list of SSL certificates to select from + @type list of QSslCertificate + @param parent reference to the parent widget + @type QWidget + """ + super().__init__(parent) + self.setupUi(self) + + self.viewButton.setIcon( + UI.PixmapCache.getIcon("certificates")) + + self.buttonBox.button(QDialogButtonBox.OK).setEnabled(False) + self.viewButton.setEnabled(False) + + self.__populateCertificatesTree(certificates) + + def __populateCertificatesTree(self, certificates): + """ + Private slot to populate the certificates tree. + + @param certificates list of SSL certificates to select from + @type list of QSslCertificate + """ + for cert in certificates(): + self.__createCertificateEntry(cert) + + self.certificatesTree.expandAll() + for i in range(self.certificatesTree.columnCount()): + self.certificatesTree.resizeColumnToContents(i) + self.certificatesTree.sortItems(0, Qt.SortOrder.AscendingOrder) + + def __createCaCertificateEntry(self, cert): + """ + Private method to create a certificate entry. + + @param cert certificate to insert + @type QSslCertificate + """ + # step 1: extract the info to be shown + organisation = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.Organization))) + commonName = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName))) + if organisation is None or organisation == "": + organisation = self.tr("(Unknown)") + if commonName is None or commonName == "": + commonName = self.tr("(Unknown common name)") + expiryDate = cert.expiryDate().toString("yyyy-MM-dd") + + # step 2: create the entry + items = self.certificatesTree.findItems( + organisation, + Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) + if len(items) == 0: + parent = QTreeWidgetItem(self.certificatesTree, [organisation]) + parent.setFirstColumnSpanned(True) + else: + parent = items[0] + + itm = QTreeWidgetItem(parent, [commonName, expiryDate]) + itm.setData(0, self.CertRole, cert.toPem()) + + @pyqtSlot() + def on_certificatesTree_itemSelectionChanged(self): + """ + Private slot to handle the selection of an item. + """ + enable = ( + len(self.certificatesTree.selectedItems()) > 0 and + self.certificatesTree.selectedItems()[0].parent() is not None + ) + self.buttonBox.button(QDialogButtonBox.OK).setEnabled(enable) + self.viewButton.setEnabled(enable) + + @pyqtSlot() + def on_viewButton_clicked(self): + """ + Private slot to show data of the selected certificate. + """ + with contextlib.suppress(ImportError): + from EricNetwork.EricSslCertificatesInfoDialog import ( + EricSslCertificatesInfoDialog + ) + cert = QSslCertificate.fromData( + self.certificatesTree.selectedItems()[0].data( + 0, self.CertRole)) + dlg = EricSslCertificatesInfoDialog(cert, self) + dlg.exec() + + def getSelectedCertificate(self): + """ + Public method to get the selected certificate. + + @return selected certificate + @rtype QSslCertificate + """ + valid = ( + len(self.certificatesTree.selectedItems()) > 0 and + self.certificatesTree.selectedItems()[0].parent() is not None + ) + + certificate = ( + QSslCertificate.fromData( + self.certificatesTree.selectedItems()[0].data( + 0, self.CertRole)) + if valid else + None + ) + + return certificate
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificateSelectionDialog.ui Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EricSslCertificateSelectionDialog</class> + <widget class="QDialog" name="EricSslCertificateSelectionDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>760</width> + <height>440</height> + </rect> + </property> + <property name="windowTitle"> + <string>SSL Certificate Selection</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Select a SSL certificate:</string> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="certificatesTree"> + <column> + <property name="text"> + <string>Certificate name</string> + </property> + </column> + <column> + <property name="text"> + <string>Expiry Date</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="viewButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to view the selected certificate</string> + </property> + <property name="text"> + <string>&View...</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>EricSslCertificateSelectionDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>EricSslCertificateSelectionDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesDialog.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,518 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to show and edit all certificates. +""" + +import contextlib + +from PyQt6.QtCore import ( + pyqtSlot, Qt, QByteArray, QFile, QFileInfo, QIODevice +) +from PyQt6.QtWidgets import QDialog, QTreeWidgetItem +with contextlib.suppress(ImportError): + from PyQt6.QtNetwork import ( + QSslCertificate, QSslSocket, QSslConfiguration, QSsl + ) + +from E5Gui import E5MessageBox, E5FileDialog + +from .Ui_EricSslCertificatesDialog import Ui_EricSslCertificatesDialog + +import Preferences +import Utilities +import UI.PixmapCache +import Globals + + +class EricSslCertificatesDialog(QDialog, Ui_EricSslCertificatesDialog): + """ + Class implementing a dialog to show and edit all certificates. + """ + CertRole = Qt.ItemDataRole.UserRole + 1 + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.serversViewButton.setIcon( + UI.PixmapCache.getIcon("certificates")) + self.serversDeleteButton.setIcon( + UI.PixmapCache.getIcon("certificateDelete")) + self.serversExportButton.setIcon( + UI.PixmapCache.getIcon("certificateExport")) + self.serversImportButton.setIcon( + UI.PixmapCache.getIcon("certificateImport")) + + self.caViewButton.setIcon( + UI.PixmapCache.getIcon("certificates")) + self.caDeleteButton.setIcon( + UI.PixmapCache.getIcon("certificateDelete")) + self.caExportButton.setIcon( + UI.PixmapCache.getIcon("certificateExport")) + self.caImportButton.setIcon( + UI.PixmapCache.getIcon("certificateImport")) + + self.__populateServerCertificatesTree() + self.__populateCaCertificatesTree() + + def __populateServerCertificatesTree(self): + """ + Private slot to populate the server certificates tree. + """ + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + for server in certificateDict: + for cert in QSslCertificate.fromData(certificateDict[server]): + self.__createServerCertificateEntry(server, cert) + + self.serversCertificatesTree.expandAll() + for i in range(self.serversCertificatesTree.columnCount()): + self.serversCertificatesTree.resizeColumnToContents(i) + + def __createServerCertificateEntry(self, server, cert): + """ + Private method to create a server certificate entry. + + @param server server name of the certificate (string) + @param cert certificate to insert (QSslCertificate) + """ + # step 1: extract the info to be shown + organisation = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.Organization))) + commonName = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName))) + if organisation is None or organisation == "": + organisation = self.tr("(Unknown)") + if commonName is None or commonName == "": + commonName = self.tr("(Unknown common name)") + expiryDate = cert.expiryDate().toString("yyyy-MM-dd") + + # step 2: create the entry + items = self.serversCertificatesTree.findItems( + organisation, + Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) + if len(items) == 0: + parent = QTreeWidgetItem( + self.serversCertificatesTree, [organisation]) + parent.setFirstColumnSpanned(True) + else: + parent = items[0] + + itm = QTreeWidgetItem(parent, [commonName, server, expiryDate]) + itm.setData(0, self.CertRole, cert.toPem()) + + @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) + def on_serversCertificatesTree_currentItemChanged(self, current, previous): + """ + Private slot handling a change of the current item in the + server certificates list. + + @param current new current item (QTreeWidgetItem) + @param previous previous current item (QTreeWidgetItem) + """ + enable = current is not None and current.parent() is not None + self.serversViewButton.setEnabled(enable) + self.serversDeleteButton.setEnabled(enable) + self.serversExportButton.setEnabled(enable) + + @pyqtSlot() + def on_serversViewButton_clicked(self): + """ + Private slot to show data of the selected server certificate. + """ + with contextlib.suppress(ImportError): + from EricNetwork.EricSslCertificatesInfoDialog import ( + EricSslCertificatesInfoDialog + ) + cert = QSslCertificate.fromData( + self.serversCertificatesTree.currentItem().data( + 0, self.CertRole)) + dlg = EricSslCertificatesInfoDialog(cert, self) + dlg.exec() + + @pyqtSlot() + def on_serversDeleteButton_clicked(self): + """ + Private slot to delete the selected server certificate. + """ + itm = self.serversCertificatesTree.currentItem() + res = E5MessageBox.yesNo( + self, + self.tr("Delete Server Certificate"), + self.tr("""<p>Shall the server certificate really be""" + """ deleted?</p><p>{0}</p>""" + """<p>If the server certificate is deleted, the""" + """ normal security checks will be reinstantiated""" + """ and the server has to present a valid""" + """ certificate.</p>""") + .format(itm.text(0))) + if res: + server = itm.text(1) + cert = self.serversCertificatesTree.currentItem().data( + 0, self.CertRole) + + # delete the selected entry and its parent entry, + # if it was the only one + parent = itm.parent() + parent.takeChild(parent.indexOfChild(itm)) + if parent.childCount() == 0: + self.serversCertificatesTree.takeTopLevelItem( + self.serversCertificatesTree.indexOfTopLevelItem(parent)) + + # delete the certificate from the user certificate store + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + if server in certificateDict: + certs = [c.toPem() for c in + QSslCertificate.fromData(certificateDict[server])] + if cert in certs: + certs.remove(cert) + if certs: + pems = QByteArray() + for cert in certs: + pems.append(cert + b'\n') + certificateDict[server] = pems + else: + del certificateDict[server] + Preferences.Prefs.settings.setValue( + "Ssl/CaCertificatesDict", + certificateDict) + + # delete the certificate from the default certificates + self.__updateDefaultConfiguration() + + @pyqtSlot() + def on_serversImportButton_clicked(self): + """ + Private slot to import server certificates. + """ + certs = self.__importCertificate() + if certs: + server = "*" + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + if server in certificateDict: + sCerts = QSslCertificate.fromData(certificateDict[server]) + else: + sCerts = [] + + pems = QByteArray() + for cert in certs: + if cert in sCerts: + commonStr = ", ".join( + cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName)) + E5MessageBox.warning( + self, + self.tr("Import Certificate"), + self.tr( + """<p>The certificate <b>{0}</b> already exists.""" + """ Skipping.</p>""") + .format(Utilities.decodeString(commonStr))) + else: + pems.append(cert.toPem() + '\n') + if server not in certificateDict: + certificateDict[server] = QByteArray() + certificateDict[server].append(pems) + Preferences.Prefs.settings.setValue( + "Ssl/CaCertificatesDict", + certificateDict) + + self.serversCertificatesTree.clear() + self.__populateServerCertificatesTree() + + self.__updateDefaultConfiguration() + + @pyqtSlot() + def on_serversExportButton_clicked(self): + """ + Private slot to export the selected server certificate. + """ + cert = self.serversCertificatesTree.currentItem().data( + 0, self.CertRole) + fname = ( + self.serversCertificatesTree.currentItem().text(0).replace(" ", "") + .replace("\t", "") + ) + self.__exportCertificate(fname, cert) + + def __updateDefaultConfiguration(self): + """ + Private method to update the default SSL configuration. + """ + caList = self.__getSystemCaCertificates() + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + for server in certificateDict: + for cert in QSslCertificate.fromData(certificateDict[server]): + if cert not in caList: + caList.append(cert) + sslCfg = QSslConfiguration.defaultConfiguration() + sslCfg.setCaCertificates(caList) + QSslConfiguration.setDefaultConfiguration(sslCfg) + + def __getSystemCaCertificates(self): + """ + Private method to get the list of system certificates. + + @return list of system certificates (list of QSslCertificate) + """ + caList = QSslCertificate.fromData(Globals.toByteArray( + Preferences.Prefs.settings.value("Help/SystemCertificates"))) + if not caList: + caList = QSslSocket.systemCaCertificates() + return caList + + def __populateCaCertificatesTree(self): + """ + Private slot to populate the CA certificates tree. + """ + for cert in self.__getSystemCaCertificates(): + self.__createCaCertificateEntry(cert) + + self.caCertificatesTree.expandAll() + for i in range(self.caCertificatesTree.columnCount()): + self.caCertificatesTree.resizeColumnToContents(i) + self.caCertificatesTree.sortItems(0, Qt.SortOrder.AscendingOrder) + + def __createCaCertificateEntry(self, cert): + """ + Private method to create a CA certificate entry. + + @param cert certificate to insert (QSslCertificate) + """ + # step 1: extract the info to be shown + organisation = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.Organization))) + commonName = Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName))) + if organisation is None or organisation == "": + organisation = self.tr("(Unknown)") + if commonName is None or commonName == "": + commonName = self.tr("(Unknown common name)") + expiryDate = cert.expiryDate().toString("yyyy-MM-dd") + + # step 2: create the entry + items = self.caCertificatesTree.findItems( + organisation, + Qt.MatchFlag.MatchFixedString | Qt.MatchFlag.MatchCaseSensitive) + if len(items) == 0: + parent = QTreeWidgetItem(self.caCertificatesTree, [organisation]) + parent.setFirstColumnSpanned(True) + else: + parent = items[0] + + itm = QTreeWidgetItem(parent, [commonName, expiryDate]) + itm.setData(0, self.CertRole, cert.toPem()) + + @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) + def on_caCertificatesTree_currentItemChanged(self, current, previous): + """ + Private slot handling a change of the current item + in the CA certificates list. + + @param current new current item (QTreeWidgetItem) + @param previous previous current item (QTreeWidgetItem) + """ + enable = current is not None and current.parent() is not None + self.caViewButton.setEnabled(enable) + self.caDeleteButton.setEnabled(enable) + self.caExportButton.setEnabled(enable) + + @pyqtSlot() + def on_caViewButton_clicked(self): + """ + Private slot to show data of the selected CA certificate. + """ + with contextlib.suppress(ImportError): + from EricNetwork.EricSslCertificatesInfoDialog import ( + EricSslCertificatesInfoDialog + ) + cert = QSslCertificate.fromData( + self.caCertificatesTree.currentItem().data(0, self.CertRole)) + dlg = EricSslCertificatesInfoDialog(cert, self) + dlg.exec() + + @pyqtSlot() + def on_caDeleteButton_clicked(self): + """ + Private slot to delete the selected CA certificate. + """ + itm = self.caCertificatesTree.currentItem() + res = E5MessageBox.yesNo( + self, + self.tr("Delete CA Certificate"), + self.tr( + """<p>Shall the CA certificate really be deleted?</p>""" + """<p>{0}</p>""" + """<p>If the CA certificate is deleted, the browser""" + """ will not trust any certificate issued by this CA.</p>""") + .format(itm.text(0))) + if res: + cert = self.caCertificatesTree.currentItem().data(0, self.CertRole) + + # delete the selected entry and its parent entry, + # if it was the only one + parent = itm.parent() + parent.takeChild(parent.indexOfChild(itm)) + if parent.childCount() == 0: + self.caCertificatesTree.takeTopLevelItem( + self.caCertificatesTree.indexOfTopLevelItem(parent)) + + # delete the certificate from the CA certificate store + caCerts = self.__getSystemCaCertificates() + if cert in caCerts: + caCerts.remove(cert) + pems = QByteArray() + for cert in caCerts: + pems.append(cert.toPem() + '\n') + Preferences.Prefs.settings.setValue( + "Help/SystemCertificates", pems) + + # delete the certificate from the default certificates + self.__updateDefaultConfiguration() + + @pyqtSlot() + def on_caImportButton_clicked(self): + """ + Private slot to import server certificates. + """ + certs = self.__importCertificate() + if certs: + caCerts = self.__getSystemCaCertificates() + for cert in certs: + if cert in caCerts: + commonStr = ", ".join( + cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName)) + E5MessageBox.warning( + self, + self.tr("Import Certificate"), + self.tr( + """<p>The certificate <b>{0}</b> already exists.""" + """ Skipping.</p>""") + .format(Utilities.decodeString(commonStr))) + else: + caCerts.append(cert) + + pems = QByteArray() + for cert in caCerts: + pems.append(cert.toPem() + '\n') + Preferences.Prefs.settings.setValue( + "Help/SystemCertificates", pems) + + self.caCertificatesTree.clear() + self.__populateCaCertificatesTree() + + self.__updateDefaultConfiguration() + + @pyqtSlot() + def on_caExportButton_clicked(self): + """ + Private slot to export the selected CA certificate. + """ + cert = self.caCertificatesTree.currentItem().data(0, self.CertRole) + fname = ( + self.caCertificatesTree.currentItem().text(0).replace(" ", "") + .replace("\t", "") + ) + self.__exportCertificate(fname, cert) + + def __exportCertificate(self, name, cert): + """ + Private slot to export a certificate. + + @param name default file name without extension (string) + @param cert certificate to be exported (QSslCertificate) + """ + if cert is not None: + fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + self, + self.tr("Export Certificate"), + name, + self.tr("Certificate File (PEM) (*.pem);;" + "Certificate File (DER) (*.der)"), + None, + E5FileDialog.DontConfirmOverwrite) + + if fname: + ext = QFileInfo(fname).suffix() + if not ext or ext not in ["pem", "der"]: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + if QFileInfo(fname).exists(): + res = E5MessageBox.yesNo( + self, + self.tr("Export Certificate"), + self.tr("<p>The file <b>{0}</b> already exists." + " Overwrite it?</p>").format(fname), + icon=E5MessageBox.Warning) + if not res: + return + + f = QFile(fname) + if not f.open(QIODevice.OpenModeFlag.WriteOnly): + E5MessageBox.critical( + self, + self.tr("Export Certificate"), + self.tr( + """<p>The certificate could not be written""" + """ to file <b>{0}</b></p><p>Error: {1}</p>""") + .format(fname, f.errorString())) + return + + if fname.endswith(".pem"): + crt = cert.toPem() + else: + crt = cert.toDer() + f.write(crt) + f.close() + + def __importCertificate(self): + """ + Private method to read a certificate. + + @return certificates read (list of QSslCertificate) + """ + fname = E5FileDialog.getOpenFileName( + self, + self.tr("Import Certificate"), + "", + self.tr("Certificate Files (*.pem *.crt *.der *.cer *.ca);;" + "All Files (*)")) + + if fname: + f = QFile(fname) + if not f.open(QIODevice.OpenModeFlag.ReadOnly): + E5MessageBox.critical( + self, + self.tr("Export Certificate"), + self.tr( + """<p>The certificate could not be read from file""" + """ <b>{0}</b></p><p>Error: {1}</p>""") + .format(fname, f.errorString())) + return [] + + crt = f.readAll() + f.close() + cert = QSslCertificate.fromData(crt, QSsl.EncodingFormat.Pem) + if not cert: + cert = QSslCertificate.fromData(crt, QSsl.EncodingFormat.Der) + + return cert + + return []
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesDialog.ui Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,281 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EricSslCertificatesDialog</class> + <widget class="QDialog" name="EricSslCertificatesDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>760</width> + <height>440</height> + </rect> + </property> + <property name="windowTitle"> + <string>SSL Certificate Manager</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="certificatesWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="serversTab"> + <attribute name="title"> + <string>&Servers</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>You have saved certificates identifying these servers:</string> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="serversCertificatesTree"> + <column> + <property name="text"> + <string>Certificate name</string> + </property> + </column> + <column> + <property name="text"> + <string>Server</string> + </property> + </column> + <column> + <property name="text"> + <string>Expiry Date</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="serversViewButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to view the selected certificate</string> + </property> + <property name="text"> + <string>&View...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="serversImportButton"> + <property name="toolTip"> + <string>Press to import a certificate</string> + </property> + <property name="text"> + <string>&Import...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="serversExportButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to export the selected certificate</string> + </property> + <property name="text"> + <string>&Export...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="serversDeleteButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to delete the selected certificate</string> + </property> + <property name="text"> + <string>&Delete...</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="caTab"> + <attribute name="title"> + <string>Certificate &Authorities</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>You have saved certificates identifying these certification authorities:</string> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="caCertificatesTree"> + <column> + <property name="text"> + <string>Certificate name</string> + </property> + </column> + <column> + <property name="text"> + <string>Expiry Date</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QPushButton" name="caViewButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to view the selected certificate</string> + </property> + <property name="text"> + <string>&View...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="caImportButton"> + <property name="toolTip"> + <string>Press to import a certificate</string> + </property> + <property name="text"> + <string>&Import...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="caExportButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to export the selected certificate</string> + </property> + <property name="text"> + <string>&Export...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="caDeleteButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Press to delete the selected certificate</string> + </property> + <property name="text"> + <string>&Delete...</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>certificatesWidget</tabstop> + <tabstop>serversCertificatesTree</tabstop> + <tabstop>serversViewButton</tabstop> + <tabstop>serversImportButton</tabstop> + <tabstop>serversExportButton</tabstop> + <tabstop>serversDeleteButton</tabstop> + <tabstop>caCertificatesTree</tabstop> + <tabstop>caViewButton</tabstop> + <tabstop>caImportButton</tabstop> + <tabstop>caExportButton</tabstop> + <tabstop>caDeleteButton</tabstop> + <tabstop>buttonBox</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>EricSslCertificatesDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>EricSslCertificatesDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesInfoDialog.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to show SSL certificate infos. +""" + +from PyQt6.QtWidgets import QDialog + +from .Ui_EricSslCertificatesInfoDialog import Ui_EricSslCertificatesInfoDialog + + +class EricSslCertificatesInfoDialog(QDialog, Ui_EricSslCertificatesInfoDialog): + """ + Class implementing a dialog to show SSL certificate infos. + """ + def __init__(self, certificateChain, parent=None): + """ + Constructor + + @param certificateChain SSL certificate chain (list of QSslCertificate) + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.sslWidget.showCertificateChain(certificateChain)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesInfoDialog.ui Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EricSslCertificatesInfoDialog</class> + <widget class="QDialog" name="EricSslCertificatesInfoDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>556</width> + <height>486</height> + </rect> + </property> + <property name="windowTitle"> + <string>SSL Certificate Info</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="EricSslCertificatesInfoWidget" name="sslWidget" native="true"/> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>EricSslCertificatesInfoWidget</class> + <extends>QWidget</extends> + <header>EricNetwork/EricSslCertificatesInfoWidget.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>EricSslCertificatesInfoDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>EricSslCertificatesInfoDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesInfoWidget.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a widget to show SSL certificate infos. +""" + +from PyQt6.QtCore import pyqtSlot, QCryptographicHash, QDateTime +from PyQt6.QtWidgets import QWidget +try: + from PyQt6.QtNetwork import QSslCertificate +except ImportError: + QSslCertificate = None + +from .Ui_EricSslCertificatesInfoWidget import Ui_EricSslCertificatesInfoWidget + +import Utilities + + +class EricSslCertificatesInfoWidget(QWidget, Ui_EricSslCertificatesInfoWidget): + """ + Class implementing a widget to show SSL certificate infos. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.__chain = [] + + def showCertificateChain(self, certificateChain): + """ + Public method to show the SSL certificates of a certificate chain. + + @param certificateChain list od SSL certificates + (list of QSslCertificate) + """ + if QSslCertificate: + self.chainLabel.show() + self.chainComboBox.show() + self.chainComboBox.clear() + + self.__chain = certificateChain[:] + + for cert in self.__chain: + name = ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName)) + if not name: + name = ", ".join( + cert.subjectInfo( + QSslCertificate.SubjectInfo.Organization)) + if not name: + name = cert.serialNumber() + self.chainComboBox.addItem(name) + + self.on_chainComboBox_activated(0) + + def showCertificate(self, certificate): + """ + Public method to show the SSL certificate information. + + @param certificate reference to the SSL certificate (QSslCertificate) + """ + self.chainLabel.hide() + self.chainComboBox.hide() + self.chainComboBox.clear() + + self.__chain = [] + + if QSslCertificate: + self.__showCertificate(certificate) + + def __showCertificate(self, certificate): + """ + Private method to show the SSL certificate information. + + @param certificate reference to the SSL certificate (QSslCertificate) + """ + if QSslCertificate: + self.blacklistedLabel.setVisible(False) + self.blacklistedLabel.setStyleSheet( + "QLabel { color : white; background-color : red; }") + self.expiredLabel.setVisible(False) + self.expiredLabel.setStyleSheet( + "QLabel { color : white; background-color : red; }") + + self.subjectCommonNameLabel.setText(self.__certificateString( + ", ".join(certificate.subjectInfo( + QSslCertificate.SubjectInfo.CommonName)))) + self.subjectOrganizationLabel.setText(self.__certificateString( + ", ".join(certificate.subjectInfo( + QSslCertificate.SubjectInfo.Organization)))) + self.subjectOrganizationalUnitLabel.setText( + self.__certificateString(", ".join( + certificate.subjectInfo( + QSslCertificate.SubjectInfo.OrganizationalUnitName)))) + self.issuerCommonNameLabel.setText(self.__certificateString( + ", ".join(certificate.issuerInfo( + QSslCertificate.SubjectInfo.CommonName)))) + self.issuerOrganizationLabel.setText(self.__certificateString( + ", ".join(certificate.issuerInfo( + QSslCertificate.SubjectInfo.Organization)))) + self.issuerOrganizationalUnitLabel.setText( + self.__certificateString(", ".join( + certificate.issuerInfo( + QSslCertificate.SubjectInfo.OrganizationalUnitName)))) + self.serialNumberLabel.setText(self.__serialNumber(certificate)) + self.effectiveLabel.setText( + certificate.effectiveDate().toString("yyyy-MM-dd")) + self.expiresLabel.setText( + certificate.expiryDate().toString("yyyy-MM-dd")) + self.sha1Label.setText(self.__formatHexString( + str(certificate.digest( + QCryptographicHash.Algorithm.Sha1).toHex(), + encoding="ascii"))) + self.md5Label.setText(self.__formatHexString( + str(certificate.digest( + QCryptographicHash.Algorithm.Md5).toHex(), + encoding="ascii"))) + + if certificate.isBlacklisted(): + # something is wrong; indicate it to the user + if self.__hasExpired(certificate.effectiveDate(), + certificate.expiryDate()): + self.expiredLabel.setVisible(True) + else: + self.blacklistedLabel.setVisible(True) + + def __certificateString(self, txt): + """ + Private method to prepare some text for display. + + @param txt text to be displayed (string) + @return prepared text (string) + """ + if txt is None or txt == "": + return self.tr("<not part of the certificate>") + + return Utilities.decodeString(txt) + + def __serialNumber(self, cert): + """ + Private slot to format the certificate serial number. + + @param cert reference to the SSL certificate (QSslCertificate) + @return formated serial number (string) + """ + serial = cert.serialNumber() + if serial == "": + return self.tr("<not part of the certificate>") + + if b':' in serial: + return str(serial, encoding="ascii").upper() + else: + hexString = hex(int(serial))[2:] + return self.__formatHexString(hexString) + + def __formatHexString(self, hexString): + """ + Private method to format a hex string for display. + + @param hexString hex string to be formatted (string) + @return formatted string (string) + """ + hexString = hexString.upper() + + if len(hexString) % 2 == 1: + hexString = '0' + hexString + + hexList = [] + while hexString: + hexList.append(hexString[:2]) + hexString = hexString[2:] + + return ':'.join(hexList) + + def __hasExpired(self, effectiveDate, expiryDate): + """ + Private method to check for a certificate expiration. + + @param effectiveDate date the certificate becomes effective (QDateTime) + @param expiryDate date the certificate expires (QDateTime) + @return flag indicating the expiration status (boolean) + """ + now = QDateTime.currentDateTime() + + return now < effectiveDate or now >= expiryDate + + @pyqtSlot(int) + def on_chainComboBox_activated(self, index): + """ + Private slot to show the certificate info for the selected entry. + + @param index number of the certificate in the certificate chain + (integer) + """ + self.__showCertificate(self.__chain[index])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslCertificatesInfoWidget.ui Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,359 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EricSslCertificatesInfoWidget</class> + <widget class="QWidget" name="EricSslCertificatesInfoWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>500</width> + <height>455</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label_17"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string><h2>Certificate Information</h2></string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="chainLabel"> + <property name="text"> + <string>Certificate Chain:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="chainComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QLabel" name="blacklistedLabel"> + <property name="text"> + <string>This certificated has been blacklisted.</string> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" colspan="2"> + <widget class="QLabel" name="label"> + <property name="text"> + <string><b>Issued for:</b></string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Common Name (CN):</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="subjectCommonNameLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Organization (O):</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="subjectOrganizationLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Organizational Unit (OU):</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="subjectOrganizationalUnitLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Serialnumber:</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QLabel" name="serialNumberLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="5" column="0"> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>10</height> + </size> + </property> + </spacer> + </item> + <item row="6" column="0" colspan="2"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string><b>Issued by:</b></string> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="label_9"> + <property name="text"> + <string>Common Name (CN):</string> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QLabel" name="issuerCommonNameLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Organization (O):</string> + </property> + </widget> + </item> + <item row="8" column="1"> + <widget class="QLabel" name="issuerOrganizationLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="9" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Organizational Unit (OU):</string> + </property> + </widget> + </item> + <item row="9" column="1"> + <widget class="QLabel" name="issuerOrganizationalUnitLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="10" column="0"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>9</height> + </size> + </property> + </spacer> + </item> + <item row="11" column="0" colspan="2"> + <widget class="QLabel" name="label_10"> + <property name="text"> + <string><b>Validity:</b></string> + </property> + </widget> + </item> + <item row="12" column="0"> + <widget class="QLabel" name="label_11"> + <property name="text"> + <string>Issued on:</string> + </property> + </widget> + </item> + <item row="12" column="1"> + <widget class="QLabel" name="effectiveLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="13" column="0"> + <widget class="QLabel" name="label_12"> + <property name="text"> + <string>Expires on:</string> + </property> + </widget> + </item> + <item row="13" column="1"> + <widget class="QLabel" name="expiresLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="14" column="0" colspan="2"> + <widget class="QLabel" name="expiredLabel"> + <property name="text"> + <string>This certificate is not valid yet or has expired.</string> + </property> + </widget> + </item> + <item row="15" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>10</height> + </size> + </property> + </spacer> + </item> + <item row="16" column="0" colspan="2"> + <widget class="QLabel" name="label_13"> + <property name="text"> + <string><b>Fingerprints:</b></string> + </property> + </widget> + </item> + <item row="17" column="0"> + <widget class="QLabel" name="label_14"> + <property name="text"> + <string>SHA1-Fingerprint:</string> + </property> + </widget> + </item> + <item row="17" column="1"> + <widget class="QLabel" name="sha1Label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="18" column="0"> + <widget class="QLabel" name="label_15"> + <property name="text"> + <string>MD5-Fingerprint:</string> + </property> + </widget> + </item> + <item row="18" column="1"> + <widget class="QLabel" name="md5Label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslErrorHandler.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,273 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a SSL error handler. +""" + +import contextlib +import enum +import platform + +from PyQt6.QtCore import QObject, QByteArray +from PyQt6.QtNetwork import QSslCertificate, QSslConfiguration, QSslError, QSsl + +from E5Gui import E5MessageBox + +import Preferences +import Utilities +import Globals + + +class EricSslErrorState(enum.Enum): + """ + Class defining the SSL error handling states. + """ + NOT_IGNORED = 0 + SYSTEM_IGNORED = 1 + USER_IGNORED = 2 + + +class EricSslErrorHandler(QObject): + """ + Class implementing a handler for SSL errors. + + It also initializes the default SSL configuration with certificates + permanently accepted by the user already. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent object (QObject) + """ + super().__init__(parent) + + caList = self.__getSystemCaCertificates() + if Preferences.Prefs.settings.contains("Help/CaCertificatesDict"): + # port old entries stored under 'Help' + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Help/CaCertificatesDict")) + Preferences.Prefs.settings.setValue( + "Ssl/CaCertificatesDict", certificateDict) + Preferences.Prefs.settings.remove("Help/CaCertificatesDict") + else: + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + for server in certificateDict: + for cert in QSslCertificate.fromData(certificateDict[server]): + if cert not in caList: + caList.append(cert) + sslCfg = QSslConfiguration.defaultConfiguration() + sslCfg.setCaCertificates(caList) + try: + sslProtocol = QSsl.SslProtocol.TlsV1_1OrLater + if Globals.isWindowsPlatform() and platform.win32_ver()[0] == '7': + sslProtocol = QSsl.SslProtocol.SecureProtocols + except AttributeError: + sslProtocol = QSsl.SslProtocol.SecureProtocols + sslCfg.setProtocol(sslProtocol) + with contextlib.suppress(AttributeError): + sslCfg.setSslOption(QSsl.SslOption.SslOptionDisableCompression, + True) + QSslConfiguration.setDefaultConfiguration(sslCfg) + + def sslErrorsReplySlot(self, reply, errors): + """ + Public slot to handle SSL errors for a network reply. + + @param reply reference to the reply object (QNetworkReply) + @param errors list of SSL errors (list of QSslError) + """ + self.sslErrorsReply(reply, errors) + + def sslErrorsReply(self, reply, errors): + """ + Public slot to handle SSL errors for a network reply. + + @param reply reference to the reply object (QNetworkReply) + @param errors list of SSL errors (list of QSslError) + @return tuple indicating to ignore the SSL errors (one of NotIgnored, + SystemIgnored or UserIgnored) and indicating a change of the + default SSL configuration (boolean) + """ + url = reply.url() + ignore, defaultChanged = self.sslErrors(errors, url.host(), url.port()) + if ignore: + if defaultChanged: + reply.setSslConfiguration( + QSslConfiguration.defaultConfiguration()) + reply.ignoreSslErrors() + else: + reply.abort() + + return ignore, defaultChanged + + def sslErrors(self, errors, server, port=-1): + """ + Public method to handle SSL errors. + + @param errors list of SSL errors + @type list of QSslError + @param server name of the server + @type str + @param port value of the port + @type int + @return tuple indicating to ignore the SSL errors and indicating a + change of the default SSL configuration + @rtype tuple of (EricSslErrorState, bool) + """ + caMerge = {} + certificateDict = Globals.toDict( + Preferences.Prefs.settings.value("Ssl/CaCertificatesDict")) + for caServer in certificateDict: + caMerge[caServer] = QSslCertificate.fromData( + certificateDict[caServer]) + caNew = [] + + errorStrings = [] + if port != -1: + server += ":{0:d}".format(port) + if errors: + for err in errors: + if err.error() == QSslError.SslError.NoError: + continue + if server in caMerge and err.certificate() in caMerge[server]: + continue + errorStrings.append(err.errorString()) + if not err.certificate().isNull(): + cert = err.certificate() + if cert not in caNew: + caNew.append(cert) + if not errorStrings: + return EricSslErrorState.SYSTEM_IGNORED, False + + errorString = '.</li><li>'.join(errorStrings) + ret = E5MessageBox.yesNo( + None, + self.tr("SSL Errors"), + self.tr("""<p>SSL Errors for <br /><b>{0}</b>""" + """<ul><li>{1}</li></ul></p>""" + """<p>Do you want to ignore these errors?</p>""") + .format(server, errorString), + icon=E5MessageBox.Warning) + + if ret: + caRet = False + if len(caNew) > 0: + certinfos = [] + for cert in caNew: + certinfos.append(self.__certToString(cert)) + caRet = E5MessageBox.yesNo( + None, + self.tr("Certificates"), + self.tr( + """<p>Certificates:<br/>{0}<br/>""" + """Do you want to accept all these certificates?""" + """</p>""") + .format("".join(certinfos))) + if caRet: + if server not in caMerge: + caMerge[server] = [] + for cert in caNew: + caMerge[server].append(cert) + + sslCfg = QSslConfiguration.defaultConfiguration() + caList = sslCfg.caCertificates() + for cert in caNew: + caList.append(cert) + sslCfg.setCaCertificates(caList) + try: + sslCfg.setProtocol(QSsl.SslProtocol.TlsV1_1OrLater) + except AttributeError: + sslCfg.setProtocol(QSsl.SslProtocol.SecureProtocols) + with contextlib.suppress(AttributeError): + sslCfg.setSslOption( + QSsl.SslOption.SslOptionDisableCompression, + True) + QSslConfiguration.setDefaultConfiguration(sslCfg) + + certificateDict = {} + for server in caMerge: + pems = QByteArray() + for cert in caMerge[server]: + pems.append(cert.toPem() + b'\n') + certificateDict[server] = pems + Preferences.Prefs.settings.setValue( + "Ssl/CaCertificatesDict", + certificateDict) + + return EricSslErrorState.USER_IGNORED, caRet + + else: + return EricSslErrorState.NOT_IGNORED, False + + def __certToString(self, cert): + """ + Private method to convert a certificate to a formatted string. + + @param cert certificate to convert (QSslCertificate) + @return formatted string (string) + """ + result = "<p>" + + result += self.tr( + "Name: {0}" + ).format( + Utilities.html_encode( + Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.CommonName)) + ) + ) + ) + + result += self.tr( + "<br/>Organization: {0}" + ).format( + Utilities.html_encode( + Utilities.decodeString( + ", ".join(cert.subjectInfo( + QSslCertificate.SubjectInfo.Organization)) + ) + ) + ) + + result += self.tr( + "<br/>Issuer: {0}" + ).format( + Utilities.html_encode( + Utilities.decodeString( + ", ".join(cert.issuerInfo( + QSslCertificate.SubjectInfo.CommonName)) + ) + ) + ) + result += self.tr( + "<br/>Not valid before: {0}<br/>Valid Until: {1}" + ).format( + Utilities.html_encode( + cert.effectiveDate().toString("yyyy-MM-dd") + ), + Utilities.html_encode( + cert.expiryDate().toString("yyyy-MM-dd") + ) + ) + + result += "</p>" + + return result + + def __getSystemCaCertificates(self): + """ + Private method to get the list of system certificates. + + @return list of system certificates (list of QSslCertificate) + """ + caList = QSslCertificate.fromData(Globals.toByteArray( + Preferences.Prefs.settings.value("Ssl/SystemCertificates"))) + if not caList: + caList = QSslConfiguration.systemCaCertificates() + return caList
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslInfoWidget.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a widget to show SSL information. +""" + +from PyQt6.QtCore import Qt, QUrl, QPoint +from PyQt6.QtWidgets import QMenu, QGridLayout, QLabel, QSizePolicy +from PyQt6.QtNetwork import QSsl, QSslConfiguration, QSslCertificate + +import UI.PixmapCache +import Utilities + + +class EricSslInfoWidget(QMenu): + """ + Class implementing a widget to show SSL certificate infos. + """ + def __init__(self, url, configuration, parent=None): + """ + Constructor + + @param url URL to show SSL info for (QUrl) + @param configuration SSL configuration (QSslConfiguration) + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + + self.__url = QUrl(url) + self.__configuration = QSslConfiguration(configuration) + + self.setMinimumWidth(400) + + certList = self.__configuration.peerCertificateChain() + cert = certList[0] if certList else QSslCertificate() + + layout = QGridLayout(self) + rows = 0 + + ########################################## + ## Identity Information + ########################################## + imageLabel = QLabel(self) + layout.addWidget(imageLabel, rows, 0, Qt.AlignmentFlag.AlignCenter) + + label = QLabel(self) + label.setWordWrap(True) + label.setSizePolicy(QSizePolicy.Policy.Expanding, + QSizePolicy.Policy.Preferred) + label.setText(self.tr("Identity")) + font = label.font() + font.setBold(True) + label.setFont(font) + layout.addWidget(label, rows, 1) + rows += 1 + + label = QLabel(self) + label.setWordWrap(True) + if cert.isNull(): + label.setText(self.tr( + "Warning: this site is NOT carrying a certificate.")) + imageLabel.setPixmap(UI.PixmapCache.getPixmap("securityLow32")) + else: + valid = not cert.isBlacklisted() + if valid: + txt = ", ".join( + cert.issuerInfo(QSslCertificate.SubjectInfo.CommonName)) + label.setText(self.tr( + "The certificate for this site is valid" + " and has been verified by:\n{0}").format( + Utilities.decodeString(txt))) + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityHigh32")) + else: + label.setText(self.tr( + "The certificate for this site is NOT valid.")) + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityLow32")) + layout.addWidget(label, rows, 1) + rows += 1 + + label = QLabel(self) + label.setWordWrap(True) + label.setText( + '<a href="moresslinfos">' + + self.tr("Certificate Information") + "</a>") + label.linkActivated.connect(self.__showCertificateInfos) + layout.addWidget(label, rows, 1) + rows += 1 + + ########################################## + ## Identity Information + ########################################## + imageLabel = QLabel(self) + layout.addWidget(imageLabel, rows, 0, Qt.AlignmentFlag.AlignCenter) + + label = QLabel(self) + label.setWordWrap(True) + label.setText(self.tr("Encryption")) + font = label.font() + font.setBold(True) + label.setFont(font) + layout.addWidget(label, rows, 1) + rows += 1 + + cipher = self.__configuration.sessionCipher() + if cipher.isNull(): + label = QLabel(self) + label.setWordWrap(True) + label.setText(self.tr( + 'Your connection to "{0}" is NOT encrypted.\n').format( + self.__url.host())) + layout.addWidget(label, rows, 1) + imageLabel.setPixmap(UI.PixmapCache.getPixmap("securityLow32")) + rows += 1 + else: + label = QLabel(self) + label.setWordWrap(True) + label.setText(self.tr( + 'Your connection to "{0}" is encrypted.').format( + self.__url.host())) + layout.addWidget(label, rows, 1) + + proto = cipher.protocol() + if proto == QSsl.SslProtocol.SslV3: + sslVersion = "SSL 3.0" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityLow32")) + elif proto == QSsl.SslProtocol.TlsV1SslV3: + sslVersion = "TLS 1.0/SSL 3.0" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityLow32")) + elif proto == QSsl.SslProtocol.SslV2: + sslVersion = "SSL 2.0" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityLow32")) + else: + sslVersion = self.tr("unknown") + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityLow32")) + if proto == QSsl.SslProtocol.TlsV1_0: + sslVersion = "TLS 1.0" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityHigh32")) + elif proto == QSsl.SslProtocol.TlsV1_1: + sslVersion = "TLS 1.1" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityHigh32")) + elif proto == QSsl.SslProtocol.TlsV1_2: + sslVersion = "TLS 1.2" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityHigh32")) + elif proto == QSsl.SslProtocol.TlsV1_3: + sslVersion = "TLS 1.3" + imageLabel.setPixmap( + UI.PixmapCache.getPixmap("securityHigh32")) + rows += 1 + + label = QLabel(self) + label.setWordWrap(True) + label.setText(self.tr( + "It uses protocol: {0}").format(sslVersion)) + layout.addWidget(label, rows, 1) + rows += 1 + + label = QLabel(self) + label.setWordWrap(True) + label.setText(self.tr( + "It is encrypted using {0} at {1} bits, " + "with {2} for message authentication and " + "{3} as key exchange mechanism.\n\n").format( + cipher.encryptionMethod(), + cipher.usedBits(), + cipher.authenticationMethod(), + cipher.keyExchangeMethod())) + layout.addWidget(label, rows, 1) + rows += 1 + + def showAt(self, pos): + """ + Public method to show the widget. + + @param pos position to show at (QPoint) + """ + self.adjustSize() + xpos = pos.x() - self.width() + if xpos < 0: + xpos = 10 + p = QPoint(xpos, pos.y() + 10) + self.move(p) + self.show() + + def __showCertificateInfos(self): + """ + Private slot to show certificate information. + """ + from .EricSslCertificatesInfoDialog import EricSslCertificatesInfoDialog + dlg = EricSslCertificatesInfoDialog( + self.__configuration.peerCertificateChain()) + dlg.exec() + + def accept(self): + """ + Public method to accept the widget. + """ + self.close()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricSslUtilities.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing SSL utility functions. +""" + + +def initSSL(): + """ + Function to initialize some global SSL stuff. + """ + blacklist = [ + "SRP-AES-256-CBC-SHA", # open to MitM + "SRP-AES-128-CBC-SHA", # open to MitM + ] + + try: + from PyQt6.QtNetwork import QSslConfiguration + except ImportError: + # no SSL available, so there is nothing to initialize + return + + strongCiphers = [c for c in QSslConfiguration.supportedCiphers() + if c.name() not in blacklist and c.usedBits() >= 128] + defaultSslConfiguration = QSslConfiguration.defaultConfiguration() + defaultSslConfiguration.setCiphers(strongCiphers) + QSslConfiguration.setDefaultConfiguration(defaultSslConfiguration)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricTldExtractor.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,554 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the TLD Extractor. +""" + +# +# This is a Python port of the TLDExtractor of Qupzilla +# Copyright (C) 2014 Razi Alavizadeh <s.r.alavizadeh@gmail.com> +# + +import collections +import os +import re + +from PyQt6.QtCore import QObject, QUrl, QFile, QFileInfo, qWarning + +from E5Gui import E5MessageBox + + +class EricTldHostParts: + """ + Class implementing the host parts helper. + """ + def __init__(self): + """ + Constructor + """ + self.host = "" + self.tld = "" + self.domain = "" + self.registrableDomain = "" + self.subdomain = "" + + +class EricTldExtractor(QObject): + """ + Class implementing the TLD Extractor. + + Note: The module function instance() should be used to get a reference + to a global object to avoid overhead. + """ + def __init__(self, withPrivate=False, parent=None): + """ + Constructor + + @param withPrivate flag indicating to load private TLDs as well + @type bool + @param parent reference to the parent object + @type QObject + """ + super().__init__(parent) + + self.__withPrivate = withPrivate + self.__dataFileName = "" + self.__dataSearchPaths = [] + + self.__tldDict = collections.defaultdict(list) + # dict with list of str as values + + self.setDataSearchPaths() + + def isDataLoaded(self): + """ + Public method to check, if the TLD data ia already loaded. + + @return flag indicating data is loaded + @rtype bool + """ + return bool(self.__tldDict) + + def tld(self, host): + """ + Public method to get the top level domain for a host. + + @param host host name to get TLD for + @type str + @return TLD for host + @rtype str + """ + if not host or host.startswith("."): + return "" + + cleanHost = self.__normalizedHost(host) + + tldPart = cleanHost[cleanHost.rfind(".") + 1:] + cleanHost = bytes(QUrl.toAce(cleanHost)).decode("utf-8") + + self.__loadData() + + if tldPart not in self.__tldDict: + return tldPart + + tldRules = self.__tldDict[tldPart][:] + + if tldPart not in tldRules: + tldRules.append(tldPart) + + maxLabelCount = 0 + isWildcardTLD = False + + for rule in tldRules: + labelCount = rule.count(".") + 1 + + if rule.startswith("!"): + rule = rule[1:] + + rule = bytes(QUrl.toAce(rule)).decode("utf-8") + + # matches with exception TLD + if cleanHost.endswith(rule): + tldPart = rule[rule.find(".") + 1:] + break + + if rule.startswith("*"): + rule = rule[1:] + + if rule.startswith("."): + rule = rule[1:] + + isWildcardTLD = True + else: + isWildcardTLD = False + + rule = bytes(QUrl.toAce(rule)).decode("utf-8") + testRule = "." + rule + testUrl = "." + cleanHost + + if labelCount > maxLabelCount and testUrl.endswith(testRule): + tldPart = rule + maxLabelCount = labelCount + + if isWildcardTLD: + temp = cleanHost + temp = temp[:temp.rfind(tldPart)] + + if temp.endswith("."): + temp = temp[:-1] + + temp = temp[temp.rfind(".") + 1:] + + if temp: + tldPart = temp + "." + rule + else: + tldPart = rule + + temp = self.__normalizedHost(host) + tldPart = ".".join( + temp.split(".")[temp.count(".") - tldPart.count("."):]) + + return tldPart + + def domain(self, host): + """ + Public method to get the domain for a host. + + @param host host name to get the domain for + @type str + @return domain for host + @rtype str + """ + tldPart = self.tld(host) + + return self.__domainHelper(host, tldPart) + + def registrableDomain(self, host): + """ + Public method to get the registrable domain for a host. + + @param host host name to get the registrable domain for + @type str + @return registrable domain for host + @rtype str + """ + tldPart = self.tld(host) + + return self.__registrableDomainHelper( + self.__domainHelper(host, tldPart), tldPart) + + def subdomain(self, host): + """ + Public method to get the subdomain for a host. + + @param host host name to get the subdomain for + @type str + @return subdomain for host + @rtype str + """ + return self.__subdomainHelper(host, self.registrableDomain(host)) + + def splitParts(self, host): + """ + Public method to split a host address into its parts. + + @param host host address to be split + @type str + @return splitted host address + @rtype EricTldHostParts + """ + hostParts = EricTldHostParts() + hostParts.host = host + hostParts.tld = self.tld(host) + hostParts.domain = self.__domainHelper(host, hostParts.tld) + hostParts.registrableDomain = self.__registrableDomainHelper( + hostParts.domain, hostParts.tld) + hostParts.subdomain = self.__subdomainHelper( + host, hostParts.registrableDomain) + + return hostParts + + def dataSearchPaths(self): + """ + Public method to get the search paths for the TLD data file. + + @return search paths for the TLD data file + @rtype list of str + """ + return self.__dataSearchPaths[:] + + def setDataSearchPaths(self, searchPaths=None): + """ + Public method to set the search paths for the TLD data file. + + @param searchPaths search paths for the TLD data file or None, + if the default search paths shall be set + @type list of str + """ + if searchPaths: + self.__dataSearchPaths = searchPaths[:] + self.__dataSearchPaths.extend(self.__defaultDataSearchPaths()) + else: + self.__dataSearchPaths = self.__defaultDataSearchPaths()[:] + + # remove duplicates + paths = [] + for p in self.__dataSearchPaths: + if p not in paths: + paths.append(p) + self.__dataSearchPaths = paths + + def __defaultDataSearchPaths(self): + """ + Private method to get the default search paths for the TLD data file. + + @return default search paths for the TLD data file + @rtype list of str + """ + return [os.path.join(os.path.dirname(__file__), "data")] + + def getTldDownloadUrl(self): + """ + Public method to get the TLD data file download URL. + + @return download URL + @rtype QUrl + """ + return QUrl( + "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/" + "effective_tld_names.dat?raw=1") + + def __loadData(self): + """ + Private method to load the TLD data. + """ + if self.isDataLoaded(): + return + + dataFileName = "" + parsedDataFileExist = False + + for path in self.__dataSearchPaths: + dataFileName = ( + QFileInfo(path + "/effective_tld_names.dat").absoluteFilePath() + ) + if QFileInfo(dataFileName).exists(): + parsedDataFileExist = True + break + + if not parsedDataFileExist: + tldDataFileDownloadLink = ( + "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/" + "effective_tld_names.dat?raw=1" + ) + E5MessageBox.information( + None, + self.tr("TLD Data File not found"), + self.tr("""<p>The file 'effective_tld_names.dat' was not""" + """ found!<br/>You can download it from """ + """'<a href="{0}"><b>here</b></a>' to one of the""" + """ following paths:</p><ul>{1}</ul>""").format( + tldDataFileDownloadLink, + "".join(["<li>{0}</li>".format(p) + for p in self.__dataSearchPaths])) + ) + return + + self.__dataFileName = dataFileName + if not self.__parseData(dataFileName, + loadPrivateDomains=self.__withPrivate): + qWarning( + "EricTldExtractor: There are some parse errors for file: {0}" + .format(dataFileName)) + + def __parseData(self, dataFile, loadPrivateDomains=False): + """ + Private method to parse TLD data. + + @param dataFile name of the file containing the TLD data + @type str + @param loadPrivateDomains flag indicating to load private domains + @type bool + @return flag indicating success + @rtype bool + """ + # start with a fresh dictionary + self.__tldDict = collections.defaultdict(list) + + file = QFile(dataFile) + + if not file.open(QFile.ReadOnly | QFile.Text): + return False + + seekToEndOfPrivateDomains = False + + while not file.atEnd(): + line = bytes(file.readLine()).decode("utf-8").strip() + if not line: + continue + + if line.startswith("."): + line = line[1:] + + if line.startswith("//"): + if "===END PRIVATE DOMAINS===" in line: + seekToEndOfPrivateDomains = False + + if ( + not loadPrivateDomains and + "===BEGIN PRIVATE DOMAINS===" in line + ): + seekToEndOfPrivateDomains = True + + continue + + if seekToEndOfPrivateDomains: + continue + + # only data up to the first whitespace is used + line = line.split(None, 1)[0] + + if "." not in line: + self.__tldDict[line].append(line) + else: + key = line[line.rfind(".") + 1:] + self.__tldDict[key].append(line) + + return self.isDataLoaded() + + def __domainHelper(self, host, tldPart): + """ + Private method to get the domain name without TLD. + + @param host host address + @type str + @param tldPart TLD part of the host address + @type str + @return domain name + @rtype str + """ + if not host or not tldPart: + return "" + + temp = self.__normalizedHost(host) + temp = temp[:temp.rfind(tldPart)] + + if temp.endswith("."): + temp = temp[:-1] + + return temp[temp.rfind(".") + 1:] + + def __registrableDomainHelper(self, domainPart, tldPart): + """ + Private method to get the registrable domain (i.e. domain plus TLD). + + @param domainPart domain part of a host address + @type str + @param tldPart TLD part of a host address + @type str + @return registrable domain name + @rtype str + """ + if not tldPart or not domainPart: + return "" + else: + return "{0}.{1}".format(domainPart, tldPart) + + def __subdomainHelper(self, host, registrablePart): + """ + Private method to get the subdomain of a host address (i.e. domain part + without the registrable domain name). + + @param host host address + @type str + @param registrablePart registrable domain part of the host address + @type str + @return subdomain name + @rtype str + """ + if not host or not registrablePart: + return "" + + subdomain = self.__normalizedHost(host) + + subdomain = subdomain[:subdomain.rfind(registrablePart)] + + if subdomain.endswith("."): + subdomain = subdomain[:-1] + + return subdomain + + def __normalizedHost(self, host): + """ + Private method to get the normalized host for a host address. + + @param host host address to be normalized + @type str + @return normalized host address + @rtype str + """ + return host.lower() + + ################################################################# + ## Methods below are for testing purposes + ################################################################# + + def test(self): + """ + Public method to execute the tests. + + @return flag indicating the test result + @rtype bool + """ + self.__withPrivate = True + self.__loadData() + if not self.__tldDict: + return False + + testDataFileName = "" + testDataFileExist = False + + for path in self.__dataSearchPaths: + testDataFileName = ( + QFileInfo(path + "/test_psl.txt").absoluteFilePath() + ) + if QFileInfo(testDataFileName).exists(): + testDataFileExist = True + break + + if not testDataFileExist: + testFileDownloadLink = ( + "http://mxr.mozilla.org/mozilla-central/source/netwerk/test/" + "unit/data/test_psl.txt?raw=1" + ) + E5MessageBox.information( + None, + self.tr("TLD Data File not found"), + self.tr("""<p>The file 'test_psl.txt' was not found!""" + """<br/>You can download it from '<a href="{0}">""" + """<b>here</b></a>' to one of the following""" + """ paths:</p><ul>{1}</ul>""").format( + testFileDownloadLink, + "".join(["<li>{0}</li>".format(p) + for p in self.__dataSearchPaths])) + ) + return False + + file = QFile(testDataFileName) + + if not file.open(QFile.ReadOnly | QFile.Text): + return False + + testRegExp = re.compile( + "checkPublicSuffix\\(('([^']+)'|null), ('([^']+)'|null)\\);") + allTestSuccess = True + + while not file.atEnd(): + line = bytes(file.readLine()).decode("utf-8").strip() + if not line or line.startswith("//"): + continue + + match = testRegExp.search(line) + if match is None: + allTestSuccess = False + else: + hostName, registrableName = match.group(2, 4) + + if not self.__checkPublicSuffix(hostName, registrableName): + allTestSuccess = False + + if allTestSuccess: + qWarning("EricTldExtractor: Test passed successfully.") + else: + qWarning("EricTldExtractor: Test finished with some errors!") + + # reset the TLD dictionary + self.__tldDict = collections.defaultdict(list) + + return allTestSuccess + + def __checkPublicSuffix(self, host, registrableName): + """ + Private method to test a host name against a registrable name. + + @param host host name to test + @type str + @param registrableName registrable domain name to test against + @type str + @return flag indicating the check result + @rtype bool + """ + regName = self.registrableDomain(host) + if regName != registrableName: + qWarning( + "EricTldExtractor Test Error: hostName: {0}\n" + " Correct registrableName: {1}\n" + " Calculated registrableName: {2}".format( + host, registrableName, regName)) + return False + + return True + + +_TLDExtractor = None + + +def instance(withPrivate=False): + """ + Global function to get a reference to the TLD extractor and create it, if + it hasn't been yet. + + @param withPrivate flag indicating to load private TLDs as well + @type bool + @return reference to the zoom manager object + @rtype EricTldExtractor + """ + global _TLDExtractor + + if _TLDExtractor is None: + _TLDExtractor = EricTldExtractor(withPrivate=withPrivate) + + return _TLDExtractor
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/EricUrlInfo.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,272 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class replacing QUrlInfo. +""" + +import enum + +from PyQt6.QtCore import QDateTime + + +class EricUrlPermission(enum.IntEnum): + """ + Class defining the URL permissions. + """ + READ_OWNER = 0o0400 + WRITE_OWNER = 0o0200 + EXE_OWNER = 0o0100 + READ_GROUP = 0o0040 + WRITE_GROUP = 0o0020 + EXE_GROUP = 0o0010 + READ_OTHER = 0o0004 + WRITE_OTHER = 0o0002 + EXE_OTHER = 0o0001 + + +class EricUrlInfo: + """ + Class implementing a replacement for QUrlInfo. + """ + def __init__(self): + """ + Constructor + """ + self.__valid = False + + self.__permissions = 0 + self.__size = 0 + self.__isDir = False + self.__isFile = True + self.__isSymlink = False + self.__isWritable = True + self.__isReadable = True + self.__isExecutable = False + self.__name = "" + self.__owner = "" + self.__group = "" + self.__lastModified = QDateTime() + self.__lastRead = QDateTime() + + def isValid(self): + """ + Public method to check the validity of the object. + + @return flag indicating validity (boolean) + """ + return self.__valid + + def setName(self, name): + """ + Public method to set the name. + + @param name name to be set (string) + """ + self.__name = name + self.__valid = True + + def setPermissions(self, permissions): + """ + Public method to set the permissions. + + @param permissions permissions to be set (integer) + """ + self.__permissions = permissions + self.__valid = True + + def setDir(self, isDir): + """ + Public method to indicate a directory. + + @param isDir flag indicating a directory (boolean) + """ + self.__isDir = isDir + self.__valid = True + + def setFile(self, isFile): + """ + Public method to indicate a file. + + @param isFile flag indicating a file (boolean) + """ + self.__isFile = isFile + self.__valid = True + + def setSymLink(self, isSymLink): + """ + Public method to indicate a symbolic link. + + @param isSymLink flag indicating a symbolic link (boolean) + """ + self.__isSymLink = isSymLink + self.__valid = True + + def setOwner(self, owner): + """ + Public method to set the owner. + + @param owner owner to be set (string) + """ + self.__owner = owner + self.__valid = True + + def setGroup(self, group): + """ + Public method to set the group. + + @param group group to be set (string) + """ + self.__group = group + self.__valid = True + + def setSize(self, size): + """ + Public method to set the size. + + @param size size to be set (integer) + """ + self.__size = size + self.__valid = True + + def setWritable(self, isWritable): + """ + Public method to a writable entry. + + @param isWritable flag indicating a writable entry (boolean) + """ + self.__isWritable = isWritable + self.__valid = True + + def setReadable(self, isReadable): + """ + Public method to a readable entry. + + @param isReadable flag indicating a readable entry (boolean) + """ + self.__isReadable = isReadable + self.__valid = True + + def setLastModified(self, dt): + """ + Public method to set the last modified date and time. + + @param dt date and time to set (QDateTime) + """ + self.__lastModified = QDateTime(dt) + self.__valid = True + + def setLastRead(self, dt): + """ + Public method to set the last read date and time. + + @param dt date and time to set (QDateTime) + """ + self.__lastRead = QDateTime(dt) + self.__valid = True + + def name(self): + """ + Public method to get the name. + + @return name (string) + """ + return self.__name + + def permissions(self): + """ + Public method to get the permissions. + + @return permissions (integer) + """ + return self.__permissions + + def owner(self): + """ + Public method to get the owner. + + @return owner (string) + """ + return self.__owner + + def group(self): + """ + Public method to get the group. + + @return group (string) + """ + return self.__group + + def size(self): + """ + Public method to get the size. + + @return size (integer) + """ + return self.__size + + def lastModified(self): + """ + Public method to get the last modified date and time. + + @return last modified date and time (QDateTime) + """ + return QDateTime(self.__lastModified) + + def lastRead(self): + """ + Public method to get the last read date and time. + + @return last read date and time (QDateTime) + """ + return QDateTime(self.__lastRead) + + def isDir(self): + """ + Public method to test, if the entry is a directory. + + @return flag indicating a directory (boolean) + """ + return self.__isDir + + def isFile(self): + """ + Public method to test, if the entry is a file. + + @return flag indicating a file (boolean) + """ + return self.__isFile + + def isSymLink(self): + """ + Public method to test, if the entry is a symbolic link. + + @return flag indicating a symbolic link (boolean) + """ + return self.__isSymlink + + def isWritable(self): + """ + Public method to test, if the entry is writable. + + @return flag indicating writable (boolean) + """ + return self.__isWritable + + def isReadable(self): + """ + Public method to test, if the entry is readable. + + @return flag indicating readable (boolean) + """ + return self.__isReadable + + def isExecutable(self): + """ + Public method to test, if the entry is executable. + + @return flag indicating executable (boolean) + """ + return self.__isExecutable
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/__init__.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package implementing some special network related objects and functions. +""" + +from PyQt6.QtNetwork import QAbstractSocket, QHostAddress + + +def isValidAddress(address): + """ + Public function to check, if the given address is valid. + + @param address IPv4 or IPv6 address string + @type str + @return flag indicating validity + @rtype bool + """ + h = QHostAddress(address) + return not h.isNull() + + +def isValidIPv4Address(address): + """ + Public function to check, if the given address is a valid IPv4 address. + + @param address IPv4 address string + @type str + @return flag indicating validity + @rtype bool + """ + h = QHostAddress(address) + return ( + not h.isNull() and + h.protocol() == QAbstractSocket.NetworkLayerProtocol.IPv4Protocol + ) + + +def isValidIPv6Address(address): + """ + Public function to check, if the given address is a valid IPv6 address. + + @param address IPv6 address string + @type str + @return flag indicating validity + @rtype bool + """ + h = QHostAddress(address) + return ( + not h.isNull() and + h.protocol() == QAbstractSocket.NetworkLayerProtocol.IPv6Protocol + )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/data/__init__.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package defining some data used by the networking code. +"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/data/effective_tld_names.dat Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,11476 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +// ===BEGIN ICANN DOMAINS=== + +// ac : https://en.wikipedia.org/wiki/.ac +ac +com.ac +edu.ac +gov.ac +net.ac +mil.ac +org.ac + +// ad : https://en.wikipedia.org/wiki/.ad +ad +nom.ad + +// ae : https://en.wikipedia.org/wiki/.ae +// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php +ae +co.ae +net.ae +org.ae +sch.ae +ac.ae +gov.ae +mil.ae + +// aero : see https://www.information.aero/index.php?id=66 +aero +accident-investigation.aero +accident-prevention.aero +aerobatic.aero +aeroclub.aero +aerodrome.aero +agents.aero +aircraft.aero +airline.aero +airport.aero +air-surveillance.aero +airtraffic.aero +air-traffic-control.aero +ambulance.aero +amusement.aero +association.aero +author.aero +ballooning.aero +broker.aero +caa.aero +cargo.aero +catering.aero +certification.aero +championship.aero +charter.aero +civilaviation.aero +club.aero +conference.aero +consultant.aero +consulting.aero +control.aero +council.aero +crew.aero +design.aero +dgca.aero +educator.aero +emergency.aero +engine.aero +engineer.aero +entertainment.aero +equipment.aero +exchange.aero +express.aero +federation.aero +flight.aero +freight.aero +fuel.aero +gliding.aero +government.aero +groundhandling.aero +group.aero +hanggliding.aero +homebuilt.aero +insurance.aero +journal.aero +journalist.aero +leasing.aero +logistics.aero +magazine.aero +maintenance.aero +media.aero +microlight.aero +modelling.aero +navigation.aero +parachuting.aero +paragliding.aero +passenger-association.aero +pilot.aero +press.aero +production.aero +recreation.aero +repbody.aero +res.aero +research.aero +rotorcraft.aero +safety.aero +scientist.aero +services.aero +show.aero +skydiving.aero +software.aero +student.aero +trader.aero +trading.aero +trainer.aero +union.aero +workinggroup.aero +works.aero + +// af : http://www.nic.af/help.jsp +af +gov.af +com.af +org.af +net.af +edu.af + +// ag : http://www.nic.ag/prices.htm +ag +com.ag +org.ag +net.ag +co.ag +nom.ag + +// ai : http://nic.com.ai/ +ai +off.ai +com.ai +net.ai +org.ai + +// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 +al +com.al +edu.al +gov.al +mil.al +net.al +org.al + +// am : https://en.wikipedia.org/wiki/.am +am + +// ao : https://en.wikipedia.org/wiki/.ao +// http://www.dns.ao/REGISTR.DOC +ao +ed.ao +gv.ao +og.ao +co.ao +pb.ao +it.ao + +// aq : https://en.wikipedia.org/wiki/.aq +aq + +// ar : https://nic.ar/normativa-vigente.xhtml +ar +com.ar +edu.ar +gob.ar +gov.ar +int.ar +mil.ar +net.ar +org.ar +tur.ar + +// arpa : https://en.wikipedia.org/wiki/.arpa +// Confirmed by registry <iana-questions@icann.org> 2008-06-18 +arpa +e164.arpa +in-addr.arpa +ip6.arpa +iris.arpa +uri.arpa +urn.arpa + +// as : https://en.wikipedia.org/wiki/.as +as +gov.as + +// asia : https://en.wikipedia.org/wiki/.asia +asia + +// at : https://en.wikipedia.org/wiki/.at +// Confirmed by registry <it@nic.at> 2008-06-17 +at +ac.at +co.at +gv.at +or.at + +// au : https://en.wikipedia.org/wiki/.au +// http://www.auda.org.au/ +au +// 2LDs +com.au +net.au +org.au +edu.au +gov.au +asn.au +id.au +// Historic 2LDs (closed to new registration, but sites still exist) +info.au +conf.au +oz.au +// CGDNs - http://www.cgdn.org.au/ +act.au +nsw.au +nt.au +qld.au +sa.au +tas.au +vic.au +wa.au +// 3LDs +act.edu.au +nsw.edu.au +nt.edu.au +qld.edu.au +sa.edu.au +tas.edu.au +vic.edu.au +wa.edu.au +// act.gov.au Bug 984824 - Removed at request of Greg Tankard +// nsw.gov.au Bug 547985 - Removed at request of <Shae.Donelan@services.nsw.gov.au> +// nt.gov.au Bug 940478 - Removed at request of Greg Connors <Greg.Connors@nt.gov.au> +qld.gov.au +sa.gov.au +tas.gov.au +vic.gov.au +wa.gov.au + +// aw : https://en.wikipedia.org/wiki/.aw +aw +com.aw + +// ax : https://en.wikipedia.org/wiki/.ax +ax + +// az : https://en.wikipedia.org/wiki/.az +az +com.az +net.az +int.az +gov.az +org.az +edu.az +info.az +pp.az +mil.az +name.az +pro.az +biz.az + +// ba : https://en.wikipedia.org/wiki/.ba +ba +org.ba +net.ba +edu.ba +gov.ba +mil.ba +unsa.ba +unbi.ba +co.ba +com.ba +rs.ba + +// bb : https://en.wikipedia.org/wiki/.bb +bb +biz.bb +co.bb +com.bb +edu.bb +gov.bb +info.bb +net.bb +org.bb +store.bb +tv.bb + +// bd : https://en.wikipedia.org/wiki/.bd +*.bd + +// be : https://en.wikipedia.org/wiki/.be +// Confirmed by registry <tech@dns.be> 2008-06-08 +be +ac.be + +// bf : https://en.wikipedia.org/wiki/.bf +bf +gov.bf + +// bg : https://en.wikipedia.org/wiki/.bg +// https://www.register.bg/user/static/rules/en/index.html +bg +a.bg +b.bg +c.bg +d.bg +e.bg +f.bg +g.bg +h.bg +i.bg +j.bg +k.bg +l.bg +m.bg +n.bg +o.bg +p.bg +q.bg +r.bg +s.bg +t.bg +u.bg +v.bg +w.bg +x.bg +y.bg +z.bg +0.bg +1.bg +2.bg +3.bg +4.bg +5.bg +6.bg +7.bg +8.bg +9.bg + +// bh : https://en.wikipedia.org/wiki/.bh +bh +com.bh +edu.bh +net.bh +org.bh +gov.bh + +// bi : https://en.wikipedia.org/wiki/.bi +// http://whois.nic.bi/ +bi +co.bi +com.bi +edu.bi +or.bi +org.bi + +// biz : https://en.wikipedia.org/wiki/.biz +biz + +// bj : https://en.wikipedia.org/wiki/.bj +bj +asso.bj +barreau.bj +gouv.bj + +// bm : http://www.bermudanic.bm/dnr-text.txt +bm +com.bm +edu.bm +gov.bm +net.bm +org.bm + +// bn : https://en.wikipedia.org/wiki/.bn +*.bn + +// bo : http://www.nic.bo/ +bo +com.bo +edu.bo +gov.bo +gob.bo +int.bo +org.bo +net.bo +mil.bo +tv.bo + +// br : http://registro.br/dominio/categoria.html +// Submitted by registry <fneves@registro.br> +br +adm.br +adv.br +agr.br +am.br +arq.br +art.br +ato.br +b.br +bio.br +blog.br +bmd.br +cim.br +cng.br +cnt.br +com.br +coop.br +ecn.br +eco.br +edu.br +emp.br +eng.br +esp.br +etc.br +eti.br +far.br +flog.br +fm.br +fnd.br +fot.br +fst.br +g12.br +ggf.br +gov.br +imb.br +ind.br +inf.br +jor.br +jus.br +leg.br +lel.br +mat.br +med.br +mil.br +mp.br +mus.br +net.br +*.nom.br +not.br +ntr.br +odo.br +org.br +ppg.br +pro.br +psc.br +psi.br +qsl.br +radio.br +rec.br +slg.br +srv.br +taxi.br +teo.br +tmp.br +trd.br +tur.br +tv.br +vet.br +vlog.br +wiki.br +zlg.br + +// bs : http://www.nic.bs/rules.html +bs +com.bs +net.bs +org.bs +edu.bs +gov.bs + +// bt : https://en.wikipedia.org/wiki/.bt +bt +com.bt +edu.bt +gov.bt +net.bt +org.bt + +// bv : No registrations at this time. +// Submitted by registry <jarle@uninett.no> +bv + +// bw : https://en.wikipedia.org/wiki/.bw +// http://www.gobin.info/domainname/bw.doc +// list of other 2nd level tlds ? +bw +co.bw +org.bw + +// by : https://en.wikipedia.org/wiki/.by +// http://tld.by/rules_2006_en.html +// list of other 2nd level tlds ? +by +gov.by +mil.by +// Official information does not indicate that com.by is a reserved +// second-level domain, but it's being used as one (see www.google.com.by and +// www.yahoo.com.by, for example), so we list it here for safety's sake. +com.by + +// http://hoster.by/ +of.by + +// bz : https://en.wikipedia.org/wiki/.bz +// http://www.belizenic.bz/ +bz +com.bz +net.bz +org.bz +edu.bz +gov.bz + +// ca : https://en.wikipedia.org/wiki/.ca +ca +// ca geographical names +ab.ca +bc.ca +mb.ca +nb.ca +nf.ca +nl.ca +ns.ca +nt.ca +nu.ca +on.ca +pe.ca +qc.ca +sk.ca +yk.ca +// gc.ca: https://en.wikipedia.org/wiki/.gc.ca +// see also: http://registry.gc.ca/en/SubdomainFAQ +gc.ca + +// cat : https://en.wikipedia.org/wiki/.cat +cat + +// cc : https://en.wikipedia.org/wiki/.cc +cc + +// cd : https://en.wikipedia.org/wiki/.cd +// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 +cd +gov.cd + +// cf : https://en.wikipedia.org/wiki/.cf +cf + +// cg : https://en.wikipedia.org/wiki/.cg +cg + +// ch : https://en.wikipedia.org/wiki/.ch +ch + +// ci : https://en.wikipedia.org/wiki/.ci +// http://www.nic.ci/index.php?page=charte +ci +org.ci +or.ci +com.ci +co.ci +edu.ci +ed.ci +ac.ci +net.ci +go.ci +asso.ci +aéroport.ci +int.ci +presse.ci +md.ci +gouv.ci + +// ck : https://en.wikipedia.org/wiki/.ck +*.ck +!www.ck + +// cl : https://en.wikipedia.org/wiki/.cl +cl +gov.cl +gob.cl +co.cl +mil.cl + +// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927 +cm +co.cm +com.cm +gov.cm +net.cm + +// cn : https://en.wikipedia.org/wiki/.cn +// Submitted by registry <tanyaling@cnnic.cn> +cn +ac.cn +com.cn +edu.cn +gov.cn +net.cn +org.cn +mil.cn +公司.cn +网络.cn +網絡.cn +// cn geographic names +ah.cn +bj.cn +cq.cn +fj.cn +gd.cn +gs.cn +gz.cn +gx.cn +ha.cn +hb.cn +he.cn +hi.cn +hl.cn +hn.cn +jl.cn +js.cn +jx.cn +ln.cn +nm.cn +nx.cn +qh.cn +sc.cn +sd.cn +sh.cn +sn.cn +sx.cn +tj.cn +xj.cn +xz.cn +yn.cn +zj.cn +hk.cn +mo.cn +tw.cn + +// co : https://en.wikipedia.org/wiki/.co +// Submitted by registry <tecnico@uniandes.edu.co> +co +arts.co +com.co +edu.co +firm.co +gov.co +info.co +int.co +mil.co +net.co +nom.co +org.co +rec.co +web.co + +// com : https://en.wikipedia.org/wiki/.com +com + +// coop : https://en.wikipedia.org/wiki/.coop +coop + +// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do +cr +ac.cr +co.cr +ed.cr +fi.cr +go.cr +or.cr +sa.cr + +// cu : https://en.wikipedia.org/wiki/.cu +cu +com.cu +edu.cu +org.cu +net.cu +gov.cu +inf.cu + +// cv : https://en.wikipedia.org/wiki/.cv +cv + +// cw : http://www.una.cw/cw_registry/ +// Confirmed by registry <registry@una.net> 2013-03-26 +cw +com.cw +edu.cw +net.cw +org.cw + +// cx : https://en.wikipedia.org/wiki/.cx +// list of other 2nd level tlds ? +cx +gov.cx + +// cy : https://en.wikipedia.org/wiki/.cy +ac.cy +biz.cy +com.cy +ekloges.cy +gov.cy +ltd.cy +name.cy +net.cy +org.cy +parliament.cy +press.cy +pro.cy +tm.cy + +// cz : https://en.wikipedia.org/wiki/.cz +cz + +// de : https://en.wikipedia.org/wiki/.de +// Confirmed by registry <ops@denic.de> (with technical +// reservations) 2008-07-01 +de + +// dj : https://en.wikipedia.org/wiki/.dj +dj + +// dk : https://en.wikipedia.org/wiki/.dk +// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17 +dk + +// dm : https://en.wikipedia.org/wiki/.dm +dm +com.dm +net.dm +org.dm +edu.dm +gov.dm + +// do : https://en.wikipedia.org/wiki/.do +do +art.do +com.do +edu.do +gob.do +gov.do +mil.do +net.do +org.do +sld.do +web.do + +// dz : https://en.wikipedia.org/wiki/.dz +dz +com.dz +org.dz +net.dz +gov.dz +edu.dz +asso.dz +pol.dz +art.dz + +// ec : http://www.nic.ec/reg/paso1.asp +// Submitted by registry <vabboud@nic.ec> +ec +com.ec +info.ec +net.ec +fin.ec +k12.ec +med.ec +pro.ec +org.ec +edu.ec +gov.ec +gob.ec +mil.ec + +// edu : https://en.wikipedia.org/wiki/.edu +edu + +// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B +ee +edu.ee +gov.ee +riik.ee +lib.ee +med.ee +com.ee +pri.ee +aip.ee +org.ee +fie.ee + +// eg : https://en.wikipedia.org/wiki/.eg +eg +com.eg +edu.eg +eun.eg +gov.eg +mil.eg +name.eg +net.eg +org.eg +sci.eg + +// er : https://en.wikipedia.org/wiki/.er +*.er + +// es : https://www.nic.es/site_ingles/ingles/dominios/index.html +es +com.es +nom.es +org.es +gob.es +edu.es + +// et : https://en.wikipedia.org/wiki/.et +et +com.et +gov.et +org.et +edu.et +biz.et +name.et +info.et +net.et + +// eu : https://en.wikipedia.org/wiki/.eu +eu + +// fi : https://en.wikipedia.org/wiki/.fi +fi +// aland.fi : https://en.wikipedia.org/wiki/.ax +// This domain is being phased out in favor of .ax. As there are still many +// domains under aland.fi, we still keep it on the list until aland.fi is +// completely removed. +// TODO: Check for updates (expected to be phased out around Q1/2009) +aland.fi + +// fj : https://en.wikipedia.org/wiki/.fj +*.fj + +// fk : https://en.wikipedia.org/wiki/.fk +*.fk + +// fm : https://en.wikipedia.org/wiki/.fm +fm + +// fo : https://en.wikipedia.org/wiki/.fo +fo + +// fr : http://www.afnic.fr/ +// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs +fr +com.fr +asso.fr +nom.fr +prd.fr +presse.fr +tm.fr +// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels +aeroport.fr +assedic.fr +avocat.fr +avoues.fr +cci.fr +chambagri.fr +chirurgiens-dentistes.fr +experts-comptables.fr +geometre-expert.fr +gouv.fr +greta.fr +huissier-justice.fr +medecin.fr +notaires.fr +pharmacien.fr +port.fr +veterinaire.fr + +// ga : https://en.wikipedia.org/wiki/.ga +ga + +// gb : This registry is effectively dormant +// Submitted by registry <Damien.Shaw@ja.net> +gb + +// gd : https://en.wikipedia.org/wiki/.gd +gd + +// ge : http://www.nic.net.ge/policy_en.pdf +ge +com.ge +edu.ge +gov.ge +org.ge +mil.ge +net.ge +pvt.ge + +// gf : https://en.wikipedia.org/wiki/.gf +gf + +// gg : http://www.channelisles.net/register-domains/ +// Confirmed by registry <nigel@channelisles.net> 2013-11-28 +gg +co.gg +net.gg +org.gg + +// gh : https://en.wikipedia.org/wiki/.gh +// see also: http://www.nic.gh/reg_now.php +// Although domains directly at second level are not possible at the moment, +// they have been possible for some time and may come back. +gh +com.gh +edu.gh +gov.gh +org.gh +mil.gh + +// gi : http://www.nic.gi/rules.html +gi +com.gi +ltd.gi +gov.gi +mod.gi +edu.gi +org.gi + +// gl : https://en.wikipedia.org/wiki/.gl +// http://nic.gl +gl +co.gl +com.gl +edu.gl +net.gl +org.gl + +// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm +gm + +// gn : http://psg.com/dns/gn/gn.txt +// Submitted by registry <randy@psg.com> +gn +ac.gn +com.gn +edu.gn +gov.gn +org.gn +net.gn + +// gov : https://en.wikipedia.org/wiki/.gov +gov + +// gp : http://www.nic.gp/index.php?lang=en +gp +com.gp +net.gp +mobi.gp +edu.gp +org.gp +asso.gp + +// gq : https://en.wikipedia.org/wiki/.gq +gq + +// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html +// Submitted by registry <segred@ics.forth.gr> +gr +com.gr +edu.gr +net.gr +org.gr +gov.gr + +// gs : https://en.wikipedia.org/wiki/.gs +gs + +// gt : http://www.gt/politicas_de_registro.html +gt +com.gt +edu.gt +gob.gt +ind.gt +mil.gt +net.gt +org.gt + +// gu : http://gadao.gov.gu/registration.txt +*.gu + +// gw : https://en.wikipedia.org/wiki/.gw +gw + +// gy : https://en.wikipedia.org/wiki/.gy +// http://registry.gy/ +gy +co.gy +com.gy +edu.gy +gov.gy +net.gy +org.gy + +// hk : https://www.hkdnr.hk +// Submitted by registry <hk.tech@hkirc.hk> +hk +com.hk +edu.hk +gov.hk +idv.hk +net.hk +org.hk +公司.hk +教育.hk +敎育.hk +政府.hk +個人.hk +个人.hk +箇人.hk +網络.hk +网络.hk +组織.hk +網絡.hk +网絡.hk +组织.hk +組織.hk +組织.hk + +// hm : https://en.wikipedia.org/wiki/.hm +hm + +// hn : http://www.nic.hn/politicas/ps02,,05.html +hn +com.hn +edu.hn +org.hn +net.hn +mil.hn +gob.hn + +// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf +hr +iz.hr +from.hr +name.hr +com.hr + +// ht : http://www.nic.ht/info/charte.cfm +ht +com.ht +shop.ht +firm.ht +info.ht +adult.ht +net.ht +pro.ht +org.ht +med.ht +art.ht +coop.ht +pol.ht +asso.ht +edu.ht +rel.ht +gouv.ht +perso.ht + +// hu : http://www.domain.hu/domain/English/sld.html +// Confirmed by registry <pasztor@iszt.hu> 2008-06-12 +hu +co.hu +info.hu +org.hu +priv.hu +sport.hu +tm.hu +2000.hu +agrar.hu +bolt.hu +casino.hu +city.hu +erotica.hu +erotika.hu +film.hu +forum.hu +games.hu +hotel.hu +ingatlan.hu +jogasz.hu +konyvelo.hu +lakas.hu +media.hu +news.hu +reklam.hu +sex.hu +shop.hu +suli.hu +szex.hu +tozsde.hu +utazas.hu +video.hu + +// id : https://register.pandi.or.id/ +id +ac.id +biz.id +co.id +desa.id +go.id +mil.id +my.id +net.id +or.id +sch.id +web.id + +// ie : https://en.wikipedia.org/wiki/.ie +ie +gov.ie + +// il : http://www.isoc.org.il/domains/ +il +ac.il +co.il +gov.il +idf.il +k12.il +muni.il +net.il +org.il + +// im : https://www.nic.im/ +// Submitted by registry <info@nic.im> +im +ac.im +co.im +com.im +ltd.co.im +net.im +org.im +plc.co.im +tt.im +tv.im + +// in : https://en.wikipedia.org/wiki/.in +// see also: https://registry.in/Policies +// Please note, that nic.in is not an official eTLD, but used by most +// government institutions. +in +co.in +firm.in +net.in +org.in +gen.in +ind.in +nic.in +ac.in +edu.in +res.in +gov.in +mil.in + +// info : https://en.wikipedia.org/wiki/.info +info + +// int : https://en.wikipedia.org/wiki/.int +// Confirmed by registry <iana-questions@icann.org> 2008-06-18 +int +eu.int + +// io : http://www.nic.io/rules.html +// list of other 2nd level tlds ? +io +com.io + +// iq : http://www.cmc.iq/english/iq/iqregister1.htm +iq +gov.iq +edu.iq +mil.iq +com.iq +org.iq +net.iq + +// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules +// Also see http://www.nic.ir/Internationalized_Domain_Names +// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16 +ir +ac.ir +co.ir +gov.ir +id.ir +net.ir +org.ir +sch.ir +// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH) +ایران.ir +// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH) +ايران.ir + +// is : http://www.isnic.is/domain/rules.php +// Confirmed by registry <marius@isgate.is> 2008-12-06 +is +net.is +com.is +edu.is +gov.is +org.is +int.is + +// it : https://en.wikipedia.org/wiki/.it +it +gov.it +edu.it +// Reserved geo-names: +// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf +// There is also a list of reserved geo-names corresponding to Italian municipalities +// http://www.nic.it/documenti/appendice-c.pdf, but it is not included here. +// Regions +abr.it +abruzzo.it +aosta-valley.it +aostavalley.it +bas.it +basilicata.it +cal.it +calabria.it +cam.it +campania.it +emilia-romagna.it +emiliaromagna.it +emr.it +friuli-v-giulia.it +friuli-ve-giulia.it +friuli-vegiulia.it +friuli-venezia-giulia.it +friuli-veneziagiulia.it +friuli-vgiulia.it +friuliv-giulia.it +friulive-giulia.it +friulivegiulia.it +friulivenezia-giulia.it +friuliveneziagiulia.it +friulivgiulia.it +fvg.it +laz.it +lazio.it +lig.it +liguria.it +lom.it +lombardia.it +lombardy.it +lucania.it +mar.it +marche.it +mol.it +molise.it +piedmont.it +piemonte.it +pmn.it +pug.it +puglia.it +sar.it +sardegna.it +sardinia.it +sic.it +sicilia.it +sicily.it +taa.it +tos.it +toscana.it +trentino-a-adige.it +trentino-aadige.it +trentino-alto-adige.it +trentino-altoadige.it +trentino-s-tirol.it +trentino-stirol.it +trentino-sud-tirol.it +trentino-sudtirol.it +trentino-sued-tirol.it +trentino-suedtirol.it +trentinoa-adige.it +trentinoaadige.it +trentinoalto-adige.it +trentinoaltoadige.it +trentinos-tirol.it +trentinostirol.it +trentinosud-tirol.it +trentinosudtirol.it +trentinosued-tirol.it +trentinosuedtirol.it +tuscany.it +umb.it +umbria.it +val-d-aosta.it +val-daosta.it +vald-aosta.it +valdaosta.it +valle-aosta.it +valle-d-aosta.it +valle-daosta.it +valleaosta.it +valled-aosta.it +valledaosta.it +vallee-aoste.it +valleeaoste.it +vao.it +vda.it +ven.it +veneto.it +// Provinces +ag.it +agrigento.it +al.it +alessandria.it +alto-adige.it +altoadige.it +an.it +ancona.it +andria-barletta-trani.it +andria-trani-barletta.it +andriabarlettatrani.it +andriatranibarletta.it +ao.it +aosta.it +aoste.it +ap.it +aq.it +aquila.it +ar.it +arezzo.it +ascoli-piceno.it +ascolipiceno.it +asti.it +at.it +av.it +avellino.it +ba.it +balsan.it +bari.it +barletta-trani-andria.it +barlettatraniandria.it +belluno.it +benevento.it +bergamo.it +bg.it +bi.it +biella.it +bl.it +bn.it +bo.it +bologna.it +bolzano.it +bozen.it +br.it +brescia.it +brindisi.it +bs.it +bt.it +bz.it +ca.it +cagliari.it +caltanissetta.it +campidano-medio.it +campidanomedio.it +campobasso.it +carbonia-iglesias.it +carboniaiglesias.it +carrara-massa.it +carraramassa.it +caserta.it +catania.it +catanzaro.it +cb.it +ce.it +cesena-forli.it +cesenaforli.it +ch.it +chieti.it +ci.it +cl.it +cn.it +co.it +como.it +cosenza.it +cr.it +cremona.it +crotone.it +cs.it +ct.it +cuneo.it +cz.it +dell-ogliastra.it +dellogliastra.it +en.it +enna.it +fc.it +fe.it +fermo.it +ferrara.it +fg.it +fi.it +firenze.it +florence.it +fm.it +foggia.it +forli-cesena.it +forlicesena.it +fr.it +frosinone.it +ge.it +genoa.it +genova.it +go.it +gorizia.it +gr.it +grosseto.it +iglesias-carbonia.it +iglesiascarbonia.it +im.it +imperia.it +is.it +isernia.it +kr.it +la-spezia.it +laquila.it +laspezia.it +latina.it +lc.it +le.it +lecce.it +lecco.it +li.it +livorno.it +lo.it +lodi.it +lt.it +lu.it +lucca.it +macerata.it +mantova.it +massa-carrara.it +massacarrara.it +matera.it +mb.it +mc.it +me.it +medio-campidano.it +mediocampidano.it +messina.it +mi.it +milan.it +milano.it +mn.it +mo.it +modena.it +monza-brianza.it +monza-e-della-brianza.it +monza.it +monzabrianza.it +monzaebrianza.it +monzaedellabrianza.it +ms.it +mt.it +na.it +naples.it +napoli.it +no.it +novara.it +nu.it +nuoro.it +og.it +ogliastra.it +olbia-tempio.it +olbiatempio.it +or.it +oristano.it +ot.it +pa.it +padova.it +padua.it +palermo.it +parma.it +pavia.it +pc.it +pd.it +pe.it +perugia.it +pesaro-urbino.it +pesarourbino.it +pescara.it +pg.it +pi.it +piacenza.it +pisa.it +pistoia.it +pn.it +po.it +pordenone.it +potenza.it +pr.it +prato.it +pt.it +pu.it +pv.it +pz.it +ra.it +ragusa.it +ravenna.it +rc.it +re.it +reggio-calabria.it +reggio-emilia.it +reggiocalabria.it +reggioemilia.it +rg.it +ri.it +rieti.it +rimini.it +rm.it +rn.it +ro.it +roma.it +rome.it +rovigo.it +sa.it +salerno.it +sassari.it +savona.it +si.it +siena.it +siracusa.it +so.it +sondrio.it +sp.it +sr.it +ss.it +suedtirol.it +sv.it +ta.it +taranto.it +te.it +tempio-olbia.it +tempioolbia.it +teramo.it +terni.it +tn.it +to.it +torino.it +tp.it +tr.it +trani-andria-barletta.it +trani-barletta-andria.it +traniandriabarletta.it +tranibarlettaandria.it +trapani.it +trentino.it +trento.it +treviso.it +trieste.it +ts.it +turin.it +tv.it +ud.it +udine.it +urbino-pesaro.it +urbinopesaro.it +va.it +varese.it +vb.it +vc.it +ve.it +venezia.it +venice.it +verbania.it +vercelli.it +verona.it +vi.it +vibo-valentia.it +vibovalentia.it +vicenza.it +viterbo.it +vr.it +vs.it +vt.it +vv.it + +// je : http://www.channelisles.net/register-domains/ +// Confirmed by registry <nigel@channelisles.net> 2013-11-28 +je +co.je +net.je +org.je + +// jm : http://www.com.jm/register.html +*.jm + +// jo : http://www.dns.jo/Registration_policy.aspx +jo +com.jo +org.jo +net.jo +edu.jo +sch.jo +gov.jo +mil.jo +name.jo + +// jobs : https://en.wikipedia.org/wiki/.jobs +jobs + +// jp : https://en.wikipedia.org/wiki/.jp +// http://jprs.co.jp/en/jpdomain.html +// Submitted by registry <info@jprs.jp> +jp +// jp organizational type names +ac.jp +ad.jp +co.jp +ed.jp +go.jp +gr.jp +lg.jp +ne.jp +or.jp +// jp prefecture type names +aichi.jp +akita.jp +aomori.jp +chiba.jp +ehime.jp +fukui.jp +fukuoka.jp +fukushima.jp +gifu.jp +gunma.jp +hiroshima.jp +hokkaido.jp +hyogo.jp +ibaraki.jp +ishikawa.jp +iwate.jp +kagawa.jp +kagoshima.jp +kanagawa.jp +kochi.jp +kumamoto.jp +kyoto.jp +mie.jp +miyagi.jp +miyazaki.jp +nagano.jp +nagasaki.jp +nara.jp +niigata.jp +oita.jp +okayama.jp +okinawa.jp +osaka.jp +saga.jp +saitama.jp +shiga.jp +shimane.jp +shizuoka.jp +tochigi.jp +tokushima.jp +tokyo.jp +tottori.jp +toyama.jp +wakayama.jp +yamagata.jp +yamaguchi.jp +yamanashi.jp +栃木.jp +愛知.jp +愛媛.jp +兵庫.jp +熊本.jp +茨城.jp +北海道.jp +千葉.jp +和歌山.jp +長崎.jp +長野.jp +新潟.jp +青森.jp +静岡.jp +東京.jp +石川.jp +埼玉.jp +三重.jp +京都.jp +佐賀.jp +大分.jp +大阪.jp +奈良.jp +宮城.jp +宮崎.jp +富山.jp +山口.jp +山形.jp +山梨.jp +岩手.jp +岐阜.jp +岡山.jp +島根.jp +広島.jp +徳島.jp +沖縄.jp +滋賀.jp +神奈川.jp +福井.jp +福岡.jp +福島.jp +秋田.jp +群馬.jp +香川.jp +高知.jp +鳥取.jp +鹿児島.jp +// jp geographic type names +// http://jprs.jp/doc/rule/saisoku-1.html +*.kawasaki.jp +*.kitakyushu.jp +*.kobe.jp +*.nagoya.jp +*.sapporo.jp +*.sendai.jp +*.yokohama.jp +!city.kawasaki.jp +!city.kitakyushu.jp +!city.kobe.jp +!city.nagoya.jp +!city.sapporo.jp +!city.sendai.jp +!city.yokohama.jp +// 4th level registration +aisai.aichi.jp +ama.aichi.jp +anjo.aichi.jp +asuke.aichi.jp +chiryu.aichi.jp +chita.aichi.jp +fuso.aichi.jp +gamagori.aichi.jp +handa.aichi.jp +hazu.aichi.jp +hekinan.aichi.jp +higashiura.aichi.jp +ichinomiya.aichi.jp +inazawa.aichi.jp +inuyama.aichi.jp +isshiki.aichi.jp +iwakura.aichi.jp +kanie.aichi.jp +kariya.aichi.jp +kasugai.aichi.jp +kira.aichi.jp +kiyosu.aichi.jp +komaki.aichi.jp +konan.aichi.jp +kota.aichi.jp +mihama.aichi.jp +miyoshi.aichi.jp +nishio.aichi.jp +nisshin.aichi.jp +obu.aichi.jp +oguchi.aichi.jp +oharu.aichi.jp +okazaki.aichi.jp +owariasahi.aichi.jp +seto.aichi.jp +shikatsu.aichi.jp +shinshiro.aichi.jp +shitara.aichi.jp +tahara.aichi.jp +takahama.aichi.jp +tobishima.aichi.jp +toei.aichi.jp +togo.aichi.jp +tokai.aichi.jp +tokoname.aichi.jp +toyoake.aichi.jp +toyohashi.aichi.jp +toyokawa.aichi.jp +toyone.aichi.jp +toyota.aichi.jp +tsushima.aichi.jp +yatomi.aichi.jp +akita.akita.jp +daisen.akita.jp +fujisato.akita.jp +gojome.akita.jp +hachirogata.akita.jp +happou.akita.jp +higashinaruse.akita.jp +honjo.akita.jp +honjyo.akita.jp +ikawa.akita.jp +kamikoani.akita.jp +kamioka.akita.jp +katagami.akita.jp +kazuno.akita.jp +kitaakita.akita.jp +kosaka.akita.jp +kyowa.akita.jp +misato.akita.jp +mitane.akita.jp +moriyoshi.akita.jp +nikaho.akita.jp +noshiro.akita.jp +odate.akita.jp +oga.akita.jp +ogata.akita.jp +semboku.akita.jp +yokote.akita.jp +yurihonjo.akita.jp +aomori.aomori.jp +gonohe.aomori.jp +hachinohe.aomori.jp +hashikami.aomori.jp +hiranai.aomori.jp +hirosaki.aomori.jp +itayanagi.aomori.jp +kuroishi.aomori.jp +misawa.aomori.jp +mutsu.aomori.jp +nakadomari.aomori.jp +noheji.aomori.jp +oirase.aomori.jp +owani.aomori.jp +rokunohe.aomori.jp +sannohe.aomori.jp +shichinohe.aomori.jp +shingo.aomori.jp +takko.aomori.jp +towada.aomori.jp +tsugaru.aomori.jp +tsuruta.aomori.jp +abiko.chiba.jp +asahi.chiba.jp +chonan.chiba.jp +chosei.chiba.jp +choshi.chiba.jp +chuo.chiba.jp +funabashi.chiba.jp +futtsu.chiba.jp +hanamigawa.chiba.jp +ichihara.chiba.jp +ichikawa.chiba.jp +ichinomiya.chiba.jp +inzai.chiba.jp +isumi.chiba.jp +kamagaya.chiba.jp +kamogawa.chiba.jp +kashiwa.chiba.jp +katori.chiba.jp +katsuura.chiba.jp +kimitsu.chiba.jp +kisarazu.chiba.jp +kozaki.chiba.jp +kujukuri.chiba.jp +kyonan.chiba.jp +matsudo.chiba.jp +midori.chiba.jp +mihama.chiba.jp +minamiboso.chiba.jp +mobara.chiba.jp +mutsuzawa.chiba.jp +nagara.chiba.jp +nagareyama.chiba.jp +narashino.chiba.jp +narita.chiba.jp +noda.chiba.jp +oamishirasato.chiba.jp +omigawa.chiba.jp +onjuku.chiba.jp +otaki.chiba.jp +sakae.chiba.jp +sakura.chiba.jp +shimofusa.chiba.jp +shirako.chiba.jp +shiroi.chiba.jp +shisui.chiba.jp +sodegaura.chiba.jp +sosa.chiba.jp +tako.chiba.jp +tateyama.chiba.jp +togane.chiba.jp +tohnosho.chiba.jp +tomisato.chiba.jp +urayasu.chiba.jp +yachimata.chiba.jp +yachiyo.chiba.jp +yokaichiba.chiba.jp +yokoshibahikari.chiba.jp +yotsukaido.chiba.jp +ainan.ehime.jp +honai.ehime.jp +ikata.ehime.jp +imabari.ehime.jp +iyo.ehime.jp +kamijima.ehime.jp +kihoku.ehime.jp +kumakogen.ehime.jp +masaki.ehime.jp +matsuno.ehime.jp +matsuyama.ehime.jp +namikata.ehime.jp +niihama.ehime.jp +ozu.ehime.jp +saijo.ehime.jp +seiyo.ehime.jp +shikokuchuo.ehime.jp +tobe.ehime.jp +toon.ehime.jp +uchiko.ehime.jp +uwajima.ehime.jp +yawatahama.ehime.jp +echizen.fukui.jp +eiheiji.fukui.jp +fukui.fukui.jp +ikeda.fukui.jp +katsuyama.fukui.jp +mihama.fukui.jp +minamiechizen.fukui.jp +obama.fukui.jp +ohi.fukui.jp +ono.fukui.jp +sabae.fukui.jp +sakai.fukui.jp +takahama.fukui.jp +tsuruga.fukui.jp +wakasa.fukui.jp +ashiya.fukuoka.jp +buzen.fukuoka.jp +chikugo.fukuoka.jp +chikuho.fukuoka.jp +chikujo.fukuoka.jp +chikushino.fukuoka.jp +chikuzen.fukuoka.jp +chuo.fukuoka.jp +dazaifu.fukuoka.jp +fukuchi.fukuoka.jp +hakata.fukuoka.jp +higashi.fukuoka.jp +hirokawa.fukuoka.jp +hisayama.fukuoka.jp +iizuka.fukuoka.jp +inatsuki.fukuoka.jp +kaho.fukuoka.jp +kasuga.fukuoka.jp +kasuya.fukuoka.jp +kawara.fukuoka.jp +keisen.fukuoka.jp +koga.fukuoka.jp +kurate.fukuoka.jp +kurogi.fukuoka.jp +kurume.fukuoka.jp +minami.fukuoka.jp +miyako.fukuoka.jp +miyama.fukuoka.jp +miyawaka.fukuoka.jp +mizumaki.fukuoka.jp +munakata.fukuoka.jp +nakagawa.fukuoka.jp +nakama.fukuoka.jp +nishi.fukuoka.jp +nogata.fukuoka.jp +ogori.fukuoka.jp +okagaki.fukuoka.jp +okawa.fukuoka.jp +oki.fukuoka.jp +omuta.fukuoka.jp +onga.fukuoka.jp +onojo.fukuoka.jp +oto.fukuoka.jp +saigawa.fukuoka.jp +sasaguri.fukuoka.jp +shingu.fukuoka.jp +shinyoshitomi.fukuoka.jp +shonai.fukuoka.jp +soeda.fukuoka.jp +sue.fukuoka.jp +tachiarai.fukuoka.jp +tagawa.fukuoka.jp +takata.fukuoka.jp +toho.fukuoka.jp +toyotsu.fukuoka.jp +tsuiki.fukuoka.jp +ukiha.fukuoka.jp +umi.fukuoka.jp +usui.fukuoka.jp +yamada.fukuoka.jp +yame.fukuoka.jp +yanagawa.fukuoka.jp +yukuhashi.fukuoka.jp +aizubange.fukushima.jp +aizumisato.fukushima.jp +aizuwakamatsu.fukushima.jp +asakawa.fukushima.jp +bandai.fukushima.jp +date.fukushima.jp +fukushima.fukushima.jp +furudono.fukushima.jp +futaba.fukushima.jp +hanawa.fukushima.jp +higashi.fukushima.jp +hirata.fukushima.jp +hirono.fukushima.jp +iitate.fukushima.jp +inawashiro.fukushima.jp +ishikawa.fukushima.jp +iwaki.fukushima.jp +izumizaki.fukushima.jp +kagamiishi.fukushima.jp +kaneyama.fukushima.jp +kawamata.fukushima.jp +kitakata.fukushima.jp +kitashiobara.fukushima.jp +koori.fukushima.jp +koriyama.fukushima.jp +kunimi.fukushima.jp +miharu.fukushima.jp +mishima.fukushima.jp +namie.fukushima.jp +nango.fukushima.jp +nishiaizu.fukushima.jp +nishigo.fukushima.jp +okuma.fukushima.jp +omotego.fukushima.jp +ono.fukushima.jp +otama.fukushima.jp +samegawa.fukushima.jp +shimogo.fukushima.jp +shirakawa.fukushima.jp +showa.fukushima.jp +soma.fukushima.jp +sukagawa.fukushima.jp +taishin.fukushima.jp +tamakawa.fukushima.jp +tanagura.fukushima.jp +tenei.fukushima.jp +yabuki.fukushima.jp +yamato.fukushima.jp +yamatsuri.fukushima.jp +yanaizu.fukushima.jp +yugawa.fukushima.jp +anpachi.gifu.jp +ena.gifu.jp +gifu.gifu.jp +ginan.gifu.jp +godo.gifu.jp +gujo.gifu.jp +hashima.gifu.jp +hichiso.gifu.jp +hida.gifu.jp +higashishirakawa.gifu.jp +ibigawa.gifu.jp +ikeda.gifu.jp +kakamigahara.gifu.jp +kani.gifu.jp +kasahara.gifu.jp +kasamatsu.gifu.jp +kawaue.gifu.jp +kitagata.gifu.jp +mino.gifu.jp +minokamo.gifu.jp +mitake.gifu.jp +mizunami.gifu.jp +motosu.gifu.jp +nakatsugawa.gifu.jp +ogaki.gifu.jp +sakahogi.gifu.jp +seki.gifu.jp +sekigahara.gifu.jp +shirakawa.gifu.jp +tajimi.gifu.jp +takayama.gifu.jp +tarui.gifu.jp +toki.gifu.jp +tomika.gifu.jp +wanouchi.gifu.jp +yamagata.gifu.jp +yaotsu.gifu.jp +yoro.gifu.jp +annaka.gunma.jp +chiyoda.gunma.jp +fujioka.gunma.jp +higashiagatsuma.gunma.jp +isesaki.gunma.jp +itakura.gunma.jp +kanna.gunma.jp +kanra.gunma.jp +katashina.gunma.jp +kawaba.gunma.jp +kiryu.gunma.jp +kusatsu.gunma.jp +maebashi.gunma.jp +meiwa.gunma.jp +midori.gunma.jp +minakami.gunma.jp +naganohara.gunma.jp +nakanojo.gunma.jp +nanmoku.gunma.jp +numata.gunma.jp +oizumi.gunma.jp +ora.gunma.jp +ota.gunma.jp +shibukawa.gunma.jp +shimonita.gunma.jp +shinto.gunma.jp +showa.gunma.jp +takasaki.gunma.jp +takayama.gunma.jp +tamamura.gunma.jp +tatebayashi.gunma.jp +tomioka.gunma.jp +tsukiyono.gunma.jp +tsumagoi.gunma.jp +ueno.gunma.jp +yoshioka.gunma.jp +asaminami.hiroshima.jp +daiwa.hiroshima.jp +etajima.hiroshima.jp +fuchu.hiroshima.jp +fukuyama.hiroshima.jp +hatsukaichi.hiroshima.jp +higashihiroshima.hiroshima.jp +hongo.hiroshima.jp +jinsekikogen.hiroshima.jp +kaita.hiroshima.jp +kui.hiroshima.jp +kumano.hiroshima.jp +kure.hiroshima.jp +mihara.hiroshima.jp +miyoshi.hiroshima.jp +naka.hiroshima.jp +onomichi.hiroshima.jp +osakikamijima.hiroshima.jp +otake.hiroshima.jp +saka.hiroshima.jp +sera.hiroshima.jp +seranishi.hiroshima.jp +shinichi.hiroshima.jp +shobara.hiroshima.jp +takehara.hiroshima.jp +abashiri.hokkaido.jp +abira.hokkaido.jp +aibetsu.hokkaido.jp +akabira.hokkaido.jp +akkeshi.hokkaido.jp +asahikawa.hokkaido.jp +ashibetsu.hokkaido.jp +ashoro.hokkaido.jp +assabu.hokkaido.jp +atsuma.hokkaido.jp +bibai.hokkaido.jp +biei.hokkaido.jp +bifuka.hokkaido.jp +bihoro.hokkaido.jp +biratori.hokkaido.jp +chippubetsu.hokkaido.jp +chitose.hokkaido.jp +date.hokkaido.jp +ebetsu.hokkaido.jp +embetsu.hokkaido.jp +eniwa.hokkaido.jp +erimo.hokkaido.jp +esan.hokkaido.jp +esashi.hokkaido.jp +fukagawa.hokkaido.jp +fukushima.hokkaido.jp +furano.hokkaido.jp +furubira.hokkaido.jp +haboro.hokkaido.jp +hakodate.hokkaido.jp +hamatonbetsu.hokkaido.jp +hidaka.hokkaido.jp +higashikagura.hokkaido.jp +higashikawa.hokkaido.jp +hiroo.hokkaido.jp +hokuryu.hokkaido.jp +hokuto.hokkaido.jp +honbetsu.hokkaido.jp +horokanai.hokkaido.jp +horonobe.hokkaido.jp +ikeda.hokkaido.jp +imakane.hokkaido.jp +ishikari.hokkaido.jp +iwamizawa.hokkaido.jp +iwanai.hokkaido.jp +kamifurano.hokkaido.jp +kamikawa.hokkaido.jp +kamishihoro.hokkaido.jp +kamisunagawa.hokkaido.jp +kamoenai.hokkaido.jp +kayabe.hokkaido.jp +kembuchi.hokkaido.jp +kikonai.hokkaido.jp +kimobetsu.hokkaido.jp +kitahiroshima.hokkaido.jp +kitami.hokkaido.jp +kiyosato.hokkaido.jp +koshimizu.hokkaido.jp +kunneppu.hokkaido.jp +kuriyama.hokkaido.jp +kuromatsunai.hokkaido.jp +kushiro.hokkaido.jp +kutchan.hokkaido.jp +kyowa.hokkaido.jp +mashike.hokkaido.jp +matsumae.hokkaido.jp +mikasa.hokkaido.jp +minamifurano.hokkaido.jp +mombetsu.hokkaido.jp +moseushi.hokkaido.jp +mukawa.hokkaido.jp +muroran.hokkaido.jp +naie.hokkaido.jp +nakagawa.hokkaido.jp +nakasatsunai.hokkaido.jp +nakatombetsu.hokkaido.jp +nanae.hokkaido.jp +nanporo.hokkaido.jp +nayoro.hokkaido.jp +nemuro.hokkaido.jp +niikappu.hokkaido.jp +niki.hokkaido.jp +nishiokoppe.hokkaido.jp +noboribetsu.hokkaido.jp +numata.hokkaido.jp +obihiro.hokkaido.jp +obira.hokkaido.jp +oketo.hokkaido.jp +okoppe.hokkaido.jp +otaru.hokkaido.jp +otobe.hokkaido.jp +otofuke.hokkaido.jp +otoineppu.hokkaido.jp +oumu.hokkaido.jp +ozora.hokkaido.jp +pippu.hokkaido.jp +rankoshi.hokkaido.jp +rebun.hokkaido.jp +rikubetsu.hokkaido.jp +rishiri.hokkaido.jp +rishirifuji.hokkaido.jp +saroma.hokkaido.jp +sarufutsu.hokkaido.jp +shakotan.hokkaido.jp +shari.hokkaido.jp +shibecha.hokkaido.jp +shibetsu.hokkaido.jp +shikabe.hokkaido.jp +shikaoi.hokkaido.jp +shimamaki.hokkaido.jp +shimizu.hokkaido.jp +shimokawa.hokkaido.jp +shinshinotsu.hokkaido.jp +shintoku.hokkaido.jp +shiranuka.hokkaido.jp +shiraoi.hokkaido.jp +shiriuchi.hokkaido.jp +sobetsu.hokkaido.jp +sunagawa.hokkaido.jp +taiki.hokkaido.jp +takasu.hokkaido.jp +takikawa.hokkaido.jp +takinoue.hokkaido.jp +teshikaga.hokkaido.jp +tobetsu.hokkaido.jp +tohma.hokkaido.jp +tomakomai.hokkaido.jp +tomari.hokkaido.jp +toya.hokkaido.jp +toyako.hokkaido.jp +toyotomi.hokkaido.jp +toyoura.hokkaido.jp +tsubetsu.hokkaido.jp +tsukigata.hokkaido.jp +urakawa.hokkaido.jp +urausu.hokkaido.jp +uryu.hokkaido.jp +utashinai.hokkaido.jp +wakkanai.hokkaido.jp +wassamu.hokkaido.jp +yakumo.hokkaido.jp +yoichi.hokkaido.jp +aioi.hyogo.jp +akashi.hyogo.jp +ako.hyogo.jp +amagasaki.hyogo.jp +aogaki.hyogo.jp +asago.hyogo.jp +ashiya.hyogo.jp +awaji.hyogo.jp +fukusaki.hyogo.jp +goshiki.hyogo.jp +harima.hyogo.jp +himeji.hyogo.jp +ichikawa.hyogo.jp +inagawa.hyogo.jp +itami.hyogo.jp +kakogawa.hyogo.jp +kamigori.hyogo.jp +kamikawa.hyogo.jp +kasai.hyogo.jp +kasuga.hyogo.jp +kawanishi.hyogo.jp +miki.hyogo.jp +minamiawaji.hyogo.jp +nishinomiya.hyogo.jp +nishiwaki.hyogo.jp +ono.hyogo.jp +sanda.hyogo.jp +sannan.hyogo.jp +sasayama.hyogo.jp +sayo.hyogo.jp +shingu.hyogo.jp +shinonsen.hyogo.jp +shiso.hyogo.jp +sumoto.hyogo.jp +taishi.hyogo.jp +taka.hyogo.jp +takarazuka.hyogo.jp +takasago.hyogo.jp +takino.hyogo.jp +tamba.hyogo.jp +tatsuno.hyogo.jp +toyooka.hyogo.jp +yabu.hyogo.jp +yashiro.hyogo.jp +yoka.hyogo.jp +yokawa.hyogo.jp +ami.ibaraki.jp +asahi.ibaraki.jp +bando.ibaraki.jp +chikusei.ibaraki.jp +daigo.ibaraki.jp +fujishiro.ibaraki.jp +hitachi.ibaraki.jp +hitachinaka.ibaraki.jp +hitachiomiya.ibaraki.jp +hitachiota.ibaraki.jp +ibaraki.ibaraki.jp +ina.ibaraki.jp +inashiki.ibaraki.jp +itako.ibaraki.jp +iwama.ibaraki.jp +joso.ibaraki.jp +kamisu.ibaraki.jp +kasama.ibaraki.jp +kashima.ibaraki.jp +kasumigaura.ibaraki.jp +koga.ibaraki.jp +miho.ibaraki.jp +mito.ibaraki.jp +moriya.ibaraki.jp +naka.ibaraki.jp +namegata.ibaraki.jp +oarai.ibaraki.jp +ogawa.ibaraki.jp +omitama.ibaraki.jp +ryugasaki.ibaraki.jp +sakai.ibaraki.jp +sakuragawa.ibaraki.jp +shimodate.ibaraki.jp +shimotsuma.ibaraki.jp +shirosato.ibaraki.jp +sowa.ibaraki.jp +suifu.ibaraki.jp +takahagi.ibaraki.jp +tamatsukuri.ibaraki.jp +tokai.ibaraki.jp +tomobe.ibaraki.jp +tone.ibaraki.jp +toride.ibaraki.jp +tsuchiura.ibaraki.jp +tsukuba.ibaraki.jp +uchihara.ibaraki.jp +ushiku.ibaraki.jp +yachiyo.ibaraki.jp +yamagata.ibaraki.jp +yawara.ibaraki.jp +yuki.ibaraki.jp +anamizu.ishikawa.jp +hakui.ishikawa.jp +hakusan.ishikawa.jp +kaga.ishikawa.jp +kahoku.ishikawa.jp +kanazawa.ishikawa.jp +kawakita.ishikawa.jp +komatsu.ishikawa.jp +nakanoto.ishikawa.jp +nanao.ishikawa.jp +nomi.ishikawa.jp +nonoichi.ishikawa.jp +noto.ishikawa.jp +shika.ishikawa.jp +suzu.ishikawa.jp +tsubata.ishikawa.jp +tsurugi.ishikawa.jp +uchinada.ishikawa.jp +wajima.ishikawa.jp +fudai.iwate.jp +fujisawa.iwate.jp +hanamaki.iwate.jp +hiraizumi.iwate.jp +hirono.iwate.jp +ichinohe.iwate.jp +ichinoseki.iwate.jp +iwaizumi.iwate.jp +iwate.iwate.jp +joboji.iwate.jp +kamaishi.iwate.jp +kanegasaki.iwate.jp +karumai.iwate.jp +kawai.iwate.jp +kitakami.iwate.jp +kuji.iwate.jp +kunohe.iwate.jp +kuzumaki.iwate.jp +miyako.iwate.jp +mizusawa.iwate.jp +morioka.iwate.jp +ninohe.iwate.jp +noda.iwate.jp +ofunato.iwate.jp +oshu.iwate.jp +otsuchi.iwate.jp +rikuzentakata.iwate.jp +shiwa.iwate.jp +shizukuishi.iwate.jp +sumita.iwate.jp +tanohata.iwate.jp +tono.iwate.jp +yahaba.iwate.jp +yamada.iwate.jp +ayagawa.kagawa.jp +higashikagawa.kagawa.jp +kanonji.kagawa.jp +kotohira.kagawa.jp +manno.kagawa.jp +marugame.kagawa.jp +mitoyo.kagawa.jp +naoshima.kagawa.jp +sanuki.kagawa.jp +tadotsu.kagawa.jp +takamatsu.kagawa.jp +tonosho.kagawa.jp +uchinomi.kagawa.jp +utazu.kagawa.jp +zentsuji.kagawa.jp +akune.kagoshima.jp +amami.kagoshima.jp +hioki.kagoshima.jp +isa.kagoshima.jp +isen.kagoshima.jp +izumi.kagoshima.jp +kagoshima.kagoshima.jp +kanoya.kagoshima.jp +kawanabe.kagoshima.jp +kinko.kagoshima.jp +kouyama.kagoshima.jp +makurazaki.kagoshima.jp +matsumoto.kagoshima.jp +minamitane.kagoshima.jp +nakatane.kagoshima.jp +nishinoomote.kagoshima.jp +satsumasendai.kagoshima.jp +soo.kagoshima.jp +tarumizu.kagoshima.jp +yusui.kagoshima.jp +aikawa.kanagawa.jp +atsugi.kanagawa.jp +ayase.kanagawa.jp +chigasaki.kanagawa.jp +ebina.kanagawa.jp +fujisawa.kanagawa.jp +hadano.kanagawa.jp +hakone.kanagawa.jp +hiratsuka.kanagawa.jp +isehara.kanagawa.jp +kaisei.kanagawa.jp +kamakura.kanagawa.jp +kiyokawa.kanagawa.jp +matsuda.kanagawa.jp +minamiashigara.kanagawa.jp +miura.kanagawa.jp +nakai.kanagawa.jp +ninomiya.kanagawa.jp +odawara.kanagawa.jp +oi.kanagawa.jp +oiso.kanagawa.jp +sagamihara.kanagawa.jp +samukawa.kanagawa.jp +tsukui.kanagawa.jp +yamakita.kanagawa.jp +yamato.kanagawa.jp +yokosuka.kanagawa.jp +yugawara.kanagawa.jp +zama.kanagawa.jp +zushi.kanagawa.jp +aki.kochi.jp +geisei.kochi.jp +hidaka.kochi.jp +higashitsuno.kochi.jp +ino.kochi.jp +kagami.kochi.jp +kami.kochi.jp +kitagawa.kochi.jp +kochi.kochi.jp +mihara.kochi.jp +motoyama.kochi.jp +muroto.kochi.jp +nahari.kochi.jp +nakamura.kochi.jp +nankoku.kochi.jp +nishitosa.kochi.jp +niyodogawa.kochi.jp +ochi.kochi.jp +okawa.kochi.jp +otoyo.kochi.jp +otsuki.kochi.jp +sakawa.kochi.jp +sukumo.kochi.jp +susaki.kochi.jp +tosa.kochi.jp +tosashimizu.kochi.jp +toyo.kochi.jp +tsuno.kochi.jp +umaji.kochi.jp +yasuda.kochi.jp +yusuhara.kochi.jp +amakusa.kumamoto.jp +arao.kumamoto.jp +aso.kumamoto.jp +choyo.kumamoto.jp +gyokuto.kumamoto.jp +hitoyoshi.kumamoto.jp +kamiamakusa.kumamoto.jp +kashima.kumamoto.jp +kikuchi.kumamoto.jp +kosa.kumamoto.jp +kumamoto.kumamoto.jp +mashiki.kumamoto.jp +mifune.kumamoto.jp +minamata.kumamoto.jp +minamioguni.kumamoto.jp +nagasu.kumamoto.jp +nishihara.kumamoto.jp +oguni.kumamoto.jp +ozu.kumamoto.jp +sumoto.kumamoto.jp +takamori.kumamoto.jp +uki.kumamoto.jp +uto.kumamoto.jp +yamaga.kumamoto.jp +yamato.kumamoto.jp +yatsushiro.kumamoto.jp +ayabe.kyoto.jp +fukuchiyama.kyoto.jp +higashiyama.kyoto.jp +ide.kyoto.jp +ine.kyoto.jp +joyo.kyoto.jp +kameoka.kyoto.jp +kamo.kyoto.jp +kita.kyoto.jp +kizu.kyoto.jp +kumiyama.kyoto.jp +kyotamba.kyoto.jp +kyotanabe.kyoto.jp +kyotango.kyoto.jp +maizuru.kyoto.jp +minami.kyoto.jp +minamiyamashiro.kyoto.jp +miyazu.kyoto.jp +muko.kyoto.jp +nagaokakyo.kyoto.jp +nakagyo.kyoto.jp +nantan.kyoto.jp +oyamazaki.kyoto.jp +sakyo.kyoto.jp +seika.kyoto.jp +tanabe.kyoto.jp +uji.kyoto.jp +ujitawara.kyoto.jp +wazuka.kyoto.jp +yamashina.kyoto.jp +yawata.kyoto.jp +asahi.mie.jp +inabe.mie.jp +ise.mie.jp +kameyama.mie.jp +kawagoe.mie.jp +kiho.mie.jp +kisosaki.mie.jp +kiwa.mie.jp +komono.mie.jp +kumano.mie.jp +kuwana.mie.jp +matsusaka.mie.jp +meiwa.mie.jp +mihama.mie.jp +minamiise.mie.jp +misugi.mie.jp +miyama.mie.jp +nabari.mie.jp +shima.mie.jp +suzuka.mie.jp +tado.mie.jp +taiki.mie.jp +taki.mie.jp +tamaki.mie.jp +toba.mie.jp +tsu.mie.jp +udono.mie.jp +ureshino.mie.jp +watarai.mie.jp +yokkaichi.mie.jp +furukawa.miyagi.jp +higashimatsushima.miyagi.jp +ishinomaki.miyagi.jp +iwanuma.miyagi.jp +kakuda.miyagi.jp +kami.miyagi.jp +kawasaki.miyagi.jp +kesennuma.miyagi.jp +marumori.miyagi.jp +matsushima.miyagi.jp +minamisanriku.miyagi.jp +misato.miyagi.jp +murata.miyagi.jp +natori.miyagi.jp +ogawara.miyagi.jp +ohira.miyagi.jp +onagawa.miyagi.jp +osaki.miyagi.jp +rifu.miyagi.jp +semine.miyagi.jp +shibata.miyagi.jp +shichikashuku.miyagi.jp +shikama.miyagi.jp +shiogama.miyagi.jp +shiroishi.miyagi.jp +tagajo.miyagi.jp +taiwa.miyagi.jp +tome.miyagi.jp +tomiya.miyagi.jp +wakuya.miyagi.jp +watari.miyagi.jp +yamamoto.miyagi.jp +zao.miyagi.jp +aya.miyazaki.jp +ebino.miyazaki.jp +gokase.miyazaki.jp +hyuga.miyazaki.jp +kadogawa.miyazaki.jp +kawaminami.miyazaki.jp +kijo.miyazaki.jp +kitagawa.miyazaki.jp +kitakata.miyazaki.jp +kitaura.miyazaki.jp +kobayashi.miyazaki.jp +kunitomi.miyazaki.jp +kushima.miyazaki.jp +mimata.miyazaki.jp +miyakonojo.miyazaki.jp +miyazaki.miyazaki.jp +morotsuka.miyazaki.jp +nichinan.miyazaki.jp +nishimera.miyazaki.jp +nobeoka.miyazaki.jp +saito.miyazaki.jp +shiiba.miyazaki.jp +shintomi.miyazaki.jp +takaharu.miyazaki.jp +takanabe.miyazaki.jp +takazaki.miyazaki.jp +tsuno.miyazaki.jp +achi.nagano.jp +agematsu.nagano.jp +anan.nagano.jp +aoki.nagano.jp +asahi.nagano.jp +azumino.nagano.jp +chikuhoku.nagano.jp +chikuma.nagano.jp +chino.nagano.jp +fujimi.nagano.jp +hakuba.nagano.jp +hara.nagano.jp +hiraya.nagano.jp +iida.nagano.jp +iijima.nagano.jp +iiyama.nagano.jp +iizuna.nagano.jp +ikeda.nagano.jp +ikusaka.nagano.jp +ina.nagano.jp +karuizawa.nagano.jp +kawakami.nagano.jp +kiso.nagano.jp +kisofukushima.nagano.jp +kitaaiki.nagano.jp +komagane.nagano.jp +komoro.nagano.jp +matsukawa.nagano.jp +matsumoto.nagano.jp +miasa.nagano.jp +minamiaiki.nagano.jp +minamimaki.nagano.jp +minamiminowa.nagano.jp +minowa.nagano.jp +miyada.nagano.jp +miyota.nagano.jp +mochizuki.nagano.jp +nagano.nagano.jp +nagawa.nagano.jp +nagiso.nagano.jp +nakagawa.nagano.jp +nakano.nagano.jp +nozawaonsen.nagano.jp +obuse.nagano.jp +ogawa.nagano.jp +okaya.nagano.jp +omachi.nagano.jp +omi.nagano.jp +ookuwa.nagano.jp +ooshika.nagano.jp +otaki.nagano.jp +otari.nagano.jp +sakae.nagano.jp +sakaki.nagano.jp +saku.nagano.jp +sakuho.nagano.jp +shimosuwa.nagano.jp +shinanomachi.nagano.jp +shiojiri.nagano.jp +suwa.nagano.jp +suzaka.nagano.jp +takagi.nagano.jp +takamori.nagano.jp +takayama.nagano.jp +tateshina.nagano.jp +tatsuno.nagano.jp +togakushi.nagano.jp +togura.nagano.jp +tomi.nagano.jp +ueda.nagano.jp +wada.nagano.jp +yamagata.nagano.jp +yamanouchi.nagano.jp +yasaka.nagano.jp +yasuoka.nagano.jp +chijiwa.nagasaki.jp +futsu.nagasaki.jp +goto.nagasaki.jp +hasami.nagasaki.jp +hirado.nagasaki.jp +iki.nagasaki.jp +isahaya.nagasaki.jp +kawatana.nagasaki.jp +kuchinotsu.nagasaki.jp +matsuura.nagasaki.jp +nagasaki.nagasaki.jp +obama.nagasaki.jp +omura.nagasaki.jp +oseto.nagasaki.jp +saikai.nagasaki.jp +sasebo.nagasaki.jp +seihi.nagasaki.jp +shimabara.nagasaki.jp +shinkamigoto.nagasaki.jp +togitsu.nagasaki.jp +tsushima.nagasaki.jp +unzen.nagasaki.jp +ando.nara.jp +gose.nara.jp +heguri.nara.jp +higashiyoshino.nara.jp +ikaruga.nara.jp +ikoma.nara.jp +kamikitayama.nara.jp +kanmaki.nara.jp +kashiba.nara.jp +kashihara.nara.jp +katsuragi.nara.jp +kawai.nara.jp +kawakami.nara.jp +kawanishi.nara.jp +koryo.nara.jp +kurotaki.nara.jp +mitsue.nara.jp +miyake.nara.jp +nara.nara.jp +nosegawa.nara.jp +oji.nara.jp +ouda.nara.jp +oyodo.nara.jp +sakurai.nara.jp +sango.nara.jp +shimoichi.nara.jp +shimokitayama.nara.jp +shinjo.nara.jp +soni.nara.jp +takatori.nara.jp +tawaramoto.nara.jp +tenkawa.nara.jp +tenri.nara.jp +uda.nara.jp +yamatokoriyama.nara.jp +yamatotakada.nara.jp +yamazoe.nara.jp +yoshino.nara.jp +aga.niigata.jp +agano.niigata.jp +gosen.niigata.jp +itoigawa.niigata.jp +izumozaki.niigata.jp +joetsu.niigata.jp +kamo.niigata.jp +kariwa.niigata.jp +kashiwazaki.niigata.jp +minamiuonuma.niigata.jp +mitsuke.niigata.jp +muika.niigata.jp +murakami.niigata.jp +myoko.niigata.jp +nagaoka.niigata.jp +niigata.niigata.jp +ojiya.niigata.jp +omi.niigata.jp +sado.niigata.jp +sanjo.niigata.jp +seiro.niigata.jp +seirou.niigata.jp +sekikawa.niigata.jp +shibata.niigata.jp +tagami.niigata.jp +tainai.niigata.jp +tochio.niigata.jp +tokamachi.niigata.jp +tsubame.niigata.jp +tsunan.niigata.jp +uonuma.niigata.jp +yahiko.niigata.jp +yoita.niigata.jp +yuzawa.niigata.jp +beppu.oita.jp +bungoono.oita.jp +bungotakada.oita.jp +hasama.oita.jp +hiji.oita.jp +himeshima.oita.jp +hita.oita.jp +kamitsue.oita.jp +kokonoe.oita.jp +kuju.oita.jp +kunisaki.oita.jp +kusu.oita.jp +oita.oita.jp +saiki.oita.jp +taketa.oita.jp +tsukumi.oita.jp +usa.oita.jp +usuki.oita.jp +yufu.oita.jp +akaiwa.okayama.jp +asakuchi.okayama.jp +bizen.okayama.jp +hayashima.okayama.jp +ibara.okayama.jp +kagamino.okayama.jp +kasaoka.okayama.jp +kibichuo.okayama.jp +kumenan.okayama.jp +kurashiki.okayama.jp +maniwa.okayama.jp +misaki.okayama.jp +nagi.okayama.jp +niimi.okayama.jp +nishiawakura.okayama.jp +okayama.okayama.jp +satosho.okayama.jp +setouchi.okayama.jp +shinjo.okayama.jp +shoo.okayama.jp +soja.okayama.jp +takahashi.okayama.jp +tamano.okayama.jp +tsuyama.okayama.jp +wake.okayama.jp +yakage.okayama.jp +aguni.okinawa.jp +ginowan.okinawa.jp +ginoza.okinawa.jp +gushikami.okinawa.jp +haebaru.okinawa.jp +higashi.okinawa.jp +hirara.okinawa.jp +iheya.okinawa.jp +ishigaki.okinawa.jp +ishikawa.okinawa.jp +itoman.okinawa.jp +izena.okinawa.jp +kadena.okinawa.jp +kin.okinawa.jp +kitadaito.okinawa.jp +kitanakagusuku.okinawa.jp +kumejima.okinawa.jp +kunigami.okinawa.jp +minamidaito.okinawa.jp +motobu.okinawa.jp +nago.okinawa.jp +naha.okinawa.jp +nakagusuku.okinawa.jp +nakijin.okinawa.jp +nanjo.okinawa.jp +nishihara.okinawa.jp +ogimi.okinawa.jp +okinawa.okinawa.jp +onna.okinawa.jp +shimoji.okinawa.jp +taketomi.okinawa.jp +tarama.okinawa.jp +tokashiki.okinawa.jp +tomigusuku.okinawa.jp +tonaki.okinawa.jp +urasoe.okinawa.jp +uruma.okinawa.jp +yaese.okinawa.jp +yomitan.okinawa.jp +yonabaru.okinawa.jp +yonaguni.okinawa.jp +zamami.okinawa.jp +abeno.osaka.jp +chihayaakasaka.osaka.jp +chuo.osaka.jp +daito.osaka.jp +fujiidera.osaka.jp +habikino.osaka.jp +hannan.osaka.jp +higashiosaka.osaka.jp +higashisumiyoshi.osaka.jp +higashiyodogawa.osaka.jp +hirakata.osaka.jp +ibaraki.osaka.jp +ikeda.osaka.jp +izumi.osaka.jp +izumiotsu.osaka.jp +izumisano.osaka.jp +kadoma.osaka.jp +kaizuka.osaka.jp +kanan.osaka.jp +kashiwara.osaka.jp +katano.osaka.jp +kawachinagano.osaka.jp +kishiwada.osaka.jp +kita.osaka.jp +kumatori.osaka.jp +matsubara.osaka.jp +minato.osaka.jp +minoh.osaka.jp +misaki.osaka.jp +moriguchi.osaka.jp +neyagawa.osaka.jp +nishi.osaka.jp +nose.osaka.jp +osakasayama.osaka.jp +sakai.osaka.jp +sayama.osaka.jp +sennan.osaka.jp +settsu.osaka.jp +shijonawate.osaka.jp +shimamoto.osaka.jp +suita.osaka.jp +tadaoka.osaka.jp +taishi.osaka.jp +tajiri.osaka.jp +takaishi.osaka.jp +takatsuki.osaka.jp +tondabayashi.osaka.jp +toyonaka.osaka.jp +toyono.osaka.jp +yao.osaka.jp +ariake.saga.jp +arita.saga.jp +fukudomi.saga.jp +genkai.saga.jp +hamatama.saga.jp +hizen.saga.jp +imari.saga.jp +kamimine.saga.jp +kanzaki.saga.jp +karatsu.saga.jp +kashima.saga.jp +kitagata.saga.jp +kitahata.saga.jp +kiyama.saga.jp +kouhoku.saga.jp +kyuragi.saga.jp +nishiarita.saga.jp +ogi.saga.jp +omachi.saga.jp +ouchi.saga.jp +saga.saga.jp +shiroishi.saga.jp +taku.saga.jp +tara.saga.jp +tosu.saga.jp +yoshinogari.saga.jp +arakawa.saitama.jp +asaka.saitama.jp +chichibu.saitama.jp +fujimi.saitama.jp +fujimino.saitama.jp +fukaya.saitama.jp +hanno.saitama.jp +hanyu.saitama.jp +hasuda.saitama.jp +hatogaya.saitama.jp +hatoyama.saitama.jp +hidaka.saitama.jp +higashichichibu.saitama.jp +higashimatsuyama.saitama.jp +honjo.saitama.jp +ina.saitama.jp +iruma.saitama.jp +iwatsuki.saitama.jp +kamiizumi.saitama.jp +kamikawa.saitama.jp +kamisato.saitama.jp +kasukabe.saitama.jp +kawagoe.saitama.jp +kawaguchi.saitama.jp +kawajima.saitama.jp +kazo.saitama.jp +kitamoto.saitama.jp +koshigaya.saitama.jp +kounosu.saitama.jp +kuki.saitama.jp +kumagaya.saitama.jp +matsubushi.saitama.jp +minano.saitama.jp +misato.saitama.jp +miyashiro.saitama.jp +miyoshi.saitama.jp +moroyama.saitama.jp +nagatoro.saitama.jp +namegawa.saitama.jp +niiza.saitama.jp +ogano.saitama.jp +ogawa.saitama.jp +ogose.saitama.jp +okegawa.saitama.jp +omiya.saitama.jp +otaki.saitama.jp +ranzan.saitama.jp +ryokami.saitama.jp +saitama.saitama.jp +sakado.saitama.jp +satte.saitama.jp +sayama.saitama.jp +shiki.saitama.jp +shiraoka.saitama.jp +soka.saitama.jp +sugito.saitama.jp +toda.saitama.jp +tokigawa.saitama.jp +tokorozawa.saitama.jp +tsurugashima.saitama.jp +urawa.saitama.jp +warabi.saitama.jp +yashio.saitama.jp +yokoze.saitama.jp +yono.saitama.jp +yorii.saitama.jp +yoshida.saitama.jp +yoshikawa.saitama.jp +yoshimi.saitama.jp +aisho.shiga.jp +gamo.shiga.jp +higashiomi.shiga.jp +hikone.shiga.jp +koka.shiga.jp +konan.shiga.jp +kosei.shiga.jp +koto.shiga.jp +kusatsu.shiga.jp +maibara.shiga.jp +moriyama.shiga.jp +nagahama.shiga.jp +nishiazai.shiga.jp +notogawa.shiga.jp +omihachiman.shiga.jp +otsu.shiga.jp +ritto.shiga.jp +ryuoh.shiga.jp +takashima.shiga.jp +takatsuki.shiga.jp +torahime.shiga.jp +toyosato.shiga.jp +yasu.shiga.jp +akagi.shimane.jp +ama.shimane.jp +gotsu.shimane.jp +hamada.shimane.jp +higashiizumo.shimane.jp +hikawa.shimane.jp +hikimi.shimane.jp +izumo.shimane.jp +kakinoki.shimane.jp +masuda.shimane.jp +matsue.shimane.jp +misato.shimane.jp +nishinoshima.shimane.jp +ohda.shimane.jp +okinoshima.shimane.jp +okuizumo.shimane.jp +shimane.shimane.jp +tamayu.shimane.jp +tsuwano.shimane.jp +unnan.shimane.jp +yakumo.shimane.jp +yasugi.shimane.jp +yatsuka.shimane.jp +arai.shizuoka.jp +atami.shizuoka.jp +fuji.shizuoka.jp +fujieda.shizuoka.jp +fujikawa.shizuoka.jp +fujinomiya.shizuoka.jp +fukuroi.shizuoka.jp +gotemba.shizuoka.jp +haibara.shizuoka.jp +hamamatsu.shizuoka.jp +higashiizu.shizuoka.jp +ito.shizuoka.jp +iwata.shizuoka.jp +izu.shizuoka.jp +izunokuni.shizuoka.jp +kakegawa.shizuoka.jp +kannami.shizuoka.jp +kawanehon.shizuoka.jp +kawazu.shizuoka.jp +kikugawa.shizuoka.jp +kosai.shizuoka.jp +makinohara.shizuoka.jp +matsuzaki.shizuoka.jp +minamiizu.shizuoka.jp +mishima.shizuoka.jp +morimachi.shizuoka.jp +nishiizu.shizuoka.jp +numazu.shizuoka.jp +omaezaki.shizuoka.jp +shimada.shizuoka.jp +shimizu.shizuoka.jp +shimoda.shizuoka.jp +shizuoka.shizuoka.jp +susono.shizuoka.jp +yaizu.shizuoka.jp +yoshida.shizuoka.jp +ashikaga.tochigi.jp +bato.tochigi.jp +haga.tochigi.jp +ichikai.tochigi.jp +iwafune.tochigi.jp +kaminokawa.tochigi.jp +kanuma.tochigi.jp +karasuyama.tochigi.jp +kuroiso.tochigi.jp +mashiko.tochigi.jp +mibu.tochigi.jp +moka.tochigi.jp +motegi.tochigi.jp +nasu.tochigi.jp +nasushiobara.tochigi.jp +nikko.tochigi.jp +nishikata.tochigi.jp +nogi.tochigi.jp +ohira.tochigi.jp +ohtawara.tochigi.jp +oyama.tochigi.jp +sakura.tochigi.jp +sano.tochigi.jp +shimotsuke.tochigi.jp +shioya.tochigi.jp +takanezawa.tochigi.jp +tochigi.tochigi.jp +tsuga.tochigi.jp +ujiie.tochigi.jp +utsunomiya.tochigi.jp +yaita.tochigi.jp +aizumi.tokushima.jp +anan.tokushima.jp +ichiba.tokushima.jp +itano.tokushima.jp +kainan.tokushima.jp +komatsushima.tokushima.jp +matsushige.tokushima.jp +mima.tokushima.jp +minami.tokushima.jp +miyoshi.tokushima.jp +mugi.tokushima.jp +nakagawa.tokushima.jp +naruto.tokushima.jp +sanagochi.tokushima.jp +shishikui.tokushima.jp +tokushima.tokushima.jp +wajiki.tokushima.jp +adachi.tokyo.jp +akiruno.tokyo.jp +akishima.tokyo.jp +aogashima.tokyo.jp +arakawa.tokyo.jp +bunkyo.tokyo.jp +chiyoda.tokyo.jp +chofu.tokyo.jp +chuo.tokyo.jp +edogawa.tokyo.jp +fuchu.tokyo.jp +fussa.tokyo.jp +hachijo.tokyo.jp +hachioji.tokyo.jp +hamura.tokyo.jp +higashikurume.tokyo.jp +higashimurayama.tokyo.jp +higashiyamato.tokyo.jp +hino.tokyo.jp +hinode.tokyo.jp +hinohara.tokyo.jp +inagi.tokyo.jp +itabashi.tokyo.jp +katsushika.tokyo.jp +kita.tokyo.jp +kiyose.tokyo.jp +kodaira.tokyo.jp +koganei.tokyo.jp +kokubunji.tokyo.jp +komae.tokyo.jp +koto.tokyo.jp +kouzushima.tokyo.jp +kunitachi.tokyo.jp +machida.tokyo.jp +meguro.tokyo.jp +minato.tokyo.jp +mitaka.tokyo.jp +mizuho.tokyo.jp +musashimurayama.tokyo.jp +musashino.tokyo.jp +nakano.tokyo.jp +nerima.tokyo.jp +ogasawara.tokyo.jp +okutama.tokyo.jp +ome.tokyo.jp +oshima.tokyo.jp +ota.tokyo.jp +setagaya.tokyo.jp +shibuya.tokyo.jp +shinagawa.tokyo.jp +shinjuku.tokyo.jp +suginami.tokyo.jp +sumida.tokyo.jp +tachikawa.tokyo.jp +taito.tokyo.jp +tama.tokyo.jp +toshima.tokyo.jp +chizu.tottori.jp +hino.tottori.jp +kawahara.tottori.jp +koge.tottori.jp +kotoura.tottori.jp +misasa.tottori.jp +nanbu.tottori.jp +nichinan.tottori.jp +sakaiminato.tottori.jp +tottori.tottori.jp +wakasa.tottori.jp +yazu.tottori.jp +yonago.tottori.jp +asahi.toyama.jp +fuchu.toyama.jp +fukumitsu.toyama.jp +funahashi.toyama.jp +himi.toyama.jp +imizu.toyama.jp +inami.toyama.jp +johana.toyama.jp +kamiichi.toyama.jp +kurobe.toyama.jp +nakaniikawa.toyama.jp +namerikawa.toyama.jp +nanto.toyama.jp +nyuzen.toyama.jp +oyabe.toyama.jp +taira.toyama.jp +takaoka.toyama.jp +tateyama.toyama.jp +toga.toyama.jp +tonami.toyama.jp +toyama.toyama.jp +unazuki.toyama.jp +uozu.toyama.jp +yamada.toyama.jp +arida.wakayama.jp +aridagawa.wakayama.jp +gobo.wakayama.jp +hashimoto.wakayama.jp +hidaka.wakayama.jp +hirogawa.wakayama.jp +inami.wakayama.jp +iwade.wakayama.jp +kainan.wakayama.jp +kamitonda.wakayama.jp +katsuragi.wakayama.jp +kimino.wakayama.jp +kinokawa.wakayama.jp +kitayama.wakayama.jp +koya.wakayama.jp +koza.wakayama.jp +kozagawa.wakayama.jp +kudoyama.wakayama.jp +kushimoto.wakayama.jp +mihama.wakayama.jp +misato.wakayama.jp +nachikatsuura.wakayama.jp +shingu.wakayama.jp +shirahama.wakayama.jp +taiji.wakayama.jp +tanabe.wakayama.jp +wakayama.wakayama.jp +yuasa.wakayama.jp +yura.wakayama.jp +asahi.yamagata.jp +funagata.yamagata.jp +higashine.yamagata.jp +iide.yamagata.jp +kahoku.yamagata.jp +kaminoyama.yamagata.jp +kaneyama.yamagata.jp +kawanishi.yamagata.jp +mamurogawa.yamagata.jp +mikawa.yamagata.jp +murayama.yamagata.jp +nagai.yamagata.jp +nakayama.yamagata.jp +nanyo.yamagata.jp +nishikawa.yamagata.jp +obanazawa.yamagata.jp +oe.yamagata.jp +oguni.yamagata.jp +ohkura.yamagata.jp +oishida.yamagata.jp +sagae.yamagata.jp +sakata.yamagata.jp +sakegawa.yamagata.jp +shinjo.yamagata.jp +shirataka.yamagata.jp +shonai.yamagata.jp +takahata.yamagata.jp +tendo.yamagata.jp +tozawa.yamagata.jp +tsuruoka.yamagata.jp +yamagata.yamagata.jp +yamanobe.yamagata.jp +yonezawa.yamagata.jp +yuza.yamagata.jp +abu.yamaguchi.jp +hagi.yamaguchi.jp +hikari.yamaguchi.jp +hofu.yamaguchi.jp +iwakuni.yamaguchi.jp +kudamatsu.yamaguchi.jp +mitou.yamaguchi.jp +nagato.yamaguchi.jp +oshima.yamaguchi.jp +shimonoseki.yamaguchi.jp +shunan.yamaguchi.jp +tabuse.yamaguchi.jp +tokuyama.yamaguchi.jp +toyota.yamaguchi.jp +ube.yamaguchi.jp +yuu.yamaguchi.jp +chuo.yamanashi.jp +doshi.yamanashi.jp +fuefuki.yamanashi.jp +fujikawa.yamanashi.jp +fujikawaguchiko.yamanashi.jp +fujiyoshida.yamanashi.jp +hayakawa.yamanashi.jp +hokuto.yamanashi.jp +ichikawamisato.yamanashi.jp +kai.yamanashi.jp +kofu.yamanashi.jp +koshu.yamanashi.jp +kosuge.yamanashi.jp +minami-alps.yamanashi.jp +minobu.yamanashi.jp +nakamichi.yamanashi.jp +nanbu.yamanashi.jp +narusawa.yamanashi.jp +nirasaki.yamanashi.jp +nishikatsura.yamanashi.jp +oshino.yamanashi.jp +otsuki.yamanashi.jp +showa.yamanashi.jp +tabayama.yamanashi.jp +tsuru.yamanashi.jp +uenohara.yamanashi.jp +yamanakako.yamanashi.jp +yamanashi.yamanashi.jp + +// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 +*.ke + +// kg : http://www.domain.kg/dmn_n.html +kg +org.kg +net.kg +com.kg +edu.kg +gov.kg +mil.kg + +// kh : http://www.mptc.gov.kh/dns_registration.htm +*.kh + +// ki : http://www.ki/dns/index.html +ki +edu.ki +biz.ki +net.ki +org.ki +gov.ki +info.ki +com.ki + +// km : https://en.wikipedia.org/wiki/.km +// http://www.domaine.km/documents/charte.doc +km +org.km +nom.km +gov.km +prd.km +tm.km +edu.km +mil.km +ass.km +com.km +// These are only mentioned as proposed suggestions at domaine.km, but +// https://en.wikipedia.org/wiki/.km says they're available for registration: +coop.km +asso.km +presse.km +medecin.km +notaires.km +pharmaciens.km +veterinaire.km +gouv.km + +// kn : https://en.wikipedia.org/wiki/.kn +// http://www.dot.kn/domainRules.html +kn +net.kn +org.kn +edu.kn +gov.kn + +// kp : http://www.kcce.kp/en_index.php +kp +com.kp +edu.kp +gov.kp +org.kp +rep.kp +tra.kp + +// kr : https://en.wikipedia.org/wiki/.kr +// see also: http://domain.nida.or.kr/eng/registration.jsp +kr +ac.kr +co.kr +es.kr +go.kr +hs.kr +kg.kr +mil.kr +ms.kr +ne.kr +or.kr +pe.kr +re.kr +sc.kr +// kr geographical names +busan.kr +chungbuk.kr +chungnam.kr +daegu.kr +daejeon.kr +gangwon.kr +gwangju.kr +gyeongbuk.kr +gyeonggi.kr +gyeongnam.kr +incheon.kr +jeju.kr +jeonbuk.kr +jeonnam.kr +seoul.kr +ulsan.kr + +// kw : https://en.wikipedia.org/wiki/.kw +*.kw + +// ky : http://www.icta.ky/da_ky_reg_dom.php +// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17 +ky +edu.ky +gov.ky +com.ky +org.ky +net.ky + +// kz : https://en.wikipedia.org/wiki/.kz +// see also: http://www.nic.kz/rules/index.jsp +kz +org.kz +edu.kz +net.kz +gov.kz +mil.kz +com.kz + +// la : https://en.wikipedia.org/wiki/.la +// Submitted by registry <gavin.brown@nic.la> +la +int.la +net.la +info.la +edu.la +gov.la +per.la +com.la +org.la + +// lb : https://en.wikipedia.org/wiki/.lb +// Submitted by registry <randy@psg.com> +lb +com.lb +edu.lb +gov.lb +net.lb +org.lb + +// lc : https://en.wikipedia.org/wiki/.lc +// see also: http://www.nic.lc/rules.htm +lc +com.lc +net.lc +co.lc +org.lc +edu.lc +gov.lc + +// li : https://en.wikipedia.org/wiki/.li +li + +// lk : http://www.nic.lk/seclevpr.html +lk +gov.lk +sch.lk +net.lk +int.lk +com.lk +org.lk +edu.lk +ngo.lk +soc.lk +web.lk +ltd.lk +assn.lk +grp.lk +hotel.lk +ac.lk + +// lr : http://psg.com/dns/lr/lr.txt +// Submitted by registry <randy@psg.com> +lr +com.lr +edu.lr +gov.lr +org.lr +net.lr + +// ls : https://en.wikipedia.org/wiki/.ls +ls +co.ls +org.ls + +// lt : https://en.wikipedia.org/wiki/.lt +lt +// gov.lt : http://www.gov.lt/index_en.php +gov.lt + +// lu : http://www.dns.lu/en/ +lu + +// lv : http://www.nic.lv/DNS/En/generic.php +lv +com.lv +edu.lv +gov.lv +org.lv +mil.lv +id.lv +net.lv +asn.lv +conf.lv + +// ly : http://www.nic.ly/regulations.php +ly +com.ly +net.ly +gov.ly +plc.ly +edu.ly +sch.ly +med.ly +org.ly +id.ly + +// ma : https://en.wikipedia.org/wiki/.ma +// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf +ma +co.ma +net.ma +gov.ma +org.ma +ac.ma +press.ma + +// mc : http://www.nic.mc/ +mc +tm.mc +asso.mc + +// md : https://en.wikipedia.org/wiki/.md +md + +// me : https://en.wikipedia.org/wiki/.me +me +co.me +net.me +org.me +edu.me +ac.me +gov.me +its.me +priv.me + +// mg : http://nic.mg/nicmg/?page_id=39 +mg +org.mg +nom.mg +gov.mg +prd.mg +tm.mg +edu.mg +mil.mg +com.mg +co.mg + +// mh : https://en.wikipedia.org/wiki/.mh +mh + +// mil : https://en.wikipedia.org/wiki/.mil +mil + +// mk : https://en.wikipedia.org/wiki/.mk +// see also: http://dns.marnet.net.mk/postapka.php +mk +com.mk +org.mk +net.mk +edu.mk +gov.mk +inf.mk +name.mk + +// ml : http://www.gobin.info/domainname/ml-template.doc +// see also: https://en.wikipedia.org/wiki/.ml +ml +com.ml +edu.ml +gouv.ml +gov.ml +net.ml +org.ml +presse.ml + +// mm : https://en.wikipedia.org/wiki/.mm +*.mm + +// mn : https://en.wikipedia.org/wiki/.mn +mn +gov.mn +edu.mn +org.mn + +// mo : http://www.monic.net.mo/ +mo +com.mo +net.mo +org.mo +edu.mo +gov.mo + +// mobi : https://en.wikipedia.org/wiki/.mobi +mobi + +// mp : http://www.dot.mp/ +// Confirmed by registry <dcamacho@saipan.com> 2008-06-17 +mp + +// mq : https://en.wikipedia.org/wiki/.mq +mq + +// mr : https://en.wikipedia.org/wiki/.mr +mr +gov.mr + +// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf +ms +com.ms +edu.ms +gov.ms +net.ms +org.ms + +// mt : https://www.nic.org.mt/go/policy +// Submitted by registry <help@nic.org.mt> +mt +com.mt +edu.mt +net.mt +org.mt + +// mu : https://en.wikipedia.org/wiki/.mu +mu +com.mu +net.mu +org.mu +gov.mu +ac.mu +co.mu +or.mu + +// museum : http://about.museum/naming/ +// http://index.museum/ +museum +academy.museum +agriculture.museum +air.museum +airguard.museum +alabama.museum +alaska.museum +amber.museum +ambulance.museum +american.museum +americana.museum +americanantiques.museum +americanart.museum +amsterdam.museum +and.museum +annefrank.museum +anthro.museum +anthropology.museum +antiques.museum +aquarium.museum +arboretum.museum +archaeological.museum +archaeology.museum +architecture.museum +art.museum +artanddesign.museum +artcenter.museum +artdeco.museum +arteducation.museum +artgallery.museum +arts.museum +artsandcrafts.museum +asmatart.museum +assassination.museum +assisi.museum +association.museum +astronomy.museum +atlanta.museum +austin.museum +australia.museum +automotive.museum +aviation.museum +axis.museum +badajoz.museum +baghdad.museum +bahn.museum +bale.museum +baltimore.museum +barcelona.museum +baseball.museum +basel.museum +baths.museum +bauern.museum +beauxarts.museum +beeldengeluid.museum +bellevue.museum +bergbau.museum +berkeley.museum +berlin.museum +bern.museum +bible.museum +bilbao.museum +bill.museum +birdart.museum +birthplace.museum +bonn.museum +boston.museum +botanical.museum +botanicalgarden.museum +botanicgarden.museum +botany.museum +brandywinevalley.museum +brasil.museum +bristol.museum +british.museum +britishcolumbia.museum +broadcast.museum +brunel.museum +brussel.museum +brussels.museum +bruxelles.museum +building.museum +burghof.museum +bus.museum +bushey.museum +cadaques.museum +california.museum +cambridge.museum +can.museum +canada.museum +capebreton.museum +carrier.museum +cartoonart.museum +casadelamoneda.museum +castle.museum +castres.museum +celtic.museum +center.museum +chattanooga.museum +cheltenham.museum +chesapeakebay.museum +chicago.museum +children.museum +childrens.museum +childrensgarden.museum +chiropractic.museum +chocolate.museum +christiansburg.museum +cincinnati.museum +cinema.museum +circus.museum +civilisation.museum +civilization.museum +civilwar.museum +clinton.museum +clock.museum +coal.museum +coastaldefence.museum +cody.museum +coldwar.museum +collection.museum +colonialwilliamsburg.museum +coloradoplateau.museum +columbia.museum +columbus.museum +communication.museum +communications.museum +community.museum +computer.museum +computerhistory.museum +comunicações.museum +contemporary.museum +contemporaryart.museum +convent.museum +copenhagen.museum +corporation.museum +correios-e-telecomunicações.museum +corvette.museum +costume.museum +countryestate.museum +county.museum +crafts.museum +cranbrook.museum +creation.museum +cultural.museum +culturalcenter.museum +culture.museum +cyber.museum +cymru.museum +dali.museum +dallas.museum +database.museum +ddr.museum +decorativearts.museum +delaware.museum +delmenhorst.museum +denmark.museum +depot.museum +design.museum +detroit.museum +dinosaur.museum +discovery.museum +dolls.museum +donostia.museum +durham.museum +eastafrica.museum +eastcoast.museum +education.museum +educational.museum +egyptian.museum +eisenbahn.museum +elburg.museum +elvendrell.museum +embroidery.museum +encyclopedic.museum +england.museum +entomology.museum +environment.museum +environmentalconservation.museum +epilepsy.museum +essex.museum +estate.museum +ethnology.museum +exeter.museum +exhibition.museum +family.museum +farm.museum +farmequipment.museum +farmers.museum +farmstead.museum +field.museum +figueres.museum +filatelia.museum +film.museum +fineart.museum +finearts.museum +finland.museum +flanders.museum +florida.museum +force.museum +fortmissoula.museum +fortworth.museum +foundation.museum +francaise.museum +frankfurt.museum +franziskaner.museum +freemasonry.museum +freiburg.museum +fribourg.museum +frog.museum +fundacio.museum +furniture.museum +gallery.museum +garden.museum +gateway.museum +geelvinck.museum +gemological.museum +geology.museum +georgia.museum +giessen.museum +glas.museum +glass.museum +gorge.museum +grandrapids.museum +graz.museum +guernsey.museum +halloffame.museum +hamburg.museum +handson.museum +harvestcelebration.museum +hawaii.museum +health.museum +heimatunduhren.museum +hellas.museum +helsinki.museum +hembygdsforbund.museum +heritage.museum +histoire.museum +historical.museum +historicalsociety.museum +historichouses.museum +historisch.museum +historisches.museum +history.museum +historyofscience.museum +horology.museum +house.museum +humanities.museum +illustration.museum +imageandsound.museum +indian.museum +indiana.museum +indianapolis.museum +indianmarket.museum +intelligence.museum +interactive.museum +iraq.museum +iron.museum +isleofman.museum +jamison.museum +jefferson.museum +jerusalem.museum +jewelry.museum +jewish.museum +jewishart.museum +jfk.museum +journalism.museum +judaica.museum +judygarland.museum +juedisches.museum +juif.museum +karate.museum +karikatur.museum +kids.museum +koebenhavn.museum +koeln.museum +kunst.museum +kunstsammlung.museum +kunstunddesign.museum +labor.museum +labour.museum +lajolla.museum +lancashire.museum +landes.museum +lans.museum +läns.museum +larsson.museum +lewismiller.museum +lincoln.museum +linz.museum +living.museum +livinghistory.museum +localhistory.museum +london.museum +losangeles.museum +louvre.museum +loyalist.museum +lucerne.museum +luxembourg.museum +luzern.museum +mad.museum +madrid.museum +mallorca.museum +manchester.museum +mansion.museum +mansions.museum +manx.museum +marburg.museum +maritime.museum +maritimo.museum +maryland.museum +marylhurst.museum +media.museum +medical.museum +medizinhistorisches.museum +meeres.museum +memorial.museum +mesaverde.museum +michigan.museum +midatlantic.museum +military.museum +mill.museum +miners.museum +mining.museum +minnesota.museum +missile.museum +missoula.museum +modern.museum +moma.museum +money.museum +monmouth.museum +monticello.museum +montreal.museum +moscow.museum +motorcycle.museum +muenchen.museum +muenster.museum +mulhouse.museum +muncie.museum +museet.museum +museumcenter.museum +museumvereniging.museum +music.museum +national.museum +nationalfirearms.museum +nationalheritage.museum +nativeamerican.museum +naturalhistory.museum +naturalhistorymuseum.museum +naturalsciences.museum +nature.museum +naturhistorisches.museum +natuurwetenschappen.museum +naumburg.museum +naval.museum +nebraska.museum +neues.museum +newhampshire.museum +newjersey.museum +newmexico.museum +newport.museum +newspaper.museum +newyork.museum +niepce.museum +norfolk.museum +north.museum +nrw.museum +nuernberg.museum +nuremberg.museum +nyc.museum +nyny.museum +oceanographic.museum +oceanographique.museum +omaha.museum +online.museum +ontario.museum +openair.museum +oregon.museum +oregontrail.museum +otago.museum +oxford.museum +pacific.museum +paderborn.museum +palace.museum +paleo.museum +palmsprings.museum +panama.museum +paris.museum +pasadena.museum +pharmacy.museum +philadelphia.museum +philadelphiaarea.museum +philately.museum +phoenix.museum +photography.museum +pilots.museum +pittsburgh.museum +planetarium.museum +plantation.museum +plants.museum +plaza.museum +portal.museum +portland.museum +portlligat.museum +posts-and-telecommunications.museum +preservation.museum +presidio.museum +press.museum +project.museum +public.museum +pubol.museum +quebec.museum +railroad.museum +railway.museum +research.museum +resistance.museum +riodejaneiro.museum +rochester.museum +rockart.museum +roma.museum +russia.museum +saintlouis.museum +salem.museum +salvadordali.museum +salzburg.museum +sandiego.museum +sanfrancisco.museum +santabarbara.museum +santacruz.museum +santafe.museum +saskatchewan.museum +satx.museum +savannahga.museum +schlesisches.museum +schoenbrunn.museum +schokoladen.museum +school.museum +schweiz.museum +science.museum +scienceandhistory.museum +scienceandindustry.museum +sciencecenter.museum +sciencecenters.museum +science-fiction.museum +sciencehistory.museum +sciences.museum +sciencesnaturelles.museum +scotland.museum +seaport.museum +settlement.museum +settlers.museum +shell.museum +sherbrooke.museum +sibenik.museum +silk.museum +ski.museum +skole.museum +society.museum +sologne.museum +soundandvision.museum +southcarolina.museum +southwest.museum +space.museum +spy.museum +square.museum +stadt.museum +stalbans.museum +starnberg.museum +state.museum +stateofdelaware.museum +station.museum +steam.museum +steiermark.museum +stjohn.museum +stockholm.museum +stpetersburg.museum +stuttgart.museum +suisse.museum +surgeonshall.museum +surrey.museum +svizzera.museum +sweden.museum +sydney.museum +tank.museum +tcm.museum +technology.museum +telekommunikation.museum +television.museum +texas.museum +textile.museum +theater.museum +time.museum +timekeeping.museum +topology.museum +torino.museum +touch.museum +town.museum +transport.museum +tree.museum +trolley.museum +trust.museum +trustee.museum +uhren.museum +ulm.museum +undersea.museum +university.museum +usa.museum +usantiques.museum +usarts.museum +uscountryestate.museum +usculture.museum +usdecorativearts.museum +usgarden.museum +ushistory.museum +ushuaia.museum +uslivinghistory.museum +utah.museum +uvic.museum +valley.museum +vantaa.museum +versailles.museum +viking.museum +village.museum +virginia.museum +virtual.museum +virtuel.museum +vlaanderen.museum +volkenkunde.museum +wales.museum +wallonie.museum +war.museum +washingtondc.museum +watchandclock.museum +watch-and-clock.museum +western.museum +westfalen.museum +whaling.museum +wildlife.museum +williamsburg.museum +windmill.museum +workshop.museum +york.museum +yorkshire.museum +yosemite.museum +youth.museum +zoological.museum +zoology.museum +ירושלים.museum +иком.museum + +// mv : https://en.wikipedia.org/wiki/.mv +// "mv" included because, contra Wikipedia, google.mv exists. +mv +aero.mv +biz.mv +com.mv +coop.mv +edu.mv +gov.mv +info.mv +int.mv +mil.mv +museum.mv +name.mv +net.mv +org.mv +pro.mv + +// mw : http://www.registrar.mw/ +mw +ac.mw +biz.mw +co.mw +com.mw +coop.mw +edu.mw +gov.mw +int.mw +museum.mw +net.mw +org.mw + +// mx : http://www.nic.mx/ +// Submitted by registry <farias@nic.mx> +mx +com.mx +org.mx +gob.mx +edu.mx +net.mx + +// my : http://www.mynic.net.my/ +my +com.my +net.my +org.my +gov.my +edu.my +mil.my +name.my + +// mz : http://www.gobin.info/domainname/mz-template.doc +*.mz +!teledata.mz + +// na : http://www.na-nic.com.na/ +// http://www.info.na/domain/ +na +info.na +pro.na +name.na +school.na +or.na +dr.na +us.na +mx.na +ca.na +in.na +cc.na +tv.na +ws.na +mobi.na +co.na +com.na +org.na + +// name : has 2nd-level tlds, but there's no list of them +name + +// nc : http://www.cctld.nc/ +nc +asso.nc + +// ne : https://en.wikipedia.org/wiki/.ne +ne + +// net : https://en.wikipedia.org/wiki/.net +net + +// nf : https://en.wikipedia.org/wiki/.nf +nf +com.nf +net.nf +per.nf +rec.nf +web.nf +arts.nf +firm.nf +info.nf +other.nf +store.nf + +// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds +ng +com.ng +edu.ng +gov.ng +i.ng +mil.ng +mobi.ng +name.ng +net.ng +org.ng +sch.ng + +// ni : http://www.nic.ni/ +com.ni +gob.ni +edu.ni +org.ni +nom.ni +net.ni +mil.ni +co.ni +biz.ni +web.ni +int.ni +ac.ni +in.ni +info.ni + +// nl : https://en.wikipedia.org/wiki/.nl +// https://www.sidn.nl/ +// ccTLD for the Netherlands +nl + +// BV.nl will be a registry for dutch BV's (besloten vennootschap) +bv.nl + +// no : http://www.norid.no/regelverk/index.en.html +// The Norwegian registry has declined to notify us of updates. The web pages +// referenced below are the official source of the data. There is also an +// announce mailing list: +// https://postlister.uninett.no/sympa/info/norid-diskusjon +no +// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html +fhs.no +vgs.no +fylkesbibl.no +folkebibl.no +museum.no +idrett.no +priv.no +// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html +mil.no +stat.no +dep.no +kommune.no +herad.no +// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html +// counties +aa.no +ah.no +bu.no +fm.no +hl.no +hm.no +jan-mayen.no +mr.no +nl.no +nt.no +of.no +ol.no +oslo.no +rl.no +sf.no +st.no +svalbard.no +tm.no +tr.no +va.no +vf.no +// primary and lower secondary schools per county +gs.aa.no +gs.ah.no +gs.bu.no +gs.fm.no +gs.hl.no +gs.hm.no +gs.jan-mayen.no +gs.mr.no +gs.nl.no +gs.nt.no +gs.of.no +gs.ol.no +gs.oslo.no +gs.rl.no +gs.sf.no +gs.st.no +gs.svalbard.no +gs.tm.no +gs.tr.no +gs.va.no +gs.vf.no +// cities +akrehamn.no +åkrehamn.no +algard.no +ålgård.no +arna.no +brumunddal.no +bryne.no +bronnoysund.no +brønnøysund.no +drobak.no +drøbak.no +egersund.no +fetsund.no +floro.no +florø.no +fredrikstad.no +hokksund.no +honefoss.no +hønefoss.no +jessheim.no +jorpeland.no +jørpeland.no +kirkenes.no +kopervik.no +krokstadelva.no +langevag.no +langevåg.no +leirvik.no +mjondalen.no +mjøndalen.no +mo-i-rana.no +mosjoen.no +mosjøen.no +nesoddtangen.no +orkanger.no +osoyro.no +osøyro.no +raholt.no +råholt.no +sandnessjoen.no +sandnessjøen.no +skedsmokorset.no +slattum.no +spjelkavik.no +stathelle.no +stavern.no +stjordalshalsen.no +stjørdalshalsen.no +tananger.no +tranby.no +vossevangen.no +// communities +afjord.no +åfjord.no +agdenes.no +al.no +ål.no +alesund.no +ålesund.no +alstahaug.no +alta.no +áltá.no +alaheadju.no +álaheadju.no +alvdal.no +amli.no +åmli.no +amot.no +åmot.no +andebu.no +andoy.no +andøy.no +andasuolo.no +ardal.no +årdal.no +aremark.no +arendal.no +ås.no +aseral.no +åseral.no +asker.no +askim.no +askvoll.no +askoy.no +askøy.no +asnes.no +åsnes.no +audnedaln.no +aukra.no +aure.no +aurland.no +aurskog-holand.no +aurskog-høland.no +austevoll.no +austrheim.no +averoy.no +averøy.no +balestrand.no +ballangen.no +balat.no +bálát.no +balsfjord.no +bahccavuotna.no +báhccavuotna.no +bamble.no +bardu.no +beardu.no +beiarn.no +bajddar.no +bájddar.no +baidar.no +báidár.no +berg.no +bergen.no +berlevag.no +berlevåg.no +bearalvahki.no +bearalváhki.no +bindal.no +birkenes.no +bjarkoy.no +bjarkøy.no +bjerkreim.no +bjugn.no +bodo.no +bodø.no +badaddja.no +bådåddjå.no +budejju.no +bokn.no +bremanger.no +bronnoy.no +brønnøy.no +bygland.no +bykle.no +barum.no +bærum.no +bo.telemark.no +bø.telemark.no +bo.nordland.no +bø.nordland.no +bievat.no +bievát.no +bomlo.no +bømlo.no +batsfjord.no +båtsfjord.no +bahcavuotna.no +báhcavuotna.no +dovre.no +drammen.no +drangedal.no +dyroy.no +dyrøy.no +donna.no +dønna.no +eid.no +eidfjord.no +eidsberg.no +eidskog.no +eidsvoll.no +eigersund.no +elverum.no +enebakk.no +engerdal.no +etne.no +etnedal.no +evenes.no +evenassi.no +evenášši.no +evje-og-hornnes.no +farsund.no +fauske.no +fuossko.no +fuoisku.no +fedje.no +fet.no +finnoy.no +finnøy.no +fitjar.no +fjaler.no +fjell.no +flakstad.no +flatanger.no +flekkefjord.no +flesberg.no +flora.no +fla.no +flå.no +folldal.no +forsand.no +fosnes.no +frei.no +frogn.no +froland.no +frosta.no +frana.no +fræna.no +froya.no +frøya.no +fusa.no +fyresdal.no +forde.no +førde.no +gamvik.no +gangaviika.no +gáŋgaviika.no +gaular.no +gausdal.no +gildeskal.no +gildeskål.no +giske.no +gjemnes.no +gjerdrum.no +gjerstad.no +gjesdal.no +gjovik.no +gjøvik.no +gloppen.no +gol.no +gran.no +grane.no +granvin.no +gratangen.no +grimstad.no +grong.no +kraanghke.no +kråanghke.no +grue.no +gulen.no +hadsel.no +halden.no +halsa.no +hamar.no +hamaroy.no +habmer.no +hábmer.no +hapmir.no +hápmir.no +hammerfest.no +hammarfeasta.no +hámmárfeasta.no +haram.no +hareid.no +harstad.no +hasvik.no +aknoluokta.no +ákŋoluokta.no +hattfjelldal.no +aarborte.no +haugesund.no +hemne.no +hemnes.no +hemsedal.no +heroy.more-og-romsdal.no +herøy.møre-og-romsdal.no +heroy.nordland.no +herøy.nordland.no +hitra.no +hjartdal.no +hjelmeland.no +hobol.no +hobøl.no +hof.no +hol.no +hole.no +holmestrand.no +holtalen.no +holtålen.no +hornindal.no +horten.no +hurdal.no +hurum.no +hvaler.no +hyllestad.no +hagebostad.no +hægebostad.no +hoyanger.no +høyanger.no +hoylandet.no +høylandet.no +ha.no +hå.no +ibestad.no +inderoy.no +inderøy.no +iveland.no +jevnaker.no +jondal.no +jolster.no +jølster.no +karasjok.no +karasjohka.no +kárášjohka.no +karlsoy.no +galsa.no +gálsá.no +karmoy.no +karmøy.no +kautokeino.no +guovdageaidnu.no +klepp.no +klabu.no +klæbu.no +kongsberg.no +kongsvinger.no +kragero.no +kragerø.no +kristiansand.no +kristiansund.no +krodsherad.no +krødsherad.no +kvalsund.no +rahkkeravju.no +ráhkkerávju.no +kvam.no +kvinesdal.no +kvinnherad.no +kviteseid.no +kvitsoy.no +kvitsøy.no +kvafjord.no +kvæfjord.no +giehtavuoatna.no +kvanangen.no +kvænangen.no +navuotna.no +návuotna.no +kafjord.no +kåfjord.no +gaivuotna.no +gáivuotna.no +larvik.no +lavangen.no +lavagis.no +loabat.no +loabát.no +lebesby.no +davvesiida.no +leikanger.no +leirfjord.no +leka.no +leksvik.no +lenvik.no +leangaviika.no +leaŋgaviika.no +lesja.no +levanger.no +lier.no +lierne.no +lillehammer.no +lillesand.no +lindesnes.no +lindas.no +lindås.no +lom.no +loppa.no +lahppi.no +láhppi.no +lund.no +lunner.no +luroy.no +lurøy.no +luster.no +lyngdal.no +lyngen.no +ivgu.no +lardal.no +lerdal.no +lærdal.no +lodingen.no +lødingen.no +lorenskog.no +lørenskog.no +loten.no +løten.no +malvik.no +masoy.no +måsøy.no +muosat.no +muosát.no +mandal.no +marker.no +marnardal.no +masfjorden.no +meland.no +meldal.no +melhus.no +meloy.no +meløy.no +meraker.no +meråker.no +moareke.no +moåreke.no +midsund.no +midtre-gauldal.no +modalen.no +modum.no +molde.no +moskenes.no +moss.no +mosvik.no +malselv.no +målselv.no +malatvuopmi.no +málatvuopmi.no +namdalseid.no +aejrie.no +namsos.no +namsskogan.no +naamesjevuemie.no +nååmesjevuemie.no +laakesvuemie.no +nannestad.no +narvik.no +narviika.no +naustdal.no +nedre-eiker.no +nes.akershus.no +nes.buskerud.no +nesna.no +nesodden.no +nesseby.no +unjarga.no +unjárga.no +nesset.no +nissedal.no +nittedal.no +nord-aurdal.no +nord-fron.no +nord-odal.no +norddal.no +nordkapp.no +davvenjarga.no +davvenjárga.no +nordre-land.no +nordreisa.no +raisa.no +ráisa.no +nore-og-uvdal.no +notodden.no +naroy.no +nærøy.no +notteroy.no +nøtterøy.no +odda.no +oksnes.no +øksnes.no +oppdal.no +oppegard.no +oppegård.no +orkdal.no +orland.no +ørland.no +orskog.no +ørskog.no +orsta.no +ørsta.no +os.hedmark.no +os.hordaland.no +osen.no +osteroy.no +osterøy.no +ostre-toten.no +østre-toten.no +overhalla.no +ovre-eiker.no +øvre-eiker.no +oyer.no +øyer.no +oygarden.no +øygarden.no +oystre-slidre.no +øystre-slidre.no +porsanger.no +porsangu.no +porsáŋgu.no +porsgrunn.no +radoy.no +radøy.no +rakkestad.no +rana.no +ruovat.no +randaberg.no +rauma.no +rendalen.no +rennebu.no +rennesoy.no +rennesøy.no +rindal.no +ringebu.no +ringerike.no +ringsaker.no +rissa.no +risor.no +risør.no +roan.no +rollag.no +rygge.no +ralingen.no +rælingen.no +rodoy.no +rødøy.no +romskog.no +rømskog.no +roros.no +røros.no +rost.no +røst.no +royken.no +røyken.no +royrvik.no +røyrvik.no +rade.no +råde.no +salangen.no +siellak.no +saltdal.no +salat.no +sálát.no +sálat.no +samnanger.no +sande.more-og-romsdal.no +sande.møre-og-romsdal.no +sande.vestfold.no +sandefjord.no +sandnes.no +sandoy.no +sandøy.no +sarpsborg.no +sauda.no +sauherad.no +sel.no +selbu.no +selje.no +seljord.no +sigdal.no +siljan.no +sirdal.no +skaun.no +skedsmo.no +ski.no +skien.no +skiptvet.no +skjervoy.no +skjervøy.no +skierva.no +skiervá.no +skjak.no +skjåk.no +skodje.no +skanland.no +skånland.no +skanit.no +skánit.no +smola.no +smøla.no +snillfjord.no +snasa.no +snåsa.no +snoasa.no +snaase.no +snåase.no +sogndal.no +sokndal.no +sola.no +solund.no +songdalen.no +sortland.no +spydeberg.no +stange.no +stavanger.no +steigen.no +steinkjer.no +stjordal.no +stjørdal.no +stokke.no +stor-elvdal.no +stord.no +stordal.no +storfjord.no +omasvuotna.no +strand.no +stranda.no +stryn.no +sula.no +suldal.no +sund.no +sunndal.no +surnadal.no +sveio.no +svelvik.no +sykkylven.no +sogne.no +søgne.no +somna.no +sømna.no +sondre-land.no +søndre-land.no +sor-aurdal.no +sør-aurdal.no +sor-fron.no +sør-fron.no +sor-odal.no +sør-odal.no +sor-varanger.no +sør-varanger.no +matta-varjjat.no +mátta-várjjat.no +sorfold.no +sørfold.no +sorreisa.no +sørreisa.no +sorum.no +sørum.no +tana.no +deatnu.no +time.no +tingvoll.no +tinn.no +tjeldsund.no +dielddanuorri.no +tjome.no +tjøme.no +tokke.no +tolga.no +torsken.no +tranoy.no +tranøy.no +tromso.no +tromsø.no +tromsa.no +romsa.no +trondheim.no +troandin.no +trysil.no +trana.no +træna.no +trogstad.no +trøgstad.no +tvedestrand.no +tydal.no +tynset.no +tysfjord.no +divtasvuodna.no +divttasvuotna.no +tysnes.no +tysvar.no +tysvær.no +tonsberg.no +tønsberg.no +ullensaker.no +ullensvang.no +ulvik.no +utsira.no +vadso.no +vadsø.no +cahcesuolo.no +čáhcesuolo.no +vaksdal.no +valle.no +vang.no +vanylven.no +vardo.no +vardø.no +varggat.no +várggát.no +vefsn.no +vaapste.no +vega.no +vegarshei.no +vegårshei.no +vennesla.no +verdal.no +verran.no +vestby.no +vestnes.no +vestre-slidre.no +vestre-toten.no +vestvagoy.no +vestvågøy.no +vevelstad.no +vik.no +vikna.no +vindafjord.no +volda.no +voss.no +varoy.no +værøy.no +vagan.no +vågan.no +voagat.no +vagsoy.no +vågsøy.no +vaga.no +vågå.no +valer.ostfold.no +våler.østfold.no +valer.hedmark.no +våler.hedmark.no + +// np : http://www.mos.com.np/register.html +*.np + +// nr : http://cenpac.net.nr/dns/index.html +// Submitted by registry <technician@cenpac.net.nr> +nr +biz.nr +info.nr +gov.nr +edu.nr +org.nr +net.nr +com.nr + +// nu : https://en.wikipedia.org/wiki/.nu +nu + +// nz : https://en.wikipedia.org/wiki/.nz +// Submitted by registry <jay@nzrs.net.nz> +nz +ac.nz +co.nz +cri.nz +geek.nz +gen.nz +govt.nz +health.nz +iwi.nz +kiwi.nz +maori.nz +mil.nz +māori.nz +net.nz +org.nz +parliament.nz +school.nz + +// om : https://en.wikipedia.org/wiki/.om +om +co.om +com.om +edu.om +gov.om +med.om +museum.om +net.om +org.om +pro.om + +// org : https://en.wikipedia.org/wiki/.org +org + +// pa : http://www.nic.pa/ +// Some additional second level "domains" resolve directly as hostnames, such as +// pannet.pa, so we add a rule for "pa". +pa +ac.pa +gob.pa +com.pa +org.pa +sld.pa +edu.pa +net.pa +ing.pa +abo.pa +med.pa +nom.pa + +// pe : https://www.nic.pe/InformeFinalComision.pdf +pe +edu.pe +gob.pe +nom.pe +mil.pe +org.pe +com.pe +net.pe + +// pf : http://www.gobin.info/domainname/formulaire-pf.pdf +pf +com.pf +org.pf +edu.pf + +// pg : https://en.wikipedia.org/wiki/.pg +*.pg + +// ph : http://www.domains.ph/FAQ2.asp +// Submitted by registry <jed@email.com.ph> +ph +com.ph +net.ph +org.ph +gov.ph +edu.ph +ngo.ph +mil.ph +i.ph + +// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK +pk +com.pk +net.pk +edu.pk +org.pk +fam.pk +biz.pk +web.pk +gov.pk +gob.pk +gok.pk +gon.pk +gop.pk +gos.pk +info.pk + +// pl http://www.dns.pl/english/index.html +// Submitted by registry +pl +com.pl +net.pl +org.pl +// pl functional domains (http://www.dns.pl/english/index.html) +aid.pl +agro.pl +atm.pl +auto.pl +biz.pl +edu.pl +gmina.pl +gsm.pl +info.pl +mail.pl +miasta.pl +media.pl +mil.pl +nieruchomosci.pl +nom.pl +pc.pl +powiat.pl +priv.pl +realestate.pl +rel.pl +sex.pl +shop.pl +sklep.pl +sos.pl +szkola.pl +targi.pl +tm.pl +tourism.pl +travel.pl +turystyka.pl +// Government domains +gov.pl +ap.gov.pl +ic.gov.pl +is.gov.pl +us.gov.pl +kmpsp.gov.pl +kppsp.gov.pl +kwpsp.gov.pl +psp.gov.pl +wskr.gov.pl +kwp.gov.pl +mw.gov.pl +ug.gov.pl +um.gov.pl +umig.gov.pl +ugim.gov.pl +upow.gov.pl +uw.gov.pl +starostwo.gov.pl +pa.gov.pl +po.gov.pl +psse.gov.pl +pup.gov.pl +rzgw.gov.pl +sa.gov.pl +so.gov.pl +sr.gov.pl +wsa.gov.pl +sko.gov.pl +uzs.gov.pl +wiih.gov.pl +winb.gov.pl +pinb.gov.pl +wios.gov.pl +witd.gov.pl +wzmiuw.gov.pl +piw.gov.pl +wiw.gov.pl +griw.gov.pl +wif.gov.pl +oum.gov.pl +sdn.gov.pl +zp.gov.pl +uppo.gov.pl +mup.gov.pl +wuoz.gov.pl +konsulat.gov.pl +oirm.gov.pl +// pl regional domains (http://www.dns.pl/english/index.html) +augustow.pl +babia-gora.pl +bedzin.pl +beskidy.pl +bialowieza.pl +bialystok.pl +bielawa.pl +bieszczady.pl +boleslawiec.pl +bydgoszcz.pl +bytom.pl +cieszyn.pl +czeladz.pl +czest.pl +dlugoleka.pl +elblag.pl +elk.pl +glogow.pl +gniezno.pl +gorlice.pl +grajewo.pl +ilawa.pl +jaworzno.pl +jelenia-gora.pl +jgora.pl +kalisz.pl +kazimierz-dolny.pl +karpacz.pl +kartuzy.pl +kaszuby.pl +katowice.pl +kepno.pl +ketrzyn.pl +klodzko.pl +kobierzyce.pl +kolobrzeg.pl +konin.pl +konskowola.pl +kutno.pl +lapy.pl +lebork.pl +legnica.pl +lezajsk.pl +limanowa.pl +lomza.pl +lowicz.pl +lubin.pl +lukow.pl +malbork.pl +malopolska.pl +mazowsze.pl +mazury.pl +mielec.pl +mielno.pl +mragowo.pl +naklo.pl +nowaruda.pl +nysa.pl +olawa.pl +olecko.pl +olkusz.pl +olsztyn.pl +opoczno.pl +opole.pl +ostroda.pl +ostroleka.pl +ostrowiec.pl +ostrowwlkp.pl +pila.pl +pisz.pl +podhale.pl +podlasie.pl +polkowice.pl +pomorze.pl +pomorskie.pl +prochowice.pl +pruszkow.pl +przeworsk.pl +pulawy.pl +radom.pl +rawa-maz.pl +rybnik.pl +rzeszow.pl +sanok.pl +sejny.pl +slask.pl +slupsk.pl +sosnowiec.pl +stalowa-wola.pl +skoczow.pl +starachowice.pl +stargard.pl +suwalki.pl +swidnica.pl +swiebodzin.pl +swinoujscie.pl +szczecin.pl +szczytno.pl +tarnobrzeg.pl +tgory.pl +turek.pl +tychy.pl +ustka.pl +walbrzych.pl +warmia.pl +warszawa.pl +waw.pl +wegrow.pl +wielun.pl +wlocl.pl +wloclawek.pl +wodzislaw.pl +wolomin.pl +wroclaw.pl +zachpomor.pl +zagan.pl +zarow.pl +zgora.pl +zgorzelec.pl + +// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf +pm + +// pn : http://www.government.pn/PnRegistry/policies.htm +pn +gov.pn +co.pn +org.pn +edu.pn +net.pn + +// post : https://en.wikipedia.org/wiki/.post +post + +// pr : http://www.nic.pr/index.asp?f=1 +pr +com.pr +net.pr +org.pr +gov.pr +edu.pr +isla.pr +pro.pr +biz.pr +info.pr +name.pr +// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr +est.pr +prof.pr +ac.pr + +// pro : http://registry.pro/get-pro +pro +aaa.pro +aca.pro +acct.pro +avocat.pro +bar.pro +cpa.pro +eng.pro +jur.pro +law.pro +med.pro +recht.pro + +// ps : https://en.wikipedia.org/wiki/.ps +// http://www.nic.ps/registration/policy.html#reg +ps +edu.ps +gov.ps +sec.ps +plo.ps +com.ps +org.ps +net.ps + +// pt : http://online.dns.pt/dns/start_dns +pt +net.pt +gov.pt +org.pt +edu.pt +int.pt +publ.pt +com.pt +nome.pt + +// pw : https://en.wikipedia.org/wiki/.pw +pw +co.pw +ne.pw +or.pw +ed.pw +go.pw +belau.pw + +// py : http://www.nic.py/pautas.html#seccion_9 +// Submitted by registry +py +com.py +coop.py +edu.py +gov.py +mil.py +net.py +org.py + +// qa : http://domains.qa/en/ +qa +com.qa +edu.qa +gov.qa +mil.qa +name.qa +net.qa +org.qa +sch.qa + +// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs +re +asso.re +com.re +nom.re + +// ro : http://www.rotld.ro/ +ro +arts.ro +com.ro +firm.ro +info.ro +nom.ro +nt.ro +org.ro +rec.ro +store.ro +tm.ro +www.ro + +// rs : https://www.rnids.rs/en/domains/national-domains +rs +ac.rs +co.rs +edu.rs +gov.rs +in.rs +org.rs + +// ru : http://www.cctld.ru/ru/docs/aktiv_8.php +// Industry domains +ru +ac.ru +com.ru +edu.ru +int.ru +net.ru +org.ru +pp.ru +// Geographical domains +adygeya.ru +altai.ru +amur.ru +arkhangelsk.ru +astrakhan.ru +bashkiria.ru +belgorod.ru +bir.ru +bryansk.ru +buryatia.ru +cbg.ru +chel.ru +chelyabinsk.ru +chita.ru +chukotka.ru +chuvashia.ru +dagestan.ru +dudinka.ru +e-burg.ru +grozny.ru +irkutsk.ru +ivanovo.ru +izhevsk.ru +jar.ru +joshkar-ola.ru +kalmykia.ru +kaluga.ru +kamchatka.ru +karelia.ru +kazan.ru +kchr.ru +kemerovo.ru +khabarovsk.ru +khakassia.ru +khv.ru +kirov.ru +koenig.ru +komi.ru +kostroma.ru +krasnoyarsk.ru +kuban.ru +kurgan.ru +kursk.ru +lipetsk.ru +magadan.ru +mari.ru +mari-el.ru +marine.ru +mordovia.ru +// mosreg.ru Bug 1090800 - removed at request of Aleksey Konstantinov <konstantinovav@mosreg.ru> +msk.ru +murmansk.ru +nalchik.ru +nnov.ru +nov.ru +novosibirsk.ru +nsk.ru +omsk.ru +orenburg.ru +oryol.ru +palana.ru +penza.ru +perm.ru +ptz.ru +rnd.ru +ryazan.ru +sakhalin.ru +samara.ru +saratov.ru +simbirsk.ru +smolensk.ru +spb.ru +stavropol.ru +stv.ru +surgut.ru +tambov.ru +tatarstan.ru +tom.ru +tomsk.ru +tsaritsyn.ru +tsk.ru +tula.ru +tuva.ru +tver.ru +tyumen.ru +udm.ru +udmurtia.ru +ulan-ude.ru +vladikavkaz.ru +vladimir.ru +vladivostok.ru +volgograd.ru +vologda.ru +voronezh.ru +vrn.ru +vyatka.ru +yakutia.ru +yamal.ru +yaroslavl.ru +yekaterinburg.ru +yuzhno-sakhalinsk.ru +// More geographical domains +amursk.ru +baikal.ru +cmw.ru +fareast.ru +jamal.ru +kms.ru +k-uralsk.ru +kustanai.ru +kuzbass.ru +mytis.ru +nakhodka.ru +nkz.ru +norilsk.ru +oskol.ru +pyatigorsk.ru +rubtsovsk.ru +snz.ru +syzran.ru +vdonsk.ru +zgrad.ru +// State domains +gov.ru +mil.ru +// Technical domains +test.ru + +// rw : http://www.nic.rw/cgi-bin/policy.pl +rw +gov.rw +net.rw +edu.rw +ac.rw +com.rw +co.rw +int.rw +mil.rw +gouv.rw + +// sa : http://www.nic.net.sa/ +sa +com.sa +net.sa +org.sa +gov.sa +med.sa +pub.sa +edu.sa +sch.sa + +// sb : http://www.sbnic.net.sb/ +// Submitted by registry <lee.humphries@telekom.com.sb> +sb +com.sb +edu.sb +gov.sb +net.sb +org.sb + +// sc : http://www.nic.sc/ +sc +com.sc +gov.sc +net.sc +org.sc +edu.sc + +// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm +// Submitted by registry <admin@isoc.sd> +sd +com.sd +net.sd +org.sd +edu.sd +med.sd +tv.sd +gov.sd +info.sd + +// se : https://en.wikipedia.org/wiki/.se +// Submitted by registry <patrik.wallstrom@iis.se> +se +a.se +ac.se +b.se +bd.se +brand.se +c.se +d.se +e.se +f.se +fh.se +fhsk.se +fhv.se +g.se +h.se +i.se +k.se +komforb.se +kommunalforbund.se +komvux.se +l.se +lanbib.se +m.se +n.se +naturbruksgymn.se +o.se +org.se +p.se +parti.se +pp.se +press.se +r.se +s.se +t.se +tm.se +u.se +w.se +x.se +y.se +z.se + +// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines +sg +com.sg +net.sg +org.sg +gov.sg +edu.sg +per.sg + +// sh : http://www.nic.sh/registrar.html +sh +com.sh +net.sh +gov.sh +org.sh +mil.sh + +// si : https://en.wikipedia.org/wiki/.si +si + +// sj : No registrations at this time. +// Submitted by registry <jarle@uninett.no> +sj + +// sk : https://en.wikipedia.org/wiki/.sk +// list of 2nd level domains ? +sk + +// sl : http://www.nic.sl +// Submitted by registry <adam@neoip.com> +sl +com.sl +net.sl +edu.sl +gov.sl +org.sl + +// sm : https://en.wikipedia.org/wiki/.sm +sm + +// sn : https://en.wikipedia.org/wiki/.sn +sn +art.sn +com.sn +edu.sn +gouv.sn +org.sn +perso.sn +univ.sn + +// so : http://www.soregistry.com/ +so +com.so +net.so +org.so + +// sr : https://en.wikipedia.org/wiki/.sr +sr + +// st : http://www.nic.st/html/policyrules/ +st +co.st +com.st +consulado.st +edu.st +embaixada.st +gov.st +mil.st +net.st +org.st +principe.st +saotome.st +store.st + +// su : https://en.wikipedia.org/wiki/.su +su +adygeya.su +arkhangelsk.su +balashov.su +bashkiria.su +bryansk.su +dagestan.su +grozny.su +ivanovo.su +kalmykia.su +kaluga.su +karelia.su +khakassia.su +krasnodar.su +kurgan.su +lenug.su +mordovia.su +msk.su +murmansk.su +nalchik.su +nov.su +obninsk.su +penza.su +pokrovsk.su +sochi.su +spb.su +togliatti.su +troitsk.su +tula.su +tuva.su +vladikavkaz.su +vladimir.su +vologda.su + +// sv : http://www.svnet.org.sv/niveldos.pdf +sv +com.sv +edu.sv +gob.sv +org.sv +red.sv + +// sx : https://en.wikipedia.org/wiki/.sx +// Submitted by registry <jcvignes@openregistry.com> +sx +gov.sx + +// sy : https://en.wikipedia.org/wiki/.sy +// see also: http://www.gobin.info/domainname/sy.doc +sy +edu.sy +gov.sy +net.sy +mil.sy +com.sy +org.sy + +// sz : https://en.wikipedia.org/wiki/.sz +// http://www.sispa.org.sz/ +sz +co.sz +ac.sz +org.sz + +// tc : https://en.wikipedia.org/wiki/.tc +tc + +// td : https://en.wikipedia.org/wiki/.td +td + +// tel: https://en.wikipedia.org/wiki/.tel +// http://www.telnic.org/ +tel + +// tf : https://en.wikipedia.org/wiki/.tf +tf + +// tg : https://en.wikipedia.org/wiki/.tg +// http://www.nic.tg/ +tg + +// th : https://en.wikipedia.org/wiki/.th +// Submitted by registry <krit@thains.co.th> +th +ac.th +co.th +go.th +in.th +mi.th +net.th +or.th + +// tj : http://www.nic.tj/policy.html +tj +ac.tj +biz.tj +co.tj +com.tj +edu.tj +go.tj +gov.tj +int.tj +mil.tj +name.tj +net.tj +nic.tj +org.tj +test.tj +web.tj + +// tk : https://en.wikipedia.org/wiki/.tk +tk + +// tl : https://en.wikipedia.org/wiki/.tl +tl +gov.tl + +// tm : http://www.nic.tm/local.html +tm +com.tm +co.tm +org.tm +net.tm +nom.tm +gov.tm +mil.tm +edu.tm + +// tn : https://en.wikipedia.org/wiki/.tn +// http://whois.ati.tn/ +tn +com.tn +ens.tn +fin.tn +gov.tn +ind.tn +intl.tn +nat.tn +net.tn +org.tn +info.tn +perso.tn +tourism.tn +edunet.tn +rnrt.tn +rns.tn +rnu.tn +mincom.tn +agrinet.tn +defense.tn +turen.tn + +// to : https://en.wikipedia.org/wiki/.to +// Submitted by registry <egullich@colo.to> +to +com.to +gov.to +net.to +org.to +edu.to +mil.to + +// subTLDs: https://www.nic.tr/forms/eng/policies.pdf +// and: https://www.nic.tr/forms/politikalar.pdf +// Submitted by <mehmetgurevin@gmail.com> +tr +com.tr +info.tr +biz.tr +net.tr +org.tr +web.tr +gen.tr +tv.tr +av.tr +dr.tr +bbs.tr +name.tr +tel.tr +gov.tr +bel.tr +pol.tr +mil.tr +k12.tr +edu.tr +kep.tr + +// Used by Northern Cyprus +nc.tr + +// Used by government agencies of Northern Cyprus +gov.nc.tr + +// travel : https://en.wikipedia.org/wiki/.travel +travel + +// tt : http://www.nic.tt/ +tt +co.tt +com.tt +org.tt +net.tt +biz.tt +info.tt +pro.tt +int.tt +coop.tt +jobs.tt +mobi.tt +travel.tt +museum.tt +aero.tt +name.tt +gov.tt +edu.tt + +// tv : https://en.wikipedia.org/wiki/.tv +// Not listing any 2LDs as reserved since none seem to exist in practice, +// Wikipedia notwithstanding. +tv + +// tw : https://en.wikipedia.org/wiki/.tw +tw +edu.tw +gov.tw +mil.tw +com.tw +net.tw +org.tw +idv.tw +game.tw +ebiz.tw +club.tw +網路.tw +組織.tw +商業.tw + +// tz : http://www.tznic.or.tz/index.php/domains +// Submitted by registry <manager@tznic.or.tz> +tz +ac.tz +co.tz +go.tz +hotel.tz +info.tz +me.tz +mil.tz +mobi.tz +ne.tz +or.tz +sc.tz +tv.tz + +// ua : https://hostmaster.ua/policy/?ua +// Submitted by registry <dk@cctld.ua> +ua +// ua 2LD +com.ua +edu.ua +gov.ua +in.ua +net.ua +org.ua +// ua geographic names +// https://hostmaster.ua/2ld/ +cherkassy.ua +cherkasy.ua +chernigov.ua +chernihiv.ua +chernivtsi.ua +chernovtsy.ua +ck.ua +cn.ua +cr.ua +crimea.ua +cv.ua +dn.ua +dnepropetrovsk.ua +dnipropetrovsk.ua +dominic.ua +donetsk.ua +dp.ua +if.ua +ivano-frankivsk.ua +kh.ua +kharkiv.ua +kharkov.ua +kherson.ua +khmelnitskiy.ua +khmelnytskyi.ua +kiev.ua +kirovograd.ua +km.ua +kr.ua +krym.ua +ks.ua +kv.ua +kyiv.ua +lg.ua +lt.ua +lugansk.ua +lutsk.ua +lv.ua +lviv.ua +mk.ua +mykolaiv.ua +nikolaev.ua +od.ua +odesa.ua +odessa.ua +pl.ua +poltava.ua +rivne.ua +rovno.ua +rv.ua +sb.ua +sebastopol.ua +sevastopol.ua +sm.ua +sumy.ua +te.ua +ternopil.ua +uz.ua +uzhgorod.ua +vinnica.ua +vinnytsia.ua +vn.ua +volyn.ua +yalta.ua +zaporizhzhe.ua +zaporizhzhia.ua +zhitomir.ua +zhytomyr.ua +zp.ua +zt.ua + +// ug : https://www.registry.co.ug/ +ug +co.ug +or.ug +ac.ug +sc.ug +go.ug +ne.ug +com.ug +org.ug + +// uk : https://en.wikipedia.org/wiki/.uk +// Submitted by registry <Michael.Daly@nominet.org.uk> +uk +ac.uk +co.uk +gov.uk +ltd.uk +me.uk +net.uk +nhs.uk +org.uk +plc.uk +police.uk +*.sch.uk + +// us : https://en.wikipedia.org/wiki/.us +us +dni.us +fed.us +isa.us +kids.us +nsn.us +// us geographic names +ak.us +al.us +ar.us +as.us +az.us +ca.us +co.us +ct.us +dc.us +de.us +fl.us +ga.us +gu.us +hi.us +ia.us +id.us +il.us +in.us +ks.us +ky.us +la.us +ma.us +md.us +me.us +mi.us +mn.us +mo.us +ms.us +mt.us +nc.us +nd.us +ne.us +nh.us +nj.us +nm.us +nv.us +ny.us +oh.us +ok.us +or.us +pa.us +pr.us +ri.us +sc.us +sd.us +tn.us +tx.us +ut.us +vi.us +vt.us +va.us +wa.us +wi.us +wv.us +wy.us +// The registrar notes several more specific domains available in each state, +// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat +// haphazard; in some states these domains resolve as addresses, while in others +// only subdomains are available, or even nothing at all. We include the +// most common ones where it's clear that different sites are different +// entities. +k12.ak.us +k12.al.us +k12.ar.us +k12.as.us +k12.az.us +k12.ca.us +k12.co.us +k12.ct.us +k12.dc.us +k12.de.us +k12.fl.us +k12.ga.us +k12.gu.us +// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login +k12.ia.us +k12.id.us +k12.il.us +k12.in.us +k12.ks.us +k12.ky.us +k12.la.us +k12.ma.us +k12.md.us +k12.me.us +k12.mi.us +k12.mn.us +k12.mo.us +k12.ms.us +k12.mt.us +k12.nc.us +// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso <trossow@nd.gov> +k12.ne.us +k12.nh.us +k12.nj.us +k12.nm.us +k12.nv.us +k12.ny.us +k12.oh.us +k12.ok.us +k12.or.us +k12.pa.us +k12.pr.us +k12.ri.us +k12.sc.us +// k12.sd.us Bug 934131 - Removed at request of James Booze <James.Booze@k12.sd.us> +k12.tn.us +k12.tx.us +k12.ut.us +k12.vi.us +k12.vt.us +k12.va.us +k12.wa.us +k12.wi.us +// k12.wv.us Bug 947705 - Removed at request of Verne Britton <verne@wvnet.edu> +k12.wy.us +cc.ak.us +cc.al.us +cc.ar.us +cc.as.us +cc.az.us +cc.ca.us +cc.co.us +cc.ct.us +cc.dc.us +cc.de.us +cc.fl.us +cc.ga.us +cc.gu.us +cc.hi.us +cc.ia.us +cc.id.us +cc.il.us +cc.in.us +cc.ks.us +cc.ky.us +cc.la.us +cc.ma.us +cc.md.us +cc.me.us +cc.mi.us +cc.mn.us +cc.mo.us +cc.ms.us +cc.mt.us +cc.nc.us +cc.nd.us +cc.ne.us +cc.nh.us +cc.nj.us +cc.nm.us +cc.nv.us +cc.ny.us +cc.oh.us +cc.ok.us +cc.or.us +cc.pa.us +cc.pr.us +cc.ri.us +cc.sc.us +cc.sd.us +cc.tn.us +cc.tx.us +cc.ut.us +cc.vi.us +cc.vt.us +cc.va.us +cc.wa.us +cc.wi.us +cc.wv.us +cc.wy.us +lib.ak.us +lib.al.us +lib.ar.us +lib.as.us +lib.az.us +lib.ca.us +lib.co.us +lib.ct.us +lib.dc.us +lib.de.us +lib.fl.us +lib.ga.us +lib.gu.us +lib.hi.us +lib.ia.us +lib.id.us +lib.il.us +lib.in.us +lib.ks.us +lib.ky.us +lib.la.us +lib.ma.us +lib.md.us +lib.me.us +lib.mi.us +lib.mn.us +lib.mo.us +lib.ms.us +lib.mt.us +lib.nc.us +lib.nd.us +lib.ne.us +lib.nh.us +lib.nj.us +lib.nm.us +lib.nv.us +lib.ny.us +lib.oh.us +lib.ok.us +lib.or.us +lib.pa.us +lib.pr.us +lib.ri.us +lib.sc.us +lib.sd.us +lib.tn.us +lib.tx.us +lib.ut.us +lib.vi.us +lib.vt.us +lib.va.us +lib.wa.us +lib.wi.us +// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold <arnold@wvlc.lib.wv.us> +lib.wy.us +// k12.ma.us contains school districts in Massachusetts. The 4LDs are +// managed independently except for private (PVT), charter (CHTR) and +// parochial (PAROCH) schools. Those are delegated directly to the +// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net> +pvt.k12.ma.us +chtr.k12.ma.us +paroch.k12.ma.us + +// uy : http://www.nic.org.uy/ +uy +com.uy +edu.uy +gub.uy +mil.uy +net.uy +org.uy + +// uz : http://www.reg.uz/ +uz +co.uz +com.uz +net.uz +org.uz + +// va : https://en.wikipedia.org/wiki/.va +va + +// vc : https://en.wikipedia.org/wiki/.vc +// Submitted by registry <kshah@ca.afilias.info> +vc +com.vc +net.vc +org.vc +gov.vc +mil.vc +edu.vc + +// ve : https://registro.nic.ve/ +// Submitted by registry +ve +arts.ve +co.ve +com.ve +e12.ve +edu.ve +firm.ve +gob.ve +gov.ve +info.ve +int.ve +mil.ve +net.ve +org.ve +rec.ve +store.ve +tec.ve +web.ve + +// vg : https://en.wikipedia.org/wiki/.vg +vg + +// vi : http://www.nic.vi/newdomainform.htm +// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other +// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they +// are available for registration (which they do not seem to be). +vi +co.vi +com.vi +k12.vi +net.vi +org.vi + +// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp +vn +com.vn +net.vn +org.vn +edu.vn +gov.vn +int.vn +ac.vn +biz.vn +info.vn +name.vn +pro.vn +health.vn + +// vu : https://en.wikipedia.org/wiki/.vu +// http://www.vunic.vu/ +vu +com.vu +edu.vu +net.vu +org.vu + +// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf +wf + +// ws : https://en.wikipedia.org/wiki/.ws +// http://samoanic.ws/index.dhtml +ws +com.ws +net.ws +org.ws +gov.ws +edu.ws + +// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf +yt + +// IDN ccTLDs +// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then +// U-label, and follow this format: +// // A-Label ("<Latin renderings>", <language name>[, variant info]) : <ISO 3166 ccTLD> +// // [sponsoring org] +// U-Label + +// xn--mgbaam7a8h ("Emerat", Arabic) : AE +// http://nic.ae/english/arabicdomain/rules.jsp +امارات + +// xn--y9a3aq ("hye", Armenian) : AM +// ISOC AM (operated by .am Registry) +հայ + +// xn--54b7fta0cc ("Bangla", Bangla) : BD +বাংলা + +// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY +// Operated by .by registry +бел + +// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN +// CNNIC +// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +中国 + +// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN +// CNNIC +// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +中國 + +// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ +الجزائر + +// xn--wgbh1c ("Egypt/Masr", Arabic) : EG +// http://www.dotmasr.eg/ +مصر + +// xn--e1a4c ("eu", Cyrillic) : EU +ею + +// xn--node ("ge", Georgian Mkhedruli) : GE +გე + +// xn--qxam ("el", Greek) : GR +// Hellenic Ministry of Infrastructure, Transport, and Networks +ελ + +// xn--j6w193g ("Hong Kong", Chinese) : HK +// https://www2.hkirc.hk/register/rules.jsp +香港 + +// xn--h2brj9c ("Bharat", Devanagari) : IN +// India +भारत + +// xn--mgbbh1a71e ("Bharat", Arabic) : IN +// India +بھارت + +// xn--fpcrj9c3d ("Bharat", Telugu) : IN +// India +భారత్ + +// xn--gecrj9c ("Bharat", Gujarati) : IN +// India +ભારત + +// xn--s9brj9c ("Bharat", Gurmukhi) : IN +// India +ਭਾਰਤ + +// xn--45brj9c ("Bharat", Bengali) : IN +// India +ভারত + +// xn--xkc2dl3a5ee0h ("India", Tamil) : IN +// India +இந்தியா + +// xn--mgba3a4f16a ("Iran", Persian) : IR +ایران + +// xn--mgba3a4fra ("Iran", Arabic) : IR +ايران + +// xn--mgbtx2b ("Iraq", Arabic) : IQ +// Communications and Media Commission +عراق + +// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO +// National Information Technology Center (NITC) +// Royal Scientific Society, Al-Jubeiha +الاردن + +// xn--3e0b707e ("Republic of Korea", Hangul) : KR +한국 + +// xn--80ao21a ("Kaz", Kazakh) : KZ +қаз + +// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK +// http://nic.lk +ලංකා + +// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK +// http://nic.lk +இலங்கை + +// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA +المغرب + +// xn--d1alf ("mkd", Macedonian) : MK +// MARnet +мкд + +// xn--l1acc ("mon", Mongolian) : MN +мон + +// xn--mix891f ("Macao", Chinese, Traditional) : MO +// MONIC / HNET Asia (Registry Operator for .mo) +澳門 + +// xn--mix082f ("Macao", Chinese, Simplified) : MO +澳门 + +// xn--mgbx4cd0ab ("Malaysia", Malay) : MY +مليسيا + +// xn--mgb9awbf ("Oman", Arabic) : OM +عمان + +// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK +پاکستان + +// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK +پاكستان + +// xn--ygbi2ammx ("Falasteen", Arabic) : PS +// The Palestinian National Internet Naming Authority (PNINA) +// http://www.pnina.ps +فلسطين + +// xn--90a3ac ("srb", Cyrillic) : RS +// https://www.rnids.rs/en/domains/national-domains +срб +пр.срб +орг.срб +обр.срб +од.срб +упр.срб +ак.срб + +// xn--p1ai ("rf", Russian-Cyrillic) : RU +// http://www.cctld.ru/en/docs/rulesrf.php +рф + +// xn--wgbl6a ("Qatar", Arabic) : QA +// http://www.ict.gov.qa/ +قطر + +// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA +// http://www.nic.net.sa/ +السعودية + +// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA +السعودیة + +// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA +السعودیۃ + +// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA +السعوديه + +// xn--mgbpl2fh ("sudan", Arabic) : SD +// Operated by .sd registry +سودان + +// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG +新加坡 + +// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG +சிங்கப்பூர் + +// xn--ogbpf8fl ("Syria", Arabic) : SY +سورية + +// xn--mgbtf8fl ("Syria", Arabic, variant) : SY +سوريا + +// xn--o3cw4h ("Thai", Thai) : TH +// http://www.thnic.co.th +ไทย + +// xn--pgbs0dh ("Tunisia", Arabic) : TN +// http://nic.tn +تونس + +// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW +// http://www.twnic.net/english/dn/dn_07a.htm +台灣 + +// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW +// http://www.twnic.net/english/dn/dn_07a.htm +台湾 + +// xn--nnx388a ("Taiwan", Chinese, variant) : TW +臺灣 + +// xn--j1amh ("ukr", Cyrillic) : UA +укр + +// xn--mgb2ddes ("AlYemen", Arabic) : YE +اليمن + +// xxx : http://icmregistry.com +xxx + +// ye : http://www.y.net.ye/services/domain_name.htm +*.ye + +// za : http://www.zadna.org.za/content/page/domain-information +ac.za +agric.za +alt.za +co.za +edu.za +gov.za +grondar.za +law.za +mil.za +net.za +ngo.za +nis.za +nom.za +org.za +school.za +tm.za +web.za + +// zm : https://zicta.zm/ +// Submitted by registry <info@zicta.zm> +zm +ac.zm +biz.zm +co.zm +com.zm +edu.zm +gov.zm +info.zm +mil.zm +net.zm +org.zm +sch.zm + +// zw : https://en.wikipedia.org/wiki/.zw +*.zw + + +// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-04-04T20:12:16Z + +// aaa : 2015-02-26 American Automobile Association, Inc. +aaa + +// aarp : 2015-05-21 AARP +aarp + +// abarth : 2015-07-30 Fiat Chrysler Automobiles N.V. +abarth + +// abb : 2014-10-24 ABB Ltd +abb + +// abbott : 2014-07-24 Abbott Laboratories, Inc. +abbott + +// abbvie : 2015-07-30 AbbVie Inc. +abbvie + +// abc : 2015-07-30 Disney Enterprises, Inc. +abc + +// able : 2015-06-25 Able Inc. +able + +// abogado : 2014-04-24 Top Level Domain Holdings Limited +abogado + +// abudhabi : 2015-07-30 Abu Dhabi Systems and Information Centre +abudhabi + +// academy : 2013-11-07 Half Oaks, LLC +academy + +// accenture : 2014-08-15 Accenture plc +accenture + +// accountant : 2014-11-20 dot Accountant Limited +accountant + +// accountants : 2014-03-20 Knob Town, LLC +accountants + +// aco : 2015-01-08 ACO Severin Ahlmann GmbH & Co. KG +aco + +// active : 2014-05-01 The Active Network, Inc +active + +// actor : 2013-12-12 United TLD Holdco Ltd. +actor + +// adac : 2015-07-16 Allgemeiner Deutscher Automobil-Club e.V. (ADAC) +adac + +// ads : 2014-12-04 Charleston Road Registry Inc. +ads + +// adult : 2014-10-16 ICM Registry AD LLC +adult + +// aeg : 2015-03-19 Aktiebolaget Electrolux +aeg + +// aetna : 2015-05-21 Aetna Life Insurance Company +aetna + +// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc. +afamilycompany + +// afl : 2014-10-02 Australian Football League +afl + +// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa +africa + +// africamagic : 2015-03-05 Electronic Media Network (Pty) Ltd +africamagic + +// agakhan : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) +agakhan + +// agency : 2013-11-14 Steel Falls, LLC +agency + +// aig : 2014-12-18 American International Group, Inc. +aig + +// aigo : 2015-08-06 aigo Digital Technology Co,Ltd. +aigo + +// airbus : 2015-07-30 Airbus S.A.S. +airbus + +// airforce : 2014-03-06 United TLD Holdco Ltd. +airforce + +// airtel : 2014-10-24 Bharti Airtel Limited +airtel + +// akdn : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) +akdn + +// alfaromeo : 2015-07-31 Fiat Chrysler Automobiles N.V. +alfaromeo + +// alibaba : 2015-01-15 Alibaba Group Holding Limited +alibaba + +// alipay : 2015-01-15 Alibaba Group Holding Limited +alipay + +// allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung Aktiengesellschaft +allfinanz + +// allstate : 2015-07-31 Allstate Fire and Casualty Insurance Company +allstate + +// ally : 2015-06-18 Ally Financial Inc. +ally + +// alsace : 2014-07-02 REGION D ALSACE +alsace + +// alstom : 2015-07-30 ALSTOM +alstom + +// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc. +americanexpress + +// americanfamily : 2015-07-23 AmFam, Inc. +americanfamily + +// amex : 2015-07-31 American Express Travel Related Services Company, Inc. +amex + +// amfam : 2015-07-23 AmFam, Inc. +amfam + +// amica : 2015-05-28 Amica Mutual Insurance Company +amica + +// amsterdam : 2014-07-24 Gemeente Amsterdam +amsterdam + +// analytics : 2014-12-18 Campus IP LLC +analytics + +// android : 2014-08-07 Charleston Road Registry Inc. +android + +// anquan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. +anquan + +// anz : 2015-07-31 Australia and New Zealand Banking Group Limited +anz + +// aol : 2015-09-17 AOL Inc. +aol + +// apartments : 2014-12-11 June Maple, LLC +apartments + +// app : 2015-05-14 Charleston Road Registry Inc. +app + +// apple : 2015-05-14 Apple Inc. +apple + +// aquarelle : 2014-07-24 Aquarelle.com +aquarelle + +// arab : 2015-11-12 League of Arab States +arab + +// aramco : 2014-11-20 Aramco Services Company +aramco + +// archi : 2014-02-06 STARTING DOT LIMITED +archi + +// army : 2014-03-06 United TLD Holdco Ltd. +army + +// art : 2016-03-24 UK Creative Ideas Limited +art + +// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E. +arte + +// asda : 2015-07-31 Wal-Mart Stores, Inc. +asda + +// associates : 2014-03-06 Baxter Hill, LLC +associates + +// athleta : 2015-07-30 The Gap, Inc. +athleta + +// attorney : 2014-03-20 +attorney + +// auction : 2014-03-20 +auction + +// audi : 2015-05-21 AUDI Aktiengesellschaft +audi + +// audible : 2015-06-25 Amazon EU S.à r.l. +audible + +// audio : 2014-03-20 Uniregistry, Corp. +audio + +// auspost : 2015-08-13 Australian Postal Corporation +auspost + +// author : 2014-12-18 Amazon EU S.à r.l. +author + +// auto : 2014-11-13 +auto + +// autos : 2014-01-09 DERAutos, LLC +autos + +// avianca : 2015-01-08 Aerovias del Continente Americano S.A. Avianca +avianca + +// aws : 2015-06-25 Amazon EU S.à r.l. +aws + +// axa : 2013-12-19 AXA SA +axa + +// azure : 2014-12-18 Microsoft Corporation +azure + +// baby : 2015-04-09 Johnson & Johnson Services, Inc. +baby + +// baidu : 2015-01-08 Baidu, Inc. +baidu + +// banamex : 2015-07-30 Citigroup Inc. +banamex + +// bananarepublic : 2015-07-31 The Gap, Inc. +bananarepublic + +// band : 2014-06-12 +band + +// bank : 2014-09-25 fTLD Registry Services LLC +bank + +// bar : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +bar + +// barcelona : 2014-07-24 Municipi de Barcelona +barcelona + +// barclaycard : 2014-11-20 Barclays Bank PLC +barclaycard + +// barclays : 2014-11-20 Barclays Bank PLC +barclays + +// barefoot : 2015-06-11 Gallo Vineyards, Inc. +barefoot + +// bargains : 2013-11-14 Half Hallow, LLC +bargains + +// baseball : 2015-10-29 MLB Advanced Media DH, LLC +baseball + +// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA) +basketball + +// bauhaus : 2014-04-17 Werkhaus GmbH +bauhaus + +// bayern : 2014-01-23 Bayern Connect GmbH +bayern + +// bbc : 2014-12-18 British Broadcasting Corporation +bbc + +// bbt : 2015-07-23 BB&T Corporation +bbt + +// bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A. +bbva + +// bcg : 2015-04-02 The Boston Consulting Group, Inc. +bcg + +// bcn : 2014-07-24 Municipi de Barcelona +bcn + +// beats : 2015-05-14 Beats Electronics, LLC +beats + +// beauty : 2015-12-03 L'Oréal +beauty + +// beer : 2014-01-09 Top Level Domain Holdings Limited +beer + +// bentley : 2014-12-18 Bentley Motors Limited +bentley + +// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG +berlin + +// best : 2013-12-19 BestTLD Pty Ltd +best + +// bestbuy : 2015-07-31 BBY Solutions, Inc. +bestbuy + +// bet : 2015-05-07 Afilias plc +bet + +// bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited +bharti + +// bible : 2014-06-19 American Bible Society +bible + +// bid : 2013-12-19 dot Bid Limited +bid + +// bike : 2013-08-27 Grand Hollow, LLC +bike + +// bing : 2014-12-18 Microsoft Corporation +bing + +// bingo : 2014-12-04 Sand Cedar, LLC +bingo + +// bio : 2014-03-06 STARTING DOT LIMITED +bio + +// black : 2014-01-16 Afilias Limited +black + +// blackfriday : 2014-01-16 Uniregistry, Corp. +blackfriday + +// blanco : 2015-07-16 BLANCO GmbH + Co KG +blanco + +// blockbuster : 2015-07-30 Dish DBS Corporation +blockbuster + +// blog : 2015-05-14 PRIMER NIVEL S.A. +blog + +// bloomberg : 2014-07-17 Bloomberg IP Holdings LLC +bloomberg + +// blue : 2013-11-07 Afilias Limited +blue + +// bms : 2014-10-30 Bristol-Myers Squibb Company +bms + +// bmw : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft +bmw + +// bnl : 2014-07-24 Banca Nazionale del Lavoro +bnl + +// bnpparibas : 2014-05-29 BNP Paribas +bnpparibas + +// boats : 2014-12-04 DERBoats, LLC +boats + +// boehringer : 2015-07-09 Boehringer Ingelheim International GmbH +boehringer + +// bofa : 2015-07-31 NMS Services, Inc. +bofa + +// bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br +bom + +// bond : 2014-06-05 Bond University Limited +bond + +// boo : 2014-01-30 Charleston Road Registry Inc. +boo + +// book : 2015-08-27 Amazon EU S.à r.l. +book + +// booking : 2015-07-16 Booking.com B.V. +booking + +// boots : 2015-01-08 THE BOOTS COMPANY PLC +boots + +// bosch : 2015-06-18 Robert Bosch GMBH +bosch + +// bostik : 2015-05-28 Bostik SA +bostik + +// boston : 2015-12-10 Boston Globe Media Partners, LLC +boston + +// bot : 2014-12-18 Amazon EU S.à r.l. +bot + +// boutique : 2013-11-14 Over Galley, LLC +boutique + +// box : 2015-11-12 NS1 Limited +box + +// bradesco : 2014-12-18 Banco Bradesco S.A. +bradesco + +// bridgestone : 2014-12-18 Bridgestone Corporation +bridgestone + +// broadway : 2014-12-22 Celebrate Broadway, Inc. +broadway + +// broker : 2014-12-11 IG Group Holdings PLC +broker + +// brother : 2015-01-29 Brother Industries, Ltd. +brother + +// brussels : 2014-02-06 DNS.be vzw +brussels + +// budapest : 2013-11-21 Top Level Domain Holdings Limited +budapest + +// bugatti : 2015-07-23 Bugatti International SA +bugatti + +// build : 2013-11-07 Plan Bee LLC +build + +// builders : 2013-11-07 Atomic Madison, LLC +builders + +// business : 2013-11-07 Spring Cross, LLC +business + +// buy : 2014-12-18 Amazon EU S.à r.l. +buy + +// buzz : 2013-10-02 DOTSTRATEGY CO. +buzz + +// bzh : 2014-02-27 Association www.bzh +bzh + +// cab : 2013-10-24 Half Sunset, LLC +cab + +// cafe : 2015-02-11 Pioneer Canyon, LLC +cafe + +// cal : 2014-07-24 Charleston Road Registry Inc. +cal + +// call : 2014-12-18 Amazon EU S.à r.l. +call + +// calvinklein : 2015-07-30 PVH gTLD Holdings LLC +calvinklein + +// camera : 2013-08-27 Atomic Maple, LLC +camera + +// camp : 2013-11-07 Delta Dynamite, LLC +camp + +// cancerresearch : 2014-05-15 Australian Cancer Research Foundation +cancerresearch + +// canon : 2014-09-12 Canon Inc. +canon + +// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +capetown + +// capital : 2014-03-06 Delta Mill, LLC +capital + +// capitalone : 2015-08-06 Capital One Financial Corporation +capitalone + +// car : 2015-01-22 +car + +// caravan : 2013-12-12 Caravan International, Inc. +caravan + +// cards : 2013-12-05 Foggy Hollow, LLC +cards + +// care : 2014-03-06 Goose Cross +care + +// career : 2013-10-09 dotCareer LLC +career + +// careers : 2013-10-02 Wild Corner, LLC +careers + +// cars : 2014-11-13 +cars + +// cartier : 2014-06-23 Richemont DNS Inc. +cartier + +// casa : 2013-11-21 Top Level Domain Holdings Limited +casa + +// case : 2015-09-03 CNH Industrial N.V. +case + +// caseih : 2015-09-03 CNH Industrial N.V. +caseih + +// cash : 2014-03-06 Delta Lake, LLC +cash + +// casino : 2014-12-18 Binky Sky, LLC +casino + +// catering : 2013-12-05 New Falls. LLC +catering + +// catholic : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +catholic + +// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +cba + +// cbn : 2014-08-22 The Christian Broadcasting Network, Inc. +cbn + +// cbre : 2015-07-02 CBRE, Inc. +cbre + +// cbs : 2015-08-06 CBS Domains Inc. +cbs + +// ceb : 2015-04-09 The Corporate Executive Board Company +ceb + +// center : 2013-11-07 Tin Mill, LLC +center + +// ceo : 2013-11-07 CEOTLD Pty Ltd +ceo + +// cern : 2014-06-05 European Organization for Nuclear Research ("CERN") +cern + +// cfa : 2014-08-28 CFA Institute +cfa + +// cfd : 2014-12-11 IG Group Holdings PLC +cfd + +// chanel : 2015-04-09 Chanel International B.V. +chanel + +// channel : 2014-05-08 Charleston Road Registry Inc. +channel + +// chase : 2015-04-30 JPMorgan Chase & Co. +chase + +// chat : 2014-12-04 Sand Fields, LLC +chat + +// cheap : 2013-11-14 Sand Cover, LLC +cheap + +// chintai : 2015-06-11 CHINTAI Corporation +chintai + +// chloe : 2014-10-16 Richemont DNS Inc. +chloe + +// christmas : 2013-11-21 Uniregistry, Corp. +christmas + +// chrome : 2014-07-24 Charleston Road Registry Inc. +chrome + +// chrysler : 2015-07-30 FCA US LLC. +chrysler + +// church : 2014-02-06 Holly Fields, LLC +church + +// cipriani : 2015-02-19 Hotel Cipriani Srl +cipriani + +// circle : 2014-12-18 Amazon EU S.à r.l. +circle + +// cisco : 2014-12-22 Cisco Technology, Inc. +cisco + +// citadel : 2015-07-23 Citadel Domain LLC +citadel + +// citi : 2015-07-30 Citigroup Inc. +citi + +// citic : 2014-01-09 CITIC Group Corporation +citic + +// city : 2014-05-29 Snow Sky, LLC +city + +// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc. +cityeats + +// claims : 2014-03-20 Black Corner, LLC +claims + +// cleaning : 2013-12-05 Fox Shadow, LLC +cleaning + +// click : 2014-06-05 Uniregistry, Corp. +click + +// clinic : 2014-03-20 Goose Park, LLC +clinic + +// clinique : 2015-10-01 The Estée Lauder Companies Inc. +clinique + +// clothing : 2013-08-27 Steel Lake, LLC +clothing + +// cloud : 2015-04-16 ARUBA S.p.A. +cloud + +// club : 2013-11-08 .CLUB DOMAINS, LLC +club + +// clubmed : 2015-06-25 Club Méditerranée S.A. +clubmed + +// coach : 2014-10-09 Koko Island, LLC +coach + +// codes : 2013-10-31 Puff Willow, LLC +codes + +// coffee : 2013-10-17 Trixy Cover, LLC +coffee + +// college : 2014-01-16 XYZ.COM LLC +college + +// cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH +cologne + +// comcast : 2015-07-23 Comcast IP Holdings I, LLC +comcast + +// commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +commbank + +// community : 2013-12-05 Fox Orchard, LLC +community + +// company : 2013-11-07 Silver Avenue, LLC +company + +// compare : 2015-10-08 iSelect Ltd +compare + +// computer : 2013-10-24 Pine Mill, LLC +computer + +// comsec : 2015-01-08 VeriSign, Inc. +comsec + +// condos : 2013-12-05 Pine House, LLC +condos + +// construction : 2013-09-16 Fox Dynamite, LLC +construction + +// consulting : 2013-12-05 +consulting + +// contact : 2015-01-08 Top Level Spectrum, Inc. +contact + +// contractors : 2013-09-10 Magic Woods, LLC +contractors + +// cooking : 2013-11-21 Top Level Domain Holdings Limited +cooking + +// cookingchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. +cookingchannel + +// cool : 2013-11-14 Koko Lake, LLC +cool + +// corsica : 2014-09-25 Collectivité Territoriale de Corse +corsica + +// country : 2013-12-19 Top Level Domain Holdings Limited +country + +// coupon : 2015-02-26 Amazon EU S.à r.l. +coupon + +// coupons : 2015-03-26 Black Island, LLC +coupons + +// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD +courses + +// credit : 2014-03-20 Snow Shadow, LLC +credit + +// creditcard : 2014-03-20 Binky Frostbite, LLC +creditcard + +// creditunion : 2015-01-22 CUNA Performance Resources, LLC +creditunion + +// cricket : 2014-10-09 dot Cricket Limited +cricket + +// crown : 2014-10-24 Crown Equipment Corporation +crown + +// crs : 2014-04-03 Federated Co-operatives Limited +crs + +// cruise : 2015-12-10 Viking River Cruises (Bermuda) Ltd. +cruise + +// cruises : 2013-12-05 Spring Way, LLC +cruises + +// csc : 2014-09-25 Alliance-One Services, Inc. +csc + +// cuisinella : 2014-04-03 SALM S.A.S. +cuisinella + +// cymru : 2014-05-08 Nominet UK +cymru + +// cyou : 2015-01-22 Beijing Gamease Age Digital Technology Co., Ltd. +cyou + +// dabur : 2014-02-06 Dabur India Limited +dabur + +// dad : 2014-01-23 Charleston Road Registry Inc. +dad + +// dance : 2013-10-24 United TLD Holdco Ltd. +dance + +// date : 2014-11-20 dot Date Limited +date + +// dating : 2013-12-05 Pine Fest, LLC +dating + +// datsun : 2014-03-27 NISSAN MOTOR CO., LTD. +datsun + +// day : 2014-01-30 Charleston Road Registry Inc. +day + +// dclk : 2014-11-20 Charleston Road Registry Inc. +dclk + +// dds : 2015-05-07 Top Level Domain Holdings Limited +dds + +// deal : 2015-06-25 Amazon EU S.à r.l. +deal + +// dealer : 2014-12-22 Dealer Dot Com, Inc. +dealer + +// deals : 2014-05-22 Sand Sunset, LLC +deals + +// degree : 2014-03-06 +degree + +// delivery : 2014-09-11 Steel Station, LLC +delivery + +// dell : 2014-10-24 Dell Inc. +dell + +// deloitte : 2015-07-31 Deloitte Touche Tohmatsu +deloitte + +// delta : 2015-02-19 Delta Air Lines, Inc. +delta + +// democrat : 2013-10-24 United TLD Holdco Ltd. +democrat + +// dental : 2014-03-20 Tin Birch, LLC +dental + +// dentist : 2014-03-20 +dentist + +// desi : 2013-11-14 Desi Networks LLC +desi + +// design : 2014-11-07 Top Level Design, LLC +design + +// dev : 2014-10-16 Charleston Road Registry Inc. +dev + +// dhl : 2015-07-23 Deutsche Post AG +dhl + +// diamonds : 2013-09-22 John Edge, LLC +diamonds + +// diet : 2014-06-26 Uniregistry, Corp. +diet + +// digital : 2014-03-06 Dash Park, LLC +digital + +// direct : 2014-04-10 Half Trail, LLC +direct + +// directory : 2013-09-20 Extra Madison, LLC +directory + +// discount : 2014-03-06 Holly Hill, LLC +discount + +// discover : 2015-07-23 Discover Financial Services +discover + +// dish : 2015-07-30 Dish DBS Corporation +dish + +// diy : 2015-11-05 Lifestyle Domain Holdings, Inc. +diy + +// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd. +dnp + +// docs : 2014-10-16 Charleston Road Registry Inc. +docs + +// dodge : 2015-07-30 FCA US LLC. +dodge + +// dog : 2014-12-04 Koko Mill, LLC +dog + +// doha : 2014-09-18 Communications Regulatory Authority (CRA) +doha + +// domains : 2013-10-17 Sugar Cross, LLC +domains + +// dot : 2015-05-21 Dish DBS Corporation +dot + +// download : 2014-11-20 dot Support Limited +download + +// drive : 2015-03-05 Charleston Road Registry Inc. +drive + +// dstv : 2015-03-12 MultiChoice (Proprietary) Limited +dstv + +// dtv : 2015-06-04 Dish DBS Corporation +dtv + +// dubai : 2015-01-01 Dubai Smart Government Department +dubai + +// duck : 2015-07-23 Johnson Shareholdings, Inc. +duck + +// dunlop : 2015-07-02 The Goodyear Tire & Rubber Company +dunlop + +// duns : 2015-08-06 The Dun & Bradstreet Corporation +duns + +// dupont : 2015-06-25 E.I. du Pont de Nemours and Company +dupont + +// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +durban + +// dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +dvag + +// dwg : 2015-07-23 Autodesk, Inc. +dwg + +// earth : 2014-12-04 Interlink Co., Ltd. +earth + +// eat : 2014-01-23 Charleston Road Registry Inc. +eat + +// edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V. +edeka + +// education : 2013-11-07 Brice Way, LLC +education + +// email : 2013-10-31 Spring Madison, LLC +email + +// emerck : 2014-04-03 Merck KGaA +emerck + +// emerson : 2015-07-23 Emerson Electric Co. +emerson + +// energy : 2014-09-11 Binky Birch, LLC +energy + +// engineer : 2014-03-06 United TLD Holdco Ltd. +engineer + +// engineering : 2014-03-06 Romeo Canyon +engineering + +// enterprises : 2013-09-20 Snow Oaks, LLC +enterprises + +// epost : 2015-07-23 Deutsche Post AG +epost + +// epson : 2014-12-04 Seiko Epson Corporation +epson + +// equipment : 2013-08-27 Corn Station, LLC +equipment + +// ericsson : 2015-07-09 Telefonaktiebolaget L M Ericsson +ericsson + +// erni : 2014-04-03 ERNI Group Holding AG +erni + +// esq : 2014-05-08 Charleston Road Registry Inc. +esq + +// estate : 2013-08-27 Trixy Park, LLC +estate + +// esurance : 2015-07-23 Esurance Insurance Company +esurance + +// etisalat : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) +etisalat + +// eurovision : 2014-04-24 European Broadcasting Union (EBU) +eurovision + +// eus : 2013-12-12 Puntueus Fundazioa +eus + +// events : 2013-12-05 Pioneer Maple, LLC +events + +// everbank : 2014-05-15 EverBank +everbank + +// exchange : 2014-03-06 Spring Falls, LLC +exchange + +// expert : 2013-11-21 Magic Pass, LLC +expert + +// exposed : 2013-12-05 Victor Beach, LLC +exposed + +// express : 2015-02-11 Sea Sunset, LLC +express + +// extraspace : 2015-05-14 Extra Space Storage LLC +extraspace + +// fage : 2014-12-18 Fage International S.A. +fage + +// fail : 2014-03-06 Atomic Pipe, LLC +fail + +// fairwinds : 2014-11-13 FairWinds Partners, LLC +fairwinds + +// faith : 2014-11-20 dot Faith Limited +faith + +// family : 2015-04-02 +family + +// fan : 2014-03-06 +fan + +// fans : 2014-11-07 Asiamix Digital Limited +fans + +// farm : 2013-11-07 Just Maple, LLC +farm + +// farmers : 2015-07-09 Farmers Insurance Exchange +farmers + +// fashion : 2014-07-03 Top Level Domain Holdings Limited +fashion + +// fast : 2014-12-18 Amazon EU S.à r.l. +fast + +// fedex : 2015-08-06 Federal Express Corporation +fedex + +// feedback : 2013-12-19 Top Level Spectrum, Inc. +feedback + +// ferrari : 2015-07-31 Fiat Chrysler Automobiles N.V. +ferrari + +// ferrero : 2014-12-18 Ferrero Trading Lux S.A. +ferrero + +// fiat : 2015-07-31 Fiat Chrysler Automobiles N.V. +fiat + +// fidelity : 2015-07-30 Fidelity Brokerage Services LLC +fidelity + +// fido : 2015-08-06 Rogers Communications Partnership +fido + +// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd +film + +// final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br +final + +// finance : 2014-03-20 Cotton Cypress, LLC +finance + +// financial : 2014-03-06 Just Cover, LLC +financial + +// fire : 2015-06-25 Amazon EU S.à r.l. +fire + +// firestone : 2014-12-18 Bridgestone Corporation +firestone + +// firmdale : 2014-03-27 Firmdale Holdings Limited +firmdale + +// fish : 2013-12-12 Fox Woods, LLC +fish + +// fishing : 2013-11-21 Top Level Domain Holdings Limited +fishing + +// fit : 2014-11-07 Top Level Domain Holdings Limited +fit + +// fitness : 2014-03-06 Brice Orchard, LLC +fitness + +// flickr : 2015-04-02 Yahoo! Domain Services Inc. +flickr + +// flights : 2013-12-05 Fox Station, LLC +flights + +// flir : 2015-07-23 FLIR Systems, Inc. +flir + +// florist : 2013-11-07 Half Cypress, LLC +florist + +// flowers : 2014-10-09 Uniregistry, Corp. +flowers + +// flsmidth : 2014-07-24 FLSmidth A/S +flsmidth + +// fly : 2014-05-08 Charleston Road Registry Inc. +fly + +// foo : 2014-01-23 Charleston Road Registry Inc. +foo + +// foodnetwork : 2015-07-02 Lifestyle Domain Holdings, Inc. +foodnetwork + +// football : 2014-12-18 Foggy Farms, LLC +football + +// ford : 2014-11-13 Ford Motor Company +ford + +// forex : 2014-12-11 IG Group Holdings PLC +forex + +// forsale : 2014-05-22 +forsale + +// forum : 2015-04-02 Fegistry, LLC +forum + +// foundation : 2013-12-05 John Dale, LLC +foundation + +// fox : 2015-09-11 FOX Registry, LLC +fox + +// free : 2015-12-10 Amazon EU S.à r.l. +free + +// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH +fresenius + +// frl : 2014-05-15 FRLregistry B.V. +frl + +// frogans : 2013-12-19 OP3FT +frogans + +// frontdoor : 2015-07-02 Lifestyle Domain Holdings, Inc. +frontdoor + +// frontier : 2015-02-05 Frontier Communications Corporation +frontier + +// ftr : 2015-07-16 Frontier Communications Corporation +ftr + +// fujitsu : 2015-07-30 Fujitsu Limited +fujitsu + +// fujixerox : 2015-07-23 Xerox DNHC LLC +fujixerox + +// fun : 2016-01-14 Oriental Trading Company, Inc. +fun + +// fund : 2014-03-20 John Castle, LLC +fund + +// furniture : 2014-03-20 Lone Fields, LLC +furniture + +// futbol : 2013-09-20 +futbol + +// fyi : 2015-04-02 Silver Tigers, LLC +fyi + +// gal : 2013-11-07 Asociación puntoGAL +gal + +// gallery : 2013-09-13 Sugar House, LLC +gallery + +// gallo : 2015-06-11 Gallo Vineyards, Inc. +gallo + +// gallup : 2015-02-19 Gallup, Inc. +gallup + +// game : 2015-05-28 Uniregistry, Corp. +game + +// games : 2015-05-28 Foggy Beach, LLC +games + +// gap : 2015-07-31 The Gap, Inc. +gap + +// garden : 2014-06-26 Top Level Domain Holdings Limited +garden + +// gbiz : 2014-07-17 Charleston Road Registry Inc. +gbiz + +// gdn : 2014-07-31 Joint Stock Company "Navigation-information systems" +gdn + +// gea : 2014-12-04 GEA Group Aktiengesellschaft +gea + +// gent : 2014-01-23 COMBELL GROUP NV/SA +gent + +// genting : 2015-03-12 Resorts World Inc Pte. Ltd. +genting + +// george : 2015-07-31 Wal-Mart Stores, Inc. +george + +// ggee : 2014-01-09 GMO Internet, Inc. +ggee + +// gift : 2013-10-17 Uniregistry, Corp. +gift + +// gifts : 2014-07-03 Goose Sky, LLC +gifts + +// gives : 2014-03-06 United TLD Holdco Ltd. +gives + +// giving : 2014-11-13 Giving Limited +giving + +// glade : 2015-07-23 Johnson Shareholdings, Inc. +glade + +// glass : 2013-11-07 Black Cover, LLC +glass + +// gle : 2014-07-24 Charleston Road Registry Inc. +gle + +// global : 2014-04-17 Dot GLOBAL AS +global + +// globo : 2013-12-19 Globo Comunicação e Participações S.A +globo + +// gmail : 2014-05-01 Charleston Road Registry Inc. +gmail + +// gmbh : 2016-01-29 Extra Dynamite, LLC +gmbh + +// gmo : 2014-01-09 GMO Internet, Inc. +gmo + +// gmx : 2014-04-24 1&1 Mail & Media GmbH +gmx + +// godaddy : 2015-07-23 Go Daddy East, LLC +godaddy + +// gold : 2015-01-22 June Edge, LLC +gold + +// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD. +goldpoint + +// golf : 2014-12-18 Lone falls, LLC +golf + +// goo : 2014-12-18 NTT Resonant Inc. +goo + +// goodhands : 2015-07-31 Allstate Fire and Casualty Insurance Company +goodhands + +// goodyear : 2015-07-02 The Goodyear Tire & Rubber Company +goodyear + +// goog : 2014-11-20 Charleston Road Registry Inc. +goog + +// google : 2014-07-24 Charleston Road Registry Inc. +google + +// gop : 2014-01-16 Republican State Leadership Committee, Inc. +gop + +// got : 2014-12-18 Amazon EU S.à r.l. +got + +// gotv : 2015-03-12 MultiChoice (Proprietary) Limited +gotv + +// grainger : 2015-05-07 Grainger Registry Services, LLC +grainger + +// graphics : 2013-09-13 Over Madison, LLC +graphics + +// gratis : 2014-03-20 Pioneer Tigers, LLC +gratis + +// green : 2014-05-08 Afilias Limited +green + +// gripe : 2014-03-06 Corn Sunset, LLC +gripe + +// group : 2014-08-15 Romeo Town, LLC +group + +// guardian : 2015-07-30 The Guardian Life Insurance Company of America +guardian + +// gucci : 2014-11-13 Guccio Gucci S.p.a. +gucci + +// guge : 2014-08-28 Charleston Road Registry Inc. +guge + +// guide : 2013-09-13 Snow Moon, LLC +guide + +// guitars : 2013-11-14 Uniregistry, Corp. +guitars + +// guru : 2013-08-27 Pioneer Cypress, LLC +guru + +// hair : 2015-12-03 L'Oréal +hair + +// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH +hamburg + +// hangout : 2014-11-13 Charleston Road Registry Inc. +hangout + +// haus : 2013-12-05 +haus + +// hbo : 2015-07-30 HBO Registry Services, Inc. +hbo + +// hdfc : 2015-07-30 HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED +hdfc + +// hdfcbank : 2015-02-12 HDFC Bank Limited +hdfcbank + +// health : 2015-02-11 DotHealth, LLC +health + +// healthcare : 2014-06-12 Silver Glen, LLC +healthcare + +// help : 2014-06-26 Uniregistry, Corp. +help + +// helsinki : 2015-02-05 City of Helsinki +helsinki + +// here : 2014-02-06 Charleston Road Registry Inc. +here + +// hermes : 2014-07-10 HERMES INTERNATIONAL +hermes + +// hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc. +hgtv + +// hiphop : 2014-03-06 Uniregistry, Corp. +hiphop + +// hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc. +hisamitsu + +// hitachi : 2014-10-31 Hitachi, Ltd. +hitachi + +// hiv : 2014-03-13 +hiv + +// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited +hkt + +// hockey : 2015-03-19 Half Willow, LLC +hockey + +// holdings : 2013-08-27 John Madison, LLC +holdings + +// holiday : 2013-11-07 Goose Woods, LLC +holiday + +// homedepot : 2015-04-02 Homer TLC, Inc. +homedepot + +// homegoods : 2015-07-16 The TJX Companies, Inc. +homegoods + +// homes : 2014-01-09 DERHomes, LLC +homes + +// homesense : 2015-07-16 The TJX Companies, Inc. +homesense + +// honda : 2014-12-18 Honda Motor Co., Ltd. +honda + +// honeywell : 2015-07-23 Honeywell GTLD LLC +honeywell + +// horse : 2013-11-21 Top Level Domain Holdings Limited +horse + +// host : 2014-04-17 DotHost Inc. +host + +// hosting : 2014-05-29 Uniregistry, Corp. +hosting + +// hot : 2015-08-27 Amazon EU S.à r.l. +hot + +// hoteles : 2015-03-05 Travel Reservations SRL +hoteles + +// hotmail : 2014-12-18 Microsoft Corporation +hotmail + +// house : 2013-11-07 Sugar Park, LLC +house + +// how : 2014-01-23 Charleston Road Registry Inc. +how + +// hsbc : 2014-10-24 HSBC Holdings PLC +hsbc + +// htc : 2015-04-02 HTC corporation +htc + +// hughes : 2015-07-30 Hughes Satellite Systems Corporation +hughes + +// hyatt : 2015-07-30 Hyatt GTLD, L.L.C. +hyatt + +// hyundai : 2015-07-09 Hyundai Motor Company +hyundai + +// ibm : 2014-07-31 International Business Machines Corporation +ibm + +// icbc : 2015-02-19 Industrial and Commercial Bank of China Limited +icbc + +// ice : 2014-10-30 IntercontinentalExchange, Inc. +ice + +// icu : 2015-01-08 One.com A/S +icu + +// ieee : 2015-07-23 IEEE Global LLC +ieee + +// ifm : 2014-01-30 ifm electronic gmbh +ifm + +// iinet : 2014-07-03 Connect West Pty. Ltd. +iinet + +// ikano : 2015-07-09 Ikano S.A. +ikano + +// imamat : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) +imamat + +// imdb : 2015-06-25 Amazon EU S.à r.l. +imdb + +// immo : 2014-07-10 Auburn Bloom, LLC +immo + +// immobilien : 2013-11-07 United TLD Holdco Ltd. +immobilien + +// industries : 2013-12-05 Outer House, LLC +industries + +// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD. +infiniti + +// ing : 2014-01-23 Charleston Road Registry Inc. +ing + +// ink : 2013-12-05 Top Level Design, LLC +ink + +// institute : 2013-11-07 Outer Maple, LLC +institute + +// insurance : 2015-02-19 fTLD Registry Services LLC +insurance + +// insure : 2014-03-20 Pioneer Willow, LLC +insure + +// intel : 2015-08-06 Intel Corporation +intel + +// international : 2013-11-07 Wild Way, LLC +international + +// intuit : 2015-07-30 Intuit Administrative Services, Inc. +intuit + +// investments : 2014-03-20 Holly Glen, LLC +investments + +// ipiranga : 2014-08-28 Ipiranga Produtos de Petroleo S.A. +ipiranga + +// irish : 2014-08-07 Dot-Irish LLC +irish + +// iselect : 2015-02-11 iSelect Ltd +iselect + +// ismaili : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) +ismaili + +// ist : 2014-08-28 Istanbul Metropolitan Municipality +ist + +// istanbul : 2014-08-28 Istanbul Metropolitan Municipality +istanbul + +// itau : 2014-10-02 Itau Unibanco Holding S.A. +itau + +// itv : 2015-07-09 ITV Services Limited +itv + +// iveco : 2015-09-03 CNH Industrial N.V. +iveco + +// iwc : 2014-06-23 Richemont DNS Inc. +iwc + +// jaguar : 2014-11-13 Jaguar Land Rover Ltd +jaguar + +// java : 2014-06-19 Oracle Corporation +java + +// jcb : 2014-11-20 JCB Co., Ltd. +jcb + +// jcp : 2015-04-23 JCP Media, Inc. +jcp + +// jeep : 2015-07-30 FCA US LLC. +jeep + +// jetzt : 2014-01-09 New TLD Company AB +jetzt + +// jewelry : 2015-03-05 Wild Bloom, LLC +jewelry + +// jio : 2015-04-02 Affinity Names, Inc. +jio + +// jlc : 2014-12-04 Richemont DNS Inc. +jlc + +// jll : 2015-04-02 Jones Lang LaSalle Incorporated +jll + +// jmp : 2015-03-26 Matrix IP LLC +jmp + +// jnj : 2015-06-18 Johnson & Johnson Services, Inc. +jnj + +// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +joburg + +// jot : 2014-12-18 Amazon EU S.à r.l. +jot + +// joy : 2014-12-18 Amazon EU S.à r.l. +joy + +// jpmorgan : 2015-04-30 JPMorgan Chase & Co. +jpmorgan + +// jprs : 2014-09-18 Japan Registry Services Co., Ltd. +jprs + +// juegos : 2014-03-20 Uniregistry, Corp. +juegos + +// juniper : 2015-07-30 JUNIPER NETWORKS, INC. +juniper + +// kaufen : 2013-11-07 United TLD Holdco Ltd. +kaufen + +// kddi : 2014-09-12 KDDI CORPORATION +kddi + +// kerryhotels : 2015-04-30 Kerry Trading Co. Limited +kerryhotels + +// kerrylogistics : 2015-04-09 Kerry Trading Co. Limited +kerrylogistics + +// kerryproperties : 2015-04-09 Kerry Trading Co. Limited +kerryproperties + +// kfh : 2014-12-04 Kuwait Finance House +kfh + +// kia : 2015-07-09 KIA MOTORS CORPORATION +kia + +// kim : 2013-09-23 Afilias Limited +kim + +// kinder : 2014-11-07 Ferrero Trading Lux S.A. +kinder + +// kindle : 2015-06-25 Amazon EU S.à r.l. +kindle + +// kitchen : 2013-09-20 Just Goodbye, LLC +kitchen + +// kiwi : 2013-09-20 DOT KIWI LIMITED +kiwi + +// koeln : 2014-01-09 NetCologne Gesellschaft für Telekommunikation mbH +koeln + +// komatsu : 2015-01-08 Komatsu Ltd. +komatsu + +// kosher : 2015-08-20 Kosher Marketing Assets LLC +kosher + +// kpmg : 2015-04-23 KPMG International Cooperative (KPMG International Genossenschaft) +kpmg + +// kpn : 2015-01-08 Koninklijke KPN N.V. +kpn + +// krd : 2013-12-05 KRG Department of Information Technology +krd + +// kred : 2013-12-19 KredTLD Pty Ltd +kred + +// kuokgroup : 2015-04-09 Kerry Trading Co. Limited +kuokgroup + +// kyknet : 2015-03-05 Electronic Media Network (Pty) Ltd +kyknet + +// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen +kyoto + +// lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA +lacaixa + +// ladbrokes : 2015-08-06 LADBROKES INTERNATIONAL PLC +ladbrokes + +// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A. +lamborghini + +// lamer : 2015-10-01 The Estée Lauder Companies Inc. +lamer + +// lancaster : 2015-02-12 LANCASTER +lancaster + +// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V. +lancia + +// lancome : 2015-07-23 L'Oréal +lancome + +// land : 2013-09-10 Pine Moon, LLC +land + +// landrover : 2014-11-13 Jaguar Land Rover Ltd +landrover + +// lanxess : 2015-07-30 LANXESS Corporation +lanxess + +// lasalle : 2015-04-02 Jones Lang LaSalle Incorporated +lasalle + +// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico +lat + +// latino : 2015-07-30 Dish DBS Corporation +latino + +// latrobe : 2014-06-16 La Trobe University +latrobe + +// law : 2015-01-22 Minds + Machines Group Limited +law + +// lawyer : 2014-03-20 +lawyer + +// lds : 2014-03-20 IRI Domain Management, LLC ("Applicant") +lds + +// lease : 2014-03-06 Victor Trail, LLC +lease + +// leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc +leclerc + +// lefrak : 2015-07-16 LeFrak Organization, Inc. +lefrak + +// legal : 2014-10-16 Blue Falls, LLC +legal + +// lego : 2015-07-16 LEGO Juris A/S +lego + +// lexus : 2015-04-23 TOYOTA MOTOR CORPORATION +lexus + +// lgbt : 2014-05-08 Afilias Limited +lgbt + +// liaison : 2014-10-02 Liaison Technologies, Incorporated +liaison + +// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG +lidl + +// life : 2014-02-06 Trixy Oaks, LLC +life + +// lifeinsurance : 2015-01-15 American Council of Life Insurers +lifeinsurance + +// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc. +lifestyle + +// lighting : 2013-08-27 John McCook, LLC +lighting + +// like : 2014-12-18 Amazon EU S.à r.l. +like + +// lilly : 2015-07-31 Eli Lilly and Company +lilly + +// limited : 2014-03-06 Big Fest, LLC +limited + +// limo : 2013-10-17 Hidden Frostbite, LLC +limo + +// lincoln : 2014-11-13 Ford Motor Company +lincoln + +// linde : 2014-12-04 Linde Aktiengesellschaft +linde + +// link : 2013-11-14 Uniregistry, Corp. +link + +// lipsy : 2015-06-25 Lipsy Ltd +lipsy + +// live : 2014-12-04 +live + +// living : 2015-07-30 Lifestyle Domain Holdings, Inc. +living + +// lixil : 2015-03-19 LIXIL Group Corporation +lixil + +// loan : 2014-11-20 dot Loan Limited +loan + +// loans : 2014-03-20 June Woods, LLC +loans + +// locker : 2015-06-04 Dish DBS Corporation +locker + +// locus : 2015-06-25 Locus Analytics LLC +locus + +// loft : 2015-07-30 Annco, Inc. +loft + +// lol : 2015-01-30 Uniregistry, Corp. +lol + +// london : 2013-11-14 Dot London Domains Limited +london + +// lotte : 2014-11-07 Lotte Holdings Co., Ltd. +lotte + +// lotto : 2014-04-10 Afilias Limited +lotto + +// love : 2014-12-22 Merchant Law Group LLP +love + +// lpl : 2015-07-30 LPL Holdings, Inc. +lpl + +// lplfinancial : 2015-07-30 LPL Holdings, Inc. +lplfinancial + +// ltd : 2014-09-25 Over Corner, LLC +ltd + +// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA +ltda + +// lundbeck : 2015-08-06 H. Lundbeck A/S +lundbeck + +// lupin : 2014-11-07 LUPIN LIMITED +lupin + +// luxe : 2014-01-09 Top Level Domain Holdings Limited +luxe + +// luxury : 2013-10-17 Luxury Partners, LLC +luxury + +// macys : 2015-07-31 Macys, Inc. +macys + +// madrid : 2014-05-01 Comunidad de Madrid +madrid + +// maif : 2014-10-02 Mutuelle Assurance Instituteur France (MAIF) +maif + +// maison : 2013-12-05 Victor Frostbite, LLC +maison + +// makeup : 2015-01-15 L'Oréal +makeup + +// man : 2014-12-04 MAN SE +man + +// management : 2013-11-07 John Goodbye, LLC +management + +// mango : 2013-10-24 PUNTO FA S.L. +mango + +// market : 2014-03-06 +market + +// marketing : 2013-11-07 Fern Pass, LLC +marketing + +// markets : 2014-12-11 IG Group Holdings PLC +markets + +// marriott : 2014-10-09 Marriott Worldwide Corporation +marriott + +// marshalls : 2015-07-16 The TJX Companies, Inc. +marshalls + +// maserati : 2015-07-31 Fiat Chrysler Automobiles N.V. +maserati + +// mattel : 2015-08-06 Mattel Sites, Inc. +mattel + +// mba : 2015-04-02 Lone Hollow, LLC +mba + +// mcd : 2015-07-30 McDonald’s Corporation +mcd + +// mcdonalds : 2015-07-30 McDonald’s Corporation +mcdonalds + +// mckinsey : 2015-07-31 McKinsey Holdings, Inc. +mckinsey + +// med : 2015-08-06 Medistry LLC +med + +// media : 2014-03-06 Grand Glen, LLC +media + +// meet : 2014-01-16 +meet + +// melbourne : 2014-05-29 The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation +melbourne + +// meme : 2014-01-30 Charleston Road Registry Inc. +meme + +// memorial : 2014-10-16 Dog Beach, LLC +memorial + +// men : 2015-02-26 Exclusive Registry Limited +men + +// menu : 2013-09-11 Wedding TLD2, LLC +menu + +// meo : 2014-11-07 PT Comunicacoes S.A. +meo + +// metlife : 2015-05-07 MetLife Services and Solutions, LLC +metlife + +// miami : 2013-12-19 Top Level Domain Holdings Limited +miami + +// microsoft : 2014-12-18 Microsoft Corporation +microsoft + +// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft +mini + +// mint : 2015-07-30 Intuit Administrative Services, Inc. +mint + +// mit : 2015-07-02 Massachusetts Institute of Technology +mit + +// mitsubishi : 2015-07-23 Mitsubishi Corporation +mitsubishi + +// mlb : 2015-05-21 MLB Advanced Media DH, LLC +mlb + +// mls : 2015-04-23 The Canadian Real Estate Association +mls + +// mma : 2014-11-07 MMA IARD +mma + +// mnet : 2015-03-05 Electronic Media Network (Pty) Ltd +mnet + +// mobily : 2014-12-18 GreenTech Consultancy Company W.L.L. +mobily + +// moda : 2013-11-07 United TLD Holdco Ltd. +moda + +// moe : 2013-11-13 Interlink Co., Ltd. +moe + +// moi : 2014-12-18 Amazon EU S.à r.l. +moi + +// mom : 2015-04-16 Uniregistry, Corp. +mom + +// monash : 2013-09-30 Monash University +monash + +// money : 2014-10-16 Outer McCook, LLC +money + +// monster : 2015-09-11 Monster Worldwide, Inc. +monster + +// montblanc : 2014-06-23 Richemont DNS Inc. +montblanc + +// mopar : 2015-07-30 FCA US LLC. +mopar + +// mormon : 2013-12-05 IRI Domain Management, LLC ("Applicant") +mormon + +// mortgage : 2014-03-20 +mortgage + +// moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +moscow + +// moto : 2015-06-04 Charleston Road Registry Inc. +moto + +// motorcycles : 2014-01-09 DERMotorcycles, LLC +motorcycles + +// mov : 2014-01-30 Charleston Road Registry Inc. +mov + +// movie : 2015-02-05 New Frostbite, LLC +movie + +// movistar : 2014-10-16 Telefónica S.A. +movistar + +// msd : 2015-07-23 MSD Registry Holdings, Inc. +msd + +// mtn : 2014-12-04 MTN Dubai Limited +mtn + +// mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation +mtpc + +// mtr : 2015-03-12 MTR Corporation Limited +mtr + +// multichoice : 2015-03-12 MultiChoice (Proprietary) Limited +multichoice + +// mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC +mutual + +// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française +mutuelle + +// mzansimagic : 2015-03-05 Electronic Media Network (Pty) Ltd +mzansimagic + +// nab : 2015-08-20 National Australia Bank Limited +nab + +// nadex : 2014-12-11 IG Group Holdings PLC +nadex + +// nagoya : 2013-10-24 GMO Registry, Inc. +nagoya + +// naspers : 2015-02-12 Intelprop (Proprietary) Limited +naspers + +// nationwide : 2015-07-23 Nationwide Mutual Insurance Company +nationwide + +// natura : 2015-03-12 NATURA COSMÉTICOS S.A. +natura + +// navy : 2014-03-06 United TLD Holdco Ltd. +navy + +// nba : 2015-07-31 NBA REGISTRY, LLC +nba + +// nec : 2015-01-08 NEC Corporation +nec + +// netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +netbank + +// netflix : 2015-06-18 Netflix, Inc. +netflix + +// network : 2013-11-14 Trixy Manor, LLC +network + +// neustar : 2013-12-05 NeuStar, Inc. +neustar + +// new : 2014-01-30 Charleston Road Registry Inc. +new + +// newholland : 2015-09-03 CNH Industrial N.V. +newholland + +// news : 2014-12-18 +news + +// next : 2015-06-18 Next plc +next + +// nextdirect : 2015-06-18 Next plc +nextdirect + +// nexus : 2014-07-24 Charleston Road Registry Inc. +nexus + +// nfl : 2015-07-23 NFL Reg Ops LLC +nfl + +// ngo : 2014-03-06 Public Interest Registry +ngo + +// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK) +nhk + +// nico : 2014-12-04 DWANGO Co., Ltd. +nico + +// nike : 2015-07-23 NIKE, Inc. +nike + +// nikon : 2015-05-21 NIKON CORPORATION +nikon + +// ninja : 2013-11-07 United TLD Holdco Ltd. +ninja + +// nissan : 2014-03-27 NISSAN MOTOR CO., LTD. +nissan + +// nissay : 2015-10-29 Nippon Life Insurance Company +nissay + +// nokia : 2015-01-08 Nokia Corporation +nokia + +// northwesternmutual : 2015-06-18 Northwestern Mutual Registry, LLC +northwesternmutual + +// norton : 2014-12-04 Symantec Corporation +norton + +// now : 2015-06-25 Amazon EU S.à r.l. +now + +// nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +nowruz + +// nowtv : 2015-05-14 Starbucks (HK) Limited +nowtv + +// nra : 2014-05-22 NRA Holdings Company, INC. +nra + +// nrw : 2013-11-21 Minds + Machines GmbH +nrw + +// ntt : 2014-10-31 NIPPON TELEGRAPH AND TELEPHONE CORPORATION +ntt + +// nyc : 2014-01-23 The City of New York by and through the New York City Department of Information Technology & Telecommunications +nyc + +// obi : 2014-09-25 OBI Group Holding SE & Co. KGaA +obi + +// observer : 2015-04-30 Guardian News and Media Limited +observer + +// off : 2015-07-23 Johnson Shareholdings, Inc. +off + +// office : 2015-03-12 Microsoft Corporation +office + +// okinawa : 2013-12-05 BusinessRalliart Inc. +okinawa + +// olayan : 2015-05-14 Crescent Holding GmbH +olayan + +// olayangroup : 2015-05-14 Crescent Holding GmbH +olayangroup + +// oldnavy : 2015-07-31 The Gap, Inc. +oldnavy + +// ollo : 2015-06-04 Dish DBS Corporation +ollo + +// omega : 2015-01-08 The Swatch Group Ltd +omega + +// one : 2014-11-07 One.com A/S +one + +// ong : 2014-03-06 Public Interest Registry +ong + +// onl : 2013-09-16 I-Registry Ltd. +onl + +// online : 2015-01-15 DotOnline Inc. +online + +// onyourside : 2015-07-23 Nationwide Mutual Insurance Company +onyourside + +// ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED +ooo + +// open : 2015-07-31 American Express Travel Related Services Company, Inc. +open + +// oracle : 2014-06-19 Oracle Corporation +oracle + +// orange : 2015-03-12 Orange Brand Services Limited +orange + +// organic : 2014-03-27 Afilias Limited +organic + +// orientexpress : 2015-02-05 Belmond Ltd. +orientexpress + +// origins : 2015-10-01 The Estée Lauder Companies Inc. +origins + +// osaka : 2014-09-04 Interlink Co., Ltd. +osaka + +// otsuka : 2013-10-11 Otsuka Holdings Co., Ltd. +otsuka + +// ott : 2015-06-04 Dish DBS Corporation +ott + +// ovh : 2014-01-16 OVH SAS +ovh + +// page : 2014-12-04 Charleston Road Registry Inc. +page + +// pamperedchef : 2015-02-05 The Pampered Chef, Ltd. +pamperedchef + +// panasonic : 2015-07-30 Panasonic Corporation +panasonic + +// panerai : 2014-11-07 Richemont DNS Inc. +panerai + +// paris : 2014-01-30 City of Paris +paris + +// pars : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +pars + +// partners : 2013-12-05 Magic Glen, LLC +partners + +// parts : 2013-12-05 Sea Goodbye, LLC +parts + +// party : 2014-09-11 Blue Sky Registry Limited +party + +// passagens : 2015-03-05 Travel Reservations SRL +passagens + +// pay : 2015-08-27 Amazon EU S.à r.l. +pay + +// payu : 2015-02-12 MIH PayU B.V. +payu + +// pccw : 2015-05-14 PCCW Enterprises Limited +pccw + +// pet : 2015-05-07 Afilias plc +pet + +// pfizer : 2015-09-11 Pfizer Inc. +pfizer + +// pharmacy : 2014-06-19 National Association of Boards of Pharmacy +pharmacy + +// philips : 2014-11-07 Koninklijke Philips N.V. +philips + +// photo : 2013-11-14 Uniregistry, Corp. +photo + +// photography : 2013-09-20 Sugar Glen, LLC +photography + +// photos : 2013-10-17 Sea Corner, LLC +photos + +// physio : 2014-05-01 PhysBiz Pty Ltd +physio + +// piaget : 2014-10-16 Richemont DNS Inc. +piaget + +// pics : 2013-11-14 Uniregistry, Corp. +pics + +// pictet : 2014-06-26 Pictet Europe S.A. +pictet + +// pictures : 2014-03-06 Foggy Sky, LLC +pictures + +// pid : 2015-01-08 Top Level Spectrum, Inc. +pid + +// pin : 2014-12-18 Amazon EU S.à r.l. +pin + +// ping : 2015-06-11 Ping Registry Provider, Inc. +ping + +// pink : 2013-10-01 Afilias Limited +pink + +// pioneer : 2015-07-16 Pioneer Corporation +pioneer + +// pizza : 2014-06-26 Foggy Moon, LLC +pizza + +// place : 2014-04-24 Snow Galley, LLC +place + +// play : 2015-03-05 Charleston Road Registry Inc. +play + +// playstation : 2015-07-02 Sony Computer Entertainment Inc. +playstation + +// plumbing : 2013-09-10 Spring Tigers, LLC +plumbing + +// plus : 2015-02-05 Sugar Mill, LLC +plus + +// pnc : 2015-07-02 PNC Domain Co., LLC +pnc + +// pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +pohl + +// poker : 2014-07-03 Afilias Domains No. 5 Limited +poker + +// politie : 2015-08-20 Politie Nederland +politie + +// porn : 2014-10-16 ICM Registry PN LLC +porn + +// pramerica : 2015-07-30 Prudential Financial, Inc. +pramerica + +// praxi : 2013-12-05 Praxi S.p.A. +praxi + +// press : 2014-04-03 DotPress Inc. +press + +// prime : 2015-06-25 Amazon EU S.à r.l. +prime + +// prod : 2014-01-23 Charleston Road Registry Inc. +prod + +// productions : 2013-12-05 Magic Birch, LLC +productions + +// prof : 2014-07-24 Charleston Road Registry Inc. +prof + +// progressive : 2015-07-23 Progressive Casualty Insurance Company +progressive + +// promo : 2014-12-18 +promo + +// properties : 2013-12-05 Big Pass, LLC +properties + +// property : 2014-05-22 Uniregistry, Corp. +property + +// protection : 2015-04-23 +protection + +// pru : 2015-07-30 Prudential Financial, Inc. +pru + +// prudential : 2015-07-30 Prudential Financial, Inc. +prudential + +// pub : 2013-12-12 United TLD Holdco Ltd. +pub + +// pwc : 2015-10-29 PricewaterhouseCoopers LLP +pwc + +// qpon : 2013-11-14 dotCOOL, Inc. +qpon + +// quebec : 2013-12-19 PointQuébec Inc +quebec + +// quest : 2015-03-26 Quest ION Limited +quest + +// qvc : 2015-07-30 QVC, Inc. +qvc + +// racing : 2014-12-04 Premier Registry Limited +racing + +// raid : 2015-07-23 Johnson Shareholdings, Inc. +raid + +// read : 2014-12-18 Amazon EU S.à r.l. +read + +// realestate : 2015-09-11 dotRealEstate LLC +realestate + +// realtor : 2014-05-29 Real Estate Domains LLC +realtor + +// realty : 2015-03-19 Fegistry, LLC +realty + +// recipes : 2013-10-17 Grand Island, LLC +recipes + +// red : 2013-11-07 Afilias Limited +red + +// redstone : 2014-10-31 Redstone Haute Couture Co., Ltd. +redstone + +// redumbrella : 2015-03-26 Travelers TLD, LLC +redumbrella + +// rehab : 2014-03-06 United TLD Holdco Ltd. +rehab + +// reise : 2014-03-13 +reise + +// reisen : 2014-03-06 New Cypress, LLC +reisen + +// reit : 2014-09-04 National Association of Real Estate Investment Trusts, Inc. +reit + +// reliance : 2015-04-02 Reliance Industries Limited +reliance + +// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd. +ren + +// rent : 2014-12-04 DERRent, LLC +rent + +// rentals : 2013-12-05 Big Hollow,LLC +rentals + +// repair : 2013-11-07 Lone Sunset, LLC +repair + +// report : 2013-12-05 Binky Glen, LLC +report + +// republican : 2014-03-20 United TLD Holdco Ltd. +republican + +// rest : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +rest + +// restaurant : 2014-07-03 Snow Avenue, LLC +restaurant + +// review : 2014-11-20 dot Review Limited +review + +// reviews : 2013-09-13 +reviews + +// rexroth : 2015-06-18 Robert Bosch GMBH +rexroth + +// rich : 2013-11-21 I-Registry Ltd. +rich + +// richardli : 2015-05-14 Pacific Century Asset Management (HK) Limited +richardli + +// ricoh : 2014-11-20 Ricoh Company, Ltd. +ricoh + +// rightathome : 2015-07-23 Johnson Shareholdings, Inc. +rightathome + +// ril : 2015-04-02 Reliance Industries Limited +ril + +// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO +rio + +// rip : 2014-07-10 United TLD Holdco Ltd. +rip + +// rmit : 2015-11-19 Royal Melbourne Institute of Technology +rmit + +// rocher : 2014-12-18 Ferrero Trading Lux S.A. +rocher + +// rocks : 2013-11-14 +rocks + +// rodeo : 2013-12-19 Top Level Domain Holdings Limited +rodeo + +// rogers : 2015-08-06 Rogers Communications Partnership +rogers + +// room : 2014-12-18 Amazon EU S.à r.l. +room + +// rsvp : 2014-05-08 Charleston Road Registry Inc. +rsvp + +// ruhr : 2013-10-02 regiodot GmbH & Co. KG +ruhr + +// run : 2015-03-19 Snow Park, LLC +run + +// rwe : 2015-04-02 RWE AG +rwe + +// ryukyu : 2014-01-09 BusinessRalliart Inc. +ryukyu + +// saarland : 2013-12-12 dotSaarland GmbH +saarland + +// safe : 2014-12-18 Amazon EU S.à r.l. +safe + +// safety : 2015-01-08 Safety Registry Services, LLC. +safety + +// sakura : 2014-12-18 SAKURA Internet Inc. +sakura + +// sale : 2014-10-16 +sale + +// salon : 2014-12-11 Outer Orchard, LLC +salon + +// samsclub : 2015-07-31 Wal-Mart Stores, Inc. +samsclub + +// samsung : 2014-04-03 SAMSUNG SDS CO., LTD +samsung + +// sandvik : 2014-11-13 Sandvik AB +sandvik + +// sandvikcoromant : 2014-11-07 Sandvik AB +sandvikcoromant + +// sanofi : 2014-10-09 Sanofi +sanofi + +// sap : 2014-03-27 SAP AG +sap + +// sapo : 2014-11-07 PT Comunicacoes S.A. +sapo + +// sarl : 2014-07-03 Delta Orchard, LLC +sarl + +// sas : 2015-04-02 Research IP LLC +sas + +// save : 2015-06-25 Amazon EU S.à r.l. +save + +// saxo : 2014-10-31 Saxo Bank A/S +saxo + +// sbi : 2015-03-12 STATE BANK OF INDIA +sbi + +// sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION +sbs + +// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) +sca + +// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB") +scb + +// schaeffler : 2015-08-06 Schaeffler Technologies AG & Co. KG +schaeffler + +// schmidt : 2014-04-03 SALM S.A.S. +schmidt + +// scholarships : 2014-04-24 Scholarships.com, LLC +scholarships + +// school : 2014-12-18 Little Galley, LLC +school + +// schule : 2014-03-06 Outer Moon, LLC +schule + +// schwarz : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG +schwarz + +// science : 2014-09-11 dot Science Limited +science + +// scjohnson : 2015-07-23 Johnson Shareholdings, Inc. +scjohnson + +// scor : 2014-10-31 SCOR SE +scor + +// scot : 2014-01-23 Dot Scot Registry Limited +scot + +// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) +seat + +// secure : 2015-08-27 Amazon EU S.à r.l. +secure + +// security : 2015-05-14 +security + +// seek : 2014-12-04 Seek Limited +seek + +// select : 2015-10-08 iSelect Ltd +select + +// sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A. +sener + +// services : 2014-02-27 Fox Castle, LLC +services + +// ses : 2015-07-23 SES +ses + +// seven : 2015-08-06 Seven West Media Ltd +seven + +// sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG +sew + +// sex : 2014-11-13 ICM Registry SX LLC +sex + +// sexy : 2013-09-11 Uniregistry, Corp. +sexy + +// sfr : 2015-08-13 Societe Francaise du Radiotelephone - SFR +sfr + +// shangrila : 2015-09-03 Shangri‐La International Hotel Management Limited +shangrila + +// sharp : 2014-05-01 Sharp Corporation +sharp + +// shaw : 2015-04-23 Shaw Cablesystems G.P. +shaw + +// shell : 2015-07-30 Shell Information Technology International Inc +shell + +// shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +shia + +// shiksha : 2013-11-14 Afilias Limited +shiksha + +// shoes : 2013-10-02 Binky Galley, LLC +shoes + +// shopping : 2016-03-31 Uniregistry, Corp. +shopping + +// shouji : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. +shouji + +// show : 2015-03-05 Snow Beach, LLC +show + +// showtime : 2015-08-06 CBS Domains Inc. +showtime + +// shriram : 2014-01-23 Shriram Capital Ltd. +shriram + +// silk : 2015-06-25 Amazon EU S.à r.l. +silk + +// sina : 2015-03-12 Sina Corporation +sina + +// singles : 2013-08-27 Fern Madison, LLC +singles + +// site : 2015-01-15 DotSite Inc. +site + +// ski : 2015-04-09 STARTING DOT LIMITED +ski + +// skin : 2015-01-15 L'Oréal +skin + +// sky : 2014-06-19 Sky IP International Ltd, a company incorporated in England and Wales, operating via its registered Swiss branch +sky + +// skype : 2014-12-18 Microsoft Corporation +skype + +// sling : 2015-07-30 Hughes Satellite Systems Corporation +sling + +// smart : 2015-07-09 Smart Communications, Inc. (SMART) +smart + +// smile : 2014-12-18 Amazon EU S.à r.l. +smile + +// sncf : 2015-02-19 Société Nationale des Chemins de fer Francais S N C F +sncf + +// soccer : 2015-03-26 Foggy Shadow, LLC +soccer + +// social : 2013-11-07 United TLD Holdco Ltd. +social + +// softbank : 2015-07-02 SoftBank Corp. +softbank + +// software : 2014-03-20 +software + +// sohu : 2013-12-19 Sohu.com Limited +sohu + +// solar : 2013-11-07 Ruby Town, LLC +solar + +// solutions : 2013-11-07 Silver Cover, LLC +solutions + +// song : 2015-02-26 Amazon EU S.à r.l. +song + +// sony : 2015-01-08 Sony Corporation +sony + +// soy : 2014-01-23 Charleston Road Registry Inc. +soy + +// space : 2014-04-03 DotSpace Inc. +space + +// spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG +spiegel + +// spot : 2015-02-26 Amazon EU S.à r.l. +spot + +// spreadbetting : 2014-12-11 IG Group Holdings PLC +spreadbetting + +// srl : 2015-05-07 mySRL GmbH +srl + +// srt : 2015-07-30 FCA US LLC. +srt + +// stada : 2014-11-13 STADA Arzneimittel AG +stada + +// staples : 2015-07-30 Staples, Inc. +staples + +// star : 2015-01-08 Star India Private Limited +star + +// starhub : 2015-02-05 StarHub Ltd +starhub + +// statebank : 2015-03-12 STATE BANK OF INDIA +statebank + +// statefarm : 2015-07-30 State Farm Mutual Automobile Insurance Company +statefarm + +// statoil : 2014-12-04 Statoil ASA +statoil + +// stc : 2014-10-09 Saudi Telecom Company +stc + +// stcgroup : 2014-10-09 Saudi Telecom Company +stcgroup + +// stockholm : 2014-12-18 Stockholms kommun +stockholm + +// storage : 2014-12-22 Self Storage Company LLC +storage + +// store : 2015-04-09 DotStore Inc. +store + +// stream : 2016-01-08 dot Stream Limited +stream + +// studio : 2015-02-11 +studio + +// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD +study + +// style : 2014-12-04 Binky Moon, LLC +style + +// sucks : 2014-12-22 Vox Populi Registry Inc. +sucks + +// supersport : 2015-03-05 SuperSport International Holdings Proprietary Limited +supersport + +// supplies : 2013-12-19 Atomic Fields, LLC +supplies + +// supply : 2013-12-19 Half Falls, LLC +supply + +// support : 2013-10-24 Grand Orchard, LLC +support + +// surf : 2014-01-09 Top Level Domain Holdings Limited +surf + +// surgery : 2014-03-20 Tin Avenue, LLC +surgery + +// suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION +suzuki + +// swatch : 2015-01-08 The Swatch Group Ltd +swatch + +// swiftcover : 2015-07-23 Swiftcover Insurance Services Limited +swiftcover + +// swiss : 2014-10-16 Swiss Confederation +swiss + +// sydney : 2014-09-18 State of New South Wales, Department of Premier and Cabinet +sydney + +// symantec : 2014-12-04 Symantec Corporation +symantec + +// systems : 2013-11-07 Dash Cypress, LLC +systems + +// tab : 2014-12-04 Tabcorp Holdings Limited +tab + +// taipei : 2014-07-10 Taipei City Government +taipei + +// talk : 2015-04-09 Amazon EU S.à r.l. +talk + +// taobao : 2015-01-15 Alibaba Group Holding Limited +taobao + +// target : 2015-07-31 Target Domain Holdings, LLC +target + +// tatamotors : 2015-03-12 Tata Motors Ltd +tatamotors + +// tatar : 2014-04-24 Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic" +tatar + +// tattoo : 2013-08-30 Uniregistry, Corp. +tattoo + +// tax : 2014-03-20 Storm Orchard, LLC +tax + +// taxi : 2015-03-19 Pine Falls, LLC +taxi + +// tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +tci + +// tdk : 2015-06-11 TDK Corporation +tdk + +// team : 2015-03-05 Atomic Lake, LLC +team + +// tech : 2015-01-30 Dot Tech LLC +tech + +// technology : 2013-09-13 Auburn Falls +technology + +// telecity : 2015-02-19 TelecityGroup International Limited +telecity + +// telefonica : 2014-10-16 Telefónica S.A. +telefonica + +// temasek : 2014-08-07 Temasek Holdings (Private) Limited +temasek + +// tennis : 2014-12-04 Cotton Bloom, LLC +tennis + +// teva : 2015-07-02 Teva Pharmaceutical Industries Limited +teva + +// thd : 2015-04-02 Homer TLC, Inc. +thd + +// theater : 2015-03-19 Blue Tigers, LLC +theater + +// theatre : 2015-05-07 +theatre + +// theguardian : 2015-04-30 Guardian News and Media Limited +theguardian + +// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America +tiaa + +// tickets : 2015-02-05 Accent Media Limited +tickets + +// tienda : 2013-11-14 Victor Manor, LLC +tienda + +// tiffany : 2015-01-30 Tiffany and Company +tiffany + +// tips : 2013-09-20 Corn Willow, LLC +tips + +// tires : 2014-11-07 Dog Edge, LLC +tires + +// tirol : 2014-04-24 punkt Tirol GmbH +tirol + +// tjmaxx : 2015-07-16 The TJX Companies, Inc. +tjmaxx + +// tjx : 2015-07-16 The TJX Companies, Inc. +tjx + +// tkmaxx : 2015-07-16 The TJX Companies, Inc. +tkmaxx + +// tmall : 2015-01-15 Alibaba Group Holding Limited +tmall + +// today : 2013-09-20 Pearl Woods, LLC +today + +// tokyo : 2013-11-13 GMO Registry, Inc. +tokyo + +// tools : 2013-11-21 Pioneer North, LLC +tools + +// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd. +top + +// toray : 2014-12-18 Toray Industries, Inc. +toray + +// toshiba : 2014-04-10 TOSHIBA Corporation +toshiba + +// total : 2015-08-06 Total SA +total + +// tours : 2015-01-22 Sugar Station, LLC +tours + +// town : 2014-03-06 Koko Moon, LLC +town + +// toyota : 2015-04-23 TOYOTA MOTOR CORPORATION +toyota + +// toys : 2014-03-06 Pioneer Orchard, LLC +toys + +// trade : 2014-01-23 Elite Registry Limited +trade + +// trading : 2014-12-11 IG Group Holdings PLC +trading + +// training : 2013-11-07 Wild Willow, LLC +training + +// travelchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. +travelchannel + +// travelers : 2015-03-26 Travelers TLD, LLC +travelers + +// travelersinsurance : 2015-03-26 Travelers TLD, LLC +travelersinsurance + +// trust : 2014-10-16 +trust + +// trv : 2015-03-26 Travelers TLD, LLC +trv + +// tube : 2015-06-11 Latin American Telecom LLC +tube + +// tui : 2014-07-03 TUI AG +tui + +// tunes : 2015-02-26 Amazon EU S.à r.l. +tunes + +// tushu : 2014-12-18 Amazon EU S.à r.l. +tushu + +// tvs : 2015-02-19 T V SUNDRAM IYENGAR & SONS LIMITED +tvs + +// ubank : 2015-08-20 National Australia Bank Limited +ubank + +// ubs : 2014-12-11 UBS AG +ubs + +// uconnect : 2015-07-30 FCA US LLC. +uconnect + +// unicom : 2015-10-15 China United Network Communications Corporation Limited +unicom + +// university : 2014-03-06 Little Station, LLC +university + +// uno : 2013-09-11 Dot Latin LLC +uno + +// uol : 2014-05-01 UBN INTERNET LTDA. +uol + +// ups : 2015-06-25 UPS Market Driver, Inc. +ups + +// vacations : 2013-12-05 Atomic Tigers, LLC +vacations + +// vana : 2014-12-11 Lifestyle Domain Holdings, Inc. +vana + +// vanguard : 2015-09-03 The Vanguard Group, Inc. +vanguard + +// vegas : 2014-01-16 Dot Vegas, Inc. +vegas + +// ventures : 2013-08-27 Binky Lake, LLC +ventures + +// verisign : 2015-08-13 VeriSign, Inc. +verisign + +// versicherung : 2014-03-20 dotversicherung-registry GmbH +versicherung + +// vet : 2014-03-06 +vet + +// viajes : 2013-10-17 Black Madison, LLC +viajes + +// video : 2014-10-16 +video + +// vig : 2015-05-14 VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe +vig + +// viking : 2015-04-02 Viking River Cruises (Bermuda) Ltd. +viking + +// villas : 2013-12-05 New Sky, LLC +villas + +// vin : 2015-06-18 Holly Shadow, LLC +vin + +// vip : 2015-01-22 Minds + Machines Group Limited +vip + +// virgin : 2014-09-25 Virgin Enterprises Limited +virgin + +// visa : 2015-07-30 Visa Worldwide Pte. Limited +visa + +// vision : 2013-12-05 Koko Station, LLC +vision + +// vista : 2014-09-18 Vistaprint Limited +vista + +// vistaprint : 2014-09-18 Vistaprint Limited +vistaprint + +// viva : 2014-11-07 Saudi Telecom Company +viva + +// vivo : 2015-07-31 Telefonica Brasil S.A. +vivo + +// vlaanderen : 2014-02-06 DNS.be vzw +vlaanderen + +// vodka : 2013-12-19 Top Level Domain Holdings Limited +vodka + +// volkswagen : 2015-05-14 Volkswagen Group of America Inc. +volkswagen + +// volvo : 2015-11-12 Volvo Holding Sverige Aktiebolag +volvo + +// vote : 2013-11-21 Monolith Registry LLC +vote + +// voting : 2013-11-13 Valuetainment Corp. +voting + +// voto : 2013-11-21 Monolith Registry LLC +voto + +// voyage : 2013-08-27 Ruby House, LLC +voyage + +// vuelos : 2015-03-05 Travel Reservations SRL +vuelos + +// wales : 2014-05-08 Nominet UK +wales + +// walmart : 2015-07-31 Wal-Mart Stores, Inc. +walmart + +// walter : 2014-11-13 Sandvik AB +walter + +// wang : 2013-10-24 Zodiac Leo Limited +wang + +// wanggou : 2014-12-18 Amazon EU S.à r.l. +wanggou + +// warman : 2015-06-18 Weir Group IP Limited +warman + +// watch : 2013-11-14 Sand Shadow, LLC +watch + +// watches : 2014-12-22 Richemont DNS Inc. +watches + +// weather : 2015-01-08 The Weather Channel, LLC +weather + +// weatherchannel : 2015-03-12 The Weather Channel, LLC +weatherchannel + +// webcam : 2014-01-23 dot Webcam Limited +webcam + +// weber : 2015-06-04 Saint-Gobain Weber SA +weber + +// website : 2014-04-03 DotWebsite Inc. +website + +// wed : 2013-10-01 Atgron, Inc. +wed + +// wedding : 2014-04-24 Top Level Domain Holdings Limited +wedding + +// weibo : 2015-03-05 Sina Corporation +weibo + +// weir : 2015-01-29 Weir Group IP Limited +weir + +// whoswho : 2014-02-20 Who's Who Registry +whoswho + +// wien : 2013-10-28 punkt.wien GmbH +wien + +// wiki : 2013-11-07 Top Level Design, LLC +wiki + +// williamhill : 2014-03-13 William Hill Organization Limited +williamhill + +// win : 2014-11-20 First Registry Limited +win + +// windows : 2014-12-18 Microsoft Corporation +windows + +// wine : 2015-06-18 June Station, LLC +wine + +// winners : 2015-07-16 The TJX Companies, Inc. +winners + +// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC +wme + +// wolterskluwer : 2015-08-06 Wolters Kluwer N.V. +wolterskluwer + +// woodside : 2015-07-09 Woodside Petroleum Limited +woodside + +// work : 2013-12-19 Top Level Domain Holdings Limited +work + +// works : 2013-11-14 Little Dynamite, LLC +works + +// world : 2014-06-12 Bitter Fields, LLC +world + +// wow : 2015-10-08 Amazon EU S.à r.l. +wow + +// wtc : 2013-12-19 World Trade Centers Association, Inc. +wtc + +// wtf : 2014-03-06 Hidden Way, LLC +wtf + +// xbox : 2014-12-18 Microsoft Corporation +xbox + +// xerox : 2014-10-24 Xerox DNHC LLC +xerox + +// xfinity : 2015-07-09 Comcast IP Holdings I, LLC +xfinity + +// xihuan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. +xihuan + +// xin : 2014-12-11 Elegant Leader Limited +xin + +// xn--11b4c3d : 2015-01-15 VeriSign Sarl +कॉम + +// xn--1ck2e1b : 2015-02-26 Amazon EU S.à r.l. +セール + +// xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd. +佛山 + +// xn--30rr7y : 2014-06-12 Excellent First Limited +慈善 + +// xn--3bst00m : 2013-09-13 Eagle Horizon Limited +集团 + +// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED +在线 + +// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd. +大众汽车 + +// xn--3pxu8k : 2015-01-15 VeriSign Sarl +点看 + +// xn--42c2d9a : 2015-01-15 VeriSign Sarl +คอม + +// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited +八卦 + +// xn--4gbrim : 2013-10-04 Suhub Electronic Establishment +موقع + +// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc. +一号店 + +// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center +公益 + +// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) +公司 + +// xn--5su34j936bgsg : 2015-09-03 Shangri‐La International Hotel Management Limited +香格里拉 + +// xn--5tzm5g : 2014-12-22 Global Website TLD Asia Limited +网站 + +// xn--6frz82g : 2013-09-23 Afilias Limited +移动 + +// xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited +我爱你 + +// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +москва + +// xn--80aqecdr1a : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +католик + +// xn--80asehdb : 2013-07-14 CORE Association +онлайн + +// xn--80aswg : 2013-07-14 CORE Association +сайт + +// xn--8y0a063a : 2015-03-26 China United Network Communications Corporation Limited +联通 + +// xn--9dbq2a : 2015-01-15 VeriSign Sarl +קום + +// xn--9et52u : 2014-06-12 RISE VICTORY LIMITED +时尚 + +// xn--9krt00a : 2015-03-12 Sina Corporation +微博 + +// xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited +淡马锡 + +// xn--bck1b9a5dre4c : 2015-02-26 Amazon EU S.à r.l. +ファッション + +// xn--c1avg : 2013-11-14 Public Interest Registry +орг + +// xn--c2br7g : 2015-01-15 VeriSign Sarl +नेट + +// xn--cck2b3b : 2015-02-26 Amazon EU S.à r.l. +ストア + +// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD +삼성 + +// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED +商标 + +// xn--czrs0t : 2013-12-19 Wild Island, LLC +商店 + +// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited +商城 + +// xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart Internet” +дети + +// xn--eckvdtc9d : 2014-12-18 Amazon EU S.à r.l. +ポイント + +// xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch 新华通讯社广东分社 +新闻 + +// xn--estv75g : 2015-02-19 Industrial and Commercial Bank of China Limited +工行 + +// xn--fct429k : 2015-04-09 Amazon EU S.à r.l. +家電 + +// xn--fhbei : 2015-01-15 VeriSign Sarl +كوم + +// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED +中文网 + +// xn--fiq64b : 2013-10-14 CITIC Group Corporation +中信 + +// xn--fjq720a : 2014-05-22 Will Bloom, LLC +娱乐 + +// xn--flw351e : 2014-07-31 Charleston Road Registry Inc. +谷歌 + +// xn--fzys8d69uvgm : 2015-05-14 PCCW Enterprises Limited +電訊盈科 + +// xn--g2xx48c : 2015-01-30 Minds + Machines Group Limited +购物 + +// xn--gckr3f0f : 2015-02-26 Amazon EU S.à r.l. +クラウド + +// xn--gk3at1e : 2015-10-08 Amazon EU S.à r.l. +通販 + +// xn--hxt814e : 2014-05-15 Zodiac Libra Limited +网店 + +// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry +संगठन + +// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED +餐厅 + +// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) +网络 + +// xn--j1aef : 2015-01-15 VeriSign Sarl +ком + +// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation +诺基亚 + +// xn--jvr189m : 2015-02-26 Amazon EU S.à r.l. +食品 + +// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V. +飞利浦 + +// xn--kpu716f : 2014-12-22 Richemont DNS Inc. +手表 + +// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd +手机 + +// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company +ارامكو + +// xn--mgba7c0bbn0a : 2015-05-14 Crescent Holding GmbH +العليان + +// xn--mgbaakc7dvf : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) +اتصالات + +// xn--mgbab2bd : 2013-10-31 CORE Association +بازار + +// xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L. +موبايلي + +// xn--mgbca7dzdo : 2015-07-30 Abu Dhabi Systems and Information Centre +ابوظبي + +// xn--mgbi4ecexp : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +كاثوليك + +// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +همراه + +// xn--mk1bu44c : 2015-01-15 VeriSign Sarl +닷컴 + +// xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd. +政府 + +// xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd. +شبكة + +// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House +بيتك + +// xn--ngbrx : 2015-11-12 League of Arab States +عرب + +// xn--nqv7f : 2013-11-14 Public Interest Registry +机构 + +// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry +组织机构 + +// xn--nyqy26a : 2014-11-07 Stable Tone Limited +健康 + +// xn--p1acf : 2013-12-12 Rusnames Limited +рус + +// xn--pbt977c : 2014-12-22 Richemont DNS Inc. +珠宝 + +// xn--pssy2u : 2015-01-15 VeriSign Sarl +大拿 + +// xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc. +みんな + +// xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc. +グーグル + +// xn--rhqv96g : 2013-09-11 Stable Tone Limited +世界 + +// xn--rovu88b : 2015-02-26 Amazon EU S.à r.l. +書籍 + +// xn--ses554g : 2014-01-16 +网址 + +// xn--t60b56a : 2015-01-15 VeriSign Sarl +닷넷 + +// xn--tckwe : 2015-01-15 VeriSign Sarl +コム + +// xn--tiq49xqyj : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +天主教 + +// xn--unup4y : 2013-07-14 Spring Fields, LLC +游戏 + +// xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +vermögensberater + +// xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +vermögensberatung + +// xn--vhquv : 2013-08-27 Dash McCook, LLC +企业 + +// xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd. +信息 + +// xn--w4r85el8fhu5dnra : 2015-04-30 Kerry Trading Co. Limited +嘉里大酒店 + +// xn--w4rs40l : 2015-07-30 Kerry Trading Co. Limited +嘉里 + +// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. +广东 + +// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center +政务 + +// xperia : 2015-05-14 Sony Mobile Communications AB +xperia + +// xyz : 2013-12-05 XYZ.COM LLC +xyz + +// yachts : 2014-01-09 DERYachts, LLC +yachts + +// yahoo : 2015-04-02 Yahoo! Domain Services Inc. +yahoo + +// yamaxun : 2014-12-18 Amazon EU S.à r.l. +yamaxun + +// yandex : 2014-04-10 YANDEX, LLC +yandex + +// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD. +yodobashi + +// yoga : 2014-05-29 Top Level Domain Holdings Limited +yoga + +// yokohama : 2013-12-12 GMO Registry, Inc. +yokohama + +// you : 2015-04-09 Amazon EU S.à r.l. +you + +// youtube : 2014-05-01 Charleston Road Registry Inc. +youtube + +// yun : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. +yun + +// zappos : 2015-06-25 Amazon EU S.à r.l. +zappos + +// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.) +zara + +// zero : 2014-12-18 Amazon EU S.à r.l. +zero + +// zip : 2014-05-08 Charleston Road Registry Inc. +zip + +// zippo : 2015-07-02 Zadco Company +zippo + +// zone : 2013-11-14 Outer Falls, LLC +zone + +// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich) +zuerich + + +// ===END ICANN DOMAINS=== +// ===BEGIN PRIVATE DOMAINS=== +// (Note: these are in alphabetical order by company name) + +// Alces Software Ltd : http://alces-software.com +// Submitted by Mark J. Titorenko <mark.titorenko@alces-software.com> +*.compute.estate +*.alces.network + +// Amazon CloudFront : https://aws.amazon.com/cloudfront/ +// Submitted by Donavan Miller <donavanm@amazon.com> +cloudfront.net + +// Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ +// Submitted by Luke Wells <lawells@amazon.com> +ap-northeast-1.compute.amazonaws.com +ap-northeast-2.compute.amazonaws.com +ap-southeast-1.compute.amazonaws.com +ap-southeast-2.compute.amazonaws.com +cn-north-1.compute.amazonaws.cn +compute-1.amazonaws.com +compute.amazonaws.cn +compute.amazonaws.com +eu-central-1.compute.amazonaws.com +eu-west-1.compute.amazonaws.com +sa-east-1.compute.amazonaws.com +us-east-1.amazonaws.com +us-gov-west-1.compute.amazonaws.com +us-west-1.compute.amazonaws.com +us-west-2.compute.amazonaws.com +z-1.compute-1.amazonaws.com +z-2.compute-1.amazonaws.com + +// Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ +// Submitted by Adam Stein <astein@amazon.com> +elasticbeanstalk.com + +// Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/ +// Submitted by Scott Vidmar <svidmar@amazon.com> +elb.amazonaws.com + +// Amazon S3 : https://aws.amazon.com/s3/ +// Submitted by Luke Wells <lawells@amazon.com> +s3.amazonaws.com +s3-ap-northeast-1.amazonaws.com +s3-ap-northeast-2.amazonaws.com +s3-ap-southeast-1.amazonaws.com +s3-ap-southeast-2.amazonaws.com +s3-eu-central-1.amazonaws.com +s3-eu-west-1.amazonaws.com +s3-external-1.amazonaws.com +s3-external-2.amazonaws.com +s3-fips-us-gov-west-1.amazonaws.com +s3-sa-east-1.amazonaws.com +s3-us-gov-west-1.amazonaws.com +s3-us-west-1.amazonaws.com +s3-us-west-2.amazonaws.com +s3.ap-northeast-2.amazonaws.com +s3.cn-north-1.amazonaws.com.cn +s3.eu-central-1.amazonaws.com + +// Aptible : https://www.aptible.com/ +// Submitted by Thomas Orozco <thomas@aptible.com> +on-aptible.com + +// AVM : https://avm.de +// Submitted by Andreas Weise <a.weise@avm.de> +myfritz.net + +// BetaInABox +// Submitted by Adrian <adrian@betainabox.com> +betainabox.com + +// CentralNic : http://www.centralnic.com/names/domains +// Submitted by registry <gavin.brown@centralnic.com> +ae.org +ar.com +br.com +cn.com +com.de +com.se +de.com +eu.com +gb.com +gb.net +hu.com +hu.net +jp.net +jpn.com +kr.com +mex.com +no.com +qc.com +ru.com +sa.com +se.com +se.net +uk.com +uk.net +us.com +uy.com +za.bz +za.com + +// Africa.com Web Solutions Ltd : https://registry.africa.com +// Submitted by Gavin Brown <gavin.brown@centralnic.com> +africa.com + +// iDOT Services Limited : http://www.domain.gr.com +// Submitted by Gavin Brown <gavin.brown@centralnic.com> +gr.com + +// Radix FZC : http://domains.in.net +// Submitted by Gavin Brown <gavin.brown@centralnic.com> +in.net + +// US REGISTRY LLC : http://us.org +// Submitted by Gavin Brown <gavin.brown@centralnic.com> +us.org + +// co.com Registry, LLC : https://registry.co.com +// Submitted by Gavin Brown <gavin.brown@centralnic.com> +co.com + +// c.la : http://www.c.la/ +c.la + +// Citrix : https://citrix.com +// Submitted by Alex Stoddard <alex.stoddard@citrix.com> +xenapponazure.com + +// cloudControl : https://www.cloudcontrol.com/ +// Submitted by Tobias Wilken <tw@cloudcontrol.com> +cloudcontrolled.com +cloudcontrolapp.com + +// co.ca : http://registry.co.ca/ +co.ca + +// i-registry s.r.o. : http://www.i-registry.cz/ +// Submitted by Martin Semrad <semrad@i-registry.cz> +co.cz + +// CDN77.com : http://www.cdn77.com +// Submitted by Jan Krpes <jan.krpes@cdn77.com> +c.cdn77.org +cdn77-ssl.net +r.cdn77.net +rsc.cdn77.org +ssl.origin.cdn77-secure.org + +// CoDNS B.V. +co.nl +co.no + +// Commerce Guys, SAS +// Submitted by Damien Tournoud <damien@commerceguys.com> +*.platform.sh + +// Cupcake : https://cupcake.io/ +// Submitted by Jonathan Rudenberg <jonathan@cupcake.io> +cupcake.is + +// cyon GmbH : https://www.cyon.ch/ +// Submitted by Dominic Luechinger <dol@cyon.ch> +cyon.link +cyon.site + +// Daplie, Inc : https://daplie.com +// Submitted by AJ ONeal <aj@daplie.com> +daplie.me + +// Dansk.net : http://www.dansk.net/ +// Submitted by Anani Voule <digital@digital.co.dk> +biz.dk +co.dk +firm.dk +reg.dk +store.dk + +// deSEC : https://desec.io/ +// Submitted by Peter Thomassen <peter@desec.io> +dedyn.io + +// DNShome : https://www.dnshome.de/ +// Submitted by Norbert Auler <mail@dnshome.de> +dnshome.de + +// DreamHost : http://www.dreamhost.com/ +// Submitted by Andrew Farmer <andrew.farmer@dreamhost.com> +dreamhosters.com + +// Drobo : http://www.drobo.com/ +// Submitted by Ricardo Padilha <rpadilha@drobo.com> +mydrobo.com + +// DuckDNS : http://www.duckdns.org/ +// Submitted by Richard Harper <richard@duckdns.org> +duckdns.org + +// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ +dyndns-at-home.com +dyndns-at-work.com +dyndns-blog.com +dyndns-free.com +dyndns-home.com +dyndns-ip.com +dyndns-mail.com +dyndns-office.com +dyndns-pics.com +dyndns-remote.com +dyndns-server.com +dyndns-web.com +dyndns-wiki.com +dyndns-work.com +dyndns.biz +dyndns.info +dyndns.org +dyndns.tv +at-band-camp.net +ath.cx +barrel-of-knowledge.info +barrell-of-knowledge.info +better-than.tv +blogdns.com +blogdns.net +blogdns.org +blogsite.org +boldlygoingnowhere.org +broke-it.net +buyshouses.net +cechire.com +dnsalias.com +dnsalias.net +dnsalias.org +dnsdojo.com +dnsdojo.net +dnsdojo.org +does-it.net +doesntexist.com +doesntexist.org +dontexist.com +dontexist.net +dontexist.org +doomdns.com +doomdns.org +dvrdns.org +dyn-o-saur.com +dynalias.com +dynalias.net +dynalias.org +dynathome.net +dyndns.ws +endofinternet.net +endofinternet.org +endoftheinternet.org +est-a-la-maison.com +est-a-la-masion.com +est-le-patron.com +est-mon-blogueur.com +for-better.biz +for-more.biz +for-our.info +for-some.biz +for-the.biz +forgot.her.name +forgot.his.name +from-ak.com +from-al.com +from-ar.com +from-az.net +from-ca.com +from-co.net +from-ct.com +from-dc.com +from-de.com +from-fl.com +from-ga.com +from-hi.com +from-ia.com +from-id.com +from-il.com +from-in.com +from-ks.com +from-ky.com +from-la.net +from-ma.com +from-md.com +from-me.org +from-mi.com +from-mn.com +from-mo.com +from-ms.com +from-mt.com +from-nc.com +from-nd.com +from-ne.com +from-nh.com +from-nj.com +from-nm.com +from-nv.com +from-ny.net +from-oh.com +from-ok.com +from-or.com +from-pa.com +from-pr.com +from-ri.com +from-sc.com +from-sd.com +from-tn.com +from-tx.com +from-ut.com +from-va.com +from-vt.com +from-wa.com +from-wi.com +from-wv.com +from-wy.com +ftpaccess.cc +fuettertdasnetz.de +game-host.org +game-server.cc +getmyip.com +gets-it.net +go.dyndns.org +gotdns.com +gotdns.org +groks-the.info +groks-this.info +ham-radio-op.net +here-for-more.info +hobby-site.com +hobby-site.org +home.dyndns.org +homedns.org +homeftp.net +homeftp.org +homeip.net +homelinux.com +homelinux.net +homelinux.org +homeunix.com +homeunix.net +homeunix.org +iamallama.com +in-the-band.net +is-a-anarchist.com +is-a-blogger.com +is-a-bookkeeper.com +is-a-bruinsfan.org +is-a-bulls-fan.com +is-a-candidate.org +is-a-caterer.com +is-a-celticsfan.org +is-a-chef.com +is-a-chef.net +is-a-chef.org +is-a-conservative.com +is-a-cpa.com +is-a-cubicle-slave.com +is-a-democrat.com +is-a-designer.com +is-a-doctor.com +is-a-financialadvisor.com +is-a-geek.com +is-a-geek.net +is-a-geek.org +is-a-green.com +is-a-guru.com +is-a-hard-worker.com +is-a-hunter.com +is-a-knight.org +is-a-landscaper.com +is-a-lawyer.com +is-a-liberal.com +is-a-libertarian.com +is-a-linux-user.org +is-a-llama.com +is-a-musician.com +is-a-nascarfan.com +is-a-nurse.com +is-a-painter.com +is-a-patsfan.org +is-a-personaltrainer.com +is-a-photographer.com +is-a-player.com +is-a-republican.com +is-a-rockstar.com +is-a-socialist.com +is-a-soxfan.org +is-a-student.com +is-a-teacher.com +is-a-techie.com +is-a-therapist.com +is-an-accountant.com +is-an-actor.com +is-an-actress.com +is-an-anarchist.com +is-an-artist.com +is-an-engineer.com +is-an-entertainer.com +is-by.us +is-certified.com +is-found.org +is-gone.com +is-into-anime.com +is-into-cars.com +is-into-cartoons.com +is-into-games.com +is-leet.com +is-lost.org +is-not-certified.com +is-saved.org +is-slick.com +is-uberleet.com +is-very-bad.org +is-very-evil.org +is-very-good.org +is-very-nice.org +is-very-sweet.org +is-with-theband.com +isa-geek.com +isa-geek.net +isa-geek.org +isa-hockeynut.com +issmarterthanyou.com +isteingeek.de +istmein.de +kicks-ass.net +kicks-ass.org +knowsitall.info +land-4-sale.us +lebtimnetz.de +leitungsen.de +likes-pie.com +likescandy.com +merseine.nu +mine.nu +misconfused.org +mypets.ws +myphotos.cc +neat-url.com +office-on-the.net +on-the-web.tv +podzone.net +podzone.org +readmyblog.org +saves-the-whales.com +scrapper-site.net +scrapping.cc +selfip.biz +selfip.com +selfip.info +selfip.net +selfip.org +sells-for-less.com +sells-for-u.com +sells-it.net +sellsyourhome.org +servebbs.com +servebbs.net +servebbs.org +serveftp.net +serveftp.org +servegame.org +shacknet.nu +simple-url.com +space-to-rent.com +stuff-4-sale.org +stuff-4-sale.us +teaches-yoga.com +thruhere.net +traeumtgerade.de +webhop.biz +webhop.info +webhop.net +webhop.org +worse-than.tv +writesthisblog.com + +// dynv6 : https://dynv6.com +// Submitted by Dominik Menke <dom@digineo.de> 2016-01-18 +dynv6.net + +// EU.org https://eu.org/ +// Submitted by Pierre Beyssac <hostmaster@eu.org> +eu.org +al.eu.org +asso.eu.org +at.eu.org +au.eu.org +be.eu.org +bg.eu.org +ca.eu.org +cd.eu.org +ch.eu.org +cn.eu.org +cy.eu.org +cz.eu.org +de.eu.org +dk.eu.org +edu.eu.org +ee.eu.org +es.eu.org +fi.eu.org +fr.eu.org +gr.eu.org +hr.eu.org +hu.eu.org +ie.eu.org +il.eu.org +in.eu.org +int.eu.org +is.eu.org +it.eu.org +jp.eu.org +kr.eu.org +lt.eu.org +lu.eu.org +lv.eu.org +mc.eu.org +me.eu.org +mk.eu.org +mt.eu.org +my.eu.org +net.eu.org +ng.eu.org +nl.eu.org +no.eu.org +nz.eu.org +paris.eu.org +pl.eu.org +pt.eu.org +q-a.eu.org +ro.eu.org +ru.eu.org +se.eu.org +si.eu.org +sk.eu.org +tr.eu.org +uk.eu.org +us.eu.org + +// Facebook, Inc. +// Submitted by Peter Ruibal <public-suffix@fb.com> +apps.fbsbx.com + +// Fastly Inc. http://www.fastly.com/ +// Submitted by Vladimir Vuksan <vladimir@fastly.com> +a.ssl.fastly.net +b.ssl.fastly.net +global.ssl.fastly.net +a.prod.fastly.net +global.prod.fastly.net + +// Firebase, Inc. +// Submitted by Chris Raynor <chris@firebase.com> +firebaseapp.com + +// Flynn : https://flynn.io +// Submitted by Jonathan Rudenberg <jonathan@flynn.io> +flynnhub.com + +// GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains +// Submitted by David Illsley <david.illsley@digital.cabinet-office.gov.uk> +service.gov.uk + +// GitHub, Inc. +// Submitted by Patrick Toomey <security@github.com> +github.io +githubusercontent.com +githubcloud.com +*.api.githubcloud.com +*.ext.githubcloud.com +gist.githubcloud.com +*.githubcloudusercontent.com + +// GlobeHosting, Inc. +// Submitted by Zoltan Egresi <egresi@globehosting.com> +ro.com + +// GoIP DNS Services : http://www.goip.de +// Submitted by Christian Poulter <milchstrasse@goip.de> +goip.de + +// Google, Inc. +// Submitted by Eduardo Vela <evn@google.com> +*.0emm.com +appspot.com +blogspot.ae +blogspot.al +blogspot.am +blogspot.ba +blogspot.be +blogspot.bg +blogspot.bj +blogspot.ca +blogspot.cf +blogspot.ch +blogspot.cl +blogspot.co.at +blogspot.co.id +blogspot.co.il +blogspot.co.ke +blogspot.co.nz +blogspot.co.uk +blogspot.co.za +blogspot.com +blogspot.com.ar +blogspot.com.au +blogspot.com.br +blogspot.com.by +blogspot.com.co +blogspot.com.cy +blogspot.com.ee +blogspot.com.eg +blogspot.com.es +blogspot.com.mt +blogspot.com.ng +blogspot.com.tr +blogspot.com.uy +blogspot.cv +blogspot.cz +blogspot.de +blogspot.dk +blogspot.fi +blogspot.fr +blogspot.gr +blogspot.hk +blogspot.hr +blogspot.hu +blogspot.ie +blogspot.in +blogspot.is +blogspot.it +blogspot.jp +blogspot.kr +blogspot.li +blogspot.lt +blogspot.lu +blogspot.md +blogspot.mk +blogspot.mr +blogspot.mx +blogspot.my +blogspot.nl +blogspot.no +blogspot.pe +blogspot.pt +blogspot.qa +blogspot.re +blogspot.ro +blogspot.rs +blogspot.ru +blogspot.se +blogspot.sg +blogspot.si +blogspot.sk +blogspot.sn +blogspot.td +blogspot.tw +blogspot.ug +blogspot.vn +cloudfunctions.net +codespot.com +googleapis.com +googlecode.com +pagespeedmobilizer.com +withgoogle.com +withyoutube.com + +// Hashbang : https://hashbang.sh +hashbang.sh + +// Heroku : https://www.heroku.com/ +// Submitted by Tom Maher <tmaher@heroku.com> +herokuapp.com +herokussl.com + +// iki.fi +// Submitted by Hannu Aronsson <haa@iki.fi> +iki.fi + +// info.at : http://www.info.at/ +biz.at +info.at + +// Michau Enterprises Limited : http://www.co.pl/ +co.pl + +// Microsoft : http://microsoft.com +// Submitted by Barry Dorrans <bdorrans@microsoft.com> +azurewebsites.net +azure-mobile.net +cloudapp.net + +// Mozilla Foundation : https://mozilla.org/ +// Submitted by glob <glob@mozilla.com> +bmoattachments.org + +// Neustar Inc. +// Submitted by Trung Tran <Trung.Tran@neustar.biz> +4u.com + +// ngrok : https://ngrok.com/ +// Submitted by Alan Shreve <alan@ngrok.com> +ngrok.io + +// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ +// Submitted by Jeff Wheelhouse <support@nearlyfreespeech.net> +nfshost.com + +// nsupdate.info : https://www.nsupdate.info/ +// Submitted by Thomas Waldmann <info@nsupdate.info> +nsupdate.info +nerdpol.ovh + +// NYC.mn : http://www.information.nyc.mn +// Submitted by Matthew Brown <mattbrown@nyc.mn> +nyc.mn + +// One Fold Media : http://www.onefoldmedia.com/ +// Submitted by Eddie Jones <eddie@onefoldmedia.com> +nid.io + +// Opera Software, A.S.A. +// Submitted by Yngve Pettersen <yngve@opera.com> +operaunite.com + +// OutSystems +// Submitted by Duarte Santos <domain-admin@outsystemscloud.com> +outsystemscloud.com + +// OwnProvider : http://www.ownprovider.com +// Submitted by Jan Moennich <jan.moennich@ownprovider.com> +ownprovider.com + +// oy.lc +// Submitted by Charly Coste <changaco@changaco.oy.lc> +oy.lc + +// Pagefront : https://www.pagefronthq.com/ +// Submitted by Jason Kriss <jason@pagefronthq.com> +pagefrontapp.com + +// .pl domains (grandfathered) +art.pl +gliwice.pl +krakow.pl +poznan.pl +wroc.pl +zakopane.pl + +// Pantheon Systems, Inc. : https://pantheon.io/ +// Submitted by Gary Dylina <gary@pantheon.io> +pantheonsite.io +gotpantheon.com + +// Peplink | Pepwave : http://peplink.com/ +// Submitted by Steve Leung <steveleung@peplink.com> +mypep.link + +// prgmr.com : https://prgmr.com/ +// Submitted by Sarah Newman <owner@prgmr.com> +xen.prgmr.com + +// priv.at : http://www.nic.priv.at/ +// Submitted by registry <lendl@nic.at> +priv.at + +// Publication Presse Communication SARL : https://ppcom.fr +// Submitted by Yaacov Akiba Slama <admin@chirurgiens-dentistes-en-france.fr> +chirurgiens-dentistes-en-france.fr + +// QA2 +// Submitted by Daniel Dent (https://www.danieldent.com/) +qa2.com + +// Rackmaze LLC : https://www.rackmaze.com +// Submitted by Kirill Pertsev <kika@rackmaze.com> +rackmaze.com +rackmaze.net + +// Red Hat, Inc. OpenShift : https://openshift.redhat.com/ +// Submitted by Tim Kramer <tkramer@rhcloud.com> +rhcloud.com + +// RethinkDB : https://www.rethinkdb.com/ +// Submitted by Chris Kastorff <info@rethinkdb.com> +hzc.io + +// Sandstorm Development Group, Inc. : https://sandcats.io/ +// Submitted by Asheesh Laroia <asheesh@sandstorm.io> +sandcats.io + +// Service Online LLC : http://drs.ua/ +// Submitted by Serhii Bulakh <support@drs.ua> +biz.ua +co.ua +pp.ua + +// SinaAppEngine : http://sae.sina.com.cn/ +// Submitted by SinaAppEngine <saesupport@sinacloud.com> +sinaapp.com +vipsinaapp.com +1kapp.com + +// Synology, Inc. : https://www.synology.com/ +// Submitted by Rony Weng <ronyweng@synology.com> +diskstation.me +dscloud.biz +dscloud.me +dscloud.mobi +dsmynas.com +dsmynas.net +dsmynas.org +familyds.com +familyds.net +familyds.org +i234.me +myds.me +synology.me + +// TASK geographical domains (www.task.gda.pl/uslugi/dns) +gda.pl +gdansk.pl +gdynia.pl +med.pl +sopot.pl + +// TownNews.com domains : http://www.townnews.com +// Submitted by Dustin Ward <dward@townnews.com> +bloxcms.com +townnews-staging.com + +// UDR Limited : http://www.udr.hk.com +// Submitted by registry <hostmaster@udr.hk.com> +hk.com +hk.org +ltd.hk +inc.hk + +// Viprinet Europe GmbH : http://www.viprinet.com +// Submitted by Simon Kissel <hostmaster@viprinet.com> +router.management + +// Yola : https://www.yola.com/ +// Submitted by Stefano Rivera <stefano@yola.com> +yolasite.com + +// ZaNiC : http://www.za.net/ +// Submitted by registry <hostmaster@nic.za.net> +za.net +za.org + +// ===END PRIVATE DOMAINS===
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricNetwork/data/test_psl.txt Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,98 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/publicdomain/zero/1.0/ + +// null input. +checkPublicSuffix(null, null); +// Mixed case. +checkPublicSuffix('COM', null); +checkPublicSuffix('example.COM', 'example.com'); +checkPublicSuffix('WwW.example.COM', 'example.com'); +// Leading dot. +checkPublicSuffix('.com', null); +checkPublicSuffix('.example', null); +checkPublicSuffix('.example.com', null); +checkPublicSuffix('.example.example', null); +// Unlisted TLD. +checkPublicSuffix('example', null); +checkPublicSuffix('example.example', 'example.example'); +checkPublicSuffix('b.example.example', 'example.example'); +checkPublicSuffix('a.b.example.example', 'example.example'); +// Listed, but non-Internet, TLD. +//checkPublicSuffix('local', null); +//checkPublicSuffix('example.local', null); +//checkPublicSuffix('b.example.local', null); +//checkPublicSuffix('a.b.example.local', null); +// TLD with only 1 rule. +checkPublicSuffix('biz', null); +checkPublicSuffix('domain.biz', 'domain.biz'); +checkPublicSuffix('b.domain.biz', 'domain.biz'); +checkPublicSuffix('a.b.domain.biz', 'domain.biz'); +// TLD with some 2-level rules. +checkPublicSuffix('com', null); +checkPublicSuffix('example.com', 'example.com'); +checkPublicSuffix('b.example.com', 'example.com'); +checkPublicSuffix('a.b.example.com', 'example.com'); +checkPublicSuffix('uk.com', null); +checkPublicSuffix('example.uk.com', 'example.uk.com'); +checkPublicSuffix('b.example.uk.com', 'example.uk.com'); +checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); +checkPublicSuffix('test.ac', 'test.ac'); +// TLD with only 1 (wildcard) rule. +checkPublicSuffix('bd', null); +checkPublicSuffix('c.bd', null); +checkPublicSuffix('b.c.bd', 'b.c.bd'); +checkPublicSuffix('a.b.c.bd', 'b.c.bd'); +// More complex TLD. +checkPublicSuffix('jp', null); +checkPublicSuffix('test.jp', 'test.jp'); +checkPublicSuffix('www.test.jp', 'test.jp'); +checkPublicSuffix('ac.jp', null); +checkPublicSuffix('test.ac.jp', 'test.ac.jp'); +checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); +checkPublicSuffix('kyoto.jp', null); +checkPublicSuffix('test.kyoto.jp', 'test.kyoto.jp'); +checkPublicSuffix('ide.kyoto.jp', null); +checkPublicSuffix('b.ide.kyoto.jp', 'b.ide.kyoto.jp'); +checkPublicSuffix('a.b.ide.kyoto.jp', 'b.ide.kyoto.jp'); +checkPublicSuffix('c.kobe.jp', null); +checkPublicSuffix('b.c.kobe.jp', 'b.c.kobe.jp'); +checkPublicSuffix('a.b.c.kobe.jp', 'b.c.kobe.jp'); +checkPublicSuffix('city.kobe.jp', 'city.kobe.jp'); +checkPublicSuffix('www.city.kobe.jp', 'city.kobe.jp'); +// TLD with a wildcard rule and exceptions. +checkPublicSuffix('ck', null); +checkPublicSuffix('test.ck', null); +checkPublicSuffix('b.test.ck', 'b.test.ck'); +checkPublicSuffix('a.b.test.ck', 'b.test.ck'); +checkPublicSuffix('www.ck', 'www.ck'); +checkPublicSuffix('www.www.ck', 'www.ck'); +// US K12. +checkPublicSuffix('us', null); +checkPublicSuffix('test.us', 'test.us'); +checkPublicSuffix('www.test.us', 'test.us'); +checkPublicSuffix('ak.us', null); +checkPublicSuffix('test.ak.us', 'test.ak.us'); +checkPublicSuffix('www.test.ak.us', 'test.ak.us'); +checkPublicSuffix('k12.ak.us', null); +checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); +checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); +// IDN labels. +checkPublicSuffix('食狮.com.cn', '食狮.com.cn'); +checkPublicSuffix('食狮.公司.cn', '食狮.公司.cn'); +checkPublicSuffix('www.食狮.公司.cn', '食狮.公司.cn'); +checkPublicSuffix('shishi.公司.cn', 'shishi.公司.cn'); +checkPublicSuffix('公司.cn', null); +checkPublicSuffix('食狮.中国', '食狮.中国'); +checkPublicSuffix('www.食狮.中国', '食狮.中国'); +checkPublicSuffix('shishi.中国', 'shishi.中国'); +checkPublicSuffix('中国', null); +// Same as above, but punycoded. +checkPublicSuffix('xn--85x722f.com.cn', 'xn--85x722f.com.cn'); +checkPublicSuffix('xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); +checkPublicSuffix('www.xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); +checkPublicSuffix('shishi.xn--55qx5d.cn', 'shishi.xn--55qx5d.cn'); +checkPublicSuffix('xn--55qx5d.cn', null); +checkPublicSuffix('xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); +checkPublicSuffix('www.xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); +checkPublicSuffix('shishi.xn--fiqs8s', 'shishi.xn--fiqs8s'); +checkPublicSuffix('xn--fiqs8s', null);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricUtilities/EricCache.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing classes used for caching objects. +""" + +from PyQt6.QtCore import QDateTime, QTimer + + +class EricCache: + """ + Class implementing a LRU cache of a specific size. + + If the maximum number of entries is exceeded, the least recently used item + is removed from the cache. A cache hit moves the entry to the front of the + cache. + """ + def __init__(self, size=100): + """ + Constructor + + @param size maximum number of entries that may be stored in the cache + @type int + @exception ValueError raised to indicate an illegal 'size' parameter + """ + if size < 0: + raise ValueError("'size' parameter must be positive.") + + self.__size = size + + # internal objects + self.__keyList = [] + self.__store = {} # stores the cache entries + self.__accesStore = {} # stores the last access date and times + self.__hits = 0 + self.__misses = 0 + self.__maxsize = 0 + self.__maxCacheTime = 0 # 0 seconds means aging is disabled + + self.__cacheTimer = QTimer() + self.__cacheTimer.setSingleShot(True) + self.__cacheTimer.timeout.connect(self.__pruneCache) + + def __moveLast(self, key): + """ + Private method to move a cached item to the MRU position. + + @param key key of the item to be retrieved + @type any hashable type that can be used as a dict key + """ + self.__keyList.remove(key) + self.__keyList.append(key) + + def __adjustToSize(self): + """ + Private method to adjust the cache to its size. + """ + if self.__size: + removeList = self.__keyList[:-self.__size] + self.__keyList = self.__keyList[-self.__size:] + for key in removeList: + del self.__store[key] + del self.__accesStore[key] + else: + self.reset() + + def getSize(self): + """ + Public method to get the maximum size of the cache. + + @return maximum number of entries of the cache + @rtype int + """ + return self.__size + + def setSize(self, newSize): + """ + Public method to change the maximum size of the cache. + + @param newSize maximum number of entries that may be stored in the + cache + @type int + """ + if newSize >= 0: + self.__size = newSize + self.__adjustToSize() + + def getMaximumCacheTime(self): + """ + Public method to get the maximum time entries may exist in the cache. + + @return maximum cache time in seconds + @rtype int + """ + return self.__maxCacheTime + + def setMaximumCacheTime(self, time): + """ + Public method to set the maximum time entries may exist in the cache. + + @param time maximum cache time in seconds + @type int + """ + if time != self.__maxCacheTime: + self.__cacheTimer.stop() + self.__pruneCache() + self.__maxCacheTime = time + if self.__maxCacheTime > 0: + self.__cacheTimer.setInterval(self.__maxCacheTime * 1000) + self.__cacheTimer.start() + + def get(self, key): + """ + Public method to get an entry from the cache given its key. + + If the key is present in the cache, it is moved to the MRU position. + + @param key key of the item to be retrieved + @type any hashable type that can be used as a dict key + @return cached item for the given key or None, if the key is not + present + @rtype object or None + """ + if key in self.__store: + self.__hits += 1 + self.__moveLast(key) + self.__accesStore[key] = QDateTime.currentDateTimeUtc() + return self.__store[key] + else: + self.__misses += 1 + return None + + def add(self, key, item): + """ + Public method to add an item to the cache. + + If the key is already in use, the cached item is replaced by the new + one given and is moved to the MRU position + + @param key key of the item to be retrieved + @type any hashable type that can be used as a dict key + @param item item to be cached under the given key + @type object + """ + if key in self.__store: + self.__moveLast(key) + else: + self.__keyList.append(key) + self.__store[key] = item + self.__accesStore[key] = QDateTime.currentDateTimeUtc() + + self.__adjustToSize() + + self.__maxsize = max(self.__maxsize, len(self.__keyList)) + + def remove(self, key): + """ + Public method to remove an item from the cache. + + @param key key of the item to be retrieved + @type any hashable type that can be used as a dict key + """ + if key in self.__store: + del self.__store[key] + del self.__accesStore[key] + self.__keyList.remove(key) + + def clear(self): + """ + Public method to clear the cache. + """ + self.__keyList = [] + self.__store = {} + self.__accesStore = {} + + def reset(self): + """ + Public method to reset the cache. + + This is like clear() but sets the various counters to their initial + value as well. + """ + self.clear() + self.__hits = 0 + self.__misses = 0 + self.__maxsize = 0 + + def length(self): + """ + Public method to get the current length of the cache. + + @return current length of the cache + @rtype int + """ + return len(self.__keyList) + + def info(self): + """ + Public method to get some information about the cache. + + @return dictionary containing the cache info + @rtype dict (with keys "hits", "misses", "maxsize", "currsize") + """ + return { + "hits": self.__hits, + "misses": self.__misses, + "maxsize": self.__maxsize, + "currsize": self.length(), + } + + def __pruneCache(self): + """ + Private slot to prune outdated cache entries and restart the timer. + """ + if self.__maxCacheTime > 0: + current = QDateTime.currentDateTimeUtc() + + keysToBeDeleted = [] + for key, lastAccessTime in self.__accesStore.items(): + if lastAccessTime.secsTo(current) > self.__maxCacheTime: + keysToBeDeleted.append(key) + for key in keysToBeDeleted: + self.remove(key) + + self.__cacheTimer.start()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricUtilities/EricMutexLocker.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a context manager locking and unlocking a mutex. +""" + +import contextlib + + +class EricMutexLocker(contextlib.AbstractContextManager): + """ + Class implementing a context manager locking and unlocking a mutex. + """ + def __init__(self, mutex): + """ + Constructor + + @param mutex reference to the mutex to be locked + @type QMutex or QRecursiveMutex + """ + self.__mutex = mutex + + def __enter__(self): + """ + Special method called when entering the runtime ccontext. + + @return reference to the context manager object + @rtype E5OverrideCursor + """ + self.__mutex.lock() + + return self + + def __exit__(self, exc_type, exc_value, traceback): + """ + Special method called when exiting the runtime ccontext. + + @param exc_type type of an exception raised in the runtime context + @param exc_value value of an exception raised in the runtime context + @param traceback traceback of an exception raised in the runtime + context + @return always returns None to not suppress any exception + @rtype None + """ + self.__mutex.unlock() + + return None # __IGNORE_WARNING_M831__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricUtilities/__init__.py Sat May 22 16:52:45 2021 +0200 @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package containing utility modules. +"""
--- a/eric7/Network/IRC/IrcWidget.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Network/IRC/IrcWidget.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ from PyQt6.QtNetwork import QTcpSocket, QAbstractSocket try: from PyQt6.QtNetwork import QSslSocket, QSslConfiguration - from E5Network.E5SslErrorHandler import E5SslErrorHandler, E5SslErrorState + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler, EricSslErrorState SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -92,7 +92,7 @@ self.__socket = None if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) else: self.__sslErrorHandler = None @@ -918,7 +918,7 @@ """ ignored, defaultChanged = self.__sslErrorHandler.sslErrors( errors, self.__server.getName(), self.__server.getPort()) - if ignored == E5SslErrorState.NOT_IGNORED: + if ignored == EricSslErrorState.NOT_IGNORED: self.networkWidget.addErrorMessage( self.tr("SSL Error"), self.tr( @@ -932,7 +932,7 @@ if defaultChanged: self.__socket.setSslConfiguration( QSslConfiguration.defaultConfiguration()) - if ignored == E5SslErrorState.USER_IGNORED: + if ignored == EricSslErrorState.USER_IGNORED: self.networkWidget.addErrorMessage( self.tr("SSL Error"), self.tr(
--- a/eric7/PipInterface/Pip.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/PipInterface/Pip.py Sat May 22 16:52:45 2021 +0200 @@ -21,9 +21,9 @@ from E5Gui import E5MessageBox from E5Gui.E5Application import e5App -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -57,7 +57,7 @@ self.__networkManager.proxyAuthenticationRequired.connect( proxyAuthenticationRequired) if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) self.__networkManager.sslErrors.connect( self.__sslErrorHandler.sslErrorsReply) self.__replies = []
--- a/eric7/PluginManager/PluginManager.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/PluginManager/PluginManager.py Sat May 22 16:52:45 2021 +0200 @@ -25,9 +25,9 @@ from E5Gui import E5MessageBox from E5Gui.E5Application import e5App -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler, E5SslErrorState + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler, EricSslErrorState SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -157,7 +157,7 @@ self.__networkManager.proxyAuthenticationRequired.connect( proxyAuthenticationRequired) if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) self.__networkManager.sslErrors.connect(self.__sslErrors) self.__replies = [] @@ -1395,7 +1395,7 @@ @param errors list of SSL errors (list of QSslError) """ ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] - if ignored == E5SslErrorState.NOT_IGNORED: + if ignored == EricSslErrorState.NOT_IGNORED: self.__downloadCancelled = True ########################################################################
--- a/eric7/PluginManager/PluginRepositoryDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/PluginManager/PluginRepositoryDialog.py Sat May 22 16:52:45 2021 +0200 @@ -31,9 +31,9 @@ from E5Gui.E5MainWindow import E5MainWindow from E5Gui.E5Application import e5App -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler, E5SslErrorState + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler, EricSslErrorState SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -136,7 +136,7 @@ self.__networkManager.proxyAuthenticationRequired.connect( proxyAuthenticationRequired) if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) self.__networkManager.sslErrors.connect(self.__sslErrors) self.__replies = [] @@ -689,7 +689,7 @@ @param errors list of SSL errors (list of QSslError) """ ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] - if ignored == E5SslErrorState.NOT_IGNORED: + if ignored == EricSslErrorState.NOT_IGNORED: self.__downloadCancel(reply) def getDownloadedPlugins(self):
--- a/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py Sat May 22 16:52:45 2021 +0200 @@ -16,7 +16,7 @@ from E5Gui import E5MessageBox -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired from .TranslationEngine import TranslationEngine
--- a/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py Sat May 22 16:52:45 2021 +0200 @@ -13,7 +13,7 @@ QNetworkAccessManager, QNetworkRequest, QNetworkReply ) -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired class TranslatorRequest(QObject):
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py Sat May 22 16:52:45 2021 +0200 @@ -16,7 +16,7 @@ QHeaderView, QDialog, QDialogButtonBox, QTreeWidgetItem ) -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnDialogMixin import SvnDialogMixin from .Ui_SvnBlameDialog import Ui_SvnBlameDialog @@ -73,7 +73,7 @@ cwd = os.getcwd() os.chdir(dname) try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): annotations = self.client.annotate(fname) for annotation in annotations: author = annotation["author"]
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py Sat May 22 16:52:45 2021 +0200 @@ -16,7 +16,7 @@ from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnDialogMixin import SvnDialogMixin @@ -82,7 +82,7 @@ with E5OverrideCursor(): try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): entries = self.client.get_changelist( path, depth=pysvn.depth.infinity) for entry in entries:
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py Sat May 22 16:52:45 2021 +0200 @@ -20,7 +20,7 @@ from E5Gui import E5MessageBox, E5FileDialog from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnDialogMixin import SvnDialogMixin from .Ui_SvnDiffDialog import Ui_SvnDiffDialog @@ -210,7 +210,7 @@ dname = e5App().getObject('Project').getRelativePath(dname) if dname: dname += "/" - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): for name in fnames: self.__showError( self.tr("Processing file '{0}'...\n").format(name))
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py Sat May 22 16:52:45 2021 +0200 @@ -15,7 +15,7 @@ from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QDialog, QApplication -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnUtilities import formatTime from .SvnDialogMixin import SvnDialogMixin @@ -61,7 +61,7 @@ cwd = os.getcwd() os.chdir(projectPath) try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): entries = self.client.info2(fn, recurse=False) infoStr = "<table>" for path, info in entries:
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py Sat May 22 16:52:45 2021 +0200 @@ -20,7 +20,7 @@ from E5Gui import E5MessageBox from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnUtilities import formatTime, dateFromTime_t from .SvnDialogMixin import SvnDialogMixin @@ -290,7 +290,7 @@ nextRev = 0 fetched = 0 logs = [] - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): while fetched < limit: flimit = min(fetchLimit, limit - fetched) revstart = (
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ QWidget, QHeaderView, QApplication, QDialogButtonBox, QTreeWidgetItem ) -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnDialogMixin import SvnDialogMixin from .Ui_SvnPropListDialog import Ui_SvnPropListDialog @@ -120,7 +120,7 @@ cwd = os.getcwd() os.chdir(dname) - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): try: for name in fnames: proplist = self.client.proplist(name, recurse=recursive)
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ from E5Gui import E5MessageBox from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnUtilities import formatTime from .SvnDialogMixin import SvnDialogMixin @@ -151,7 +151,7 @@ with E5OverrideCursor(): try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): entries = self.client.list(url, recurse=False) firstTime = parent == self.repoTree for dirent, _lock in entries:
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py Sat May 22 16:52:45 2021 +0200 @@ -22,7 +22,7 @@ from E5Gui import E5MessageBox from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnConst import svnStatusMap from .SvnDialogMixin import SvnDialogMixin @@ -323,7 +323,7 @@ cwd = os.getcwd() os.chdir(self.dname) try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): for name in fnames: # step 1: determine changelists and their files changelistsDict = {}
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py Sat May 22 16:52:45 2021 +0200 @@ -20,7 +20,7 @@ from E5Gui import E5MessageBox -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .SvnUtilities import formatTime @@ -139,7 +139,7 @@ cwd = os.getcwd() os.chdir(dname) try: - with E5MutexLocker(self.vcs.vcsExecutionMutex): + with EricMutexLocker(self.vcs.vcsExecutionMutex): entries = self.client.list(path, recurse=False) for dirent, _lock in entries: if dirent["path"] != path:
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py Sat May 22 16:52:45 2021 +0200 @@ -20,7 +20,7 @@ from E5Gui.E5Application import e5App from E5Gui import E5MessageBox -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from VCS.VersionControl import VersionControl @@ -316,7 +316,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): rev = client.import_(".", url, msg, recurse, ignore=True) status = True except pysvn.ClientError as e: @@ -392,7 +392,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.checkout(url, projectDir, recurse) status = True except pysvn.ClientError as e: @@ -457,7 +457,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.export(url, projectDir, force=True, recurse=recurse) status = True except pysvn.ClientError as e: @@ -584,7 +584,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): rev = ( client.checkin( fnames, msg, recurse=recurse, keep_locks=keeplocks, @@ -638,7 +638,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.update(fnames, recurse) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -750,7 +750,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.add(names, recurse=recurse, force=force, ignore=not noignore) except pysvn.ClientError as e: @@ -858,7 +858,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.add(names, recurse=recurse, force=force, ignore=ignore) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -895,7 +895,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.remove(name, force=force) res = True except pysvn.ClientError as e: @@ -957,7 +957,7 @@ client, log=log) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.move(name, target, force=force) res = True except pysvn.ClientError as e: @@ -1096,7 +1096,7 @@ client, log=log) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): rev = client.copy(reposURL, url) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -1109,7 +1109,7 @@ client, log=log) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): rev = client.remove(url) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -1160,7 +1160,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.revert(name, recurse) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -1237,7 +1237,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): rev = client.switch(name, url) dlg.showMessage(self.tr("Revision {0}.\n").format(rev.number)) except pysvn.ClientError as e: @@ -1343,7 +1343,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.merge(url1, revision1, url2, revision2, fname, recurse=recurse, force=force) except pysvn.ClientError as e: @@ -1484,7 +1484,7 @@ ) with contextlib.suppress(pysvn.ClientError): - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): allFiles = client.status(dname, recurse=True, get_all=True, ignore=True, update=False) dirs = [x for x in names.keys() if os.path.isdir(x)] @@ -1561,7 +1561,7 @@ ) with contextlib.suppress(pysvn.ClientError): - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): allFiles = client.status(dname, recurse=True, get_all=True, ignore=True, update=False) for file in allFiles: @@ -1635,7 +1635,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.cleanup(name) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -1762,7 +1762,7 @@ """ client = pysvn.Client() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): entry = client.info(path) url = entry.url except pysvn.ClientError: @@ -1793,7 +1793,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): for name in fnames: client.resolved(name, recurse=recurse) except pysvn.ClientError as e: @@ -1833,7 +1833,7 @@ client, log=log) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.copy(name, target) res = True except pysvn.ClientError as e: @@ -1907,7 +1907,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): for name in fnames: client.propset(propName, propValue, name, recurse=recurse, skip_checks=skipchecks) @@ -1958,7 +1958,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): for name in fnames: client.propdel(propName, name, recurse=recurse, skip_checks=skipchecks) @@ -2257,7 +2257,7 @@ client, parent=parent) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.lock(fnames, comment, force=stealIt) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -2293,7 +2293,7 @@ client, parent=parent) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.unlock(fnames, force=breakIt) except pysvn.ClientError as e: dlg.showError(e.args[0]) @@ -2335,7 +2335,7 @@ dlg = SvnDialog(self.tr('Relocating'), msg, client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): if inside: client.switch(projectPath, newUrl) else: @@ -2387,7 +2387,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): for name in names: client.remove_from_changelists(name) except pysvn.ClientError as e: @@ -2423,7 +2423,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): for name in names: client.add_to_changelist( name, clname, depth=pysvn.depth.infinity) @@ -2455,7 +2455,7 @@ if hasattr(client, 'get_changelist'): ppath = e5App().getObject("Project").getProjectPath() with contextlib.suppress(pysvn.ClientError): - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): entries = client.get_changelist( ppath, depth=pysvn.depth.infinity) for entry in entries: @@ -2478,7 +2478,7 @@ client) QApplication.processEvents() try: - with E5MutexLocker(self.vcsExecutionMutex): + with EricMutexLocker(self.vcsExecutionMutex): client.upgrade(path) except pysvn.ClientError as e: dlg.showError(e.args[0])
--- a/eric7/Preferences/ConfigurationPages/EmailPage.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Preferences/ConfigurationPages/EmailPage.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ from E5Gui.E5Application import e5App from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Network.E5GoogleMailHelpers import getInstallCommand, RequiredPackages +from EricNetwork.EricGoogleMailHelpers import getInstallCommand, RequiredPackages from .ConfigurationPageBase import ConfigurationPageBase from .Ui_EmailPage import Ui_EmailPage @@ -243,7 +243,7 @@ """ if self.__helpDialog is None: try: - from E5Network.E5GoogleMail import GoogleMailHelp + from EricNetwork.EricGoogleMail import GoogleMailHelp helpStr = GoogleMailHelp() except ImportError: helpStr = self.tr( @@ -286,8 +286,8 @@ self.googleMailCheckBox.setEnabled(True) try: - import E5Network.E5GoogleMail # __IGNORE_WARNING__ - from E5Network.E5GoogleMailHelpers import ( + import EricNetwork.EricGoogleMail # __IGNORE_WARNING__ + from EricNetwork.EricGoogleMailHelpers import ( isClientSecretFileAvailable )
--- a/eric7/Preferences/ConfigurationPages/NetworkPage.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Preferences/ConfigurationPages/NetworkPage.py Sat May 22 16:52:45 2021 +0200 @@ -11,7 +11,7 @@ from E5Gui.E5PathPicker import E5PathPickerModes -from E5Network.E5Ftp import E5FtpProxyType +from EricNetwork.EricFtp import EricFtpProxyType from .ConfigurationPageBase import ConfigurationPageBase from .Ui_NetworkPage import Ui_NetworkPage @@ -41,25 +41,25 @@ self.downloadDirPicker.setMode(E5PathPickerModes.DIRECTORY_MODE) self.ftpProxyTypeCombo.addItem( - self.tr("No FTP Proxy"), E5FtpProxyType.NO_PROXY.value) + self.tr("No FTP Proxy"), EricFtpProxyType.NO_PROXY.value) self.ftpProxyTypeCombo.addItem( self.tr("No Proxy Authentication required"), - E5FtpProxyType.NON_AUTHORIZING.value) + EricFtpProxyType.NON_AUTHORIZING.value) self.ftpProxyTypeCombo.addItem( - self.tr("User@Server"), E5FtpProxyType.USER_SERVER.value) + self.tr("User@Server"), EricFtpProxyType.USER_SERVER.value) self.ftpProxyTypeCombo.addItem( - self.tr("SITE"), E5FtpProxyType.SITE.value) + self.tr("SITE"), EricFtpProxyType.SITE.value) self.ftpProxyTypeCombo.addItem( - self.tr("OPEN"), E5FtpProxyType.OPEN.value) + self.tr("OPEN"), EricFtpProxyType.OPEN.value) self.ftpProxyTypeCombo.addItem( self.tr("User@Proxyuser@Server"), - E5FtpProxyType.USER_PROXYUSER_SERVER.value) + EricFtpProxyType.USER_PROXYUSER_SERVER.value) self.ftpProxyTypeCombo.addItem( - self.tr("Proxyuser@Server"), E5FtpProxyType.PROXYUSER_SERVER.value) + self.tr("Proxyuser@Server"), EricFtpProxyType.PROXYUSER_SERVER.value) self.ftpProxyTypeCombo.addItem( - self.tr("AUTH and RESP"), E5FtpProxyType.AUTH_RESP.value) + self.tr("AUTH and RESP"), EricFtpProxyType.AUTH_RESP.value) self.ftpProxyTypeCombo.addItem( - self.tr("Bluecoat Proxy"), E5FtpProxyType.BLUECOAT.value) + self.tr("Bluecoat Proxy"), EricFtpProxyType.BLUECOAT.value) # set initial values self.downloadDirPicker.setText(Preferences.getUI("DownloadPath")) @@ -204,7 +204,7 @@ self.ftpProxyPortSpin.value()) Preferences.setUI( "ProxyType/Ftp", - E5FtpProxyType(self.ftpProxyTypeCombo.currentData())) + EricFtpProxyType(self.ftpProxyTypeCombo.currentData())) Preferences.setUI( "ProxyUser/Ftp", self.ftpProxyUserEdit.text()) @@ -230,18 +230,18 @@ @param index index of the selected item (integer) """ - proxyType = E5FtpProxyType(self.ftpProxyTypeCombo.itemData(index)) - self.ftpProxyHostEdit.setEnabled(proxyType != E5FtpProxyType.NO_PROXY) - self.ftpProxyPortSpin.setEnabled(proxyType != E5FtpProxyType.NO_PROXY) + proxyType = EricFtpProxyType(self.ftpProxyTypeCombo.itemData(index)) + self.ftpProxyHostEdit.setEnabled(proxyType != EricFtpProxyType.NO_PROXY) + self.ftpProxyPortSpin.setEnabled(proxyType != EricFtpProxyType.NO_PROXY) self.ftpProxyUserEdit.setEnabled( - proxyType not in [E5FtpProxyType.NO_PROXY, - E5FtpProxyType.NON_AUTHORIZING]) + proxyType not in [EricFtpProxyType.NO_PROXY, + EricFtpProxyType.NON_AUTHORIZING]) self.ftpProxyPasswordEdit.setEnabled( - proxyType not in [E5FtpProxyType.NO_PROXY, - E5FtpProxyType.NON_AUTHORIZING]) + proxyType not in [EricFtpProxyType.NO_PROXY, + EricFtpProxyType.NON_AUTHORIZING]) self.ftpProxyAccountEdit.setEnabled( - proxyType not in [E5FtpProxyType.NO_PROXY, - E5FtpProxyType.NON_AUTHORIZING]) + proxyType not in [EricFtpProxyType.NO_PROXY, + EricFtpProxyType.NON_AUTHORIZING]) def create(dlg):
--- a/eric7/Preferences/__init__.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Preferences/__init__.py Sat May 22 16:52:45 2021 +0200 @@ -38,7 +38,7 @@ from E5Gui import E5FileDialog -from E5Network.E5Ftp import E5FtpProxyType +from EricNetwork.EricFtp import EricFtpProxyType import Globals @@ -199,7 +199,7 @@ "ProxyPassword/Http": "", "ProxyPassword/Https": "", "ProxyPassword/Ftp": "", - "ProxyType/Ftp": E5FtpProxyType.NO_PROXY, + "ProxyType/Ftp": EricFtpProxyType.NO_PROXY, "ProxyAccount/Ftp": "", "ProxyExceptions": "localhost,127.0.0.,::1", @@ -1921,7 +1921,7 @@ return int(prefClass.settings.value( "UI/" + key, prefClass.uiDefaults[key])) elif key in ["ProxyType/Ftp", ]: - return E5FtpProxyType(int(prefClass.settings.value( + return EricFtpProxyType(int(prefClass.settings.value( "UI/" + key, prefClass.uiDefaults[key].value))) elif key in ["ProxyPassword/Http", "ProxyPassword/Https", "ProxyPassword/Ftp", ]:
--- a/eric7/QScintilla/Editor.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/QScintilla/Editor.py Sat May 22 16:52:45 2021 +0200 @@ -29,7 +29,7 @@ from E5Gui import E5FileDialog, E5MessageBox from E5Gui.E5OverrideCursor import E5OverrideCursor -from E5Utilities.E5Cache import E5Cache +from EricUtilities.EricCache import EricCache from .QsciScintillaCompat import QsciScintillaCompat from .EditorMarkerMap import EditorMarkerMap @@ -433,7 +433,7 @@ self.__acText = "" self.__acCompletions = set() self.__acCompletionsFinished = 0 - self.__acCache = E5Cache( + self.__acCache = EricCache( size=Preferences.getEditor("AutoCompletionCacheSize")) self.__acCache.setMaximumCacheTime( Preferences.getEditor("AutoCompletionCacheTime"))
--- a/eric7/UI/EmailDialog.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/UI/EmailDialog.py Sat May 22 16:52:45 2021 +0200 @@ -146,10 +146,10 @@ """ if self.__helpDialog is None: try: - from E5Network.E5GoogleMail import GoogleMailHelp + from EricNetwork.EricGoogleMail import GoogleMailHelp helpStr = GoogleMailHelp() except ImportError: - from E5Network.E5GoogleMailHelpers import getInstallCommand + from EricNetwork.EricGoogleMailHelpers import getInstallCommand helpStr = self.tr( "<p>The Google Mail Client API is not installed." " Use <code>{0}</code> to install it.</p>" @@ -387,10 +387,10 @@ @param msg email message to be sent @type email.mime.text.MIMEBase """ - from E5Network.E5GoogleMail import E5GoogleMail + from EricNetwork.EricGoogleMail import EricGoogleMail if self.__googleMail is None: - self.__googleMail = E5GoogleMail(self) + self.__googleMail = EricGoogleMail(self) self.__googleMail.sendResult.connect(self.__gmailSendResult) self.__googleMail.sendMessage(msg)
--- a/eric7/UI/UserInterface.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/UI/UserInterface.py Sat May 22 16:52:45 2021 +0200 @@ -56,11 +56,11 @@ from Tasks.TasksFile import TasksFile -from E5Network.E5NetworkProxyFactory import ( - E5NetworkProxyFactory, proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import ( + EricNetworkProxyFactory, proxyAuthenticationRequired ) try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler, E5SslErrorState + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler, EricSslErrorState SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -223,7 +223,7 @@ if Preferences.getUI("UseSystemProxy"): QNetworkProxyFactory.setUseSystemConfiguration(True) else: - self.__proxyFactory = E5NetworkProxyFactory() + self.__proxyFactory = EricNetworkProxyFactory() QNetworkProxyFactory.setApplicationProxyFactory( self.__proxyFactory) QNetworkProxyFactory.setUseSystemConfiguration(False) @@ -727,7 +727,7 @@ self.__networkManager.proxyAuthenticationRequired.connect( proxyAuthenticationRequired) if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) self.__networkManager.sslErrors.connect(self.__sslErrors) self.__replies = [] @@ -6202,7 +6202,7 @@ if Preferences.getUI("UseSystemProxy"): QNetworkProxyFactory.setUseSystemConfiguration(True) else: - self.__proxyFactory = E5NetworkProxyFactory() + self.__proxyFactory = EricNetworkProxyFactory() QNetworkProxyFactory.setApplicationProxyFactory( self.__proxyFactory) QNetworkProxyFactory.setUseSystemConfiguration(False) @@ -6353,9 +6353,9 @@ """ Private slot to show the certificates management dialog. """ - from E5Network.E5SslCertificatesDialog import E5SslCertificatesDialog - - dlg = E5SslCertificatesDialog(self) + from EricNetwork.EricSslCertificatesDialog import EricSslCertificatesDialog + + dlg = EricSslCertificatesDialog(self) dlg.exec() def __clearPrivateData(self): @@ -7294,7 +7294,7 @@ @param errors list of SSL errors (list of QSslError) """ ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] - if ignored == E5SslErrorState.NOT_IGNORED: + if ignored == EricSslErrorState.NOT_IGNORED: self.__downloadCancelled = True #######################################
--- a/eric7/Utilities/FtpUtilities.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/Utilities/FtpUtilities.py Sat May 22 16:52:45 2021 +0200 @@ -11,7 +11,7 @@ from PyQt6.QtCore import QObject, QDate, QDateTime, QTime -from E5Network.E5UrlInfo import E5UrlInfo, E5UrlPermission +from EricNetwork.EricUrlInfo import EricUrlInfo, EricUrlPermission class FtpDirLineParserError(Exception): @@ -69,7 +69,7 @@ given URL info object. @param modeString mode string to be parsed (string) - @param urlInfo reference to the URL info object (E5UrlInfo) + @param urlInfo reference to the URL info object (EricUrlInfo) @exception FtpDirLineParserError Raised if the mode cannot be parsed. """ if len(modeString) != 10: @@ -80,23 +80,23 @@ permission = 0 if modeString[1] != '-': - permission |= E5UrlPermission.READ_OWNER + permission |= EricUrlPermission.READ_OWNER if modeString[2] != '-': - permission |= E5UrlPermission.WRITE_OWNER + permission |= EricUrlPermission.WRITE_OWNER if modeString[3] != '-': - permission |= E5UrlPermission.EXE_OWNER + permission |= EricUrlPermission.EXE_OWNER if modeString[4] != '-': - permission |= E5UrlPermission.READ_GROUP + permission |= EricUrlPermission.READ_GROUP if modeString[5] != '-': - permission |= E5UrlPermission.WRITE_GROUP + permission |= EricUrlPermission.WRITE_GROUP if modeString[6] != '-': - permission |= E5UrlPermission.EXE_GROUP + permission |= EricUrlPermission.EXE_GROUP if modeString[7] != '-': - permission |= E5UrlPermission.READ_OTHER + permission |= EricUrlPermission.READ_OTHER if modeString[8] != '-': - permission |= E5UrlPermission.WRITE_OTHER + permission |= EricUrlPermission.WRITE_OTHER if modeString[9] != '-': - permission |= E5UrlPermission.EXE_OTHER + permission |= EricUrlPermission.EXE_OTHER urlInfo.setPermissions(permission) if modeString[0] == "d": @@ -128,7 +128,7 @@ @param monthAbbreviation abbreviation of the month name (string) @param day day of the month (string) @param yearOrTime string giving the year or a time (string) - @param urlInfo reference to the URL info object (E5UrlInfo) + @param urlInfo reference to the URL info object (EricUrlInfo) @exception FtpDirLineParserError Raised if the month abbreviation is not recognized. """ @@ -196,7 +196,7 @@ Private method to parse a Unix style directory listing line. @param line directory line to be parsed (string) - @return URL info object containing the valid data (E5UrlInfo) + @return URL info object containing the valid data (EricUrlInfo) """ modeString, nlink, user, group, size, month, day, yearOrTime, name = ( self.__splitUnixLine(line) @@ -205,7 +205,7 @@ if name in [".", ".."]: return None - urlInfo = E5UrlInfo() + urlInfo = EricUrlInfo() self.__parseUnixMode(modeString, urlInfo) self.__parseUnixTime(month, day, yearOrTime, urlInfo) urlInfo.setOwner(user) @@ -230,7 +230,7 @@ @param date date string (string) @param time time string (string) - @param urlInfo reference to the URL info object (E5UrlInfo) + @param urlInfo reference to the URL info object (EricUrlInfo) @exception FtpDirLineParserError Raised if either of the strings is not recognized. """ @@ -260,7 +260,7 @@ Private method to parse a Windows style directory listing line. @param line directory line to be parsed (string) - @return URL info object containing the valid data (E5UrlInfo) + @return URL info object containing the valid data (EricUrlInfo) @exception FtpDirLineParserError Raised if the line is not of a recognized Windows format. """ @@ -274,7 +274,7 @@ if name in [".", ".."]: return None - urlInfo = E5UrlInfo() + urlInfo = EricUrlInfo() self.__parseWindowsTime(date, time, urlInfo) if dirOrSize.lower() == "<dir>": urlInfo.setDir(True) @@ -293,15 +293,15 @@ urlInfo.setSymLink(ext == ".lnk") permissions = ( - E5UrlPermission.READ_OWNER | E5UrlPermission.WRITE_OWNER | - E5UrlPermission.READ_GROUP | E5UrlPermission.WRITE_GROUP | - E5UrlPermission.READ_OTHER | E5UrlPermission.WRITE_OTHER + EricUrlPermission.READ_OWNER | EricUrlPermission.WRITE_OWNER | + EricUrlPermission.READ_GROUP | EricUrlPermission.WRITE_GROUP | + EricUrlPermission.READ_OTHER | EricUrlPermission.WRITE_OTHER ) if ext in [".exe", ".com", ".bat", ".cmd"]: permissions |= ( - E5UrlPermission.EXE_OWNER | - E5UrlPermission.EXE_GROUP | - E5UrlPermission.EXE_OTHER + EricUrlPermission.EXE_OWNER | + EricUrlPermission.EXE_GROUP | + EricUrlPermission.EXE_OTHER ) urlInfo.setPermissions(permissions) @@ -316,7 +316,7 @@ to Windows style. If that fails as well, an exception is raised. @param line directory line to be parsed (string) - @return URL info object containing the valid data (E5UrlInfo) + @return URL info object containing the valid data (EricUrlInfo) """ if self.__ignoreLine(line): return None
--- a/eric7/WebBrowser/AdBlock/AdBlockManager.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/AdBlock/AdBlockManager.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ from E5Gui import E5MessageBox -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from .AdBlockSubscription import AdBlockSubscription from .AdBlockUrlInterceptor import AdBlockUrlInterceptor @@ -149,7 +149,7 @@ @return flag indicating to block the request @rtype bool """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): if not self.isEnabled(): return False
--- a/eric7/WebBrowser/Network/EricSchemeHandler.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/Network/EricSchemeHandler.py Sat May 22 16:52:45 2021 +0200 @@ -12,7 +12,7 @@ from E5Gui.E5Application import e5App -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from ..Tools.WebBrowserTools import ( getHtmlPage, getJavascript, pixmapFileToDataUrl @@ -101,7 +101,7 @@ if self.__loaded: return - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): if self.__pageName == "adblock": contents = self.__adBlockPage() elif self.__pageName in ["home", "start", "startpage"]: @@ -126,7 +126,7 @@ @return number of available bytes @rtype int """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): return self.__buffer.bytesAvailable() def readData(self, maxlen): @@ -136,7 +136,7 @@ @param maxlen maximum number of bytes to read (integer) @return string containing the data (bytes) """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): return self.__buffer.read(maxlen) def close(self):
--- a/eric7/WebBrowser/Network/NetworkManager.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/Network/NetworkManager.py Sat May 22 16:52:45 2021 +0200 @@ -19,9 +19,9 @@ from E5Gui import E5MessageBox from E5Gui.E5Application import e5App -from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired +from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired try: - from E5Network.E5SslErrorHandler import E5SslErrorHandler + from EricNetwork.EricSslErrorHandler import EricSslErrorHandler SSL_AVAILABLE = True except ImportError: SSL_AVAILABLE = False @@ -51,9 +51,9 @@ """ super().__init__(parent) - from E5Network.E5NetworkProxyFactory import E5NetworkProxyFactory + from EricNetwork.EricNetworkProxyFactory import EricNetworkProxyFactory - self.__proxyFactory = E5NetworkProxyFactory() + self.__proxyFactory = EricNetworkProxyFactory() if Preferences.getUI("UseSystemProxy"): QNetworkProxyFactory.setUseSystemConfiguration(True) else: @@ -64,7 +64,7 @@ self.languagesChanged() if SSL_AVAILABLE: - self.__sslErrorHandler = E5SslErrorHandler(self) + self.__sslErrorHandler = EricSslErrorHandler(self) self.sslErrors.connect(self.__sslErrorHandlingSlot) self.__temporarilyIgnoredSslErrors = {}
--- a/eric7/WebBrowser/Network/NetworkUrlInterceptor.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/Network/NetworkUrlInterceptor.py Sat May 22 16:52:45 2021 +0200 @@ -13,7 +13,7 @@ QWebEngineUrlRequestInterceptor, QWebEngineUrlRequestInfo ) -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker from ..WebBrowserPage import WebBrowserPage @@ -45,7 +45,7 @@ @param info URL request information @type QWebEngineUrlRequestInfo """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): # Do Not Track feature if self.__doNotTrack: info.setHttpHeader(b"DNT", b"1") @@ -70,7 +70,7 @@ @param interceptor URL interceptor to be installed @type UrlInterceptor """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): if interceptor not in self.__interceptors: self.__interceptors.append(interceptor) @@ -81,7 +81,7 @@ @param interceptor URL interceptor to be removed @type UrlInterceptor """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): if interceptor in self.__interceptors: self.__interceptors.remove(interceptor) @@ -89,7 +89,7 @@ """ Private method to load the Network Manager settings. """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): self.__doNotTrack = Preferences.getWebBrowser( "DoNotTrack") self.__sendReferer = Preferences.getWebBrowser(
--- a/eric7/WebBrowser/Network/QtHelpSchemeHandler.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/Network/QtHelpSchemeHandler.py Sat May 22 16:52:45 2021 +0200 @@ -17,7 +17,7 @@ QWebEngineUrlSchemeHandler, QWebEngineUrlRequestJob ) -from E5Utilities.E5MutexLocker import E5MutexLocker +from EricUtilities.EricMutexLocker import EricMutexLocker QtDocPath = "qthelp://org.qt-project." @@ -173,7 +173,7 @@ .encode("utf-8")) ) - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): self.__buffer.setData(data) self.__buffer.open(QIODevice.OpenModeFlag.ReadOnly) self.open(QIODevice.OpenModeFlag.ReadOnly) @@ -187,7 +187,7 @@ @return number of available bytes @rtype int """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): return self.__buffer.bytesAvailable() def readData(self, maxlen): @@ -197,7 +197,7 @@ @param maxlen maximum number of bytes to read (integer) @return string containing the data (bytes) """ - with E5MutexLocker(self.__mutex): + with EricMutexLocker(self.__mutex): return self.__buffer.read(maxlen) def close(self):
--- a/eric7/WebBrowser/SiteInfo/SiteInfoDialog.ui Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/SiteInfo/SiteInfoDialog.ui Sat May 22 16:52:45 2021 +0200 @@ -228,7 +228,7 @@ </attribute> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> - <widget class="E5SslCertificatesInfoWidget" name="sslWidget" native="true"> + <widget class="EricSslCertificatesInfoWidget" name="sslWidget" native="true"> <property name="focusPolicy"> <enum>Qt::StrongFocus</enum> </property> @@ -252,9 +252,9 @@ </widget> <customwidgets> <customwidget> - <class>E5SslCertificatesInfoWidget</class> + <class>EricSslCertificatesInfoWidget</class> <extends>QWidget</extends> - <header>E5Network/E5SslCertificatesInfoWidget.h</header> + <header>EricNetwork/EricSslCertificatesInfoWidget.h</header> <container>1</container> </customwidget> </customwidgets>
--- a/eric7/WebBrowser/Sync/FtpSyncHandler.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/Sync/FtpSyncHandler.py Sat May 22 16:52:45 2021 +0200 @@ -15,7 +15,7 @@ pyqtSignal, QTimer, QFileInfo, QCoreApplication, QByteArray ) -from E5Network.E5Ftp import E5Ftp, E5FtpProxyType, E5FtpProxyError +from EricNetwork.EricFtp import EricFtp, EricFtpProxyType, EricFtpProxyError from .SyncHandler import SyncHandler @@ -81,20 +81,20 @@ Preferences.getWebBrowser("SyncFtpIdleTimeout") * 1000) self.__idleTimer.timeout.connect(self.__idleTimeout) - self.__ftp = E5Ftp() + self.__ftp = EricFtp() # do proxy setup proxyType = ( - E5FtpProxyType.NO_PROXY + EricFtpProxyType.NO_PROXY if not Preferences.getUI("UseProxy") else Preferences.getUI("ProxyType/Ftp") ) - if proxyType != E5FtpProxyType.NO_PROXY: + if proxyType != EricFtpProxyType.NO_PROXY: self.__ftp.setProxy( proxyType, Preferences.getUI("ProxyHost/Ftp"), Preferences.getUI("ProxyPort/Ftp")) - if proxyType != E5FtpProxyType.NON_AUTHORIZING: + if proxyType != EricFtpProxyType.NON_AUTHORIZING: self.__ftp.setProxyAuthentication( Preferences.getUI("ProxyUser/Ftp"), Preferences.getUI("ProxyPassword/Ftp"), @@ -114,7 +114,7 @@ self.__initialSync() self.__state = "idle" self.__idleTimer.start() - except (ftplib.all_errors + (E5FtpProxyError,)) as err: + except (ftplib.all_errors + (EricFtpProxyError,)) as err: self.syncError.emit(str(err)) def __connectAndLogin(self):
--- a/eric7/WebBrowser/TabManager/TabManagerWidget.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/TabManager/TabManagerWidget.py Sat May 22 16:52:45 2021 +0200 @@ -21,8 +21,8 @@ QWidget, QVBoxLayout, QTreeWidget, QTreeWidgetItem, QMenu, QStyle ) -import E5Network -from E5Network import E5TldExtractor +import EricNetwork +from EricNetwork import EricTldExtractor from E5Gui.E5Application import e5App from E5Gui.E5ClickableLabel import E5ClickableLabel @@ -84,7 +84,7 @@ self.__groupType = Preferences.getWebBrowser("TabManagerGroupByType") if TabManagerWidget._tldExtractor is None: - TabManagerWidget._tldExtractor = E5TldExtractor.instance() + TabManagerWidget._tldExtractor = EricTldExtractor.instance() TabManagerWidget._tldExtractor.setDataSearchPaths([ os.path.join(Utilities.getConfigDir(), "web_browser")]) @@ -180,7 +180,7 @@ if not host: return urlString + appendStr - if useHostName or E5Network.isValidAddress(host): + if useHostName or EricNetwork.isValidAddress(host): if host.lower().startswith("www."): host = host[4:] else:
--- a/eric7/WebBrowser/WebBrowserPage.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/WebBrowserPage.py Sat May 22 16:52:45 2021 +0200 @@ -690,8 +690,8 @@ @type QPoint """ if SSL_AVAILABLE and self.__sslConfiguration is not None: - from E5Network.E5SslInfoWidget import E5SslInfoWidget - widget = E5SslInfoWidget(self.url(), self.__sslConfiguration, + from EricNetwork.EricSslInfoWidget import EricSslInfoWidget + widget = EricSslInfoWidget(self.url(), self.__sslConfiguration, self.view()) widget.showAt(pos) else:
--- a/eric7/WebBrowser/WebBrowserView.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/WebBrowserView.py Sat May 22 16:52:45 2021 +0200 @@ -2330,10 +2330,10 @@ clientCertificateSelection.select(certificates[0]) else: certificate = None - from E5Network.E5SslCertificateSelectionDialog import ( - E5SslCertificateSelectionDialog + from EricNetwork.EricSslCertificateSelectionDialog import ( + EricSslCertificateSelectionDialog ) - dlg = E5SslCertificateSelectionDialog(certificates, self) + dlg = EricSslCertificateSelectionDialog(certificates, self) if dlg.exec() == QDialog.DialogCode.Accepted: certificate = dlg.getSelectedCertificate()
--- a/eric7/WebBrowser/WebBrowserWindow.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/WebBrowser/WebBrowserWindow.py Sat May 22 16:52:45 2021 +0200 @@ -190,7 +190,7 @@ Preferences.getUI("StyleSheet")) # initialize some SSL stuff - from E5Network.E5SslUtilities import initSSL + from EricNetwork.EricSslUtilities import initSSL initSSL() if WebBrowserWindow._useQtHelp:
--- a/eric7/eric7.py Sat May 22 12:54:57 2021 +0200 +++ b/eric7/eric7.py Sat May 22 16:52:45 2021 +0200 @@ -382,7 +382,7 @@ loc = Startup.loadTranslators(qtTransDir, app, ("qscintilla",)) # Initialize SSL stuff - from E5Network.E5SslUtilities import initSSL + from EricNetwork.EricSslUtilities import initSSL initSSL() splash.showMessage(QCoreApplication.translate("eric7", "Starting..."))
--- a/scripts/install.py Sat May 22 12:54:57 2021 +0200 +++ b/scripts/install.py Sat May 22 16:52:45 2021 +0200 @@ -788,8 +788,8 @@ # copy some data files needed at various places copyTree( - os.path.join(eric7SourceDir, "E5Network", "data"), - os.path.join(cfg['ericDir'], "E5Network", "data"), + os.path.join(eric7SourceDir, "EricNetwork", "data"), + os.path.join(cfg['ericDir'], "EricNetwork", "data"), ['*.dat', '*.txt']) copyTree( os.path.join(eric7SourceDir, "IconEditor", "cursors"),