Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linphone-desktop
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
linphone-desktop
Commits
99156f80
Commit
99156f80
authored
Mar 17, 2017
by
Wescoeur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(ui/scripts/Utils/uri-tools): supports IP
parent
9cdef13b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
133 additions
and
72 deletions
+133
-72
uri-tools.js
linphone-desktop/ui/scripts/Utils/uri-tools.js
+65
-71
uri-tools.spec.qml
linphone-desktop/ui/scripts/Utils/uri-tools.spec.qml
+68
-1
No files found.
linphone-desktop/ui/scripts/Utils/uri-tools.js
View file @
99156f80
// =============================================================================
// Library to deal with URI.
// See: https://tools.ietf.org/html/rfc3986#section-1.3
// =============================================================================
.
pragma
library
...
...
@@ -12,6 +13,15 @@ var SUPPORTS_URL = true
// Level 0. --------------------------------------------------------------------
var
URI_DEC_OCTET
=
'
(?:
'
+
'
25[0-5]
'
+
'
|
'
+
'
2[0-4]
\\
d
'
+
'
|
'
+
'
1
\\
d{2}
'
+
'
|
'
+
'
[1-9]
\\
d
'
+
'
|
'
+
'
\\
d
'
+
'
)
'
var
URI_H16
=
'
[0-9A-Fa-f]{1,4}
'
var
URI_PCT_ENCODED
=
'
%[A-Fa-f
\\
d]{2}
'
var
URI_PORT
=
'
\\
d*
'
var
URI_SCHEME
=
'
[a-zA-Z][
\\
w+
\
-
\
.]*
'
...
...
@@ -20,14 +30,15 @@ var URI_UNRESERVED = '[\\w\-\._~]'
// Level 1. --------------------------------------------------------------------
var
URI_HOST
=
'
(?:
'
+
'
(?:
'
+
URI_UNRESERVED
+
'
|
'
+
URI_PCT_ENCODED
+
'
|
'
+
URI_SUB_DELIMS
+
'
)*
'
+
var
URI_IPV_FUTURE
=
'
v[0-9A-Fa-f]+
\\
.
'
+
'
(?:
'
+
URI_UNRESERVED
+
URI_SUB_DELIMS
+
'
:
'
+
'
)
'
var
URI_IPV4_ADDRESS
=
URI_DEC_OCTET
+
'
\\
.
'
+
URI_DEC_OCTET
+
'
\\
.
'
+
URI_DEC_OCTET
+
'
\\
.
'
+
URI_DEC_OCTET
var
URI_PCHAR
=
'
(?:
'
+
URI_UNRESERVED
+
'
|
'
+
URI_PCT_ENCODED
+
...
...
@@ -35,6 +46,12 @@ var URI_PCHAR = '(?:' +
'
|
'
+
'
[:@]
'
+
'
)
'
var
URI_REG_NAME
=
'
(?:
'
+
URI_UNRESERVED
+
'
|
'
+
URI_PCT_ENCODED
+
'
|
'
+
URI_SUB_DELIMS
+
'
)*
'
var
URI_USERINFO
=
'
(?:
'
+
URI_UNRESERVED
+
'
|
'
+
URI_PCT_ENCODED
+
...
...
@@ -44,15 +61,16 @@ var URI_USERINFO = '(?:' +
// Level 2. --------------------------------------------------------------------
var
URI_AUTHORITY
=
'
(?:
'
+
URI_USERINFO
+
'
@
'
+
'
)?
'
+
URI_HOST
+
'
(?:
'
+
'
:
'
+
URI_PORT
+
'
)?
'
var
URI_FRAGMENT
=
'
(?:
'
+
URI_PCHAR
+
'
|
'
+
'
[/?]
'
+
'
)*
'
var
URI_LS32
=
'
(?:
'
+
URI_H16
+
'
:
'
+
URI_H16
+
'
|
'
+
URI_IPV4_ADDRESS
+
'
)
'
var
URI_QUERY
=
'
(?:
'
+
URI_PCHAR
+
'
|
'
+
'
[/?]
'
+
...
...
@@ -63,6 +81,18 @@ var URI_SEGMENT_NZ = URI_PCHAR + '+'
// Level 3. --------------------------------------------------------------------
var
URI_IPV6_ADDRESS
=
'
(?:
'
+
'
(?:
'
+
URI_H16
+
'
:){6}
'
+
URI_LS32
+
'
|
'
+
'
::(?:
'
+
URI_H16
+
'
:){5}
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
URI_H16
+
'
\\
]::(?:
'
+
URI_H16
+
'
:){4}
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:)?
'
+
URI_H16
+
'
\\
]::(?:
'
+
URI_H16
+
'
:){3}
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:){0,2}
'
+
URI_H16
+
'
\\
]::(?:
'
+
URI_H16
+
'
:){2}
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:){0,3}
'
+
URI_H16
+
'
\\
]::
'
+
URI_H16
+
'
:
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:){0,4}
'
+
URI_H16
+
'
\\
]::
'
+
URI_LS32
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:){0,5}
'
+
URI_H16
+
'
\\
]::
'
+
URI_H16
+
'
|
'
+
'
\\
[
'
+
'
(?:
'
+
URI_H16
+
'
:){0,6}
'
+
URI_H16
+
'
\\
]::
'
+
'
)
'
var
URI_PATH_ABEMPTY
=
'
(?:
'
+
'
/
'
+
URI_SEGMENT
+
'
)*
'
var
URI_PATH_ABSOLUTE
=
'
/
'
+
...
...
@@ -73,6 +103,29 @@ var URI_PATH_ROOTLESS =
// Level 4. --------------------------------------------------------------------
var
URI_IP_LITERAL
=
'
\\
[
'
+
'
(?:
'
+
URI_IPV6_ADDRESS
+
'
|
'
+
URI_IPV_FUTURE
+
'
)
'
+
'
\\
]
'
// Level 5. --------------------------------------------------------------------
var
URI_HOST
=
'
(?:
'
+
URI_REG_NAME
+
'
|
'
+
URI_IPV4_ADDRESS
+
'
|
'
+
URI_IP_LITERAL
+
'
)
'
// Level 6. --------------------------------------------------------------------
var
URI_AUTHORITY
=
'
(?:
'
+
URI_USERINFO
+
'
@
'
+
'
)?
'
+
URI_HOST
+
'
(?:
'
+
'
:
'
+
URI_PORT
+
'
)?
'
// Level 7. --------------------------------------------------------------------
// `path-empty` not used.
var
URI_HIER_PART
=
'
(?:
'
+
'
//
'
+
URI_AUTHORITY
+
URI_PATH_ABEMPTY
+
...
...
@@ -80,72 +133,13 @@ var URI_HIER_PART = '(?:' +
'
|
'
+
URI_PATH_ROOTLESS
+
'
)
'
// Level
5
. --------------------------------------------------------------------
// Level
8
. --------------------------------------------------------------------
// Regex to match URI. It respects the RFC 3986.
// But many features are not supported like IP format.
var
URI
=
(
SUPPORTS_URL
?
'
(?:
'
+
URI_SCHEME
+
'
:
'
+
'
|
'
+
'
www
\\
.
'
+
'
)
'
:
URI_SCHEME
+
'
:
'
)
+
URI_HIER_PART
+
'
(?:
'
+
'
\\
?
'
+
URI_QUERY
+
'
)?
'
+
'
(?:
'
+
'
#
'
+
URI_FRAGMENT
+
'
)?
'
'
(?:
'
+
'
#
'
+
URI_FRAGMENT
+
'
)?
'
var
URI_REGEX
=
new
RegExp
(
'
(
'
+
URI
+
'
)
'
,
'
g
'
)
// =============================================================================
/* TODO: Supports:
URI-reference = URI / relative-ref
absolute-URI = scheme ":" hier-part [ "?" query ]
relative-ref = relative-part [ "?" query ] [ "#" fragment ]
relative-part = "//" authority path-abempty
/ path-absolute
/ path-noscheme
/ path-empty
host = IP-literal / IPv4address / reg-name
IP-literal = "[" ( IPv6address / IPvFuture ) "]"
IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
IPv6address = 6( h16 ":" ) ls32
/ "::" 5( h16 ":" ) ls32
/ [ h16 ] "::" 4( h16 ":" ) ls32
/ [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
/ [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
/ [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
/ [ *4( h16 ":" ) h16 ] "::" ls32
/ [ *5( h16 ":" ) h16 ] "::" h16
/ [ *6( h16 ":" ) h16 ] "::"
h16 = 1*4HEXDIG
ls32 = ( h16 ":" h16 ) / IPv4address
IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet = DIGIT ; 0-9
/ %x31-39 DIGIT ; 10-99
/ "1" 2DIGIT ; 100-199
/ "2" %x30-34 DIGIT ; 200-249
/ "25" %x30-35 ; 250-255
reg-name = *( unreserved / pct-encoded / sub-delims )
path = path-abempty ; begins with "/" or is empty
/ path-absolute ; begins with "/" but not "//"
/ path-noscheme ; begins with a non-colon segment
/ path-rootless ; begins with a segment
/ path-empty ; zero characters
path-noscheme = segment-nz-nc *( "/" segment )
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
; non-zero-length segment without any colon ":"
reserved = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
*/
linphone-desktop/ui/scripts/Utils/uri-tools.spec.qml
View file @
99156f80
import
QtTest
1.1
import
'
./
uri-tools.js
'
as
UriTools
import
'
uri-tools.js
'
as
UriTools
// =============================================================================
...
...
@@ -23,6 +23,10 @@ TestCase {
function
test_matchUri_data
()
{
return
[
// =======================================================================
// Must match.
// =======================================================================
{
input
:
'
http://www.LaRmInA.com/
'
,
output
:
[
'
http://www.LaRmInA.com/
'
]
...
...
@@ -68,6 +72,42 @@ TestCase {
},
{
input
:
'
protocol://U$3r:p@sswd/WwW.L33t.sp3
'
,
output
:
[
'
protocol://U$3r:p@sswd/WwW.L33t.sp3
'
]
},
{
input
:
'
foo://username:password@www.example.com:123/hello/world/there.html?name=ferret#foo
'
,
output
:
[
'
foo://username:password@www.example.com:123/hello/world/there.html?name=ferret#foo
'
]
},
{
input
:
'
lalala://lololo.titi/tata_(tutu)#riri-0
'
,
output
:
[
'
lalala://lololo.titi/tata_(tutu)#riri-0
'
]
},
{
input
:
'
dest://007@uk.en:8080/
'
,
output
:
[
'
dest://007@uk.en:8080/
'
]
},
{
input
:
'
fefe://zef.sfdfzfds.vfs/zrefz/?vsfezzef=afzfefg&zfefezfze=7275&grgr
'
,
output
:
[
'
fefe://zef.sfdfzfds.vfs/zrefz/?vsfezzef=afzfefg&zfefezfze=7275&grgr
'
]
},
{
input
:
'
fefe://xcv.zefe/(fzfff)?zefezef=fzefzef
'
,
output
:
[
'
fefe://xcv.zefe/(fzfff)?zefezef=fzefzef
'
]
},
{
input
:
'
feeffsd://vccvx.zzef.dfs/xcvvcx/#&zfe=zfe
'
,
output
:
[
'
feeffsd://vccvx.zzef.dfs/xcvvcx/#&zfe=zfe
'
]
},
{
input
:
'
http://256.1.1.1
'
,
output
:
[
'
http://256.1.1.1
'
]
// Valid URI. Invalid URL.
},
{
input
:
'
http://0.0.0.0
'
,
output
:
[
'
http://0.0.0.0
'
]
// Same idea.
},
{
input
:
'
http://a.b--c.de/
'
,
output
:
[
'
http://a.b--c.de/
'
]
// And again.
},
{
input
:
'
http://1.0.1.0.1.0
'
,
output
:
[
'
http://1.0.1.0.1.0
'
]
// AND AGAIN.
},
{
input
:
'
http://abc.c.d.
'
,
output
:
[
'
http://abc.c.d.
'
]
// AAAAND AAAGAAAIIIIIN.
},
{
input
:
'
https://a.b-c.de/
'
,
output
:
[
'
https://a.b-c.de/
'
]
},
{
input
:
'
http://a/B/c?a&b&c
'
,
output
:
[
'
http://a/B/c?a&b&c
'
]
...
...
@@ -75,6 +115,18 @@ TestCase {
input
:
'
1http://www.linphone.org
'
,
output
:
[
'
http://www.linphone.org
'
]
},
{
input
:
'
http://255.254.255.254
'
,
output
:
[
'
http://255.254.255.254
'
]
},
{
input
:
'
http://12.42.1.10/
'
,
output
:
[
'
http://12.42.1.10/
'
]
},
// =======================================================================
// Partial or no match.
// =======================================================================
{
input
:
'
://www.linphone.org
'
,
output
:
UriTools
.
SUPPORTS_URL
?
[
'
www.linphone.org
'
]
...
...
@@ -85,6 +137,21 @@ TestCase {
},
{
input
:
'
/path/
'
,
output
:
null
},
{
input
:
'
http://✪dragooooonnnn✪ball✪z✪z✪z.goku/4
'
,
output
:
[
'
http://
'
]
},
{
input
:
'
http:// iamafail.fr
'
,
output
:
[
'
http://
'
]
},
{
input
:
'
isaac://石村.jp
'
,
output
:
[
'
isaac://
'
]
},
{
input
:
'
:// not good
'
,
output
:
null
},
{
input
:
'
http://☺.☺.☺
'
,
output
:
[
'
http://
'
]
}
]
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment