Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
6ef2e503
Commit
6ef2e503
authored
Apr 09, 2015
by
JC Brand
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'anon_login'
parents
960cf4a5
18fd854d
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
264 additions
and
176 deletions
+264
-176
.gitignore
.gitignore
+1
-0
converse.js
converse.js
+55
-22
css/converse.css
css/converse.css
+25
-19
dev.html
dev.html
+5
-0
docs/source/configuration.rst
docs/source/configuration.rst
+116
-92
docs/source/quickstart.rst
docs/source/quickstart.rst
+0
-4
sass/converse.scss
sass/converse.scss
+34
-26
spec/converse.js
spec/converse.js
+6
-4
spec/otr.js
spec/otr.js
+3
-3
src/templates/login_panel.html
src/templates/login_panel.html
+19
-6
No files found.
.gitignore
View file @
6ef2e503
...
...
@@ -15,6 +15,7 @@ analytics.js
.sass-cache
ruby
bourbon
Gemfile.lock
Backbone.Overview
tags
...
...
converse.js
View file @
6ef2e503
...
...
@@ -182,6 +182,10 @@
// Constants
// ---------
var
LOGIN
=
"
login
"
;
var
ANONYMOUS
=
"
anonymous
"
;
var
PREBIND
=
"
prebind
"
;
var
UNENCRYPTED
=
0
;
var
UNVERIFIED
=
1
;
var
VERIFIED
=
2
;
...
...
@@ -240,6 +244,7 @@
allow_registration
:
true
,
animate
:
true
,
auto_list_rooms
:
false
,
auto_login
:
false
,
// Currently only used in connection with anonymous login
auto_reconnect
:
false
,
auto_subscribe
:
false
,
bosh_service_url
:
undefined
,
// The BOSH connection manager URL.
...
...
@@ -256,7 +261,9 @@
message_carbons
:
false
,
no_trimming
:
false
,
// Set to true for phantomjs tests (where browser apparently has no width)
play_sounds
:
false
,
prebind
:
false
,
password
:
undefined
,
authentication
:
'
login
'
,
// Available values are "login", "prebind", "anonymous".
prebind
:
false
,
// XXX: Deprecated, use "authentication" instead.
prebind_url
:
null
,
providers_link
:
'
https://xmpp.net/directory.php
'
,
// Link to XMPP providers shown on registration page
rid
:
undefined
,
...
...
@@ -284,6 +291,16 @@
// Allow only whitelisted configuration attributes to be overwritten
_
.
extend
(
this
,
_
.
pick
(
settings
,
Object
.
keys
(
this
.
default_settings
)));
// BBB
if
(
this
.
prebind
===
true
)
{
this
.
authentication
=
PREBIND
;
}
if
(
this
.
authentication
===
ANONYMOUS
)
{
if
(
!
this
.
jid
)
{
throw
(
"
Config Error: you need to provide the server's domain via the
"
+
"
'jid' option when using anonymous authentication.
"
);
}
}
if
(
settings
.
visible_toolbar_buttons
)
{
_
.
extend
(
this
.
visible_toolbar_buttons
,
...
...
@@ -431,7 +448,7 @@
this
.
reconnect
=
function
()
{
converse
.
giveFeedback
(
__
(
'
Reconnecting
'
),
'
error
'
);
if
(
!
converse
.
prebind
)
{
if
(
converse
.
authentication
!==
"
prebind
"
)
{
this
.
connection
.
connect
(
this
.
connection
.
jid
,
this
.
connection
.
pass
,
...
...
@@ -690,7 +707,7 @@
this
.
OTR
=
Backbone
.
Model
.
extend
({
// A model for managing OTR settings.
getSessionPassphrase
:
function
()
{
if
(
converse
.
prebind
)
{
if
(
converse
.
authentication
===
'
prebind
'
)
{
var
key
=
b64_sha1
(
converse
.
connection
.
jid
),
pass
=
window
.
sessionStorage
[
key
];
if
(
typeof
pass
===
'
undefined
'
)
{
...
...
@@ -1730,8 +1747,7 @@
},
addContact
:
function
(
jid
,
name
)
{
name
=
_
.
isEmpty
(
name
)?
jid
:
name
;
converse
.
connection
.
roster
.
add
(
jid
,
name
,
[],
function
(
iq
)
{
converse
.
connection
.
roster
.
add
(
jid
,
_
.
isEmpty
(
name
)?
jid
:
name
,
[],
function
(
iq
)
{
converse
.
connection
.
roster
.
subscribe
(
jid
,
null
,
converse
.
xmppstatus
.
get
(
'
fullname
'
));
});
}
...
...
@@ -3139,13 +3155,6 @@
});
}
if
(
msgid
&&
chatbox
.
messages
.
findWhere
({
msgid
:
msgid
}))
{
// FIXME: There's still a bug here..
// If a duplicate message is received just after the chat
// box was closed, then it'll open again (due to it being
// created here above), with no new messages.
// The solution is mostly likely to not let chat boxes show
// automatically when they are created, but to require
// "show" to be called explicitly.
return
true
;
// We already have this message stored.
}
if
(
!
this
.
isOnlyChatStateNotification
(
$message
)
&&
from
!==
converse
.
bare_jid
)
{
...
...
@@ -5154,8 +5163,14 @@
initialize
:
function
(
cfg
)
{
cfg
.
$parent
.
html
(
this
.
$el
.
html
(
converse
.
templates
.
login_panel
({
'
LOGIN
'
:
LOGIN
,
'
ANONYMOUS
'
:
ANONYMOUS
,
'
PREBIND
'
:
PREBIND
,
'
auto_login
'
:
converse
.
auto_login
,
'
authentication
'
:
converse
.
authentication
,
'
label_username
'
:
__
(
'
XMPP Username:
'
),
'
label_password
'
:
__
(
'
Password:
'
),
'
label_anon_login
'
:
__
(
'
Click here to log in anonymously
'
),
'
label_login
'
:
__
(
'
Log In
'
)
})
));
...
...
@@ -5173,8 +5188,12 @@
authenticate
:
function
(
ev
)
{
if
(
ev
&&
ev
.
preventDefault
)
{
ev
.
preventDefault
();
}
var
$form
=
$
(
ev
.
target
),
$jid_input
=
$form
.
find
(
'
input[name=jid]
'
),
var
$form
=
$
(
ev
.
target
);
if
(
converse
.
authentication
===
ANONYMOUS
)
{
this
.
connect
(
$form
,
converse
.
jid
,
null
);
return
;
}
var
$jid_input
=
$form
.
find
(
'
input[name=jid]
'
),
jid
=
$jid_input
.
val
(),
$pw_input
=
$form
.
find
(
'
input[name=password]
'
),
password
=
$pw_input
.
val
(),
...
...
@@ -5203,12 +5222,15 @@
},
connect
:
function
(
$form
,
jid
,
password
)
{
var
resource
;
if
(
$form
)
{
$form
.
find
(
'
input[type=submit]
'
).
hide
().
after
(
'
<span class="spinner login-submit"/>
'
);
}
var
resource
=
Strophe
.
getResourceFromJid
(
jid
);
if
(
!
resource
)
{
jid
+=
'
/converse.js-
'
+
Math
.
floor
(
Math
.
random
()
*
139749825
).
toString
();
if
(
jid
)
{
resource
=
Strophe
.
getResourceFromJid
(
jid
);
if
(
!
resource
)
{
jid
+=
'
/converse.js-
'
+
Math
.
floor
(
Math
.
random
()
*
139749825
).
toString
();
}
}
converse
.
connection
.
connect
(
jid
,
password
,
converse
.
onConnect
);
},
...
...
@@ -5341,7 +5363,7 @@
rid
=
this
.
session
.
get
(
'
rid
'
);
sid
=
this
.
session
.
get
(
'
sid
'
);
jid
=
this
.
session
.
get
(
'
jid
'
);
if
(
this
.
prebind
)
{
if
(
this
.
authentication
===
"
prebind
"
)
{
if
(
!
this
.
jid
)
{
throw
new
Error
(
"
initConnection: when using 'keepalive' with 'prebind, you must supply the JID of the current user.
"
);
}
...
...
@@ -5359,11 +5381,23 @@
if
(
rid
&&
sid
&&
jid
)
{
this
.
session
.
save
({
rid
:
rid
});
// The RID needs to be increased with each request.
this
.
connection
.
attach
(
jid
,
sid
,
rid
,
this
.
onConnect
);
}
else
if
(
this
.
auto_login
)
{
if
(
!
this
.
jid
)
{
throw
new
Error
(
"
initConnection: If you use auto_login, you also need to provide a jid value
"
);
}
if
(
this
.
authentication
===
ANONYMOUS
)
{
this
.
connection
.
connect
(
this
.
jid
,
null
,
this
.
onConnect
);
}
else
if
(
this
.
authentication
===
LOGIN
)
{
if
(
!
this
.
password
)
{
throw
new
Error
(
"
initConnection: If you use auto_login and
"
+
"
authentication='login' then you also need to provide a password.
"
);
}
this
.
connection
.
connect
(
this
.
jid
,
this
.
password
,
this
.
onConnect
);
}
}
}
// Prebind without keepalive
}
else
if
(
this
.
prebind
)
{
}
else
if
(
this
.
authentication
==
"
prebind
"
)
{
// prebind is used without keepalive
if
(
this
.
jid
&&
this
.
sid
&&
this
.
rid
)
{
this
.
connection
.
attach
(
this
.
jid
,
this
.
sid
,
this
.
rid
,
this
.
onConnect
);
}
else
{
...
...
@@ -5517,7 +5551,6 @@
converse
.
connection
.
roster
.
add
(
jid
,
_
.
isEmpty
(
name
)?
jid
:
name
,
[],
function
(
iq
)
{
converse
.
connection
.
roster
.
subscribe
(
jid
,
null
,
converse
.
xmppstatus
.
get
(
'
fullname
'
));
});
return
true
;
}
},
'
chats
'
:
{
...
...
css/converse.css
View file @
6ef2e503
...
...
@@ -353,7 +353,8 @@
#conversejs
.hor_centered
{
text-align
:
center
;
display
:
block
;
margin
:
0
auto
;
}
margin
:
0
auto
;
clear
:
both
;
}
#conversejs
.toggle-controlbox
,
#conversejs
#minimized-chats
{
border-top-left-radius
:
4px
;
...
...
@@ -788,27 +789,32 @@
text-overflow
:
ellipsis
;
overflow-x
:
hidden
;
}
#conversejs
dd
.available-chatroom
{
display
:
inline-block
;
overflow-x
:
hidden
;
text-overflow
:
ellipsis
;
border
:
none
;
clear
:
both
;
color
:
#6C4C44
;
display
:
block
;
font-weight
:
bold
;
overflow
:
hidden
;
padding
:
0.25em
0.5em
;
text-overflow
:
ellipsis
;
text-shadow
:
0
1px
0
#FAFAFA
;
white-space
:
nowrap
;
}
#conversejs
dd
.available-chatroom
a
.open-room
{
width
:
150px
;
}
#conversejs
dd
.available-chatroom
:hover
a
.room-info
{
display
:
inline-block
;
font-size
:
14px
;
}
#conversejs
dd
.available-chatroom
,
#conversejs
dd
.available-chatroom
:hover
{
background-color
:
#E3C9C1
;
}
#conversejs
dd
.available-chatroom
:hover
.room-info
{
display
:
inline-block
;
font-size
:
14px
;
}
#conversejs
#converse-roster
dd
{
font-weight
:
bold
;
border
:
none
;
display
:
block
;
color
:
#6C4C44
;
text-shadow
:
0
1px
0
#FAFAFA
;
clear
:
both
;
overflow-y
:
hidden
;
}
color
:
#6C4C44
;
display
:
block
;
font-weight
:
bold
;
overflow-y
:
hidden
;
text-shadow
:
0
1px
0
#FAFAFA
;
}
#conversejs
.roster-group
:hover
,
#conversejs
dd
.available-chatroom
:hover
,
#conversejs
#converse-roster
dd
:hover
{
background-color
:
#E3C9C1
;
}
#conversejs
.chatbox
,
...
...
@@ -981,15 +987,15 @@
font-weight
:
bold
;
height
:
auto
;
margin
:
4px
;
}
#conversejs
#converse-register
.login-submit
,
#conversejs
#converse-login
.login-submit
,
#conversejs
#converse-register
.submit
,
#conversejs
#converse-login
.submit
{
#conversejs
#converse-register
.login-submit
,
#conversejs
#converse-register
.submit
,
#conversejs
#converse-login
.login-submit
,
#conversejs
#converse-login
.submit
{
height
:
30px
;
padding
:
0px
;
font-size
:
14px
;
}
#conversejs
#converse-login
.submit
{
#conversejs
#converse-
register
.submit
,
#conversejs
#converse-
login
.submit
{
margin
:
1em
0
;
}
#conversejs
#converse-register
.login-anon
,
#conversejs
#converse-login
.login-anon
{
height
:
auto
;
white-space
:
normal
;
}
#conversejs
form
.add-chatroom
{
background
:
none
;
padding
:
0.5em
;
}
...
...
dev.html
View file @
6ef2e503
...
...
@@ -52,6 +52,11 @@
<script>
require
([
'
converse
'
],
function
(
converse
)
{
converse
.
initialize
({
auto_login
:
true
,
allow_registration
:
false
,
allow_logout
:
false
,
authentication
:
"
anonymous
"
,
jid
:
"
opkode.im
"
,
bosh_service_url
:
'
https://conversejs.org/http-bind/
'
,
// Please use this connection manager only for testing purposes
i18n
:
locales
[
'
en
'
],
// Refer to ./locale/locales.js to see which locales are supported
keepalive
:
true
,
...
...
docs/source/configuration.rst
View file @
6ef2e503
This diff is collapsed.
Click to expand it.
docs/source/quickstart.rst
View file @
6ef2e503
...
...
@@ -28,12 +28,8 @@ bottom of your page (after the closing *</body>* element).
require(['converse'], function (converse) {
converse.initialize({
auto_list_rooms: false,
auto_subscribe: false,
bosh_service_url: 'https://bind.conversejs.org', // Please use this connection manager only for testing purposes
hide_muc_server: false,
i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
prebind: false,
show_controlbox_by_default: true,
roster_groups: true
});
...
...
sass/converse.scss
View file @
6ef2e503
...
...
@@ -289,6 +289,7 @@
text-align
:
center
;
display
:
block
;
margin
:
0
auto
;
clear
:
both
;
}
.toggle-controlbox
,
...
...
@@ -897,34 +898,39 @@
}
dd
.available-chatroom
{
display
:
inline-block
;
overflow-x
:
hidden
;
text-overflow
:
ellipsis
;
border
:
none
;
clear
:
both
;
color
:
$text-color
;
display
:
block
;
font-weight
:
bold
;
overflow
:
hidden
;
padding
:
0
.25em
0
.5em
;
text-overflow
:
ellipsis
;
text-shadow
:
0
1px
0
$text-shadow-color
;
white-space
:
nowrap
;
a
.open-room
{
width
:
150px
;
}
&
:hover
{
background-color
:
$highlight-color
;
.room-info
{
display
:
inline-block
;
font-size
:
14px
;
}
}
}
dd
.available-chatroom
:hover
a
.room-info
{
display
:
inline-block
;
font-size
:
14px
;
}
dd
.available-chatroom
,
#converse-roster
dd
{
font-weight
:
bold
;
border
:
none
;
display
:
block
;
color
:
$text-color
;
text-shadow
:
0
1px
0
$text-shadow-color
;
clear
:
both
;
color
:
$text-color
;
display
:
block
;
font-weight
:
bold
;
overflow-y
:
hidden
;
text-shadow
:
0
1px
0
$text-shadow-color
;
}
.roster-group
:hover
,
dd
.available-chatroom
:hover
,
#converse-roster
dd
:hover
{
background-color
:
$highlight-color
;
}
...
...
@@ -1162,19 +1168,21 @@
margin
:
4px
;
}
#converse-register
.login-submit
,
#converse-login
.login-submit
,
#converse-register
.submit
,
#converse-login
.submit
{
height
:
30px
;
padding
:
0px
;
font-size
:
$font-size
;
}
#converse-login
.submit
{
margin
:
1em
0
;
#converse-register
,
#converse-login
{
.login-submit
,
.submit
{
height
:
30px
;
padding
:
0px
;
font-size
:
$font-size
;
}
.submit
{
margin
:
1em
0
;
}
.login-anon
{
height
:
auto
;
white-space
:
normal
;
}
}
form
.add-chatroom
{
background
:
none
;
padding
:
0
.5em
;
...
...
spec/converse.js
View file @
6ef2e503
...
...
@@ -20,37 +20,39 @@
describe
(
"
with prebind
"
,
function
()
{
it
(
"
needs a jid when also using keepalive
"
,
function
()
{
var
authentication
=
converse
.
authentication
;
var
connection
=
converse
.
connection
;
var
jid
=
converse
.
jid
;
converse
.
bosh_service_url
=
"
localhost
"
;
converse
.
connection
=
undefined
;
converse
.
jid
=
undefined
;
converse
.
keepalive
=
true
;
converse
.
prebind
=
true
;
converse
.
authentication
=
"
prebind
"
;
expect
(
converse
.
initConnection
.
bind
(
converse
)).
toThrow
(
new
Error
(
"
initConnection: when using 'keepalive' with 'prebind, you must supply the JID of the current user.
"
));
converse
.
authentication
=
authentication
;
converse
.
bosh_service_url
=
undefined
;
converse
.
connection
=
connection
;
converse
.
jid
=
jid
;
converse
.
keepalive
=
undefined
;
converse
.
prebind
=
undefined
;
});
it
(
"
needs jid, rid and sid values when not using keepalive
"
,
function
()
{
var
authentication
=
converse
.
authentication
;
var
connection
=
converse
.
connection
;
var
jid
=
converse
.
jid
;
converse
.
bosh_service_url
=
"
localhost
"
;
converse
.
connection
=
undefined
;
converse
.
jid
=
undefined
;
converse
.
keepalive
=
false
;
converse
.
prebind
=
true
;
converse
.
authentication
=
"
prebind
"
;
expect
(
converse
.
initConnection
.
bind
(
converse
)).
toThrow
(
new
Error
(
"
initConnection: If you use prebind and not keepalive, then you MUST supply JID, RID and SID values
"
));
converse
.
authentication
=
authentication
;
converse
.
bosh_service_url
=
undefined
;
converse
.
connection
=
connection
;
converse
.
jid
=
jid
;
converse
.
keepalive
=
undefined
;
converse
.
prebind
=
undefined
;
});
});
});
...
...
spec/otr.js
View file @
6ef2e503
...
...
@@ -21,7 +21,7 @@
var
pp
;
// With no prebind, the user's XMPP password is used and nothing is
// stored in session storage.
this
.
prebind
=
false
;
this
.
authentication
=
"
manual
"
;
this
.
connection
.
pass
=
'
s3cr3t!
'
;
expect
(
this
.
otr
.
getSessionPassphrase
()).
toBe
(
this
.
connection
.
pass
);
expect
(
window
.
sessionStorage
.
length
).
toBe
(
0
);
...
...
@@ -29,7 +29,7 @@
// With prebind, a random passphrase is generated and stored in
// session storage.
this
.
prebind
=
true
;
this
.
authentication
=
"
prebind
"
;
pp
=
this
.
otr
.
getSessionPassphrase
();
expect
(
pp
).
not
.
toBe
(
this
.
connection
.
pass
);
expect
(
window
.
sessionStorage
.
length
).
toBe
(
1
);
...
...
@@ -37,7 +37,7 @@
expect
(
pp
).
toBe
(
window
.
sessionStorage
[
b64_sha1
(
converse
.
connection
.
jid
)]);
// Clean up
this
.
prebind
=
false
;
this
.
authentication
=
"
manual
"
;
},
converse
));
},
converse
,
mock
,
test_utils
));
}));
src/templates/login_panel.html
View file @
6ef2e503
<form
id=
"converse-login"
method=
"post"
>
<label>
{{label_username}}
</label>
<input
type=
"email"
name=
"jid"
placeholder=
"user@server"
>
<label>
{{label_password}}
</label>
<input
type=
"password"
name=
"password"
placeholder=
"password"
>
<input
class=
"submit"
type=
"submit"
value=
"{{label_login}}"
>
<span
class=
"conn-feedback"
></span>
{[ if (auto_login) { ]}
<span
class=
"spinner login-submit"
/>
{[ } ]}
{[ if (!auto_login) { ]}
{[ if (authentication == LOGIN) { ]}
<label>
{{label_username}}
</label>
<input
type=
"email"
name=
"jid"
placeholder=
"user@server"
>
<label>
{{label_password}}
</label>
<input
type=
"password"
name=
"password"
placeholder=
"password"
>
<input
class=
"submit"
type=
"submit"
value=
"{{label_login}}"
>
<span
class=
"conn-feedback"
></span>
{[ } ]}
{[ if (authentication == ANONYMOUS) { ]}
<input
type=
"submit"
class=
"submit login-anon"
value=
"{{label_anon_login}}"
/>
{[ } ]}
{[ if (authentication == PREBIND) { ]}
<p>
Disconnected.
</p>
{[ } ]}
{[ } ]}
</form>
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